Files

3327 lines
178 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<script>
/** 物理实例管理外壳:分区展示概要、监控、访问、IP、防护、域名、账务和日志,按需加载子面板。 */
import "~/assets/styles/ConfigBandwidth.CWSH1WJZ.css";
import "~/assets/styles/DcimUpgrade.DaLApYFa.css";
import "~/assets/styles/DcimReinstallStatus.CuXeXmZ3.css";
import "~/assets/styles/InstanceMonitorSkeleton.C0FT51jJ.css";
import "~/assets/styles/InstanceLoadingShell.CwfiUwdU.css";
import "~/assets/styles/FlowPacketPanel.-RJSx13z.css";
import "~/assets/styles/InstanceServiceInfo.BftSVIeW.css";
import "~/assets/styles/GeetestField.DiieTibK.css";
import "~/assets/styles/CaptchaField.BSN3ZbsD.css";
import "~/assets/styles/InstanceSmsCode.CsITfIEU.css";
import "~/assets/styles/DcimActions.Da2op5wy.css";
import "~/assets/styles/PaymentDialog.BNFKQF1U.css";
import "~/assets/styles/OsIcon.CAi4Iz2S.css";
import "~/assets/styles/DcimManage.BlqFeSOi.css";
import { toDisplayString } from "vue";
import { renderList } from "vue";
import { onMounted } from "vue";
import { onBeforeUnmount } from "vue";
import { mergeModels } from "vue";
import { useModel } from "vue";
import { watch } from "vue";
import { Suspense } from "vue";
import { defineAsyncComponent } from "vue";
import { createBlock } from "vue";
import { ref } from "vue";
import { withCtx } from "vue";
import { createCommentVNode } from "vue";
import { computed } from "vue";
import { isRef } from "vue";
import { createElementBlock } from "vue";
import { Fragment } from "vue";
import { createElementVNode } from "vue";
import { createTextVNode } from "vue";
import { unref } from "vue";
import { defineComponent } from "vue";
import { createVNode } from "vue";
import { openBlock } from "vue";
import { publicAssetsURL } from "#internal/nuxt/paths";
import { NuxtLink } from "#components";
import { loadModule } from "~/utils/load-module.js";
import { useApi } from "~/lib/auth.js";
import dialog from "primevue/dialog";
import button from "primevue/button";
import { t as _plugin_vue_export_helper_t } from "~/lib/_plugin-vue_export-helper.js";
import message from "primevue/message";
import { r as dict_r } from "~/lib/dict.js";
import datatable from "primevue/datatable";
import paginator from "primevue/paginator";
import column from "primevue/column";
import OsIcon from "~/components/OsIcon.vue";
import OperationNotice from "~/components/OperationNotice.vue";
import PaymentDialog from "~/components/PaymentDialog.vue";
import skeleton from "primevue/skeleton";
import { t as os_name_t } from "~/lib/os-name.js";
import { n as configuration_display_n } from "~/lib/configuration-display.js";
import DcimActions from "~/components/instance/DcimActions.vue";
import InstanceServiceInfo from "~/components/instance/InstanceServiceInfo.vue";
import InstanceLoadingShell from "~/components/instance/InstanceLoadingShell.vue";
import InstanceStatusTag from "~/components/instance/InstanceStatusTag.vue";
import InstanceMonitorSkeleton from "~/components/instance/InstanceMonitorSkeleton.vue";
import DcimReinstallStatus from "~/components/instance/DcimReinstallStatus.vue";
import DcimUpgrade from "~/components/instance/DcimUpgrade.vue";
import tabs from "primevue/tabs";
import tabpanels from "primevue/tabpanels";
import tabpanel from "primevue/tabpanel";
import progressbar from "primevue/progressbar";
import tablist from "primevue/tablist";
import tab from "primevue/tab";
function Ee(e, t) {
// 主信息、远程信息、流量和电源状态独立加载/报错;任一附属接口失败不抹掉其他成功结果。
let n = useApi(),
i = ref(null),
a = ref(null),
s = ref(null),
c = ref(``),
l = ref(``),
d = ref(!1),
f = ref(``),
m = ref(``),
h = ref(``),
g = ref(``),
_ = ref(!1),
v = ref(!1),
y = ref(!1),
b = 0,
x = 0,
S = !1;
function C() {
(b++,
x++,
(i.value = null),
(a.value = null),
(s.value = null),
(c.value = ``),
(l.value = ``),
(f.value = m.value = h.value = g.value = ``),
(d.value = !1),
(_.value = v.value = y.value = !1));
}
async function ee() {
// 电源查询独立序号 + 主刷新代次双重校验,防止较慢的旧状态覆盖手动刷新结果。
let r = t.value;
if (!r || !e || S) return;
let i = ++x,
a = b,
o = () => !S && i === x && a === b && t.value === r;
y.value = !0;
try {
let t = await n.get(`/${r}/${e}/status`, void 0, !1, {
timeoutMs: 12e3,
});
if (!o()) return;
((c.value = typeof t?.status == `string` ? t.status : ``),
(l.value = t?.desc || ``),
(g.value = c.value ? `` : `电源状态暂不可用`));
} catch (e) {
o() && ((c.value = ``), (g.value = E(e, `电源状态加载失败`)));
} finally {
o() && (y.value = !1);
}
}
async function w() {
// 并行发起互不依赖的详情读取,响应必须仍属于当前模块及本轮刷新。
let r = t.value;
if (!r || !e || S) {
C();
return;
}
let o = ++b;
f.value = m.value = h.value = g.value = ``;
let l = () => !S && o === b && t.value === r;
d.value = !0;
let u = `/${r}/${e}`,
p = n.get(u);
async function y(e, t, r, i, a) {
t.value = !0;
try {
let t = await n.get(e);
l() && a(t);
} catch (e) {
l() && (r.value = E(e, i));
} finally {
l() && (t.value = !1);
}
}
(y(`${u}/remote_info`, _, m, `远程访问信息加载失败`, (e) => {
a.value = e;
}),
y(`${u}/flow`, v, h, `流量信息加载失败`, (e) => {
s.value = e;
}),
ee());
try {
let e = await p;
if (!l()) return;
if (!e || typeof e != `object` || Array.isArray(e))
throw Error(`物理实例信息格式无效`);
((i.value = e), (c.value ||= e.power_status || ``));
} catch (e) {
l() && (f.value = E(e, `物理实例信息加载失败`));
} finally {
l() && (d.value = !1);
}
}
function E(e, t) {
return e instanceof Error ? e.message : t;
}
return (
watch(t, C, {
flush: `sync`,
}),
onBeforeUnmount(() => {
((S = !0), C());
}),
{
info: i,
remote: a,
flow: s,
powerStatus: c,
powerDescription: l,
loading: d,
error: f,
remoteError: m,
flowError: h,
statusError: g,
remoteLoading: _,
flowLoading: v,
statusLoading: y,
canControl: computed(
() =>
!d.value &&
!f.value &&
!!i.value &&
(Number(i.value.config?.manual_resource) !== 1 ||
(!!i.value.config?.manual_resource_control_mode &&
i.value.config.manual_resource_control_mode !== `not_support`)),
),
region: computed(() =>
[
i.value?.data_center?.country,
i.value?.data_center?.city,
i.value?.data_center?.area,
i.value?.line?.name,
]
.filter(Boolean)
.join(` · `),
),
load: w,
loadStatus: ee,
}
);
}
var De = publicAssetsURL(`/images/reference/firewall.png`),
Oe = defineAsyncComponent(() =>
loadModule(
() =>
import("~/components/instance/DcimMonitor.vue").then(
(e) => e.default || e,
),
[],
import.meta.url,
),
),
ke = defineAsyncComponent(() =>
loadModule(
() =>
import("~/components/instance/DcimDefence.vue").then(
(e) => e.default || e,
),
[],
import.meta.url,
),
),
Ae = defineAsyncComponent(() =>
loadModule(
() =>
import("~/components/instance/DcimDomains.vue").then(
(e) => e.default || e,
),
[],
import.meta.url,
),
),
je = defineAsyncComponent(() =>
loadModule(
() =>
import("~/components/instance/DcimBilling.vue").then(
(e) => e.default || e,
),
[],
import.meta.url,
),
),
Me = defineAsyncComponent(() =>
loadModule(
() =>
import("~/components/mfcloud/MfCloudLogs.vue").then(
(e) => e.default || e,
),
[],
import.meta.url,
),
),
Ne = {
class: `dcim-manage`,
},
Pe = {
key: 3,
class: `load-failure`,
},
Fe = {
key: 0,
class: `overview`,
},
Ie = {
class: `stack`,
},
Le = {
class: `card flow-card`,
},
Re = {
key: 0,
class: `inline-error`,
},
ze = {
class: `flow-used`,
},
Be = {
class: `compact-rows`,
},
Ve = {
key: 2,
class: `muted`,
role: `status`,
},
He = {
key: 3,
class: `muted`,
},
Ue = {
class: `card`,
},
We = {
class: `resource-list`,
},
Ge = {
key: 0,
},
Ke = {
key: 0,
},
qe = {
class: `stack`,
},
Je = {
class: `card`,
},
Ye = {
class: `os`,
},
Xe = {
class: `compact-rows`,
},
Ze = {
class: `mono`,
},
Qe = {
class: `mono`,
},
$e = {
key: 0,
class: `muted`,
},
et = {
class: `quick-actions access-quick`,
},
tt = {
class: `card protection-card`,
},
nt = {
class: `protection-body`,
},
rt = {
class: `card`,
},
it = {
class: `help-links`,
},
at = {
class: `stack`,
},
ot = {
class: `card`,
},
st = {
class: `compact-rows`,
},
ct = {
class: `card network-card`,
},
lt = {
class: `compact-rows`,
},
ut = {
key: 0,
},
dt = {
class: `mono`,
},
ft = {
class: `compact-monitor-slot`,
},
pt = {
key: 0,
class: `detail-content access-detail`,
},
mt = {
class: `rows`,
},
ht = {
class: `mono`,
},
gt = {
key: 0,
},
_t = {
class: `stacked-value`,
},
vt = {
class: `password-line`,
},
yt = {
class: `rows`,
},
bt = {
class: `stacked-value`,
},
xt = {
class: `inline-actions`,
},
St = {
class: `rows`,
},
Ct = {
class: `stacked-value`,
},
wt = {
class: `stacked-value`,
},
Tt = {
key: 0,
class: `detail-content`,
},
Et = {
class: `muted`,
},
Dt = {
class: `rows`,
},
Ot = {
key: 0,
},
kt = {
class: `stacked-value`,
},
At = {
class: `ip-table-cell`,
},
jt = {
class: `empty`,
},
Mt = {
key: 1,
class: `rows`,
},
Nt = {
class: `stacked-value`,
},
Pt = {
class: `flow-used`,
},
Ft = {
key: 0,
class: `detail-content`,
},
It = {
key: 0,
class: `detail-content`,
},
Lt = {
class: `detail-content`,
},
O = Object.assign(
_plugin_vue_export_helper_t(
defineComponent({
__name: `DcimManage`,
props: mergeModels(
{
hostId: {},
productId: {},
host: {},
module: {},
productState: {},
},
{
tab: {
default: `overview`,
},
tabModifiers: {},
},
),
emits: mergeModels(
[`refresh`, `renew`, `presentation`],
[`update:tab`],
),
setup(i, { expose: c, emit: b }) {
let C = i,
w = b,
D = useApi(),
O = useModel(i, `tab`),
Rt = computed(() => C.module),
k = Ee(C.hostId, Rt),
{
info: A,
remote: j,
flow: M,
loading: zt,
error: N,
remoteError: P,
flowError: F,
statusError: Bt,
flowLoading: Vt,
remoteLoading: Ht,
canControl: I,
powerStatus: L,
powerDescription: R,
} = k,
Ut = ref(null),
Wt = ref(0);
function Gt() {
(Wt.value++, k.load());
}
let z = ref(!1),
B = ref(!1),
Kt = ref(null),
qt = ref(``),
Jt = computed(() => A.value ?? {}),
Yt = ref(null);
function Xt(e) {
((z.value = !1),
(Kt.value = e.order_id),
(qt.value = e.amount),
(B.value = !0));
}
function Zt() {
(Gt(), $(), w(`refresh`));
}
let Qt = [
{
value: `overview`,
label: `概要`,
},
{
value: `monitor`,
label: `监控`,
},
{
value: `access`,
label: `访问控制`,
},
{
value: `network`,
label: `网络与安全`,
},
{
value: `ddos`,
label: `DDoS防护`,
},
{
value: `domains`,
label: `域名白名单`,
},
{
value: `billing`,
label: `计费`,
},
{
value: `log`,
label: `日志`,
},
],
V = computed(() => C.host.status === `Active`),
$t = computed(() => j.value?.username || A.value?.username || `—`),
H = computed(() => j.value?.password || A.value?.password || ``),
en = computed(() => {
let e = A.value?.image?.icon || ``,
t = [
`AlmaLinux`,
`ArchLinux`,
`CentOS`,
`Debian`,
`ESXi`,
`Fedora`,
`FreeBSD`,
`Linux`,
`OpenEuler`,
`RedHat`,
`Rocky`,
`TencentOS-Server`,
`Ubuntu`,
`Windows`,
`XenServer`,
].find((t) => t.toLowerCase() === e.toLowerCase());
return t
? `/plugins/server/mf_cloud/view/assets/default_icons/${t}.svg`
: void 0;
}),
U = ref(!1),
tn = ref(``),
nn = ref(``),
W = computed(
() =>
M.value?.total_num != null && Number(M.value.total_num) === 0,
),
rn = computed(() => {
let e = M.value?.total_num,
t = M.value?.used_num;
return e != null && t != null && Number(e) > 0
? Math.min(100, Math.max(0, (Number(t) / Number(e)) * 100))
: 0;
}),
an = computed(
() =>
A.value?.bw_show ||
(A.value?.bw == null ? `—` : `${A.value.bw} Mbps`),
),
on = computed(() =>
A.value?.peak_defence == null
? `未提供`
: `${A.value.peak_defence} Gbps`,
),
G = computed(() =>
configuration_display_n(C.module, A.value, C.host),
);
computed(
() =>
R.value ||
{
on: `运行中`,
off: `已关机`,
operating: `操作中`,
fault: `故障`,
}[L.value] ||
`状态未知`,
);
function K(e) {
V.value && I.value && Ut.value?.request(e);
}
async function sn(e, t) {
if (e && e !== `—`)
try {
(await navigator.clipboard.writeText(e),
(tn.value = t),
(nn.value = ``));
} catch {
nn.value = `复制失败,请手动选择并复制内容`;
}
}
let cn = ref([]),
q = ref(!1),
J = ref(!1),
Y = ref(``),
X = ref(0),
ln = ref(0),
Z = 0,
Q = !1;
async function $() {
// IP 分页从界面零基索引换成接口一基页码,切换实例后旧页结果作废。
let e = ++Z,
t = C.hostId,
n = C.module;
((q.value = !0), (Y.value = ``));
try {
let r = await D.get(`/${n}/${t}/ip`, {
page: X.value + 1,
limit: 10,
});
if (Q || e !== Z || t !== C.hostId || n !== C.module) return;
((cn.value = r.list || []),
(ln.value = Number(r.count || 0)),
(J.value = !0));
} catch (t) {
!Q &&
e === Z &&
(Y.value = t instanceof Error ? t.message : `IP 列表加载失败`);
} finally {
!Q && e === Z && (q.value = !1);
}
}
return (
watch(
O,
(e) => {
if (!Qt.some((t) => t.value === e)) {
O.value = `overview`;
return;
}
V.value && e === `network` && !J.value && $();
},
{
immediate: !0,
},
),
watch([() => C.hostId, () => C.module], () => {
(Z++,
(cn.value = []),
(J.value = !1),
(U.value = !1),
(X.value = 0));
}),
watch(
[A, L, Bt, I],
// 汇总给父级标题区的数据不暴露原始供应商字段;电源状态失败时明确给空值。
() =>
w(`presentation`, {
region: G.value.region,
spec: [
A.value?.model_config?.cpu,
A.value?.model_config?.memory,
]
.filter(Boolean)
.join(` | `),
ip: A.value?.ip || ``,
power: Bt.value ? `` : L.value,
control: I.value,
}),
{
immediate: !0,
},
),
onMounted(k.load),
watch(() => C.host, k.load),
onBeforeUnmount(() => {
((Q = !0), Z++);
}),
c({
requestAction: K,
refreshStatus: () => {
if (!k.statusLoading.value) return k.loadStatus();
},
}),
(n, r) => {
let a = button,
o = message,
c = InstanceServiceInfo,
u = InstanceLoadingShell,
p = tab,
b = tablist,
C = progressbar,
T = OsIcon,
D = NuxtLink,
fe = InstanceStatusTag,
Ee = Oe,
Rt = skeleton,
R = tabpanel,
J = InstanceMonitorSkeleton,
Z = DcimReinstallStatus,
Q = column,
un = datatable,
dn = paginator,
fn = ke,
pn = Ae,
mn = je,
hn = Me,
gn = tabpanels,
_n = tabs,
vn = DcimUpgrade,
yn = dialog,
bn = PaymentDialog,
xn = OperationNotice,
Sn = DcimActions;
return (
openBlock(),
createElementBlock(`div`, Ne, [
unref(N) && unref(A)
? (openBlock(),
createBlock(
o,
{
key: 0,
severity: `error`,
closable: !1,
},
{
default: withCtx(() => [
createTextVNode(toDisplayString(unref(N)), 1),
createVNode(
a,
{
label: `重试`,
text: ``,
size: `small`,
loading: unref(zt),
onClick: unref(k).load,
},
null,
8,
[`loading`, `onClick`],
),
]),
_: 1,
},
))
: createCommentVNode(``, !0),
!unref(V) || (!unref(A) && unref(N))
? (openBlock(),
createBlock(
c,
{
key: 1,
host: i.host,
module: i.module,
info: unref(A),
onPay: (r[0] ||= (e) => {
((Kt.value = e.order_id),
(qt.value = e.amount),
(B.value = !0));
}),
},
null,
8,
[`host`, `module`, `info`],
))
: !unref(A) && !unref(N)
? (openBlock(),
createBlock(u, {
key: 2,
dcim: ``,
}))
: createCommentVNode(``, !0),
unref(N) && !unref(A) && unref(V)
? (openBlock(),
createElementBlock(`div`, Pe, [
createVNode(
o,
{
severity: `error`,
closable: !1,
},
{
default: withCtx(() => [
createTextVNode(toDisplayString(unref(N)), 1),
]),
_: 1,
},
),
createVNode(
a,
{
label: `重试`,
icon: `pi pi-refresh`,
text: ``,
onClick: unref(k).load,
},
null,
8,
[`onClick`],
),
]))
: createCommentVNode(``, !0),
unref(V) && unref(A)
? (openBlock(),
createBlock(
_n,
{
key: 4,
value: O.value,
"onUpdate:value": (r[23] ||= (e) => (O.value = e)),
lazy: ``,
},
{
default: withCtx(() => [
createVNode(b, null, {
default: withCtx(() => [
(openBlock(),
createElementBlock(
Fragment,
null,
renderList(Qt, (t) =>
createVNode(
p,
{
key: t.value,
value: t.value,
},
{
default: withCtx(() => [
createTextVNode(
toDisplayString(t.label),
1,
),
]),
_: 2,
},
1032,
[`value`],
),
),
64,
)),
]),
_: 1,
}),
createVNode(gn, null, {
default: withCtx(() => [
!unref(V) && O.value !== `billing`
? (openBlock(),
createBlock(
o,
{
key: 0,
severity: `info`,
closable: !1,
},
{
default: withCtx(() => [
...(r[26] ||= [
createTextVNode(
`实例尚未开通或当前不可用,管理信息将在服务恢复后显示。`,
-1,
),
]),
]),
_: 1,
},
))
: createCommentVNode(``, !0),
createVNode(
R,
{
value: `overview`,
},
{
default: withCtx(() => [
unref(V) && unref(A)
? (openBlock(),
createElementBlock(`div`, Fe, [
createElementVNode(`div`, Ie, [
createElementVNode(
`section`,
Le,
[
createElementVNode(
`h3`,
null,
[
createElementVNode(
`button`,
{
class: `card-title`,
onClick: (r[1] ||= (
e,
) =>
(O.value = `network`)),
},
[
...(r[27] ||= [
createTextVNode(
`流量`,
-1,
),
createElementVNode(
`i`,
{
class: `pi pi-angle-right`,
"aria-hidden": `true`,
},
null,
-1,
),
]),
],
),
],
),
unref(F)
? (openBlock(),
createElementBlock(
`div`,
Re,
[
createElementVNode(
`span`,
null,
toDisplayString(
unref(F),
),
1,
),
createVNode(
a,
{
label: `重试`,
text: ``,
size: `small`,
onClick:
unref(k).load,
},
null,
8,
[`onClick`],
),
],
))
: unref(M)
? (openBlock(),
createElementBlock(
Fragment,
{
key: 1,
},
[
createVNode(
C,
{
value:
unref(rn),
"show-value":
!1,
},
null,
8,
[`value`],
),
createElementVNode(
`p`,
ze,
[
(r[28] ||=
createElementVNode(
`i`,
{
class: `pi pi-arrow-right-arrow-left`,
"aria-hidden": `true`,
},
null,
-1,
)),
createTextVNode(
`已用流量 ` +
toDisplayString(
unref(M)
.used ||
`—`,
),
1,
),
!unref(W) &&
unref(M)
.total_num
? (openBlock(),
createElementBlock(
Fragment,
{
key: 0,
},
[
createTextVNode(
`(` +
toDisplayString(
Math.round(
unref(
rn,
),
),
) +
`%)`,
1,
),
],
64,
))
: createCommentVNode(
``,
!0,
),
],
),
createElementVNode(
`dl`,
Be,
[
createElementVNode(
`div`,
null,
[
(r[29] ||=
createElementVNode(
`dt`,
null,
`总流量`,
-1,
)),
createElementVNode(
`dd`,
null,
toDisplayString(
unref(W)
? `不限`
: unref(
M,
)
.total ||
`—`,
),
1,
),
],
),
createElementVNode(
`div`,
null,
[
(r[30] ||=
createElementVNode(
`dt`,
null,
`剩余流量`,
-1,
)),
createElementVNode(
`dd`,
null,
toDisplayString(
unref(W)
? `不限`
: unref(
M,
)
.leave ||
`—`,
),
1,
),
],
),
createElementVNode(
`div`,
null,
[
(r[31] ||=
createElementVNode(
`dt`,
null,
`重置时间`,
-1,
)),
createElementVNode(
`dd`,
null,
toDisplayString(
unref(M)
.reset_flow_date ||
`—`,
),
1,
),
],
),
(r[32] ||=
createElementVNode(
`div`,
null,
[
createElementVNode(
`dt`,
null,
`流量自动购买`,
),
createElementVNode(
`dd`,
{
class: `muted`,
},
`暂不支持`,
),
],
-1,
)),
],
),
createVNode(a, {
label: `查看流量详情`,
icon: `pi pi-angle-right`,
outlined: ``,
class: `card-bottom`,
onClick: (r[2] ||=
(e) =>
(O.value = `network`)),
}),
],
64,
))
: unref(Vt)
? (openBlock(),
createElementBlock(
`p`,
Ve,
`正在加载流量信息…`,
))
: (openBlock(),
createElementBlock(
`p`,
He,
`暂无流量信息`,
)),
],
),
createElementVNode(
`section`,
Ue,
[
(r[37] ||= createElementVNode(
`h3`,
null,
`资源`,
-1,
)),
createElementVNode(`dl`, We, [
createElementVNode(
`div`,
null,
[
(r[33] ||=
createElementVNode(
`dt`,
null,
[
createElementVNode(
`i`,
{
class: `pi pi-microchip`,
},
),
createTextVNode(
`CPU`,
),
],
-1,
)),
createElementVNode(
`dd`,
null,
[
createTextVNode(
toDisplayString(
unref(A)
.model_config
?.cpu || `—`,
),
1,
),
unref(A)
.model_config
?.cpu_param
? (openBlock(),
createElementBlock(
`small`,
Ge,
toDisplayString(
unref(A)
.model_config
.cpu_param,
),
1,
))
: createCommentVNode(
``,
!0,
),
],
),
],
),
createElementVNode(
`div`,
null,
[
(r[34] ||=
createElementVNode(
`dt`,
null,
[
createElementVNode(
`i`,
{
class: `pi pi-server`,
},
),
createTextVNode(
`RAM`,
),
],
-1,
)),
createElementVNode(
`dd`,
null,
toDisplayString(
unref(A)
.model_config
?.memory || `—`,
),
1,
),
],
),
createElementVNode(
`div`,
null,
[
(r[35] ||=
createElementVNode(
`dt`,
null,
[
createElementVNode(
`i`,
{
class: `pi pi-database`,
},
),
createTextVNode(
`硬盘`,
),
],
-1,
)),
createElementVNode(
`dd`,
null,
toDisplayString(
unref(A)
.model_config
?.disk || `—`,
),
1,
),
],
),
unref(A).model_config?.gpu
? (openBlock(),
createElementBlock(
`div`,
Ke,
[
(r[36] ||=
createElementVNode(
`dt`,
null,
[
createElementVNode(
`i`,
{
class: `pi pi-desktop`,
},
),
createTextVNode(
`显卡`,
),
],
-1,
)),
createElementVNode(
`dd`,
null,
toDisplayString(
unref(A)
.model_config
.gpu,
),
1,
),
],
))
: createCommentVNode(
``,
!0,
),
]),
],
),
]),
createElementVNode(`div`, qe, [
createElementVNode(
`section`,
Je,
[
createElementVNode(
`h3`,
null,
[
createElementVNode(
`button`,
{
class: `card-title`,
onClick: (r[3] ||= (
e,
) =>
(O.value = `access`)),
},
[
...(r[38] ||= [
createTextVNode(
`访问`,
-1,
),
createElementVNode(
`i`,
{
class: `pi pi-angle-right`,
"aria-hidden": `true`,
},
null,
-1,
),
]),
],
),
],
),
createElementVNode(
`div`,
Ye,
[
createVNode(
T,
{
url: unref(en),
name:
unref(A).image
?.icon ||
unref(A).image
?.name,
size: 56,
},
null,
8,
[`url`, `name`],
),
createElementVNode(
`strong`,
null,
toDisplayString(
unref(os_name_t)(
unref(A).image
?.name,
) || `操作系统未提供`,
),
1,
),
],
),
createElementVNode(`dl`, Xe, [
createElementVNode(
`div`,
null,
[
(r[39] ||=
createElementVNode(
`dt`,
null,
`IP 地址`,
-1,
)),
createElementVNode(
`dd`,
null,
[
createElementVNode(
`span`,
Ze,
toDisplayString(
unref(A).ip ||
`—`,
),
1,
),
unref(A).ip
? (openBlock(),
createBlock(
a,
{
key: 0,
icon:
unref(
tn,
) === `ip`
? `pi pi-check`
: `pi pi-copy`,
"aria-label": `复制 IP 地址`,
text: ``,
size: `small`,
onClick:
(r[4] ||=
(e) =>
sn(
unref(
A,
)
.ip,
`ip`,
)),
},
null,
8,
[`icon`],
))
: createCommentVNode(
``,
!0,
),
],
),
],
),
createElementVNode(
`div`,
null,
[
(r[40] ||=
createElementVNode(
`dt`,
null,
`用户名`,
-1,
)),
createElementVNode(
`dd`,
null,
toDisplayString(
unref($t),
),
1,
),
],
),
createElementVNode(
`div`,
null,
[
(r[41] ||=
createElementVNode(
`dt`,
null,
`密码`,
-1,
)),
createElementVNode(
`dd`,
null,
[
createElementVNode(
`span`,
Qe,
toDisplayString(
unref(H)
? unref(U)
? unref(H)
: `••••••••••`
: `未提供`,
),
1,
),
unref(H)
? (openBlock(),
createBlock(
a,
{
key: 0,
icon: unref(
U,
)
? `pi pi-eye-slash`
: `pi pi-eye`,
"aria-label":
unref(U)
? `隐藏实例密码`
: `显示实例密码`,
text: ``,
size: `small`,
onClick:
(r[5] ||=
(e) =>
(U.value =
!unref(
U,
))),
},
null,
8,
[
`icon`,
`aria-label`,
],
))
: createCommentVNode(
``,
!0,
),
],
),
],
),
]),
unref(P)
? (openBlock(),
createElementBlock(
`p`,
$e,
toDisplayString(
unref(P),
),
1,
))
: createCommentVNode(
``,
!0,
),
createElementVNode(
`div`,
et,
[
createVNode(
a,
{
label: unref(j)
?.rescue
? `退出救援`
: `救援模式`,
icon: `pi pi-wrench`,
outlined: ``,
size: `small`,
disabled:
!unref(I) ||
unref(Ht) ||
!unref(j),
onClick: (r[6] ||= (
e,
) =>
K(
unref(j)?.rescue
? `rescue/exit`
: `rescue`,
)),
},
null,
8,
[`label`, `disabled`],
),
createVNode(
a,
{
label: `重装系统`,
icon: `pi pi-wrench`,
size: `small`,
disabled: !unref(I),
onClick: (r[7] ||= (
e,
) => K(`reinstall`)),
},
null,
8,
[`disabled`],
),
],
),
],
),
createElementVNode(
`section`,
tt,
[
(r[44] ||= createElementVNode(
`h3`,
null,
`DDoS 防护`,
-1,
)),
createElementVNode(
`div`,
nt,
[
(r[42] ||=
createElementVNode(
`img`,
{
src: De,
alt: ``,
width: `112`,
height: `112`,
},
null,
-1,
)),
createElementVNode(
`strong`,
null,
`防御峰值 ` +
toDisplayString(
unref(on),
),
1,
),
(r[43] ||=
createElementVNode(
`p`,
null,
`实际防护状态以平台信息为准`,
-1,
)),
createVNode(a, {
label: `查看防护信息`,
text: ``,
size: `small`,
onClick: (r[8] ||= (
e,
) =>
(O.value = `ddos`)),
}),
],
),
],
),
createElementVNode(
`section`,
rt,
[
(r[47] ||= createElementVNode(
`h3`,
null,
`需要帮助?`,
-1,
)),
(r[48] ||= createElementVNode(
`p`,
{
class: `muted`,
},
`查看使用文档,或提交工单联系支持。`,
-1,
)),
createElementVNode(
`div`,
it,
[
createVNode(
D,
{
to: `/help`,
},
{
default: withCtx(
() => [
...(r[45] ||= [
createTextVNode(
`帮助中心 `,
-1,
),
createElementVNode(
`i`,
{
class: `pi pi-angle-right`,
},
null,
-1,
),
]),
],
),
_: 1,
},
),
createVNode(
D,
{
to: `/tickets/create`,
},
{
default: withCtx(
() => [
...(r[46] ||= [
createTextVNode(
`提交工单 `,
-1,
),
createElementVNode(
`i`,
{
class: `pi pi-angle-right`,
},
null,
-1,
),
]),
],
),
_: 1,
},
),
],
),
],
),
]),
createElementVNode(`div`, at, [
createElementVNode(
`section`,
ot,
[
createElementVNode(
`h3`,
null,
[
createElementVNode(
`button`,
{
class: `card-title`,
onClick: (r[9] ||= (
e,
) =>
(O.value = `billing`)),
},
[
...(r[49] ||= [
createTextVNode(
`计费`,
-1,
),
createElementVNode(
`i`,
{
class: `pi pi-angle-right`,
"aria-hidden": `true`,
},
null,
-1,
),
]),
],
),
],
),
createElementVNode(`dl`, st, [
createElementVNode(
`div`,
null,
[
(r[50] ||=
createElementVNode(
`dt`,
null,
`计费方式`,
-1,
)),
createElementVNode(
`dd`,
null,
toDisplayString(
i.host
.billing_cycle_name ||
i.host
.billing_cycle ||
`—`,
),
1,
),
],
),
createElementVNode(
`div`,
null,
[
(r[51] ||=
createElementVNode(
`dt`,
null,
`产品状态`,
-1,
)),
createElementVNode(
`dd`,
null,
[
createVNode(
fe,
{
state:
i.productState,
power: unref(Bt)
? ``
: unref(L),
lifecycle:
i.host.status,
},
null,
8,
[
`state`,
`power`,
`lifecycle`,
],
),
],
),
],
),
createElementVNode(
`div`,
null,
[
(r[52] ||=
createElementVNode(
`dt`,
null,
`续费金额`,
-1,
)),
createElementVNode(
`dd`,
null,
[
createElementVNode(
`strong`,
null,
`¥` +
toDisplayString(
i.host
.renew_amount,
),
1,
),
],
),
],
),
createElementVNode(
`div`,
null,
[
(r[53] ||=
createElementVNode(
`dt`,
null,
`到期时间`,
-1,
)),
createElementVNode(
`dd`,
null,
toDisplayString(
(`formatTime` in n
? n.formatTime
: unref(dict_r))(
i.host.due_time,
),
),
1,
),
],
),
]),
createVNode(
a,
{
label: `续费`,
icon: `pi pi-wallet`,
class: `card-bottom`,
disabled:
!!i.host
.renew_forbidden,
onClick: (r[10] ||= (e) =>
w(`renew`)),
},
null,
8,
[`disabled`],
),
],
),
createElementVNode(
`section`,
ct,
[
createElementVNode(
`h3`,
null,
[
createElementVNode(
`button`,
{
class: `card-title`,
onClick: (r[11] ||= (
e,
) =>
(O.value = `network`)),
},
[
...(r[54] ||= [
createTextVNode(
`网络`,
-1,
),
createElementVNode(
`i`,
{
class: `pi pi-angle-right`,
"aria-hidden": `true`,
},
null,
-1,
),
]),
],
),
],
),
createElementVNode(`dl`, lt, [
createElementVNode(
`div`,
null,
[
(r[55] ||=
createElementVNode(
`dt`,
null,
`区域`,
-1,
)),
createElementVNode(
`dd`,
null,
toDisplayString(
unref(G).region ||
`—`,
),
1,
),
],
),
createElementVNode(
`div`,
null,
[
(r[56] ||=
createElementVNode(
`dt`,
null,
`线路`,
-1,
)),
createElementVNode(
`dd`,
null,
toDisplayString(
unref(G).line ||
`—`,
),
1,
),
],
),
unref(G).networkType
? (openBlock(),
createElementBlock(
`div`,
ut,
[
(r[57] ||=
createElementVNode(
`dt`,
null,
`网络类型`,
-1,
)),
createElementVNode(
`dd`,
null,
toDisplayString(
unref(G)
.networkType,
),
1,
),
],
))
: createCommentVNode(
``,
!0,
),
createElementVNode(
`div`,
null,
[
(r[58] ||=
createElementVNode(
`dt`,
null,
`带宽上限`,
-1,
)),
createElementVNode(
`dd`,
null,
toDisplayString(
unref(an),
),
1,
),
],
),
createElementVNode(
`div`,
null,
[
(r[59] ||=
createElementVNode(
`dt`,
null,
`防御峰值`,
-1,
)),
createElementVNode(
`dd`,
null,
toDisplayString(
unref(on),
),
1,
),
],
),
createElementVNode(
`div`,
null,
[
(r[60] ||=
createElementVNode(
`dt`,
null,
`IPv4 地址`,
-1,
)),
createElementVNode(
`dd`,
dt,
toDisplayString(
unref(A).ip || `—`,
),
1,
),
],
),
]),
createElementVNode(
`div`,
ft,
[
(openBlock(),
createBlock(
Suspense,
null,
{
fallback: withCtx(
() => [
createVNode(Rt, {
height: `154px`,
}),
],
),
default: withCtx(
() => [
createVNode(
Ee,
{
"host-id":
i.hostId,
module:
i.module,
compact: ``,
},
null,
8,
[
`host-id`,
`module`,
],
),
],
),
_: 1,
},
)),
],
),
createVNode(a, {
label: `网络管理`,
icon: `pi pi-angle-right`,
outlined: ``,
class: `card-bottom`,
onClick: (r[12] ||= (e) =>
(O.value = `network`)),
}),
],
),
]),
]))
: createCommentVNode(``, !0),
]),
_: 1,
},
),
createVNode(
R,
{
value: `monitor`,
},
{
default: withCtx(() => [
unref(V)
? (openBlock(),
createBlock(
Suspense,
{
key: 0,
},
{
fallback: withCtx(() => [
createVNode(J, {
dcim: ``,
}),
]),
default: withCtx(() => [
createVNode(
Ee,
{
"host-id": i.hostId,
module: i.module,
},
null,
8,
[`host-id`, `module`],
),
]),
_: 1,
},
))
: createCommentVNode(``, !0),
]),
_: 1,
},
),
createVNode(
R,
{
value: `access`,
},
{
default: withCtx(() => [
unref(V) && unref(A)
? (openBlock(),
createElementBlock(`div`, pt, [
unref(I)
? createCommentVNode(``, !0)
: (openBlock(),
createBlock(
o,
{
key: 0,
severity: `info`,
closable: !1,
},
{
default: withCtx(() => [
...(r[61] ||= [
createTextVNode(
`此实例为手动资源,未配置远程控制能力。请联系支持处理电源与系统操作。`,
-1,
),
]),
]),
_: 1,
},
)),
unref(P)
? (openBlock(),
createBlock(
o,
{
key: 1,
severity: `warn`,
closable: !1,
},
{
default: withCtx(() => [
createTextVNode(
toDisplayString(
unref(P),
),
1,
),
]),
_: 1,
},
))
: createCommentVNode(``, !0),
unref(I)
? (openBlock(),
createBlock(
Z,
{
key: 2,
"host-id": i.hostId,
module: i.module,
"refresh-version":
unref(Wt),
},
null,
8,
[
`host-id`,
`module`,
`refresh-version`,
],
))
: createCommentVNode(``, !0),
(r[72] ||= createElementVNode(
`h3`,
null,
`访问信息`,
-1,
)),
(r[73] ||= createElementVNode(
`p`,
{
class: `muted`,
},
`访问信息可以帮助您访问您的服务器。`,
-1,
)),
createElementVNode(`dl`, mt, [
createElementVNode(`div`, null, [
(r[62] ||= createElementVNode(
`dt`,
null,
`主 IP 地址`,
-1,
)),
createElementVNode(
`dd`,
ht,
toDisplayString(
unref(A).ip || `—`,
),
1,
),
]),
createElementVNode(`div`, null, [
(r[63] ||= createElementVNode(
`dt`,
null,
`操作系统`,
-1,
)),
createElementVNode(`dd`, null, [
createVNode(
T,
{
url: unref(en),
name: unref(A).image
?.icon,
size: 28,
},
null,
8,
[`url`, `name`],
),
createTextVNode(
toDisplayString(
unref(os_name_t)(
unref(A).image?.name,
) || `—`,
),
1,
),
]),
]),
createElementVNode(`div`, null, [
(r[64] ||= createElementVNode(
`dt`,
null,
`用户名`,
-1,
)),
createElementVNode(`dd`, null, [
createTextVNode(
toDisplayString(unref($t)),
1,
),
unref(j)?.port
? (openBlock(),
createElementBlock(
`small`,
gt,
` · 连接端口 ` +
toDisplayString(
unref(j).port,
),
1,
))
: createCommentVNode(
``,
!0,
),
]),
]),
createElementVNode(`div`, null, [
(r[65] ||= createElementVNode(
`dt`,
null,
`密码`,
-1,
)),
createElementVNode(`dd`, _t, [
createElementVNode(
`span`,
vt,
[
createElementVNode(
`span`,
null,
toDisplayString(
unref(H)
? unref(U)
? unref(H)
: `••••••••••`
: `未提供`,
),
1,
),
unref(H)
? (openBlock(),
createBlock(
a,
{
key: 0,
icon: unref(U)
? `pi pi-eye-slash`
: `pi pi-eye`,
"aria-label":
unref(U)
? `隐藏实例密码`
: `显示实例密码`,
text: ``,
size: `small`,
onClick:
(r[13] ||= (
e,
) =>
(U.value =
!unref(U))),
},
null,
8,
[
`icon`,
`aria-label`,
],
))
: createCommentVNode(
``,
!0,
),
unref(H)
? (openBlock(),
createBlock(
a,
{
key: 1,
icon:
unref(tn) ===
`password`
? `pi pi-check`
: `pi pi-copy`,
"aria-label": `复制实例密码`,
text: ``,
size: `small`,
onClick:
(r[14] ||= (
e,
) =>
sn(
unref(H),
`password`,
)),
},
null,
8,
[`icon`],
))
: createCommentVNode(
``,
!0,
),
],
),
createVNode(
a,
{
label: `重置密码`,
size: `small`,
disabled: !unref(I),
onClick: (r[15] ||= (e) =>
K(`reset_password`)),
},
null,
8,
[`disabled`],
),
]),
]),
]),
(r[74] ||= createElementVNode(
`h3`,
{
class: `section-gap`,
},
`VNC 连接`,
-1,
)),
createElementVNode(`dl`, yt, [
createElementVNode(`div`, null, [
(r[67] ||= createElementVNode(
`dt`,
null,
`VNC 连接`,
-1,
)),
createElementVNode(`dd`, bt, [
createElementVNode(
`div`,
xt,
[
createVNode(
a,
{
label: `启动 VNC 连接`,
icon: `pi pi-desktop`,
disabled: !unref(I),
onClick: (r[16] ||= (
e,
) => K(`vnc`)),
},
null,
8,
[`disabled`],
),
createVNode(
a,
{
label: `重启 VNC`,
outlined: ``,
disabled: !unref(I),
onClick: (r[17] ||= (
e,
) =>
K(
i.module ===
`remf_dcim`
? `vnc/start`
: `vnc/restart`,
)),
},
null,
8,
[`disabled`],
),
],
),
(r[66] ||= createElementVNode(
`small`,
null,
`通过 VNC 连接,您可使用浏览器管理实例;连接启动可能需要一些时间。`,
-1,
)),
]),
]),
]),
(r[75] ||= createElementVNode(
`h3`,
{
class: `section-gap`,
},
`系统修复`,
-1,
)),
(r[76] ||= createElementVNode(
`p`,
{
class: `muted`,
},
`系统修复可以帮助您修复系统损坏的问题。`,
-1,
)),
createElementVNode(`dl`, St, [
createElementVNode(`div`, null, [
(r[69] ||= createElementVNode(
`dt`,
null,
`救援模式`,
-1,
)),
createElementVNode(`dd`, Ct, [
createVNode(
a,
{
label: unref(j)?.rescue
? `退出救援模式`
: `进入救援模式`,
icon: `pi pi-angle-right`,
disabled:
!unref(I) ||
unref(Ht) ||
!unref(j),
onClick: (r[18] ||= (e) =>
K(
unref(j)?.rescue
? `rescue/exit`
: `rescue`,
)),
},
null,
8,
[`label`, `disabled`],
),
(r[68] ||= createElementVNode(
`small`,
null,
`当系统无法启动时,可以进入救援模式排查问题。`,
-1,
)),
]),
]),
createElementVNode(`div`, null, [
(r[71] ||= createElementVNode(
`dt`,
null,
`重装系统`,
-1,
)),
createElementVNode(`dd`, wt, [
createVNode(
a,
{
label: `重装系统`,
icon: `pi pi-wrench`,
disabled: !unref(I),
onClick: (r[19] ||= (e) =>
K(`reinstall`)),
},
null,
8,
[`disabled`],
),
(r[70] ||= createElementVNode(
`small`,
null,
`重装系统会覆盖所选分区,请提前备份数据。`,
-1,
)),
]),
]),
]),
]))
: createCommentVNode(``, !0),
]),
_: 1,
},
),
createVNode(
R,
{
value: `network`,
},
{
default: withCtx(() => [
unref(V) && unref(A)
? (openBlock(),
createElementBlock(`div`, Tt, [
(r[93] ||= createElementVNode(
`h3`,
null,
`公共网络`,
-1,
)),
createElementVNode(`p`, Et, [
(r[78] ||= createTextVNode(
`公共网络地址用于连接您的服务器。如需调整网络配置,请`,
-1,
)),
createVNode(
D,
{
to: `/tickets/create`,
},
{
default: withCtx(() => [
...(r[77] ||= [
createTextVNode(
`提交工单`,
-1,
),
]),
]),
_: 1,
},
),
(r[79] ||= createTextVNode(
`联系支持。`,
-1,
)),
]),
createElementVNode(`dl`, Dt, [
createElementVNode(`div`, null, [
(r[80] ||= createElementVNode(
`dt`,
null,
`区域`,
-1,
)),
createElementVNode(
`dd`,
null,
toDisplayString(
unref(G).region || `—`,
),
1,
),
]),
createElementVNode(`div`, null, [
(r[81] ||= createElementVNode(
`dt`,
null,
`线路`,
-1,
)),
createElementVNode(
`dd`,
null,
toDisplayString(
unref(G).line || `—`,
),
1,
),
]),
unref(G).networkType
? (openBlock(),
createElementBlock(
`div`,
Ot,
[
(r[82] ||=
createElementVNode(
`dt`,
null,
`网络类型`,
-1,
)),
createElementVNode(
`dd`,
null,
toDisplayString(
unref(G).networkType,
),
1,
),
],
))
: createCommentVNode(``, !0),
createElementVNode(`div`, null, [
(r[83] ||= createElementVNode(
`dt`,
null,
`带宽上限`,
-1,
)),
createElementVNode(
`dd`,
null,
toDisplayString(unref(an)),
1,
),
]),
createElementVNode(`div`, null, [
(r[85] ||= createElementVNode(
`dt`,
null,
`防护峰值`,
-1,
)),
createElementVNode(`dd`, kt, [
createTextVNode(
toDisplayString(unref(on)),
1,
),
(r[84] ||= createElementVNode(
`small`,
null,
`实际防护状态以平台信息为准。`,
-1,
)),
]),
]),
createElementVNode(`div`, null, [
(r[86] ||= createElementVNode(
`dt`,
null,
`IPv4 地址`,
-1,
)),
createElementVNode(`dd`, At, [
unref(Y)
? (openBlock(),
createBlock(
o,
{
key: 0,
severity: `error`,
closable: !1,
},
{
default: withCtx(
() => [
createTextVNode(
toDisplayString(
unref(Y),
),
1,
),
],
),
_: 1,
},
))
: createCommentVNode(
``,
!0,
),
createVNode(
un,
{
value: unref(cn),
loading: unref(q),
scrollable: ``,
},
{
empty: withCtx(() => [
createElementVNode(
`div`,
jt,
toDisplayString(
unref(Y)
? `IP 列表暂不可用`
: `暂无 IP 地址`,
),
1,
),
]),
default: withCtx(() => [
createVNode(Q, {
field: `ip`,
header: `IP 地址`,
}),
createVNode(Q, {
field: `subnet_mask`,
header: `子网掩码`,
}),
createVNode(Q, {
field: `gateway`,
header: `网关`,
}),
]),
_: 1,
},
8,
[`value`, `loading`],
),
createVNode(
a,
{
label: `刷新地址`,
icon: `pi pi-refresh`,
text: ``,
size: `small`,
loading: unref(q),
onClick: $,
},
null,
8,
[`loading`],
),
unref(ln) > 10
? (openBlock(),
createBlock(
dn,
{
key: 1,
rows: 10,
first: unref(X) * 10,
"total-records":
unref(ln),
onPage: (r[20] ||= (
e,
) => {
((X.value = e.page),
$());
}),
},
null,
8,
[
`first`,
`total-records`,
],
))
: createCommentVNode(
``,
!0,
),
]),
]),
]),
(r[94] ||= createElementVNode(
`h3`,
{
class: `section-gap`,
},
`网络流量`,
-1,
)),
unref(F)
? (openBlock(),
createBlock(
o,
{
key: 0,
severity: `warn`,
closable: !1,
},
{
default: withCtx(() => [
createTextVNode(
toDisplayString(
unref(F),
),
1,
),
]),
_: 1,
},
))
: (openBlock(),
createElementBlock(`dl`, Mt, [
createElementVNode(
`div`,
null,
[
(r[88] ||=
createElementVNode(
`dt`,
null,
`流量使用情况`,
-1,
)),
createElementVNode(
`dd`,
Nt,
[
createVNode(
C,
{
value: unref(rn),
"show-value": !1,
class: `network-flow-bar`,
},
null,
8,
[`value`],
),
createElementVNode(
`span`,
Pt,
[
(r[87] ||=
createElementVNode(
`i`,
{
class: `pi pi-arrow-right-arrow-left`,
"aria-hidden": `true`,
},
null,
-1,
)),
createTextVNode(
`已用流量 ` +
toDisplayString(
unref(M)
?.used ||
`—`,
),
1,
),
],
),
],
),
],
),
createElementVNode(
`div`,
null,
[
(r[89] ||=
createElementVNode(
`dt`,
null,
`总流量`,
-1,
)),
createElementVNode(
`dd`,
null,
toDisplayString(
unref(W)
? `不限`
: unref(M)?.total ||
`—`,
),
1,
),
],
),
createElementVNode(
`div`,
null,
[
(r[90] ||=
createElementVNode(
`dt`,
null,
`剩余流量`,
-1,
)),
createElementVNode(
`dd`,
null,
toDisplayString(
unref(W)
? `不限`
: unref(M)?.leave ||
`—`,
),
1,
),
],
),
createElementVNode(
`div`,
null,
[
(r[91] ||=
createElementVNode(
`dt`,
null,
`重置时间`,
-1,
)),
createElementVNode(
`dd`,
null,
toDisplayString(
unref(M)
?.reset_flow_date ||
`—`,
),
1,
),
],
),
(r[92] ||= createElementVNode(
`div`,
null,
[
createElementVNode(
`dt`,
null,
`流量自动购买`,
),
createElementVNode(
`dd`,
null,
`此实例暂不支持设置`,
),
],
-1,
)),
])),
]))
: createCommentVNode(``, !0),
]),
_: 1,
},
),
createVNode(
R,
{
value: `ddos`,
},
{
default: withCtx(() => [
unref(V)
? (openBlock(),
createElementBlock(`section`, Ft, [
createVNode(
fn,
{
"upgrade-allowed":
i.host.upgrade_allowed,
"host-id": i.hostId,
module: i.module,
ip: unref(A)?.ip || ``,
"additional-ip":
unref(A)?.additional_ip,
peak: unref(A)?.peak_defence,
active: unref(V),
},
null,
8,
[
`upgrade-allowed`,
`host-id`,
`module`,
`ip`,
`additional-ip`,
`peak`,
`active`,
],
),
]))
: createCommentVNode(``, !0),
]),
_: 1,
},
),
createVNode(
R,
{
value: `domains`,
},
{
default: withCtx(() => [
unref(V)
? (openBlock(),
createElementBlock(`section`, It, [
createVNode(
pn,
{
"host-id": i.hostId,
},
null,
8,
[`host-id`],
),
]))
: createCommentVNode(``, !0),
]),
_: 1,
},
),
createVNode(
R,
{
value: `billing`,
},
{
default: withCtx(() => [
createElementVNode(`section`, Lt, [
createVNode(
mn,
{
"host-id": i.hostId,
host: i.host,
onRefresh: (r[21] ||= (e) =>
w(`refresh`)),
},
null,
8,
[`host-id`, `host`],
),
unref(V) &&
unref(A) &&
i.host.upgrade_allowed !== !1
? (openBlock(),
createBlock(a, {
key: 0,
label: `配置升级`,
onClick: (r[22] ||= (e) =>
(z.value = !0)),
}))
: createCommentVNode(``, !0),
]),
]),
_: 1,
},
),
createVNode(
R,
{
value: `log`,
},
{
default: withCtx(() => [
unref(V) && O.value === `log`
? (openBlock(),
createBlock(
hn,
{
key: 0,
"host-id": i.hostId,
module: i.module,
},
null,
8,
[`host-id`, `module`],
))
: createCommentVNode(``, !0),
]),
_: 1,
},
),
]),
_: 1,
}),
]),
_: 1,
},
8,
[`value`],
))
: createCommentVNode(``, !0),
createVNode(
yn,
{
visible: unref(z),
"onUpdate:visible": (r[24] ||= (e) =>
isRef(z) ? (z.value = e) : null),
header: `配置升级`,
modal: ``,
closable: !unref(Yt)?.busy,
"close-on-escape": !unref(Yt)?.busy,
style: {
width: `650px`,
maxWidth: `calc(100vw - 24px)`,
},
},
{
default: withCtx(() => [
unref(z) && unref(A)
? (openBlock(),
createBlock(
vn,
{
key: 0,
ref_key: `upgrade`,
ref: Yt,
"host-id": i.hostId,
"product-id": i.productId,
module: i.module,
current: unref(Jt),
"upgrade-allowed": i.host.upgrade_allowed,
onPay: Xt,
},
null,
8,
[
`host-id`,
`product-id`,
`module`,
`current`,
`upgrade-allowed`,
],
))
: createCommentVNode(``, !0),
]),
_: 1,
},
8,
[`visible`, `closable`, `close-on-escape`],
),
createVNode(
bn,
{
modelValue: unref(B),
"onUpdate:modelValue": (r[25] ||= (e) =>
isRef(B) ? (B.value = e) : null),
"order-id": unref(Kt),
amount: unref(qt),
onSuccess: Zt,
},
null,
8,
[`modelValue`, `order-id`, `amount`],
),
createVNode(
xn,
{
message: unref(nn),
severity: `warn`,
},
null,
8,
[`message`],
),
createVNode(
Sn,
{
ref_key: `actions`,
ref: Ut,
"host-id": i.hostId,
"product-id": i.productId,
host: i.host,
module: i.module,
detail: unref(k),
onRefresh: Gt,
},
null,
8,
[`host-id`, `product-id`, `host`, `module`, `detail`],
),
])
);
}
);
},
}),
[[`__scopeId`, `data-v-e2d08c68`]],
),
{
__name: `DcimManage`,
},
);
export {};
export default O;
</script>