docs: annotate all shared frontend modules in Chinese
This commit is contained in:
1 parent
2be21c1c62
commit
408f8e5c98
55 files changed
+349
No files matched your search
@@ -1,3 +1,7 @@
|
||||
/**
|
||||
* 通用商品高级联动规则:用条件项限制结果项,并同步修正不再可选的表单值。
|
||||
* 处理副本而非原始配置;无解、规则冲突或协议不完整时失败,不能返回看似合法的报价配置。
|
||||
*/
|
||||
var e = (e) => (e && typeof e == `object` && !Array.isArray(e) ? e : {}),
|
||||
t = (t) => (Array.isArray(t) ? t.map(e) : []),
|
||||
n = (e) => JSON.parse(JSON.stringify(e)),
|
||||
@@ -10,6 +14,7 @@ var e = (e) => (e && typeof e == `object` && !Array.isArray(e) ? e : {}),
|
||||
o = (e = `商品高级规则数据不完整`) => {
|
||||
throw Error(e);
|
||||
};
|
||||
// 只执行 enabled 规则;每条必须有 condition/result,且 combine_mode 与 operator 已知。
|
||||
function s(n) {
|
||||
return n == null
|
||||
? []
|
||||
@@ -48,6 +53,7 @@ function s(n) {
|
||||
})
|
||||
: o();
|
||||
}
|
||||
// 判断一个值是否命中规则:数量按闭区间比较,普通选项按正整数子项 id 比较。
|
||||
function c(e, t, n) {
|
||||
return n.values.some((n) => {
|
||||
if (r(e))
|
||||
@@ -66,6 +72,7 @@ function c(e, t, n) {
|
||||
return ((!Number.isSafeInteger(i) || i <= 0) && o(), t === i);
|
||||
});
|
||||
}
|
||||
// in 条件任一值命中即可,in 结果要求全部已选值合法;not_in 则不能有任一命中。
|
||||
function l(e, t, n) {
|
||||
let r = a(t).map((t) => c(e, t, n));
|
||||
return n.operator === `not_in`
|
||||
@@ -74,11 +81,13 @@ function l(e, t, n) {
|
||||
? r.some(Boolean)
|
||||
: !!r.length && r.every(Boolean);
|
||||
}
|
||||
// 操作系统的实际可选 id 位于 version 层,不能把系统分类 id 当成镜像 id。
|
||||
function u(e) {
|
||||
return e.option_type === `os`
|
||||
? t(e.subs).flatMap((e) => t(e.version).map((e) => Number(e.id)))
|
||||
: t(e.subs).map((e) => Number(e.id));
|
||||
}
|
||||
// 将实例既有配置转成规则可读的表单值;级联配置不参与普通项求值。
|
||||
function d(e) {
|
||||
let n = {};
|
||||
for (let o of e) {
|
||||
@@ -100,6 +109,7 @@ function d(e) {
|
||||
}
|
||||
return n;
|
||||
}
|
||||
/** 限制一个结果项:离散值过滤 subs,数量值按原始步长切分合法区间,而非枚举每个整数。 */
|
||||
function f(e, n, i) {
|
||||
if (
|
||||
(e.option_type === `cascade` && o(`高级规则不能将级联项作为普通配置提交`),
|
||||
@@ -135,6 +145,7 @@ function f(e, n, i) {
|
||||
i = a + Math.floor((Number(t.qty_max) - a) / s) * s;
|
||||
if (!Number.isSafeInteger(r) || !Number.isSafeInteger(i) || i < r)
|
||||
return [];
|
||||
// 用规则区间边界切段,保留相邻边界之间整段允许的数量,避免容量范围越大越慢。
|
||||
let o = Math.floor((i - r) / s) + 1,
|
||||
l = [
|
||||
...new Set([
|
||||
@@ -176,6 +187,7 @@ function f(e, n, i) {
|
||||
((e.qty_min = Math.min(...l.map((e) => Number(e.qty_min)))),
|
||||
(e.qty_max = Math.max(...l.map((e) => Number(e.qty_max)))));
|
||||
}
|
||||
// 选中值被规则排除时,回落到第一个合法值;无任何合法值时抛错,而非留下无效选择。
|
||||
function p(e, n, s) {
|
||||
let c = i(e),
|
||||
l = String(e.option_name || c),
|
||||
@@ -208,6 +220,10 @@ function p(e, n, s) {
|
||||
} else t.includes(Number(d)) || (n[c] = t[0]);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* r/a/c/u 分别为可编辑选项、表单、原始规则和实例固定配置。
|
||||
* 反复应用至表单稳定;重复状态表示循环冲突,固定配置不满足结果项时禁止继续。
|
||||
*/
|
||||
function m(r, a, c, u = []) {
|
||||
let m = r.map((t) => n(e(t))),
|
||||
h = s(c);
|
||||
|
||||
Reference in new issue
Block a user