docs: align shared-module comments with actual edge cases

This commit is contained in:
cieanyau committed 2026-11-06 00:45:49 +08:00
1 parent 3af9eddd3f
commit deb7c3b3cd
14 files changed
+20 -19

No files matched your search

+4 -3
View File
@@ -1,7 +1,8 @@
/**
* 控制台统一请求与登录会话入口。
* 页面通过 useApi 访问 /console/v1,通过 useAuth 共享登录状态;本模块只在客户端使用。
* 后端业务成功必须同时满足 HTTP 成功和响应信封 status === 200,不能仅检查 HTTP 状态。
* 默认 JSON 请求须同时满足 HTTP 成功和信封 status === 200;显式兼容项可接受无 status 的 data 数组。
* 文件下载使用独立响应规则,不能把默认 JSON 信封要求直接套用于文件内容。
*/
import CryptoJS from "crypto-js";
import { defineStore } from "pinia";
@@ -71,7 +72,7 @@ function _e() {
function ve() {
return ge;
}
/** 按身份/命名空间、接口及参数生成稳定键;对象键排序避免同义参数重复缓存。 */
/** 按接口、命名空间与参数生成稳定键;对象键排序,身份隔离由缓存读写单独处理。 */
function ye(e, t, n = ``) {
return JSON.stringify([e, n, t], (e, t) =>
t && typeof t == `object` && !Array.isArray(t)
@@ -685,7 +686,7 @@ const useAuth = defineStore("auth", () => {
let sessionVersion = 0;
let legacySession = null;
// 仅在登录或服务端核验成功后调用;先清理上一会话的缓存与未完成旧平台登录。
// 接收登录、旧入口核验或跨标签同步的凭证;先清理旧缓存和未完成的旧平台登录。
function loginWithJwt(jwt) {
if (!ut(jwt))
throw Error("登录响应无效,请重新登录;若持续失败,请联系客服。");
+2 -2
View File
@@ -41,7 +41,7 @@ function e(e) {
}
return r(e);
}
/** 路径长度和匹配 query 数量决定激活优先级,避免父菜单与更具体子菜单同时高亮。 */
/** 路径长度和匹配 query 数量决定激活优先级,在传入候选项中优先匹配更具体的菜单。 */
function t(e, t, n = []) {
let r =
t.path === `/products/cvm`
@@ -278,7 +278,7 @@ function d(e) {
}
}
/**
* 规范化后端菜单树:最多三层、每层最多 100 项,文本最多 100 字。
* 规范化后端菜单树:深度最多三层,每组同级菜单最多 100 项,标签截取前 100 个字符。
* 无法适配的菜单保留禁用原因而非猜测跳转;二次提醒 second_reminder 作为确认标记保留。
*/
function f(e, t = ``, a = 0) {
+1 -1
View File
@@ -76,7 +76,7 @@ async function l(e) {
});
}
/**
* 返回编辑保存函数:n 为 API 客户端,r 包含 position/item,u 回调检查报价是否仍有效。
* n 为 API 客户端,r 包含 position/item;返回函数的第二参 u 检查报价是否仍有效。
* 保存前重取购物车并比较原始项,提交 expected_item 供后端进一步检测并发变更。
*/
function u(n, r) {
+1 -1
View File
@@ -1,6 +1,6 @@
/** 云实例管理表单的协议校验:防御报价、订单、NAT、VPC 和磁盘规格。 */
var e = (e) => e === `mf_cloud` || e === `remf_cloud`;
// 空对象表示没有防御选项;非空配置必须给出合法的 defence 列表及当前防御值。
// 空对象表示没有防御选项;非空配置须有合法 defence 列表,当前防御值可缺省,非空时须合法。
function t(e) {
let t = () => {
throw Error(`防御配置无效,请重试`);
+1 -1
View File
@@ -1,6 +1,6 @@
/**
* 拉取完整关联列表:e(page, limit) 返回 {list, count?},t 判断调用上下文是否仍有效。
* 按正整数 id 去重;总数缺失时以不足一页结束,无新增项时拒绝,避免无限分页。
* 按正整数 id 去重;总数缺失时以不足一页结束,尚未满足结束条件却无新增项时拒绝。
*/
async function e(e, t = () => !0) {
let n = [],
+1 -1
View File
@@ -8,7 +8,7 @@ function e(e) {
function t(e) {
return e === `help` || e === `news` || e === `notices` ? e : null;
}
// 通过后端启用的插件记录确定类型;未知/停用插件不生成内容路由。
// 通过插件记录确定类型;兼容缺省 status,明确停用或未知类型的插件不生成内容路由。
function n(t, n) {
let r = e(t);
return r
+1 -1
View File
@@ -80,7 +80,7 @@ var t = {
function a(e) {
return i[e] ?? e;
}
// 订单优先展示脱敏后的商品名列表,缺失时回落到订单名称/描述。
// 订单优先展示移除内部 -L 后缀的商品名列表,缺失时回落到订单名称/描述。
function o(t) {
let n = t.product_names;
if (Array.isArray(n)) {
+1 -1
View File
@@ -1,4 +1,4 @@
/** 多供应商实例数据展示适配;缺失/无效数值用 null 表示,避免误显示为有效的 0。 */
/** 多供应商实例数据展示适配;基础数值以 null 区分缺值与 0,具体输出再按展示协议归一。 */
function e(e) {
if (e == null || e === ``) return null;
let t = Number(e);
+1 -1
View File
@@ -15,7 +15,7 @@ function e(e, t) {
}[e.suspend_type || ``] ||
`暂停原因暂未提供,请联系支持`;
}
// 业务状态优先于电源状态;只有 Active 实例才显示运行/关机等即时状态。
// 明确的非 Active 业务状态优先;Active 或未提供业务状态时才读取运行/关机等即时状态。
function t(e, t = `Active`, n = !1) {
let r = {
Unpaid: `未付款`,
+1 -1
View File
@@ -195,7 +195,7 @@ function o(e) {
e.filter((e) => e.kind !== `explain`).map((e) => [e.id, (e.kind, ``)]),
);
}
/** 逐字段检查必填、选项值和可本地执行的正则;布尔字段按后端约定归一为 "1"/空串。 */
/** 检查必填、选项和可本地执行的正则;校验时将布尔值视为 "1"/空串,不修改传入表单。 */
function s(e, t) {
for (let n of e) {
if (n.kind === `explain`) continue;
+3 -3
View File
@@ -1,5 +1,5 @@
/**
* 服务器列表分类适配:优先使用后端 classified-v1 分页,旧协议才完整拉取后在前端分类。
* 服务器列表分类适配:优先使用 classified-v1 分页;旧协议或跨页自然排序时完整拉取。
* 分类结果和请求只在当前工厂实例内缓存,invalidate 作废在途结果对应的代次。
*/
// 这些既有通用商品在当前业务中按独立服务器展示;变更须与商品配置约定一起核对。
@@ -76,7 +76,7 @@ function n(e, n, r) {
l.get(a) === o && l.delete(a);
}
}
/** 旧协议完整加载列表并去重,最多四个并发详情请求补齐分类,再按目标模块筛选。 */
/** 完整加载列表并去重;旧协议的通用商品最多四个并发详情请求补齐分类,再按模块筛选。 */
async function _(n, o, c) {
let l = [],
u = {},
@@ -223,7 +223,7 @@ function n(e, n, r) {
Number(s.count) === s.list.length &&
(a = s));
}
// 老协议缓存最多四组筛选条件;加载中共用 Promise,失败移除,成功后才开始 30 秒 TTL。
// 全量结果最多缓存四组筛选条件;加载中共用 Promise,失败移除,成功后开始 30 秒 TTL。
let s = Date.now();
for (let [e, t] of u) t.expires <= s && u.delete(e);
let c = u.get(r);
+1 -1
View File
@@ -41,7 +41,7 @@ function d(e) {
e
);
}
// 仅清理区域文案中的“第一区/1区”等展示后缀,不改区域 id。
// 清理区域文案中的“第一区/1区”等编号及冗余分隔,不改区域 id。
function f(e) {
let t = `(?:第\\s*)?(?:[一二三四五六七八九十百零〇两]+|[0-90-9]+)\\s*区`;
return e
+1 -1
View File
@@ -54,7 +54,7 @@ function u(e) {
typeof t[e] == `string` && t[e].trim().length > 0 && t[e].length <= 8192,
);
}
/** d 为场景名;无场景时由调用方手动控制加载,组件销毁会取消请求并清空凭证。 */
/** d 为场景名;无场景时手动控制,销毁时中止图片请求、清空凭证并作废迟到的接口响应。 */
function d(d) {
let f = useSiteConfig_t(),
p = useApi(),
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* 列表页面共用加载器:分页、同请求去重、身份隔离、缓存首屏与刷新失败保留旧结果。
* 列表共用加载器:分页、同请求去重、身份隔离、初次加载回显缓存与刷新失败保留旧结果。
* 缓存来自统一 auth 模块;旧查询/旧账号/已卸载组件的响应不能覆盖当前列表。
*/
import { onMounted } from "vue";