docs: annotate product configuration and quote lifecycles

This commit is contained in:
cieanyau committed 2026-11-06 00:29:13 +08:00
1 parent 3a53d2e58f
commit 60827b8bfb
7 files changed
+75

No files matched your search

+10
View File
@@ -1,4 +1,5 @@
<script>
/** 财务对接型商品配置:将不同财务模块返回值归一化为资源、周期、自定义字段及级联选项。 */
import "~/assets/styles/ConfigDiskCard.Dx9IqqQ_.css";
import "~/assets/styles/PromoCodeField.qFEkB6Hm.css";
import "~/assets/styles/ProductCustomFields.B2QMnPil.css";
@@ -56,6 +57,7 @@ import { o as cart_edit_o } from "~/lib/cart-edit.js";
import { r as cart_edit_r } from "~/lib/cart-edit.js";
import ConfigDiskCard from "~/components/config/ConfigDiskCard.vue";
function ie(e, t = `remf_finance`, n = {}) {
// storage-capacity 模块负责协议解析与联动约束,此处负责请求编排和已确认报价状态。
let r = useApi(),
i = n.edit,
a = ref(!i),
@@ -140,6 +142,7 @@ function ie(e, t = `remf_finance`, n = {}) {
((P = !0), B++, K());
}));
function ie() {
// 当前周期、数量、库存及每项资源都必须属于有效集合,前端不能提交已被联动排除的值。
let e = l.value;
if (!e) throw Error(`请先加载商品配置`);
if (g.value.error) throw Error(g.value.error);
@@ -183,6 +186,7 @@ function ie(e, t = `remf_finance`, n = {}) {
}
}
function ae(e = !1) {
// 报价只提交配置与周期;真正下单时才按商品要求附带开通主机名和密码。
let t = l.value,
n = {
configoption: Object.fromEntries(
@@ -256,6 +260,7 @@ function ie(e, t = `remf_finance`, n = {}) {
b.value[e.id] = String(c[e.id] ?? ``);
}
function se() {
// 反复应用本地联动直到稳定;重复快照意味着规则冲突,必须阻止继续报价。
let e = new Set();
for (let t = 0; t <= (l.value?.options.length ?? 0) * 2 + 2; t++) {
let t = JSON.stringify(d.value);
@@ -286,6 +291,7 @@ function ie(e, t = `remf_finance`, n = {}) {
throw Error(`商品联动条件无法确定,请联系客服`);
}
async function ce(n) {
// 级联项在 HTTP 边界读取下一级资源,响应只属于当前配置快照和刷新代次。
for (let i of l.value?.options.filter((e) => e.kind === `cascade`) ?? []) {
let a = f.value[i.id],
o = d.value[i.id],
@@ -323,6 +329,7 @@ function ie(e, t = `remf_finance`, n = {}) {
return !0;
}
async function le() {
// 先让级联和联动达成一致,再校验与报价;未得到稳定配置不能接受服务端价格。
let t = ++H;
if ((K(), P || !l.value)) return;
j.value = ``;
@@ -385,6 +392,7 @@ function ie(e, t = `remf_finance`, n = {}) {
}
}
async function ue() {
// 仅支持明确列出的财务模块,读取原始 order_page 后统一解析,避免猜测接口数据结构。
((a.value = !i), H++);
let n = ++B;
(K(),
@@ -443,6 +451,7 @@ function ie(e, t = `remf_finance`, n = {}) {
}
}
async function de(t) {
// 最终提交包括开通信息、自定义字段及级联参数;编辑模式只能保存购物车不能直接结算。
if (i && t !== `/cart`) throw Error(`请先保存配置,再返回购物车结算`);
if (N.value) throw Error(`正在提交,请勿重复操作`);
if (!W.value) throw Error(`当前配置报价尚未确认,请等待或重新计算报价`);
@@ -756,6 +765,7 @@ var ae = {
return Pe(e).find((e) => t >= e.min && t <= e.max)?.step ?? e.step;
}
function Ge(e, t, n = !0) {
// 数量输入在所有有效区间中吸附,跨区间的单步操作寻找下一个可达档位。
if (Y.value || t === null || !Number.isFinite(t)) return;
let r = I.value[e.id],
i = Pe(e),