docs: annotate cloud network and upgrade components
This commit is contained in:
1 parent
7f54cae497
commit
9166b1376d
7 files changed
+95
No files matched your search
@@ -1,4 +1,8 @@
|
||||
<script>
|
||||
/**
|
||||
* 每 IP 防御调整面板:父级提供实例、模块、IP 集合及操作权限,订单通过 pay 事件交回父级支付。
|
||||
* 配置加载、取价、下单分别计数;IP/实例/目标档位变化时旧报价立即失效。
|
||||
*/
|
||||
import "~/assets/styles/MfCloudDefence.B2vl5Yip.css";
|
||||
import { toDisplayString } from "vue";
|
||||
import { onMounted } from "vue";
|
||||
@@ -27,6 +31,7 @@ import select from "primevue/select";
|
||||
import { n as cloud_instance_management_n } from "~/lib/cloud-instance-management.js";
|
||||
import { s as cloud_instance_management_s } from "~/lib/cloud-instance-management.js";
|
||||
import { t as cloud_instance_management_t } from "~/lib/cloud-instance-management.js";
|
||||
// 恢复渲染函数的静态节点属性;保留 scopeId 和既有 class 与样式文件的对应关系。
|
||||
var E = {
|
||||
class: `defence network-section`,
|
||||
},
|
||||
@@ -94,6 +99,7 @@ var E = {
|
||||
B = ref(!1),
|
||||
V = ref(``),
|
||||
H = ref(``),
|
||||
// 报价快照同时包含权限和弹窗状态,不能把关闭前或另一实例的价格继续用于下单。
|
||||
U = computed(() =>
|
||||
JSON.stringify([
|
||||
k.hostId,
|
||||
@@ -105,6 +111,7 @@ var E = {
|
||||
]),
|
||||
),
|
||||
W = ref(``),
|
||||
// 不把当前档位再次当作可购买目标;K 要求当前选择确实存在且报价快照一致。
|
||||
G = computed(() =>
|
||||
P.value.filter((e) => String(e.value) !== String(N.value)),
|
||||
),
|
||||
@@ -122,6 +129,7 @@ var E = {
|
||||
J = 0,
|
||||
Y = 0,
|
||||
X = !1;
|
||||
// 同步 watcher 调用此函数,使配置变化与按钮禁用发生在同一个更新周期。
|
||||
function Z() {
|
||||
(J++,
|
||||
(W.value = ``),
|
||||
@@ -132,6 +140,7 @@ var E = {
|
||||
watch(U, Z, {
|
||||
flush: `sync`,
|
||||
});
|
||||
/** 按选中 IP 取防御配置,通过统一适配器校验列表和当前值,空 IP 不发请求。 */
|
||||
async function Q() {
|
||||
let e = ++q,
|
||||
t = j.value,
|
||||
@@ -163,6 +172,7 @@ var E = {
|
||||
!X && e === q && (F.value = !1);
|
||||
}
|
||||
}
|
||||
// 只有实例活动、允许升级且存在其他档位时才打开空白调整表单。
|
||||
function ue() {
|
||||
k.upgradeAllowed &&
|
||||
k.active &&
|
||||
@@ -171,6 +181,7 @@ var E = {
|
||||
G.value.length &&
|
||||
((M.value = ``), (R.value = ``), (z.value = !0));
|
||||
}
|
||||
/** 取得本次费用与续费差价;只接受序号和快照仍属于当前选择的结果。 */
|
||||
async function $() {
|
||||
if (
|
||||
(Z(),
|
||||
@@ -202,6 +213,7 @@ var E = {
|
||||
!X && e === J && (B.value = !1);
|
||||
}
|
||||
}
|
||||
/** 先核验有效报价再创建订单;只把合法订单号及金额发给父级,不在这里执行支付。 */
|
||||
async function de() {
|
||||
if (!K.value || X) return;
|
||||
let e = U.value,
|
||||
@@ -251,9 +263,11 @@ var E = {
|
||||
},
|
||||
),
|
||||
onMounted(Q),
|
||||
// HTTP 请求未必即时取消,因此卸载标记和递增序号共同阻止迟到响应回填。
|
||||
onBeforeUnmount(() => {
|
||||
((X = !0), q++, Z());
|
||||
}),
|
||||
// UI 分为 IP/档位状态、加载错误与调整弹窗;提交期间禁用选择和关闭操作。
|
||||
(t, n) => {
|
||||
let r = select,
|
||||
i = button,
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
<script>
|
||||
/**
|
||||
* 云实例 IPv4/IPv6 列表及附加地址购买;addresses 事件供父级更新可选 IP,pay 事件交接订单。
|
||||
* 仅支持的云模块开放附加地址操作,upgradeAllowed 来自父级业务状态而非本地授权。
|
||||
*/
|
||||
import "~/assets/styles/MfCloudIps.jhFnuvcs.css";
|
||||
import { toDisplayString } from "vue";
|
||||
import { onMounted } from "vue";
|
||||
@@ -117,10 +121,12 @@ var ce = {
|
||||
R = 0,
|
||||
z = 0,
|
||||
B = !1;
|
||||
/** 两类地址并行加载、分别显示错误;每类以 100 条分页完整拉取,实例变化使旧结果失效。 */
|
||||
async function V() {
|
||||
let e = ++L,
|
||||
t = `/${O.module}/${O.hostId}`;
|
||||
((P.value = !0), (F.value = ``), (I.value = ``));
|
||||
// count 缺失时不足一页结束;有 count 却提前返回空页时不能当作完整列表。
|
||||
async function n(n) {
|
||||
let r = [],
|
||||
i = 1;
|
||||
@@ -182,6 +188,7 @@ var ce = {
|
||||
K = ref(``),
|
||||
q = ref(!1),
|
||||
J = ref(``),
|
||||
// 数量、权限、实例和弹窗共同构成取价快照,任何一项变化都必须重新报价。
|
||||
Y = computed(() =>
|
||||
JSON.stringify([
|
||||
O.hostId,
|
||||
@@ -191,6 +198,7 @@ var ce = {
|
||||
G,
|
||||
]),
|
||||
),
|
||||
// IPv4/IPv6 可分别为 0,但总数必须大于 0;不能提交负数或非整数数量。
|
||||
X = computed(
|
||||
() =>
|
||||
Number.isInteger(G.ip_num) &&
|
||||
@@ -209,12 +217,14 @@ var ce = {
|
||||
!q.value &&
|
||||
!U.value,
|
||||
);
|
||||
// 清除报价并递增序号,使较早的取价响应无法恢复过期的可提交状态。
|
||||
function Q() {
|
||||
(R++, (K.value = ``), (J.value = ``), (q.value = !1));
|
||||
}
|
||||
watch(Y, Q, {
|
||||
flush: `sync`,
|
||||
});
|
||||
// 每次打开恢复为一枚 IPv4,并立即获取对应价格。
|
||||
async function xe() {
|
||||
O.upgradeAllowed !== !1 &&
|
||||
!U.value &&
|
||||
@@ -225,6 +235,7 @@ var ce = {
|
||||
(H.value = !0),
|
||||
await $());
|
||||
}
|
||||
/** 询价只更新与当前数量快照一致的响应,合法的零价格也能通过金额适配器。 */
|
||||
async function $() {
|
||||
if ((Q(), O.upgradeAllowed === !1 || !H.value || !X.value)) return;
|
||||
let e = ++R,
|
||||
@@ -245,6 +256,7 @@ var ce = {
|
||||
!B && e === R && (q.value = !1);
|
||||
}
|
||||
}
|
||||
/** 有有效报价才创建 ip_num/order,校验订单号后关闭弹窗并发 pay;不自动重复下单。 */
|
||||
async function Se() {
|
||||
if (!Z.value || B) return;
|
||||
let e = Y.value,
|
||||
@@ -284,9 +296,11 @@ var ce = {
|
||||
V());
|
||||
},
|
||||
),
|
||||
// 离开面板后作废地址请求和报价请求,防止回填已销毁界面。
|
||||
onBeforeUnmount(() => {
|
||||
((B = !0), L++, Q());
|
||||
}),
|
||||
// 两张地址表共享加载态但分别呈现错误;购买弹窗展示当前数量、报价和重报价入口。
|
||||
(t, n) => {
|
||||
let r = OperationNotice,
|
||||
a = button,
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
<script>
|
||||
/**
|
||||
* 实例操作日志列表,父级提供 hostId/module;关键词提交后才生效,输入中不连续发请求。
|
||||
* 后端未给可信总数时以本页是否满页决定下一页,不伪造“共 N 条”。
|
||||
*/
|
||||
import "~/assets/styles/MfCloudLogs.MTqtLGjA.css";
|
||||
import { toDisplayString } from "vue";
|
||||
import { onMounted } from "vue";
|
||||
@@ -74,11 +78,13 @@ var N = {
|
||||
G = ref(!1),
|
||||
K = ref(``),
|
||||
q = 0,
|
||||
// H 为可信总数或 null;未知总数且满页时允许继续探测下一页。
|
||||
J = computed(() =>
|
||||
H.value === null
|
||||
? V.value.length === W.value
|
||||
: U.value * W.value < H.value,
|
||||
);
|
||||
/** 兼容数组/list/logs/log 包装,归一日志字段;请求序号隔离分页、筛选和实例切换。 */
|
||||
async function Y() {
|
||||
let e = ++q;
|
||||
((G.value = !0), (K.value = ``));
|
||||
@@ -97,6 +103,7 @@ var N = {
|
||||
V.value = instance_data_i(
|
||||
Array.isArray(t) ? t : (n.list ?? n.logs ?? n.log),
|
||||
).map(instance_data_o);
|
||||
// 总数至少应覆盖当前页已展示记录,并设合理上限;不可信则退回未知总数模式。
|
||||
let r = Number(n.count ?? n.total);
|
||||
H.value =
|
||||
Number.isFinite(r) &&
|
||||
@@ -113,15 +120,18 @@ var N = {
|
||||
e === q && (G.value = !1);
|
||||
}
|
||||
}
|
||||
// 刷新筛选始终回第一页,避免新条件在旧末页显示为空。
|
||||
function X() {
|
||||
return ((U.value = 1), Y());
|
||||
}
|
||||
// z 是输入值,B 是已提交条件;两者分离使翻页继续使用同一份已确认筛选。
|
||||
function Z() {
|
||||
((B.value = z.value.trim()), X());
|
||||
}
|
||||
function Q() {
|
||||
((z.value = ``), (B.value = ``), X());
|
||||
}
|
||||
// 加载中不叠加翻页;向后还需存在下一页,向前至少停留在第一页。
|
||||
function $(e) {
|
||||
G.value ||
|
||||
(e > 0 && !J.value) ||
|
||||
@@ -138,6 +148,7 @@ var N = {
|
||||
onBeforeUnmount(() => {
|
||||
q++;
|
||||
}),
|
||||
// 错误与空列表分别呈现;日志正文通过文本节点展示,熔断消息仅做业务文案转换。
|
||||
(t, n) => {
|
||||
let r = button,
|
||||
a = inputicon,
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
<script>
|
||||
/**
|
||||
* NAT 建站/端口转发共用面板:kind 决定 web 或 acl 协议,父级提供模块能力配额和实例活动态。
|
||||
* 只管理列表与创建/删除,不产生订单;所有变更仍由后端校验权限及实际配额。
|
||||
*/
|
||||
import "~/assets/styles/MfCloudNat.C1uXa4fX.css";
|
||||
import { toDisplayString } from "vue";
|
||||
import { onMounted } from "vue";
|
||||
@@ -84,6 +88,7 @@ var A = {
|
||||
W = ref(``),
|
||||
G = ref(!1),
|
||||
K = ref(null),
|
||||
// 外部端口 null 表示由后端分配,与显式填写 0 不同;内部端口默认 80。
|
||||
q = reactive({
|
||||
name: ``,
|
||||
domain: ``,
|
||||
@@ -92,6 +97,7 @@ var A = {
|
||||
protocol: 1,
|
||||
}),
|
||||
J = computed(() => (C.kind === `acl` ? `NAT 转发` : `NAT 建站`)),
|
||||
// 功能开关和配额共同决定是否查询/开放操作,不能仅凭列表为空判断可创建。
|
||||
Y = computed(
|
||||
() =>
|
||||
cloud_instance_management_i(C.module) && Number(C.limit) > 0,
|
||||
@@ -99,6 +105,7 @@ var A = {
|
||||
X = computed(() => `/${C.module}/${C.hostId}/nat_${C.kind}`),
|
||||
Z = 0,
|
||||
Q = !1;
|
||||
/** 刷新当前实例当前 kind 的列表;无能力时清空,响应形状异常时保留错误状态。 */
|
||||
async function $() {
|
||||
let e = ++Z,
|
||||
t = X.value;
|
||||
@@ -120,6 +127,7 @@ var A = {
|
||||
!Q && e === Z && (V.value = !1);
|
||||
}
|
||||
}
|
||||
// 只有列表已可靠加载且未用满配额才打开创建表单,避免在加载失败时误判剩余数量。
|
||||
function oe() {
|
||||
!Y.value ||
|
||||
!C.active ||
|
||||
@@ -137,6 +145,7 @@ var A = {
|
||||
(W.value = ``),
|
||||
(G.value = !0));
|
||||
}
|
||||
/** 通过统一 NAT 校验器生成最小请求体,成功后重读列表,不猜测后端分配的端口。 */
|
||||
async function se() {
|
||||
if (
|
||||
Q ||
|
||||
@@ -171,6 +180,7 @@ var A = {
|
||||
!Q && t === X.value && (H.value = !1);
|
||||
}
|
||||
}
|
||||
/** 删除前确认目标仍在当前列表,以 kind 特定的参数名提交,成功后重新取最新配额。 */
|
||||
async function ce() {
|
||||
let e = K.value;
|
||||
if (
|
||||
@@ -217,6 +227,7 @@ var A = {
|
||||
onBeforeUnmount(() => {
|
||||
((Q = !0), Z++);
|
||||
}),
|
||||
// 创建与删除使用独立确认弹窗、共享提交锁;acl 显示协议/名称,web 显示域名。
|
||||
(t, n) => {
|
||||
let r = button,
|
||||
i = message,
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
<script>
|
||||
/**
|
||||
* 云实例自选资源升降级:父级给出当前规格、商品和实例,前端加载可选资源后分别询价/下单。
|
||||
* 成功仅发 pay 事件交给父级支付;本面板不直接修改实例资源,也不自行推算升级费用。
|
||||
*/
|
||||
import "~/assets/styles/ConfigBandwidth.CWSH1WJZ.css";
|
||||
import "~/assets/styles/MfCloudResourceUpgrade.bSwLWjPg.css";
|
||||
import { toDisplayString } from "vue";
|
||||
@@ -95,6 +99,7 @@ var ne = {
|
||||
L = ref(!1),
|
||||
R = ref(!1),
|
||||
z = ref(``),
|
||||
// 表单初始化为实例当前值;K 比较是否真的发生变更,未变更时不创建订单。
|
||||
B = reactive({
|
||||
cpu: Number(k.current.cpu || 0),
|
||||
memory: Number(k.current.memory || 0),
|
||||
@@ -112,6 +117,7 @@ var ne = {
|
||||
([e, t]) => t !== Number(k.current[e] || 0),
|
||||
),
|
||||
);
|
||||
/** CPU/离散内存候选展开并去重;步进候选最多收集 1000 项,避免巨大范围阻塞页面。 */
|
||||
function q(e) {
|
||||
let t = [];
|
||||
for (let n of e || [])
|
||||
@@ -134,6 +140,7 @@ var ne = {
|
||||
}
|
||||
let me = computed(() => q(P.value?.cpu)),
|
||||
he = computed(() => q(P.value?.memory));
|
||||
// 连续内存使用数值控件;全为单选档位时返回 null,改用下方离散按钮。
|
||||
function ge(e) {
|
||||
return !e?.length ||
|
||||
e.every((e) => e.type === `radio` || e.min_value == null)
|
||||
@@ -166,6 +173,7 @@ var ne = {
|
||||
X = computed(() =>
|
||||
(F.value?.flow || []).map((e) => Number(e.value)),
|
||||
);
|
||||
/** 商品订购配置与当前线路并行加载,H 隔离实例/商品切换后的旧配置响应。 */
|
||||
async function Z() {
|
||||
if (k.upgradeAllowed === !1) return;
|
||||
let e = ++H;
|
||||
@@ -187,6 +195,7 @@ var ne = {
|
||||
e === H && (I.value = !1);
|
||||
}
|
||||
}
|
||||
/** 每次询价先清旧价格,保存 host/module/表单快照;不接受无数值报价或过期响应。 */
|
||||
async function Q() {
|
||||
if (k.upgradeAllowed === !1) return;
|
||||
let e = ++U,
|
||||
@@ -215,14 +224,17 @@ var ne = {
|
||||
e === U && (L.value = !1);
|
||||
}
|
||||
}
|
||||
// 普通档位选择后直接询价,下单期间不允许修改表单。
|
||||
function $(e, t) {
|
||||
k.upgradeAllowed === !1 || R.value || ((B[e] = t), Q());
|
||||
}
|
||||
// 带宽控件输入中先作废旧报价,等 change 确认后才询价,避免拖动每一步都发请求。
|
||||
function _e(e) {
|
||||
k.upgradeAllowed === !1 ||
|
||||
R.value ||
|
||||
((B.bw = e), U++, (V.value = null), (W = ``), (L.value = !1));
|
||||
}
|
||||
/** 下单要求实际变更且报价属于当前快照;后端返回合法订单号后交给父级。 */
|
||||
async function ve() {
|
||||
if (
|
||||
k.upgradeAllowed === !1 ||
|
||||
@@ -262,9 +274,11 @@ var ne = {
|
||||
return (
|
||||
onMounted(Z),
|
||||
watch(() => [k.hostId, k.module, k.productId], Z),
|
||||
// 使仍在加载的配置/报价结果失效,不将卸载前的结果应用到后续面板。
|
||||
onBeforeUnmount(() => {
|
||||
(H++, U++);
|
||||
}),
|
||||
// 渲染 CPU、内存及线路对应的带宽/流量配置,统一在末尾展示报价与下单入口。
|
||||
(n, r) => {
|
||||
let a = OperationNotice,
|
||||
o = skeleton,
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
<script>
|
||||
/**
|
||||
* 云实例推荐套餐升降级;与自选资源面板不同,这里提交 recommend_config_id。
|
||||
* 父级控制 upgradeAllowed 并消费 pay 事件;费用和续费差价均来自后端报价,不本地估算。
|
||||
*/
|
||||
import "~/assets/styles/MfCloudUpgrade.N7TNG8F1.css";
|
||||
import { toDisplayString } from "vue";
|
||||
import { renderList } from "vue";
|
||||
@@ -116,6 +120,7 @@ var w = {
|
||||
Y = 0,
|
||||
X = 0,
|
||||
Z = null;
|
||||
/** 刷新可升级套餐同时清空选择和报价,过滤隐藏项及明确禁止升级的套餐。 */
|
||||
async function Q() {
|
||||
if (L.upgradeAllowed === !1) return;
|
||||
let e = ++X;
|
||||
@@ -139,6 +144,7 @@ var w = {
|
||||
e === X && (U.value = !1);
|
||||
}
|
||||
}
|
||||
/** 选套餐后先清旧报价;请求序号 Y 与套餐 id 一起阻止较早的询价覆盖新选择。 */
|
||||
async function ae(e) {
|
||||
if (L.upgradeAllowed === !1 || J.value) return;
|
||||
let t = ++Y;
|
||||
@@ -169,6 +175,7 @@ var w = {
|
||||
t === Y && (q.value = !1);
|
||||
}
|
||||
}
|
||||
/** 只有当前套餐已有对应有效报价才下单,提交锁阻止重复点击;返回订单后交接支付。 */
|
||||
async function oe() {
|
||||
if (
|
||||
L.upgradeAllowed === !1 ||
|
||||
@@ -205,6 +212,7 @@ var w = {
|
||||
J.value = !1;
|
||||
}
|
||||
}
|
||||
// 将套餐已有规格组合为文本,缺失项不编造默认值;GPU 数量缺失按现有约定显示 1。
|
||||
function se(e) {
|
||||
return [
|
||||
e.cpu ? `${e.cpu} 核` : ``,
|
||||
@@ -217,6 +225,7 @@ var w = {
|
||||
e.gpu_name ? `${e.gpu_num ?? 1}× ${e.gpu_name}` : ``,
|
||||
].filter(Boolean);
|
||||
}
|
||||
// 当前规格摘要来自父级实例信息,仅作对照,不作为目标套餐请求体。
|
||||
let $ = computed(() =>
|
||||
[
|
||||
L.current.cpu ? `${L.current.cpu} 核` : ``,
|
||||
@@ -232,9 +241,11 @@ var w = {
|
||||
return (
|
||||
onMounted(Q),
|
||||
watch(() => [L.hostId, L.module], Q),
|
||||
// 作废列表与报价在途序号,避免离开后仍接受这些异步结果。
|
||||
onBeforeUnmount(() => {
|
||||
(Y++, X++);
|
||||
}),
|
||||
// 套餐列表、无可升级提示和取价/下单栏分层展示;提交期间锁定套餐选择。
|
||||
(n, i) => {
|
||||
let a = OperationNotice,
|
||||
s = message,
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
<script>
|
||||
/**
|
||||
* 云实例 VPC 网络创建、分配/切换和删除;父级提供商品、机房、网络类型及实例活动态。
|
||||
* 分配成功发 refresh 让父级重取实例资料;已有 host 的网络不可直接删除。
|
||||
*/
|
||||
import "~/assets/styles/MfCloudVpc.CpOEbuWs.css";
|
||||
import { toDisplayString } from "vue";
|
||||
import { onMounted } from "vue";
|
||||
@@ -76,12 +80,14 @@ var ie = {
|
||||
k = useApi(),
|
||||
A = useId(),
|
||||
j = ref(!1),
|
||||
// 已是 VPC 的实例直接开放面板;经典网络需先通过商品配置确认支持 VPC。
|
||||
M = computed(
|
||||
() =>
|
||||
cloud_instance_management_i(D.module) &&
|
||||
(D.networkType === `vpc` || j.value),
|
||||
),
|
||||
N = computed(() => `/${D.module}/${D.hostId}/vpc_network`),
|
||||
// P 是当前网络列表,F 是允许分配的网络,I 是可选实例,L 是允许的 CIDR 掩码。
|
||||
P = ref([]),
|
||||
F = ref([]),
|
||||
I = ref([]),
|
||||
@@ -100,6 +106,10 @@ var ie = {
|
||||
Y = 0,
|
||||
X = 0,
|
||||
Z = !1;
|
||||
/**
|
||||
* 核对 VPC 能力后分页拉取全部网络,再按商品/机房查询可分配网络。
|
||||
* 商品能力字段未返回时明确报错;确认不支持 VPC 时不继续查询网络列表。
|
||||
*/
|
||||
async function Q() {
|
||||
let e = ++Y,
|
||||
t = N.value;
|
||||
@@ -168,6 +178,7 @@ var ie = {
|
||||
!Z && e === Y && (R.value = !1);
|
||||
}
|
||||
}
|
||||
// 打开新建表单前检查加载状态和活动态;名称/网段不沿用上一次输入。
|
||||
function fe() {
|
||||
!M.value ||
|
||||
z.value ||
|
||||
@@ -176,6 +187,7 @@ var ie = {
|
||||
!D.active ||
|
||||
((U.value = ``), (W.value = ``), (V.value = ``), (H.value = !0));
|
||||
}
|
||||
/** 统一校验 VPC 名称与 CIDR,网段留空交后端分配,创建完成后重读网络列表。 */
|
||||
async function pe() {
|
||||
if (z.value || !H.value || !M.value || !D.active) return;
|
||||
let e;
|
||||
@@ -199,6 +211,10 @@ var ie = {
|
||||
!Z && t === N.value && (z.value = !1);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 先设置分配弹窗目标;转售模块仅提供当前实例,本地 mf_cloud 再完整加载可选实例。
|
||||
* X 独立隔离分配目标列表请求,避免切换目标期间旧结果覆盖新弹窗。
|
||||
*/
|
||||
async function $(e) {
|
||||
if (
|
||||
!M.value ||
|
||||
@@ -258,6 +274,7 @@ var ie = {
|
||||
!Z && t === X && (J.value = !1);
|
||||
}
|
||||
}
|
||||
/** 分配前同时确认实例与网络仍在各自候选集合,成功后通知父级更新实例网络信息。 */
|
||||
async function me() {
|
||||
let e = K.value,
|
||||
t = q.value;
|
||||
@@ -293,6 +310,7 @@ var ie = {
|
||||
!Z && n === N.value && (z.value = !1);
|
||||
}
|
||||
}
|
||||
/** 删除需要网络仍存在且无已分配实例;此处预检查不替代后端并发/权限校验。 */
|
||||
async function he() {
|
||||
let e = G.value;
|
||||
if (
|
||||
@@ -333,9 +351,11 @@ var ie = {
|
||||
},
|
||||
),
|
||||
onMounted(Q),
|
||||
// 销毁后拒绝列表与可分配实例的迟到结果;实例/商品切换也会关闭全部旧弹窗。
|
||||
onBeforeUnmount(() => {
|
||||
((Z = !0), Y++, X++);
|
||||
}),
|
||||
// 主表展示已分配实例;创建、切换和删除各有确认弹窗,网络切换额外提示连接影响。
|
||||
(t, n) => {
|
||||
let r = button,
|
||||
i = message,
|
||||
|
||||
Reference in new issue
Block a user