2
0
mirror of https://github.com/acepanel/panel.git synced 2026-02-04 14:57:16 +08:00
Files
panel/web/src/views/cert/DnsView.vue

338 lines
9.5 KiB
Vue

<script setup lang="ts">
import { NButton, NDataTable, NInput, NPopconfirm, NSpace, NTag } from 'naive-ui'
import cert from '@/api/panel/cert'
const props = defineProps({
dnsProviders: {
type: Array<any>,
required: true
}
})
const { dnsProviders } = toRefs(props)
const updateDNSModel = ref<any>({
data: {
ak: '',
sk: ''
},
type: 'aliyun',
name: ''
})
const updateDNSModal = ref(false)
const updateDNS = ref<any>()
const columns: any = [
{
title: '备注名称',
key: 'name',
minWidth: 200,
resizable: true,
ellipsis: { tooltip: true }
},
{
title: '类型',
key: 'type',
width: 150,
resizable: true,
ellipsis: { tooltip: true },
render(row: any) {
return h(
NTag,
{
type: 'info',
bordered: false
},
{
default: () => {
const provider = dnsProviders.value.find((provider: any) => provider.value === row.type)
if (provider) {
return provider.label
} else {
return '未知'
}
}
}
)
}
},
{
title: '操作',
key: 'actions',
width: 200,
align: 'center',
hideInExcel: true,
render(row: any) {
return [
h(
NButton,
{
size: 'small',
type: 'primary',
onClick: () => {
updateDNS.value = row.id
updateDNSModel.value.data.ak = row.dns_param.ak
updateDNSModel.value.data.sk = row.dns_param.sk
updateDNSModel.value.type = row.type
updateDNSModel.value.name = row.name
updateDNSModal.value = true
}
},
{
default: () => '修改'
}
),
h(
NPopconfirm,
{
onPositiveClick: async () => {
useRequest(cert.dnsDelete(row.id)).onSuccess(() => {
refresh()
window.$message.success('删除成功')
})
}
},
{
default: () => {
return '确定删除 DNS 吗?'
},
trigger: () => {
return h(
NButton,
{
size: 'small',
type: 'error',
style: 'margin-left: 15px;'
},
{
default: () => '删除'
}
)
}
}
)
]
}
}
]
const { loading, data, page, total, pageSize, pageCount, refresh } = usePagination(
(page, pageSize) => cert.dns(page, pageSize),
{
initialData: { total: 0, list: [] },
initialPageSize: 20,
total: (res: any) => res.total,
data: (res: any) => res.items
}
)
const handleUpdateDNS = () => {
useRequest(cert.dnsUpdate(updateDNS.value, updateDNSModel.value)).onSuccess(() => {
refresh()
updateDNSModal.value = false
updateDNSModel.value.data.ak = ''
updateDNSModel.value.data.sk = ''
updateDNSModel.value.name = ''
window.$message.success('更新成功')
})
}
onMounted(() => {
refresh()
window.$bus.on('cert:refresh-dns', () => {
refresh()
})
})
onUnmounted(() => {
window.$bus.off('cert:refresh-dns')
})
</script>
<template>
<n-space vertical size="large">
<n-data-table
striped
remote
:scroll-x="1000"
:loading="loading"
:columns="columns"
:data="data"
:row-key="(row: any) => row.id"
v-model:page="page"
v-model:pageSize="pageSize"
:pagination="{
page: page,
pageCount: pageCount,
pageSize: pageSize,
itemCount: total,
showQuickJumper: true,
showSizePicker: true,
pageSizes: [20, 50, 100, 200]
}"
/>
</n-space>
<n-modal
v-model:show="updateDNSModal"
preset="card"
title="修改 DNS"
style="width: 60vw"
size="huge"
:bordered="false"
:segmented="false"
>
<n-space vertical>
<n-form :model="updateDNSModel">
<n-form-item path="name" label="备注名称">
<n-input
v-model:value="updateDNSModel.name"
type="text"
@keydown.enter.prevent
placeholder="输入备注名称"
/>
</n-form-item>
<n-form-item path="type" label="DNS">
<n-select
v-model:value="updateDNSModel.type"
placeholder="选择 DNS"
clearable
:options="dnsProviders"
/>
</n-form-item>
<n-form-item v-if="updateDNSModel.type == 'aliyun'" path="ak" label="Access Key">
<n-input
v-model:value="updateDNSModel.data.ak"
type="text"
@keydown.enter.prevent
placeholder="输入阿里云 Access Key"
/>
</n-form-item>
<n-form-item v-if="updateDNSModel.type == 'aliyun'" path="sk" label="Secret Key">
<n-input
v-model:value="updateDNSModel.data.sk"
type="text"
@keydown.enter.prevent
placeholder="输入阿里云 Secret Key"
/>
</n-form-item>
<n-form-item v-if="updateDNSModel.type == 'tencent'" path="ak" label="SecretId">
<n-input
v-model:value="updateDNSModel.data.ak"
type="text"
@keydown.enter.prevent
placeholder="输入腾讯云 SecretId"
/>
</n-form-item>
<n-form-item v-if="updateDNSModel.type == 'tencent'" path="sk" label="SecretKey">
<n-input
v-model:value="updateDNSModel.data.sk"
type="text"
@keydown.enter.prevent
placeholder="输入腾讯云 SecretKey"
/>
</n-form-item>
<n-form-item v-if="updateDNSModel.type == 'huawei'" path="ak" label="AccessKeyId">
<n-input
v-model:value="updateDNSModel.data.ak"
type="text"
@keydown.enter.prevent
placeholder="输入华为云 AccessKeyId"
/>
</n-form-item>
<n-form-item v-if="updateDNSModel.type == 'huawei'" path="sk" label="SecretAccessKey">
<n-input
v-model:value="updateDNSModel.data.sk"
type="text"
@keydown.enter.prevent
placeholder="输入华为云 SecretAccessKey"
/>
</n-form-item>
<n-form-item v-if="updateDNSModel.type == 'cloudflare'" path="ak" label="API Key">
<n-input
v-model:value="updateDNSModel.data.ak"
type="text"
@keydown.enter.prevent
placeholder="输入 Cloudflare API Key"
/>
</n-form-item>
<n-form-item v-if="updateDNSModel.type == 'godaddy'" path="ak" label="Token">
<n-input
v-model:value="updateDNSModel.data.ak"
type="text"
@keydown.enter.prevent
placeholder="输入 GoDaddy Token"
/>
</n-form-item>
<n-form-item v-if="updateDNSModel.type == 'gcore'" path="ak" label="API Key">
<n-input
v-model:value="updateDNSModel.data.ak"
type="text"
@keydown.enter.prevent
placeholder="输入 G-Core API Key"
/>
</n-form-item>
<n-form-item v-if="updateDNSModel.type == 'porkbun'" path="ak" label="API Key">
<n-input
v-model:value="updateDNSModel.data.ak"
type="text"
@keydown.enter.prevent
placeholder="输入 Porkbun API Key"
/>
</n-form-item>
<n-form-item v-if="updateDNSModel.type == 'porkbun'" path="sk" label="Secret Key">
<n-input
v-model:value="updateDNSModel.data.sk"
type="text"
@keydown.enter.prevent
placeholder="输入 Porkbun Secret Key"
/>
</n-form-item>
<n-form-item v-if="updateDNSModel.type == 'namecheap'" path="sk" label="API Username">
<n-input
v-model:value="updateDNSModel.data.sk"
type="text"
@keydown.enter.prevent
placeholder="输入 Namecheap API Username"
/>
</n-form-item>
<n-form-item v-if="updateDNSModel.type == 'namecheap'" path="ak" label="API Key">
<n-input
v-model:value="updateDNSModel.data.ak"
type="text"
@keydown.enter.prevent
placeholder="输入 Namecheap API Key"
/>
</n-form-item>
<n-form-item v-if="updateDNSModel.type == 'namesilo'" path="ak" label="API Token">
<n-input
v-model:value="updateDNSModel.data.ak"
type="text"
@keydown.enter.prevent
placeholder="输入 NameSilo API Token"
/>
</n-form-item>
<n-form-item v-if="updateDNSModel.type == 'namecom'" path="sk" label="Username">
<n-input
v-model:value="updateDNSModel.data.sk"
type="text"
@keydown.enter.prevent
placeholder="输入 Name.com Username"
/>
</n-form-item>
<n-form-item v-if="updateDNSModel.type == 'namecom'" path="ak" label="Token">
<n-input
v-model:value="updateDNSModel.data.ak"
type="text"
@keydown.enter.prevent
placeholder="输入 Name.com Token"
/>
</n-form-item>
</n-form>
<n-button type="info" block @click="handleUpdateDNS">提交</n-button>
</n-space>
</n-modal>
</template>
<style scoped lang="scss"></style>