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,5 +1,10 @@
|
||||
/**
|
||||
* 财务/通用商品配置适配与容量文案解析:将数字类型码转换为前端可编辑模型。
|
||||
* 数据不完整时明确失败,不能用空选项、零库存或默认价格掩盖后端配置错误。
|
||||
*/
|
||||
import { n as product_fields_n } from "~/lib/product-fields.js";
|
||||
import { t as bandwidth_display_t } from "~/lib/bandwidth-display.js";
|
||||
// 类型码来自既有商品接口:n 为数量类,r 为离散选择类(含级联根)。
|
||||
var n = new Set([4, 7, 9, 11, 14, 15, 16, 17, 18, 19]),
|
||||
r = new Set([1, 2, 6, 8, 10, 13, 20]);
|
||||
function i(e) {
|
||||
@@ -14,6 +19,7 @@ function o(e) {
|
||||
function s(e) {
|
||||
throw Error(`${e},请刷新重试或联系客服`);
|
||||
}
|
||||
// 数值不能靠 Number("") 得到伪造的 0;同时校验有限值和业务下界。
|
||||
function c(e, t, n = 0) {
|
||||
((typeof e != `number` && typeof e != `string`) || String(e).trim() === ``) &&
|
||||
s(t);
|
||||
@@ -27,6 +33,7 @@ function l(e) {
|
||||
function u(e, t = `商品配置数据不完整`) {
|
||||
return (Array.isArray(e) || s(t), e);
|
||||
}
|
||||
// 至少一个选项且 value 唯一,避免控件无法区分不同条目。
|
||||
function d(e) {
|
||||
return (
|
||||
(!e.length || new Set(e.map((e) => e.value)).size !== e.length) &&
|
||||
@@ -34,6 +41,7 @@ function d(e) {
|
||||
e
|
||||
);
|
||||
}
|
||||
// 仅清理区域文案中的“第一区/1区”等展示后缀,不改区域 id。
|
||||
function f(e) {
|
||||
let t = `(?:第\\s*)?(?:[一二三四五六七八九十百零〇两]+|[0-90-9]+)\\s*区`;
|
||||
return e
|
||||
@@ -43,6 +51,7 @@ function f(e) {
|
||||
.replace(/^[\s\-—_/·]+|[\s\-—_/·]+$/g, ``)
|
||||
.trim();
|
||||
}
|
||||
/** 展平系统版本、区域嵌套或普通子选项;返回统一 value/label,系统额外保留 group。 */
|
||||
function p(e, n) {
|
||||
if (n === 5) {
|
||||
let t = i(e.sub);
|
||||
@@ -95,6 +104,10 @@ function p(e, n) {
|
||||
}),
|
||||
);
|
||||
}
|
||||
/**
|
||||
* 转换一个配置项:布尔、系统、选择、级联或数量。
|
||||
* 数量上下界与各子区间求交,保留不连续 ranges;最大值为 0 的禁用数量项不展示。
|
||||
*/
|
||||
function m(e) {
|
||||
let t = i(e);
|
||||
t || s(`商品配置数据不完整`);
|
||||
@@ -171,6 +184,7 @@ function m(e) {
|
||||
d
|
||||
);
|
||||
}
|
||||
// 主机名/密码分别带 show 和 modify,展示与是否允许修改是两个独立开关。
|
||||
function h(e, t) {
|
||||
let n = i(e);
|
||||
return {
|
||||
@@ -179,6 +193,7 @@ function h(e, t) {
|
||||
value: a(n?.[t]),
|
||||
};
|
||||
}
|
||||
/** 转换下单自定义字段,复用 PCRE 适配;不支持类型、空下拉选项或重复 id 均报错。 */
|
||||
function g(t) {
|
||||
if (t == null) return [];
|
||||
let n = u(t, `自定义字段配置不完整`).map((t) => {
|
||||
@@ -227,6 +242,10 @@ function g(t) {
|
||||
n
|
||||
);
|
||||
}
|
||||
/**
|
||||
* 商品配置的总入口:兼容业务数据和 data 包装,生成选项、周期、库存及联动定义。
|
||||
* stock 为 null 表示未启用库存控制,不能与真实的 0 库存混淆。
|
||||
*/
|
||||
function _(e) {
|
||||
let t = i(e),
|
||||
n = i(t?.product) ? t : i(t?.data),
|
||||
@@ -270,6 +289,7 @@ function _(e) {
|
||||
}
|
||||
);
|
||||
}
|
||||
/** 将 seq/sneq 联动解析为本地模型;只保留当前配置项存在且选项有效的完整规则。 */
|
||||
function v(e, t) {
|
||||
let n = new Map(t.map((e) => [e.id, e]));
|
||||
function r(e) {
|
||||
@@ -332,12 +352,14 @@ function v(e, t) {
|
||||
];
|
||||
});
|
||||
}
|
||||
// seq 表示命中集合/闭区间,sneq 表示其补集;供条件判断和结果过滤共用。
|
||||
function y(e, t) {
|
||||
let n =
|
||||
e.values.includes(t) ||
|
||||
e.ranges.some((e) => t !== void 0 && t >= e.min && t <= e.max);
|
||||
return e.relation === `seq` ? n : !n;
|
||||
}
|
||||
/** 当前表单 n 激活规则 t 后,求出选项 e 的可用交集;不会直接修改输入选项。 */
|
||||
function b(e, t, n) {
|
||||
let r = t.filter((e) => y(e, n[e.optionId])).flatMap((e) => e.results);
|
||||
return e.map((e) => {
|
||||
@@ -357,6 +379,7 @@ function b(e, t, n) {
|
||||
];
|
||||
for (let e of t) {
|
||||
let t = [];
|
||||
// 在规则边界按原步长分段,而非逐容量枚举;多条结果规则顺序求交。
|
||||
for (let r of n) {
|
||||
let n = [
|
||||
...new Set([
|
||||
@@ -395,6 +418,7 @@ function b(e, t, n) {
|
||||
};
|
||||
});
|
||||
}
|
||||
/** 解析级联接口的子配置与默认选择,校验 id 不与根/其他子项重复,默认值必须可选。 */
|
||||
function x(e, t) {
|
||||
let n = u(
|
||||
i(u(e, `商品级联配置数据不完整`)[0])?.son,
|
||||
@@ -423,6 +447,7 @@ function x(e, t) {
|
||||
values: r,
|
||||
};
|
||||
}
|
||||
// 容量单位保留 B 与 iB 的文案区别,不在此处擅自做十进制/二进制容量换算。
|
||||
function S(e) {
|
||||
let t = /^([kmgtpe])(?:i?b)?$|^(b)$/i.exec(e.trim());
|
||||
return t
|
||||
@@ -431,6 +456,10 @@ function S(e) {
|
||||
: `${t[1].toUpperCase()}${/ib$/i.test(e.trim()) ? `iB` : `B`}`
|
||||
: ``;
|
||||
}
|
||||
/**
|
||||
* 从单一磁盘规格文案提取 size/unit/type;多容量、乘数、价格或未知残留词均返回 null。
|
||||
* t 仅在原文缺单位时作后备,NFKC 先统一全角字符,避免宽松匹配造成错误容量展示。
|
||||
*/
|
||||
function C(e, t = ``) {
|
||||
let n = e.normalize(`NFKC`).trim();
|
||||
if (!n || /[×*¥¥$€]|(?:^|[\s([{])[-+]\s*\d/.test(n)) return null;
|
||||
|
||||
Reference in new issue
Block a user