docs: annotate remaining routes layouts and view boundaries

This commit is contained in:
cieanyau committed 2026-11-06 00:34:17 +08:00
1 parent 408f8e5c98
commit ab22d406c0
56 files changed
+403

No files matched your search

+45
View File
@@ -1,4 +1,7 @@
<script>
/**
* 实例详情调度页:先确认主机与商品,再解析实际管理模块;统一展示数据与能力开关,云/物理/通用旧模块分别委派管理组件。权限展示不替代后端鉴权。
*/
import "~/assets/styles/InstanceLoadingShell.CwfiUwdU.css";
import "~/assets/styles/FlowPacketPanel.-RJSx13z.css";
import "~/assets/styles/InstanceServiceInfo.BftSVIeW.css";
@@ -151,6 +154,7 @@ var M = {
remoteConsole: !0,
},
};
// 统一云实例数据、状态和磁盘访问;模块变化或作用域销毁时递增请求代次,使旧模块在途响应失效。
function Ee(e, t, n) {
let r = useApi(),
i = ref(null),
@@ -197,11 +201,13 @@ function Ee(e, t, n) {
};
}),
S = () => t.value;
// 镜像图标名经过 URL 编码后仅拼入本地固定图标目录。
function ee(e) {
return e
? `/plugins/server/mf_cloud/view/assets/default_icons/${encodeURIComponent(e)}.svg`
: ``;
}
// 把 mf_cloud/remf_cloud 详情转换为统一展示结构,同时保留 raw 供专用管理组件读取。
function te(e) {
let t = e.image ?? {},
n = String(t.icon ?? ``);
@@ -231,6 +237,7 @@ function Ee(e, t, n) {
raw: e,
};
}
// 从财务模块 host_data 与配置项提取实例规格;IP 去重,连接端口交给公共解析器处理。
function C(e) {
let t = instance_data_l(e.host_data),
n = instance_data_i(e.config_options),
@@ -272,6 +279,7 @@ function Ee(e, t, n) {
raw: e,
};
}
// 整理弹性云的镜像、带宽计费和安全组字段,不改变原始接口数据。
function ne(e) {
let t = instance_data_a(e),
n = String(t.icon ?? ``);
@@ -304,6 +312,7 @@ function Ee(e, t, n) {
}
);
}
// 整理 jy 系列的多种字段来源;仅选有效数值作为统一规格,保留原始详情。
function w(e) {
let t = instance_data_l(e.host_data),
n = instance_data_a(e),
@@ -352,6 +361,7 @@ function Ee(e, t, n) {
raw: e,
};
}
// 按模块读取并规范化磁盘列表;财务模块从快照/备份信息提取,明确空数组才作为无磁盘。
async function ie(t) {
if (t === `remf_finance`) {
let t = !1,
@@ -433,6 +443,7 @@ function Ee(e, t, n) {
raw: e,
}));
}
// 磁盘异步结果同时绑定模块、详情代次和磁盘请求代次,失败只更新磁盘区域。
async function ae() {
let e = t.value;
if (!e || !i.value || M[e].disk === !1) return;
@@ -450,6 +461,7 @@ function Ee(e, t, n) {
a() && (h.value = !1);
}
}
// 状态查询有独立 12 秒截止时间;结果缺少有效 rescue 标记时保留详情已有标记,不用未知状态冒充关机。
async function T() {
let n = S();
if (!n) return;
@@ -483,6 +495,7 @@ function Ee(e, t, n) {
u() && (l.value = !1);
}
}
// 并行发起状态与详情查询,按模块归一化详情后再加载磁盘;缺失连接端口时单独读取 remote_info。
async function oe(n) {
let a = t.value;
if (!a) return;
@@ -527,6 +540,7 @@ function Ee(e, t, n) {
c() && (f.value = !1);
}
}
// 先核对模块电源能力及强制操作能力,再携带可选操作密码请求,完成后重新读取状态。
async function se(t, n = ``) {
if (!M[S()]?.power) throw Error(`当前模块暂未开放电源管理操作`);
if (t.startsWith(`hard_`) && !M[S()]?.hardPower)
@@ -538,6 +552,7 @@ function Ee(e, t, n) {
: void 0;
(await r.post(`/${S()}/${e}/${t}`, i), await T());
}
// 密码重置按模块组装既有字段契约,不能把 kky 与其他模块的参数形状直接互换。
async function ce(t, n = ``, i = ``) {
if (!M[S()]?.passwordReset) throw Error(`当前模块暂未开放密码重置操作`);
S() === `kky_ecs`
@@ -587,6 +602,7 @@ var N = new Set([
F = (e) => e === `idcsmart_common` || e === `reidcsmart_common`,
I = (e) => e === !0 || e === 1 || e === `1` || e === `on` || e === `true`,
L = (e) => e === !1 || e === 0 || e === `0` || e === `off` || e === `false`;
// 从后端按钮元数据提取允许与禁止电源动作;显式禁用优先于允许,同名动作不能被另一条配置重新放开。
function R(e) {
let t = new Set(),
n = new Set(),
@@ -614,6 +630,7 @@ function R(e) {
};
}
var z = (e) => R(e).allowed;
// 按旧模块的实际权限形状计算动作集合,兼顾 dcim 授权与手工资源控制模式;未知模块不开放电源操作。
function Oe(e, t) {
if (F(e)) return z(t.client_button);
if (e === `remf_finance_common`) return z(t.module_button);
@@ -641,6 +658,7 @@ function Oe(e, t) {
}
return new Set();
}
// 旧/通用实例电源权限与状态控制器:权限元数据必须属于当前模块才能开放动作,提交期间互斥。
function ke(e, t) {
let n = useApi(),
r = ref(!1),
@@ -655,6 +673,7 @@ function ke(e, t) {
h = 0,
g = !1,
_ = !1;
// 模块重载、切换或销毁时清空权限和状态,并让已有异步结果失效。
function v() {
(h++,
f++,
@@ -667,9 +686,11 @@ function ke(e, t) {
(i.value = ``),
(r.value = !1));
}
// 只有当前模块元数据已成功加载、没有错误且动作被允许时才可提交。
function y(e) {
return !g && !r.value && !i.value && m === t.value && p.value.has(e);
}
// 刷新旧模块电源状态;状态错误独立于权限错误,不把查询失败转为已关机。
async function b() {
let r = t.value;
if (g || m !== r || !N.has(r)) return;
@@ -687,6 +708,7 @@ function ke(e, t) {
o() && (l.value = !1);
}
}
// 先重置旧权限,再读取当前模块配置;已有初始详情可复用,空响应不授予任何操作。
async function x(a) {
v();
let s = t.value;
@@ -708,6 +730,7 @@ function ke(e, t) {
l() && (r.value = !1);
}
}
// 请求前再次检查当前权限与互斥标记,响应后复查模块/代次;切换实例后要求核实操作结果。
async function S(r, i = ``) {
if (!y(r)) throw Error(`当前实例不支持此电源操作或权限尚未加载`);
if (_) throw Error(`电源操作正在提交,请稍候`);
@@ -1067,6 +1090,7 @@ var Ae = publicAssetsURL(`/images/reference/cloud-server.png`),
label: `返回产品列表`,
});
});
// 非统一云详情模块独立读取主机 IP,使用请求序号避免旧响应覆盖。
async function Et() {
if (V.value) return;
let e = ++F;
@@ -1081,6 +1105,7 @@ var Ae = publicAssetsURL(`/images/reference/cloud-server.png`),
e === F && (De.value = !1);
}
}
// 读取通用主机配置并把同一份响应交给权限控制器,避免两次查询得到不同权限快照。
async function Dt(e = O) {
let t = () => !k && e === O;
K.reset();
@@ -1100,6 +1125,7 @@ var Ae = publicAssetsURL(`/images/reference/cloud-server.png`),
(ye.value = e instanceof Error ? e.message : `主机配置加载失败`);
}
}
// 主机或商品不匹配时清空所有展示与模块信息,废弃旧 IP 请求,防止混合显示不同实例。
function Ot() {
((w.value = null),
(B.value = ``),
@@ -1113,6 +1139,7 @@ var Ae = publicAssetsURL(`/images/reference/cloud-server.png`),
(P.value = ``),
(De.value = !1));
}
// 先严格核对 /host 响应 ID 与商品,再补取实际模块;按模块组合加载详情、IP、配置和电源权限。
async function q() {
if (k) return;
let e = ++O,
@@ -1188,6 +1215,7 @@ var Ae = publicAssetsURL(`/images/reference/cloud-server.png`),
t() && ((T.value = !1), (D.value = !1));
}
}
// 保存备注时绑定主机对象与加载代次;离页/切换后不把旧备注回填到新实例。
async function kt() {
let e = w.value;
if (R.value || !e || k) return;
@@ -1212,27 +1240,32 @@ var Ae = publicAssetsURL(`/images/reference/cloud-server.png`),
R.value = !1;
}
}
// 打开备注编辑时从最新主机对象复制草稿,提交中不重新打开。
function At() {
w.value &&
!R.value &&
((z.value = ``), (I.value = w.value.notes || ``), (L.value = !0));
}
// 为当前实例尚未完成的原订单打开支付,使用已有订单而非再次创建。
function jt() {
w.value?.order_id &&
((vt.value = w.value.order_id),
(yt.value = String(w.value.first_payment_amount ?? ``)),
(Oe.value = !0));
}
// 续费/升级等子组件返回订单后统一打开支付弹窗。
function Mt(e) {
((vt.value = e.order_id),
(yt.value = String(e.amount ?? ``)),
(Oe.value = !0));
}
let Nt = ref(0);
// 操作完成后重载实例并递增刷新键,让需要重新挂载的管理区域同步更新。
async function Pt() {
(await q(), k || Nt.value++);
}
let J = ref(``);
// 复制非空字段并短暂标识具体复制项,不在日志中输出连接资料。
async function Ft(e, t) {
if (e)
try {
@@ -1294,6 +1327,7 @@ var Ae = publicAssetsURL(`/images/reference/cloud-server.png`),
);
}),
Vt;
// 仅在页面可见、实例 Active、无弹窗且无其他动作时刷新电源状态,避免状态查询与操作冲突。
function Ht() {
k ||
D.value ||
@@ -1314,19 +1348,23 @@ var Ae = publicAssetsURL(`/images/reference/cloud-server.png`),
Gt = !1,
Kt = ref(``),
qt = ref(``);
// 成功反馈清除之前的错误;仅提示指令已下发,不保证实例已经进入最终电源状态。
function Jt(e) {
((qt.value = ``),
(Kt.value = e),
setTimeout(() => (Kt.value = ``), 4e3));
}
// 统一提取操作异常消息,失败与成功提示互斥。
function Yt(e, t) {
((Kt.value = ``), (qt.value = e instanceof Error ? e.message : t));
}
// 识别后端 operate_password 标记,决定是否保留确认框要求再次输入操作密码。
function Xt(e) {
if (!e || typeof e != `object`) return !1;
let t = e.data;
return !!t && typeof t == `object` && t.operate_password === 1;
}
// 确认电源动作快照仍匹配当前路由、主机、模块、状态和权限,防止确认期间切换目标。
function Zt(e) {
return (
!Gt &&
@@ -1340,6 +1378,7 @@ var Ae = publicAssetsURL(`/images/reference/cloud-server.png`),
(!G.value || K.can(e.action))
);
}
// 按云/物理/旧模块分流电源动作;创建确认快照时冻结目标实例与动作,最终提交仍再校验。
function Q(e) {
if (U.value) {
!T.value &&
@@ -1375,9 +1414,11 @@ var Ae = publicAssetsURL(`/images/reference/cloud-server.png`),
};
Zt(t) && ((Z.value = ``), (Ut.value = ``), (X.value = t));
}
// 无动作执行时关闭确认并清空操作密码。
function Qt() {
Y.value || ((X.value = null), (Z.value = ``), (Ut.value = ``));
}
// 路由/实例/模块/状态变化时废弃待确认动作和旧反馈,密码不跨目标复用。
function $t() {
((Wt += 1),
(X.value = null),
@@ -1392,6 +1433,7 @@ var Ae = publicAssetsURL(`/images/reference/cloud-server.png`),
flush: `sync`,
},
);
// 确认提交前后都验证动作快照;后端要求操作密码时留在确认框重试,其他结果关闭并刷新实例。
async function en() {
let e = X.value;
if (!e || Y.value || j.value) return;
@@ -1427,6 +1469,7 @@ var Ae = publicAssetsURL(`/images/reference/cloud-server.png`),
t === Wt && ((Y.value = ``), (Z.value = ``));
}
}
// 只有当前模块支持远控且实例 Active 才打开独立远控入口。
function tn() {
!D.value &&
H.caps.value.remoteConsole &&
@@ -1435,6 +1478,7 @@ var Ae = publicAssetsURL(`/images/reference/cloud-server.png`),
((qt.value = ``), remote_console_t(C, V.value));
}
let nn = ref(!1);
// 打开续费弹窗,具体报价和可用周期交给续费组件处理。
function rn() {
((qt.value = ``), (nn.value = !0));
}
@@ -1537,6 +1581,7 @@ var Ae = publicAssetsURL(`/images/reference/cloud-server.png`),
(Gt = !0),
$t());
}),
// 初始骨架、加载错误与主机详情互斥展示;按实际管理模块挂载专用面板,电源确认/续费/支付弹窗使用冻结目标。
(n, r) => {
let a = skeleton,
s = InstanceLoadingShell,