docs: explain common, dcim and kky resource upgrades

This commit is contained in:
cieanyau committed 2026-11-06 00:41:14 +08:00
1 parent 5ba081550c
commit 1e9f2d786b
3 files changed
+28

No files matched your search

+16
View File
@@ -1,4 +1,5 @@
<script> <script>
// 通用模块升级及展示适配:归一化按钮、镜像、图表和配置项,并管理配置/商品升级流程。
import "~/assets/styles/CommonUpgrade.C8sZ-ExM.css"; import "~/assets/styles/CommonUpgrade.C8sZ-ExM.css";
import { toDisplayString } from "vue"; import { toDisplayString } from "vue";
import { renderList } from "vue"; import { renderList } from "vue";
@@ -46,6 +47,7 @@ var j = (e) => (e && typeof e == `object` && !Array.isArray(e) ? e : {}),
`rescue_system`, `rescue_system`,
]), ]),
F = new Set([`on`, `off`, `reboot`, `hard_off`, `hard_reboot`, `vnc`]); F = new Set([`on`, `off`, `reboot`, `hard_off`, `hard_reboot`, `vnc`]);
// 兼容单项或 console/control 分组按钮;仅开放已适配动作,重复项有禁用标记时从严合并。
function I(e, t) { function I(e, t) {
let n = (Array.isArray(e) ? e : [e]) let n = (Array.isArray(e) ? e : [e])
.flatMap((e) => { .flatMap((e) => {
@@ -89,6 +91,7 @@ function I(e, t) {
: e, : e,
); );
} }
// 将配置项→系统→版本的嵌套镜像结构展开,保留版本所属 optionId 供重装接口使用。
function L(e) { function L(e) {
return (Array.isArray(e) ? e : [e]).flatMap((e) => { return (Array.isArray(e) ? e : [e]).flatMap((e) => {
let t = j(e); let t = j(e);
@@ -113,6 +116,7 @@ function L(e) {
}); });
}); });
} }
// 将模块提供的图表类型及下拉选项转换为统一展示结构。
function R(e) { function R(e) {
return (Array.isArray(e) ? e : []).flatMap((e) => { return (Array.isArray(e) ? e : []).flatMap((e) => {
let t = j(e); let t = j(e);
@@ -133,6 +137,7 @@ function R(e) {
]; ];
}); });
} }
// 兼容多序列 value 列表与 in_bw/out_bw 列表;按首序列时间对齐,缺失采样保留 null。
function z(e) { function z(e) {
let t = j(e); let t = j(e);
if (!Array.isArray(t.list)) throw Error(`图表数据格式暂未适配`); if (!Array.isArray(t.list)) throw Error(`图表数据格式暂未适配`);
@@ -191,6 +196,7 @@ function z(e) {
series: l, series: l,
}; };
} }
// 当前配置按类型展示数量、级联路径或子项文本,镜像和网络标签沿用统一格式化规则。
function B(e) { function B(e) {
let t = e.unit ? ` ${e.unit}` : ``; let t = e.unit ? ` ${e.unit}` : ``;
if (e.option_type === `cascade`) return String(e.cascade_path || `--`) + t; if (e.option_type === `cascade`) return String(e.cascade_path || `--`) + t;
@@ -213,6 +219,7 @@ function B(e) {
.filter(Boolean); .filter(Boolean);
return r.length ? r.join(`、`) + t : String(e.sub_name || `--`); return r.length ? r.join(`、`) + t : String(e.sub_name || `--`);
} }
// 递归展开可见级联叶子为完整路径,深度上限避免异常后台树导致无限递归。
function V(e, t = [], n = 0) { function V(e, t = [], n = 0) {
return !Array.isArray(e) || n > 20 return !Array.isArray(e) || n > 20
? [] ? []
@@ -234,6 +241,7 @@ function V(e, t = [], n = 0) {
: []; : [];
}); });
} }
// 归一化可升级配置;数量区间按步长对齐,隐藏选项过滤后再判定是否支持编辑。
function H(e) { function H(e) {
return Array.isArray(e) return Array.isArray(e)
? e.flatMap((e) => { ? e.flatMap((e) => {
@@ -323,6 +331,7 @@ function H(e) {
}) })
: []; : [];
} }
// 校验表单成员、数量区间/步长和重复数量,分别生成普通与级联配置请求字段。
function U(e, t, n) { function U(e, t, n) {
let r = {}, let r = {},
i = {}; i = {};
@@ -383,6 +392,7 @@ function U(e, t, n) {
cascade_configoption: i, cascade_configoption: i,
}; };
} }
// 升级状态机:配置升级通用于已适配模块,跨商品升级仅由 idcsmart_common 开放。
function W(e, t) { function W(e, t) {
let n = useApi(), let n = useApi(),
a = ref(`config`), a = ref(`config`),
@@ -504,6 +514,7 @@ function W(e, t) {
function W() { function W() {
(L++, (F.value = ``), (P.value = ``), (O.value = !1), (M.value = !1)); (L++, (F.value = ``), (P.value = ``), (O.value = !1), (M.value = !1));
} }
// 应用商品高级规则并同步联动后的表单;同步锁阻止 watch 再入递归。
function G() { function G() {
if (!z) { if (!z) {
if (_.value.error) throw Error(_.value.error); if (_.value.error) throw Error(_.value.error);
@@ -517,6 +528,7 @@ function W(e, t) {
} }
} }
} }
// 配置升级优先使用实例当前值,换商品则使用目标默认值,并初始化周期和级联数量。
function K() { function K() {
let e = Array.isArray(u.value.configoptions) let e = Array.isArray(u.value.configoptions)
? u.value.configoptions.map(j) ? u.value.configoptions.map(j)
@@ -555,6 +567,7 @@ function W(e, t) {
W(), W(),
G()); G());
} }
// 按升级模式选择配置接口,实例或模式切换后通过代次废弃旧结果。
async function q() { async function q() {
if (!I || D.value || !e().allowed) return; if (!I || D.value || !e().allowed) return;
if (!c.value) { if (!c.value) {
@@ -589,6 +602,7 @@ function W(e, t) {
I && t === R && (E.value = !1); I && t === R && (E.value = !1);
} }
} }
// 统一构建报价/下单载荷;尚未适配含子商品组合的升级,不能只提交父商品。
function J() { function J() {
if (!c.value) throw Error(`此模块未开放更换商品`); if (!c.value) throw Error(`此模块未开放更换商品`);
if (_.value.error) throw Error(_.value.error); if (_.value.error) throw Error(_.value.error);
@@ -605,6 +619,7 @@ function W(e, t) {
} }
return e; return e;
} }
// 高级规则联动完成后再记录快照;价格必须有效且非负,改动表单立即废弃报价。
async function Y() { async function Y() {
if ( if (
!I || !I ||
@@ -644,6 +659,7 @@ function W(e, t) {
I && t === L && (O.value = !1); I && t === L && (O.value = !1);
} }
} }
// 需要有效报价和用户确认;商品升级将配置包裹进 config_options,与配置升级载荷区分。
async function X() { async function X() {
if (!I || !V.value || !M.value) return; if (!I || !V.value || !M.value) return;
let r = B.value; let r = B.value;
+6
View File
@@ -1,4 +1,5 @@
<script> <script>
// DCIM 资源升级表单:基于当前线路选择带宽、流量、IP、防御及可选硬件数量。
import "~/assets/styles/ConfigBandwidth.CWSH1WJZ.css"; import "~/assets/styles/ConfigBandwidth.CWSH1WJZ.css";
import "~/assets/styles/DcimUpgrade.DaLApYFa.css"; import "~/assets/styles/DcimUpgrade.DaLApYFa.css";
import { toDisplayString } from "vue"; import { toDisplayString } from "vue";
@@ -119,6 +120,7 @@ var T = {
}, },
].filter((e) => e.options.length), ].filter((e) => e.options.length),
); );
// 档位既可能是离散值,也可能是区间;区间需要同时满足上下限和步长。
function ie(e, t) { function ie(e, t) {
return ( return (
Number.isFinite(e) && Number.isFinite(e) &&
@@ -146,6 +148,7 @@ var T = {
function Z() { function Z() {
(H++, (B.value = ``), (V.value = ``), (G = ``), (L.value = !1)); (H++, (B.value = ``), (V.value = ``), (G = ``), (L.value = !1));
} }
// 从当前实例恢复初值并保存基准快照,只有与基准不同的配置才需要询价。
function ae() { function ae() {
for (let e of [`bw`, `flow`, `ip_num`, `peak_defence`]) for (let e of [`bw`, `flow`, `ip_num`, `peak_defence`])
F[e] = Number(O.current[e] ?? 0); F[e] = Number(O.current[e] ?? 0);
@@ -180,6 +183,7 @@ var T = {
e === U && (I.value = !1); e === U && (I.value = !1);
} }
} }
// 硬件数量只允许已有/可选项目,新增数量不得超剩余槽位;网络变更需匹配线路档位。
function oe() { function oe() {
for (let e of N) { for (let e of N) {
let t = F[`optional_${e}`], let t = F[`optional_${e}`],
@@ -221,6 +225,7 @@ var T = {
) )
throw Error(`请选择有效的${t.label}档位`); throw Error(`请选择有效的${t.label}档位`);
} }
// 询价接口使用扁平 optional_*[id] 参数,返回价格仅对当前配置快照有效。
async function $() { async function $() {
if (O.upgradeAllowed === !1 || R.value || W || !J.value) return; if (O.upgradeAllowed === !1 || R.value || W || !J.value) return;
((z.value = ``), Z()); ((z.value = ``), Z());
@@ -264,6 +269,7 @@ var T = {
e === H && (L.value = !1); e === H && (L.value = !1);
} }
} }
// 下单使用完整嵌套配置,并在报价、配置快照一致后把有效订单交给支付入口。
async function se() { async function se() {
if ( if (
O.upgradeAllowed === !1 || O.upgradeAllowed === !1 ||
+6
View File
@@ -1,4 +1,5 @@
<script> <script>
// KKY ECS 分项升级入口:实例规格、带宽、防护、新增硬盘和已有磁盘扩容分别调用对应接口。
import "~/assets/styles/ConfigBandwidth.CWSH1WJZ.css"; import "~/assets/styles/ConfigBandwidth.CWSH1WJZ.css";
import "~/assets/styles/KkyUpgrade.CkDmxFBM.css"; import "~/assets/styles/KkyUpgrade.CkDmxFBM.css";
import { toDisplayString } from "vue"; import { toDisplayString } from "vue";
@@ -263,6 +264,7 @@ var ue = {
protect: Xe, protect: Xe,
disk: Ze, disk: Ze,
}; };
// 各页签首次进入时按需加载规格,已尝试加载的页签不重复发起初始化请求。
async function Y(e) { async function Y(e) {
if ( if (
x.upgradeAllowed !== !1 && x.upgradeAllowed !== !1 &&
@@ -278,6 +280,7 @@ var ue = {
} }
} }
} }
// 扩容配置必须匹配所选磁盘 identity;切换磁盘或页签后丢弃旧配置响应。
async function $e(e) { async function $e(e) {
if (J || x.upgradeAllowed === !1 || W.value) return; if (J || x.upgradeAllowed === !1 || W.value) return;
let t = ++q, let t = ++q,
@@ -309,6 +312,7 @@ var ue = {
e instanceof Error ? e.message : `该磁盘暂不支持扩容`); e instanceof Error ? e.message : `该磁盘暂不支持扩容`);
} }
} }
// 根据当前页签组装请求体;新增磁盘发送列表,扩容发送类型、目标容量与唯一标识。
function X() { function X() {
return E.value === `ins` return E.value === `ins`
? A.value ? A.value
@@ -360,6 +364,7 @@ var ue = {
}, },
}; };
} }
// 询价记录页签、实例和请求体快照,只让仍对应当前选择的结果更新界面。
async function Z() { async function Z() {
if (x.upgradeAllowed === !1) return; if (x.upgradeAllowed === !1) return;
let e = ++K, let e = ++K,
@@ -394,6 +399,7 @@ var ue = {
bandwidth: `bandwidth_order`, bandwidth: `bandwidth_order`,
protect: `protect_upgrade_order`, protect: `protect_upgrade_order`,
}; };
// 按升级种类选择订单接口,返回后由父级统一处理支付。
async function tt() { async function tt() {
if (x.upgradeAllowed === !1 || W.value || U.value || !H.value) if (x.upgradeAllowed === !1 || W.value || U.value || !H.value)
return; return;