Files

359 lines
13 KiB
Vue

<script>
// DCIM 域名白名单只读面板,先识别实例是否开通白名单,再按页读取关联记录。
import "~/assets/styles/DcimDomains.BT2s5hGW.css";
import { toDisplayString } from "vue";
import { onMounted } from "vue";
import { onBeforeUnmount } from "vue";
import { watch } from "vue";
import { createBlock } from "vue";
import { ref } from "vue";
import { withCtx } from "vue";
import { createCommentVNode } from "vue";
import { createElementBlock } 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 { NuxtLink } from "#components";
import { sanitizeMessage } from "~/lib/auth.js";
import { useApi } from "~/lib/auth.js";
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 tag from "primevue/tag";
var E = {
class: `domains`,
},
D = {
class: `toolbar`,
},
O = {
class: `empty`,
},
k = Object.assign(
_plugin_vue_export_helper_t(
defineComponent({
__name: `DcimDomains`,
props: {
hostId: {},
},
setup(f) {
let y = f,
k = useApi(),
A = ref(null),
j = ref(``),
M = ref(!1),
N = ref([]),
P = ref(0),
F = ref(0),
I = 0,
L = !1;
// 页码控件从 0 开始,接口从 1 开始;实例切换或卸载后丢弃旧页面结果。
async function R() {
let e = ++I,
t = y.hostId;
((M.value = !0), (j.value = ``), (N.value = []));
try {
let n = await k.get(`/domain_whitelist/host`);
if (L || e !== I || t !== y.hostId) return;
A.value = (n.list || []).some((e) => String(e.id) === t);
let r = await k.get(`/domain_whitelist/record`, {
host_id: t,
page: P.value + 1,
limit: 10,
});
if (L || e !== I || t !== y.hostId) return;
((N.value = r.list || []), (F.value = Number(r.count || 0)));
} catch (t) {
!L &&
e === I &&
(j.value =
t instanceof Error ? t.message : `域名白名单加载失败`);
} finally {
!L && e === I && (M.value = !1);
}
}
return (
watch(
() => y.hostId,
() => {
((A.value = null), (P.value = 0), R());
},
),
onMounted(R),
onBeforeUnmount(() => {
((L = !0), I++);
}),
(t, n) => {
let r = message,
a = NuxtLink,
_ = button,
y = column,
k = tag,
I = datatable,
L = paginator;
return (
openBlock(),
createElementBlock(`div`, E, [
createVNode(
r,
{
severity: `info`,
closable: !1,
},
{
default: withCtx(() => [
...(n[1] ||= [
createTextVNode(
`域名白名单用于为当前实例提交域名访问申请,审核结果以平台记录为准。`,
-1,
),
]),
]),
_: 1,
},
),
createElementVNode(`div`, D, [
(n[3] ||= createElementVNode(`h3`, null, `域名白名单`, -1)),
unref(A)
? (openBlock(),
createBlock(
a,
{
key: 0,
class: `p-button p-button-sm`,
to: {
path: `/security/domain-whitelist`,
query: {
host_id: f.hostId,
},
},
},
{
default: withCtx(() => [
...(n[2] ||= [
createElementVNode(
`i`,
{
class: `pi pi-plus`,
"aria-hidden": `true`,
},
null,
-1,
),
createTextVNode(`管理 / 添加域名`, -1),
]),
]),
_: 1,
},
8,
[`to`],
))
: createCommentVNode(``, !0),
createVNode(
_,
{
label: `刷新`,
icon: `pi pi-refresh`,
severity: `secondary`,
text: ``,
size: `small`,
loading: unref(M),
onClick: R,
},
null,
8,
[`loading`],
),
]),
unref(j)
? (openBlock(),
createBlock(
r,
{
key: 0,
severity: `error`,
closable: !1,
},
{
default: withCtx(() => [
createTextVNode(toDisplayString(unref(j)), 1),
]),
_: 1,
},
))
: unref(A) === !1
? (openBlock(),
createBlock(
r,
{
key: 1,
severity: `info`,
closable: !1,
},
{
default: withCtx(() => [
...(n[4] ||= [
createTextVNode(
`此实例尚未配置可用的域名白名单入口,暂不能提交新域名。`,
-1,
),
]),
]),
_: 1,
},
))
: createCommentVNode(``, !0),
createVNode(
I,
{
value: unref(N),
loading: unref(M),
"data-key": `id`,
scrollable: ``,
},
{
empty: withCtx(() => [
createElementVNode(
`div`,
O,
toDisplayString(
unref(j) ? `记录暂不可用` : `暂无域名记录`,
),
1,
),
]),
default: withCtx(() => [
createVNode(
y,
{
header: `域名`,
},
{
body: withCtx(({ data: t }) => [
createTextVNode(
toDisplayString(t.domains?.join(`、`) || `—`),
1,
),
]),
_: 1,
},
),
createVNode(
y,
{
header: `状态`,
},
{
body: withCtx(({ data: e }) => [
createVNode(
k,
{
value:
e.status === 1
? `已通过`
: e.status === -1
? `已驳回`
: `处理中`,
severity:
e.status === 1
? `success`
: e.status === -1
? `danger`
: `warn`,
},
null,
8,
[`value`, `severity`],
),
]),
_: 1,
},
),
createVNode(
y,
{
header: `驳回原因`,
},
{
body: withCtx(({ data: t }) => [
createTextVNode(
toDisplayString(
unref(sanitizeMessage)(t.reject_reason) ||
`—`,
),
1,
),
]),
_: 1,
},
),
createVNode(y, {
field: `remark`,
header: `备注`,
}),
createVNode(
y,
{
header: `创建时间`,
},
{
body: withCtx(({ data: n }) => [
createTextVNode(
toDisplayString(
(`formatTime` in t
? t.formatTime
: unref(dict_r))(n.create_time),
),
1,
),
]),
_: 1,
},
),
]),
_: 1,
},
8,
[`value`, `loading`],
),
unref(F) > 10
? (openBlock(),
createBlock(
L,
{
key: 2,
rows: 10,
first: unref(P) * 10,
"total-records": unref(F),
onPage: (n[0] ||= (e) => {
((P.value = e.page), R());
}),
},
null,
8,
[`first`, `total-records`],
))
: createCommentVNode(``, !0),
])
);
}
);
},
}),
[[`__scopeId`, `data-v-6c2c5ee1`]],
),
{
__name: `DcimDomains`,
},
);
export {};
export default k;
</script>