实例VNIC:附加后自动刷新、IPv6限挂载态与脚注修正

This commit is contained in:
2026-07-16 12:32:20 +08:00
parent 78cc2aab56
commit 6a7757ae2f
+19 -5
View File
@@ -27,9 +27,15 @@ const emit = defineEmits<{ changed: [] }>()
const message = useToast()
const vnics = useAsync(() => listVnics(props.cfgId, props.instanceId, props.region))
/** 附加已受理但 OCI 挂载列表有可见性延迟:限时轮询等新卡入列,入列后交由过渡态轮询接管 */
const expectAtLeast = ref(0)
let expectUntil = 0
useTransientPoll(
() => vnics.data.value,
(list) => !!list?.some((v) => ATTACHMENT_TRANSIENT_STATES.includes(v.lifecycleState)),
(list) =>
!!list?.some((v) => ATTACHMENT_TRANSIENT_STATES.includes(v.lifecycleState)) ||
((list?.length ?? 0) < expectAtLeast.value && Date.now() < expectUntil),
() => void vnics.run({ silent: true }),
)
@@ -44,6 +50,12 @@ function refresh() {
emit('changed')
}
function onAttached() {
expectAtLeast.value = (vnics.data.value ?? []).length + 1
expectUntil = Date.now() + 90_000
refresh()
}
async function doDetach(attachmentId: string) {
detaching.value = attachmentId
try {
@@ -174,7 +186,7 @@ defineExpose({ refresh: () => vnics.run() })
<td colspan="6" class="px-4.5 pt-0 pb-2.5">
<div class="flex flex-wrap items-center gap-1.5">
<span class="text-[10.5px] font-medium tracking-wider text-ink-3">IPV6</span>
<template v-if="v.vnicId">
<template v-if="v.vnicId && v.lifecycleState === 'ATTACHED'">
<span
v-for="addr in v.ipv6Addresses ?? []"
:key="addr"
@@ -204,7 +216,9 @@ defineExpose({ refresh: () => vnics.run() })
+ IPv6
</NButton>
</template>
<span v-else class="text-xs text-ink-3"> · 附加完成后可添加</span>
<span v-else class="text-xs text-ink-3">
{{ v.vnicId ? '网卡未在挂载状态,不可操作 IPv6' : '无 · 附加完成后可添加' }}
</span>
</div>
</td>
</tr>
@@ -221,7 +235,7 @@ defineExpose({ refresh: () => vnics.run() })
<FootNote>
附加须实例运行中且 shape 有空余 VNIC 配额 · 主网卡不可分离 · 每卡 IPv6
可多个要求所在子网已启用 IPv6· 次要网卡在 OS 内需自行配置 IPdhclient / netplan
可多个要求所在子网已启用 IPv6
</FootNote>
<AttachVnicModal
@@ -230,7 +244,7 @@ defineExpose({ refresh: () => vnics.run() })
:instance-id="instanceId"
:region="region"
:attached-count="(vnics.data.value ?? []).length"
@attached="refresh"
@attached="onAttached"
/>
</div>
</template>