feat(证书): 支持西部数码

This commit is contained in:
耗子
2025-03-30 03:40:08 +08:00
parent 29330ec457
commit fca7065dca
7 changed files with 67 additions and 134 deletions
+4 -2
View File
@@ -6,6 +6,7 @@ require (
github.com/bddjr/hlfhr v1.3.8
github.com/beevik/ntp v1.4.3
github.com/creack/pty v1.1.24
github.com/devhaozi/westcn v0.0.0-20250329192208-199d82100bff
github.com/expr-lang/expr v1.17.2
github.com/go-chi/chi/v5 v5.2.1
github.com/go-gormigrate/gormigrate/v2 v2.1.4
@@ -32,7 +33,7 @@ require (
github.com/libdns/gcore v0.0.0-20250127070537-4a9d185c9d20
github.com/libdns/godaddy v1.0.3
github.com/libdns/hetzner v0.0.1
github.com/libdns/huaweicloud v0.3.1
github.com/libdns/huaweicloud v0.3.3
github.com/libdns/libdns v0.2.3
github.com/libdns/linode v0.4.1
github.com/libdns/namecheap v0.0.0-20250228022813-d8b4b66c5072
@@ -70,6 +71,7 @@ require (
github.com/go-rat/securecookie v1.1.0 // indirect
github.com/go-viper/mapstructure/v2 v2.2.1 // indirect
github.com/gofiber/schema v1.3.0 // indirect
github.com/google/go-querystring v1.1.0 // indirect
github.com/gookit/filter v1.2.2 // indirect
github.com/gookit/goutil v0.6.18 // indirect
github.com/jaevor/go-nanoid v1.4.0 // indirect
@@ -93,7 +95,7 @@ require (
golang.org/x/sync v0.12.0 // indirect
golang.org/x/sys v0.31.0 // indirect
golang.org/x/text v0.23.0 // indirect
gopkg.in/ini.v1 v1.66.6 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
)
replace github.com/mholt/acmez/v3 => github.com/tnb-labs/acmez/v3 v3.0.0-20250329064837-dd8e7d30835a
+10 -4
View File
@@ -10,6 +10,8 @@ github.com/creack/pty v1.1.24 h1:bJrF4RRfyJnbTJqzRLHzcGaZK1NeM5kTC9jGgovnR1s=
github.com/creack/pty v1.1.24/go.mod h1:08sCNb52WyoAwi2QDyzUCTgcvVFhUzewun7wtTfvcwE=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/devhaozi/westcn v0.0.0-20250329192208-199d82100bff h1:SLHnJyRcp6OxbMjHr7FvPvT84IoXuofu+1EeMU+Tr1M=
github.com/devhaozi/westcn v0.0.0-20250329192208-199d82100bff/go.mod h1:dUJZQSurBuEWKixGyCYCyiVIkSFxrgqN3B036tHMPtU=
github.com/expr-lang/expr v1.17.2 h1:o0A99O/Px+/DTjEnQiodAgOIK9PPxL8DtXhBRKC+Iso=
github.com/expr-lang/expr v1.17.2/go.mod h1:8/vRC7+7HBzESEqt5kKpYXxrxkr31SaO8r40VO/1IT4=
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
@@ -48,8 +50,11 @@ github.com/golang-cz/httplog v0.0.0-20241002114323-98e09d6f537a/go.mod h1:bgk4Ij
github.com/gomodule/redigo v1.9.2 h1:HrutZBLhSIU8abiSfW8pj8mPhOyMYjZT/wcA4/L9L9s=
github.com/gomodule/redigo v1.9.2/go.mod h1:KsU3hiK/Ay8U42qpaJk+kuNa3C+spxapWpM+ywhcgtw=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk=
@@ -103,8 +108,8 @@ github.com/libdns/godaddy v1.0.3 h1:PX1FOYDQ1HGQzz8mVOmtwm3aa6Sv5MwCkNzivUUTA44=
github.com/libdns/godaddy v1.0.3/go.mod h1:vuKWUXnvblDvcaiRwutOoLl7DuB21x8tI06owsF/JTM=
github.com/libdns/hetzner v0.0.1 h1:WsmcsOKnfpKmzwhfyqhGQEIlEeEaEUvb7ezoJgBKaqU=
github.com/libdns/hetzner v0.0.1/go.mod h1:Jj12aJipO9Ir7OGaXueJ5J1RnerFMD0auGa6k9kujG4=
github.com/libdns/huaweicloud v0.3.1 h1:wro0zpG86JKL3QVEaV/xfHW/59rmqwMYhcbl16w9EYg=
github.com/libdns/huaweicloud v0.3.1/go.mod h1:6s5ZIwLUr2qKsQz2SRNo7uh8X5uJohxoBR95rtSpNcI=
github.com/libdns/huaweicloud v0.3.3 h1:qXp1mpaGFNQaFrhlvcn8DkMpP8+rJ4qcBcfMHwHd9+w=
github.com/libdns/huaweicloud v0.3.3/go.mod h1:z7M2b0aUu/qFyhRHeDqXzci3yHl9nh7GrobRlbPkJEE=
github.com/libdns/libdns v0.1.0/go.mod h1:yQCXzk1lEZmmCPa857bnk4TsOiqYasqpyOEeSObbb40=
github.com/libdns/libdns v0.2.0/go.mod h1:yQCXzk1lEZmmCPa857bnk4TsOiqYasqpyOEeSObbb40=
github.com/libdns/libdns v0.2.2-0.20230227175549-2dc480633939/go.mod h1:4Bj9+5CQiNMVGf87wjX4CY3HQJypUHRuLvlsfsZqLWQ=
@@ -256,11 +261,12 @@ golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58
golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/ini.v1 v1.66.6 h1:LATuAqN/shcYAOkv3wl2L4rkaKqkcgTBQjOyYDvcPKI=
gopkg.in/ini.v1 v1.66.6/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
+2 -2
View File
@@ -3,14 +3,14 @@ package request
import "github.com/tnb-labs/panel/pkg/acme"
type CertDNSCreate struct {
Type acme.DnsType `form:"type" json:"type" validate:"required|in:aliyun,tencent,huawei,cloudflare,godaddy,gcore,porkbun,namecheap,namesilo,namecom,cloudns,duckdns,hetzner,linode,vercel"`
Type acme.DnsType `form:"type" json:"type" validate:"required|in:aliyun,tencent,huawei,westcn,cloudflare,godaddy,gcore,porkbun,namecheap,namesilo,namecom,cloudns,duckdns,hetzner,linode,vercel"`
Name string `form:"name" json:"name" validate:"required"`
Data acme.DNSParam `form:"data" json:"data" validate:"required"`
}
type CertDNSUpdate struct {
ID uint `form:"id" json:"id" validate:"required|exists:cert_dns,id"`
Type acme.DnsType `form:"type" json:"type" validate:"required|in:aliyun,tencent,huawei,cloudflare,godaddy,gcore,porkbun,namecheap,namesilo,namecom,cloudns,duckdns,hetzner,linode,vercel"`
Type acme.DnsType `form:"type" json:"type" validate:"required|in:aliyun,tencent,huawei,westcn,cloudflare,godaddy,gcore,porkbun,namecheap,namesilo,namecom,cloudns,duckdns,hetzner,linode,vercel"`
Name string `form:"name" json:"name" validate:"required"`
Data acme.DNSParam `form:"data" json:"data" validate:"required"`
}
+4
View File
@@ -65,6 +65,10 @@ func (s *CertService) DNSProviders(w http.ResponseWriter, r *http.Request) {
Label: "华为云",
Value: string(acme.Huawei),
},
{
Label: "西部数码",
Value: string(acme.Westcn),
},
{
Label: "CloudFlare",
Value: string(acme.CloudFlare),
+7
View File
@@ -3,6 +3,7 @@ package acme
import (
"context"
"fmt"
"github.com/devhaozi/westcn"
"os"
"strings"
"time"
@@ -133,6 +134,11 @@ func (s dnsSolver) getDNSProvider() (DNSProvider, error) {
AccessKeyId: s.param.AK,
SecretAccessKey: s.param.SK,
}
case Westcn:
dns = &westcn.Provider{
Username: s.param.SK,
APIPassword: s.param.AK,
}
case CloudFlare:
dns = &cloudflare.Provider{
APIToken: s.param.AK,
@@ -206,6 +212,7 @@ const (
AliYun DnsType = "aliyun"
Tencent DnsType = "tencent"
Huawei DnsType = "huawei"
Westcn DnsType = "westcn"
CloudFlare DnsType = "cloudflare"
Godaddy DnsType = "godaddy"
Gcore DnsType = "gcore"
+25 -98
View File
@@ -48,12 +48,7 @@ const handleCreateDNS = async () => {
<n-space vertical>
<n-form :model="model">
<n-form-item path="name" label="备注名称">
<n-input
v-model:value="model.name"
type="text"
@keydown.enter.prevent
placeholder="输入备注名称"
/>
<n-input v-model:value="model.name" type="text" placeholder="输入备注名称" />
</n-form-item>
<n-form-item path="type" label="DNS">
<n-select
@@ -64,90 +59,57 @@ const handleCreateDNS = async () => {
/>
</n-form-item>
<n-form-item v-if="model.type == 'aliyun'" path="ak" label="Access Key">
<n-input
v-model:value="model.data.ak"
type="text"
@keydown.enter.prevent
placeholder="输入阿里云 Access Key"
/>
<n-input v-model:value="model.data.ak" type="text" placeholder="输入阿里云 Access Key" />
</n-form-item>
<n-form-item v-if="model.type == 'aliyun'" path="sk" label="Secret Key">
<n-input
v-model:value="model.data.sk"
type="text"
@keydown.enter.prevent
placeholder="输入阿里云 Secret Key"
/>
<n-input v-model:value="model.data.sk" type="text" placeholder="输入阿里云 Secret Key" />
</n-form-item>
<n-form-item v-if="model.type == 'tencent'" path="ak" label="SecretId">
<n-input
v-model:value="model.data.ak"
type="text"
@keydown.enter.prevent
placeholder="输入腾讯云 SecretId"
/>
<n-input v-model:value="model.data.ak" type="text" placeholder="输入腾讯云 SecretId" />
</n-form-item>
<n-form-item v-if="model.type == 'tencent'" path="sk" label="SecretKey">
<n-input
v-model:value="model.data.sk"
type="text"
@keydown.enter.prevent
placeholder="输入腾讯云 SecretKey"
/>
<n-input v-model:value="model.data.sk" type="text" placeholder="输入腾讯云 SecretKey" />
</n-form-item>
<n-form-item v-if="model.type == 'huawei'" path="ak" label="AccessKeyId">
<n-input
v-model:value="model.data.ak"
type="text"
@keydown.enter.prevent
placeholder="输入华为云 AccessKeyId"
/>
<n-input v-model:value="model.data.ak" type="text" placeholder="输入华为云 AccessKeyId" />
</n-form-item>
<n-form-item v-if="model.type == 'huawei'" path="sk" label="SecretAccessKey">
<n-input
v-model:value="model.data.sk"
type="text"
@keydown.enter.prevent
placeholder="输入华为云 SecretAccessKey"
/>
</n-form-item>
<n-form-item v-if="model.type == 'westcn'" path="sk" label="Username">
<n-input v-model:value="model.data.sk" type="text" placeholder="输入西部数码 Username" />
</n-form-item>
<n-form-item v-if="model.type == 'westcn'" path="ak" label="API Password">
<n-input
v-model:value="model.data.ak"
type="text"
placeholder="输入西部数码 API Password"
/>
</n-form-item>
<n-form-item v-if="model.type == 'cloudflare'" path="ak" label="API Key">
<n-input
v-model:value="model.data.ak"
type="text"
@keydown.enter.prevent
placeholder="输入 Cloudflare API Key"
/>
</n-form-item>
<n-form-item v-if="model.type == 'godaddy'" path="ak" label="Token">
<n-input
v-model:value="model.data.ak"
type="text"
@keydown.enter.prevent
placeholder="输入 GoDaddy Token"
/>
<n-input v-model:value="model.data.ak" type="text" placeholder="输入 GoDaddy Token" />
</n-form-item>
<n-form-item v-if="model.type == 'gcore'" path="ak" label="API Key">
<n-input
v-model:value="model.data.ak"
type="text"
@keydown.enter.prevent
placeholder="输入 G-Core API Key"
/>
<n-input v-model:value="model.data.ak" type="text" placeholder="输入 G-Core API Key" />
</n-form-item>
<n-form-item v-if="model.type == 'porkbun'" path="ak" label="API Key">
<n-input
v-model:value="model.data.ak"
type="text"
@keydown.enter.prevent
placeholder="输入 Porkbun API Key"
/>
<n-input v-model:value="model.data.ak" type="text" placeholder="输入 Porkbun API Key" />
</n-form-item>
<n-form-item v-if="model.type == 'porkbun'" path="sk" label="Secret Key">
<n-input
v-model:value="model.data.sk"
type="text"
@keydown.enter.prevent
placeholder="输入 Porkbun Secret Key"
/>
</n-form-item>
@@ -155,48 +117,30 @@ const handleCreateDNS = async () => {
<n-input
v-model:value="model.data.sk"
type="text"
@keydown.enter.prevent
placeholder="输入 Namecheap API Username"
/>
</n-form-item>
<n-form-item v-if="model.type == 'namecheap'" path="ak" label="API Key">
<n-input
v-model:value="model.data.ak"
type="text"
@keydown.enter.prevent
placeholder="输入 Namecheap API Key"
/>
<n-input v-model:value="model.data.ak" type="text" placeholder="输入 Namecheap API Key" />
</n-form-item>
<n-form-item v-if="model.type == 'namesilo'" path="ak" label="API Token">
<n-input
v-model:value="model.data.ak"
type="text"
@keydown.enter.prevent
placeholder="输入 NameSilo API Token"
/>
</n-form-item>
<n-form-item v-if="model.type == 'namecom'" path="sk" label="Username">
<n-input
v-model:value="model.data.sk"
type="text"
@keydown.enter.prevent
placeholder="输入 Name.com Username"
/>
<n-input v-model:value="model.data.sk" type="text" placeholder="输入 Name.com Username" />
</n-form-item>
<n-form-item v-if="model.type == 'namecom'" path="ak" label="Token">
<n-input
v-model:value="model.data.ak"
type="text"
@keydown.enter.prevent
placeholder="输入 Name.com Token"
/>
<n-input v-model:value="model.data.ak" type="text" placeholder="输入 Name.com Token" />
</n-form-item>
<n-form-item v-if="model.type == 'cloudns'" path="ak" label="Auth ID">
<n-input
v-model:value="model.data.ak"
type="text"
@keydown.enter.prevent
placeholder="输入 ClouDNS Auth ID(使用Sub Auth ID请添加sub-前缀)"
/>
</n-form-item>
@@ -204,41 +148,24 @@ const handleCreateDNS = async () => {
<n-input
v-model:value="model.data.sk"
type="text"
@keydown.enter.prevent
placeholder="输入 ClouDNS Auth Password"
/>
</n-form-item>
<n-form-item v-if="model.type == 'duckdns'" path="ak" label="Token">
<n-input
v-model:value="model.data.ak"
type="text"
@keydown.enter.prevent
placeholder="输入 Duck DNS Token"
/>
<n-input v-model:value="model.data.ak" type="text" placeholder="输入 Duck DNS Token" />
</n-form-item>
<n-form-item v-if="model.type == 'hetzner'" path="ak" label="Auth API Token">
<n-input
v-model:value="model.data.ak"
type="text"
@keydown.enter.prevent
placeholder="输入 Hetzner Auth API Token"
/>
</n-form-item>
<n-form-item v-if="model.type == 'linode'" path="ak" label="Token">
<n-input
v-model:value="model.data.ak"
type="text"
@keydown.enter.prevent
placeholder="输入 Linode Token"
/>
<n-input v-model:value="model.data.ak" type="text" placeholder="输入 Linode Token" />
</n-form-item>
<n-form-item v-if="model.type == 'vercel'" path="ak" label="Token">
<n-input
v-model:value="model.data.ak"
type="text"
@keydown.enter.prevent
placeholder="输入 Vercel Token"
/>
<n-input v-model:value="model.data.ak" type="text" placeholder="输入 Vercel Token" />
</n-form-item>
</n-form>
<n-button type="info" block @click="handleCreateDNS">提交</n-button>
+15 -28
View File
@@ -185,12 +185,7 @@ onUnmounted(() => {
<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-input v-model:value="updateDNSModel.name" type="text" placeholder="输入备注名称" />
</n-form-item>
<n-form-item path="type" label="DNS">
<n-select
@@ -204,7 +199,6 @@ onUnmounted(() => {
<n-input
v-model:value="updateDNSModel.data.ak"
type="text"
@keydown.enter.prevent
placeholder="输入阿里云 Access Key"
/>
</n-form-item>
@@ -212,7 +206,6 @@ onUnmounted(() => {
<n-input
v-model:value="updateDNSModel.data.sk"
type="text"
@keydown.enter.prevent
placeholder="输入阿里云 Secret Key"
/>
</n-form-item>
@@ -220,7 +213,6 @@ onUnmounted(() => {
<n-input
v-model:value="updateDNSModel.data.ak"
type="text"
@keydown.enter.prevent
placeholder="输入腾讯云 SecretId"
/>
</n-form-item>
@@ -228,7 +220,6 @@ onUnmounted(() => {
<n-input
v-model:value="updateDNSModel.data.sk"
type="text"
@keydown.enter.prevent
placeholder="输入腾讯云 SecretKey"
/>
</n-form-item>
@@ -236,7 +227,6 @@ onUnmounted(() => {
<n-input
v-model:value="updateDNSModel.data.ak"
type="text"
@keydown.enter.prevent
placeholder="输入华为云 AccessKeyId"
/>
</n-form-item>
@@ -244,15 +234,27 @@ onUnmounted(() => {
<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 == 'westcn'" path="sk" label="Username">
<n-input
v-model:value="updateDNSModel.data.sk"
type="text"
placeholder="输入西部数码 Username"
/>
</n-form-item>
<n-form-item v-if="updateDNSModel.type == 'westcn'" path="ak" label="API Password">
<n-input
v-model:value="updateDNSModel.data.ak"
type="text"
placeholder="输入西部数码 API Password"
/>
</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>
@@ -260,7 +262,6 @@ onUnmounted(() => {
<n-input
v-model:value="updateDNSModel.data.ak"
type="text"
@keydown.enter.prevent
placeholder="输入 GoDaddy Token"
/>
</n-form-item>
@@ -268,7 +269,6 @@ onUnmounted(() => {
<n-input
v-model:value="updateDNSModel.data.ak"
type="text"
@keydown.enter.prevent
placeholder="输入 G-Core API Key"
/>
</n-form-item>
@@ -276,7 +276,6 @@ onUnmounted(() => {
<n-input
v-model:value="updateDNSModel.data.ak"
type="text"
@keydown.enter.prevent
placeholder="输入 Porkbun API Key"
/>
</n-form-item>
@@ -284,7 +283,6 @@ onUnmounted(() => {
<n-input
v-model:value="updateDNSModel.data.sk"
type="text"
@keydown.enter.prevent
placeholder="输入 Porkbun Secret Key"
/>
</n-form-item>
@@ -292,7 +290,6 @@ onUnmounted(() => {
<n-input
v-model:value="updateDNSModel.data.sk"
type="text"
@keydown.enter.prevent
placeholder="输入 Namecheap API Username"
/>
</n-form-item>
@@ -300,7 +297,6 @@ onUnmounted(() => {
<n-input
v-model:value="updateDNSModel.data.ak"
type="text"
@keydown.enter.prevent
placeholder="输入 Namecheap API Key"
/>
</n-form-item>
@@ -308,7 +304,6 @@ onUnmounted(() => {
<n-input
v-model:value="updateDNSModel.data.ak"
type="text"
@keydown.enter.prevent
placeholder="输入 NameSilo API Token"
/>
</n-form-item>
@@ -316,7 +311,6 @@ onUnmounted(() => {
<n-input
v-model:value="updateDNSModel.data.sk"
type="text"
@keydown.enter.prevent
placeholder="输入 Name.com Username"
/>
</n-form-item>
@@ -324,7 +318,6 @@ onUnmounted(() => {
<n-input
v-model:value="updateDNSModel.data.ak"
type="text"
@keydown.enter.prevent
placeholder="输入 Name.com Token"
/>
</n-form-item>
@@ -332,7 +325,6 @@ onUnmounted(() => {
<n-input
v-model:value="updateDNSModel.data.ak"
type="text"
@keydown.enter.prevent
placeholder="输入 ClouDNS Auth ID使用Sub Auth ID请添加sub-前缀"
/>
</n-form-item>
@@ -340,7 +332,6 @@ onUnmounted(() => {
<n-input
v-model:value="updateDNSModel.data.sk"
type="text"
@keydown.enter.prevent
placeholder="输入 ClouDNS Auth Password"
/>
</n-form-item>
@@ -348,7 +339,6 @@ onUnmounted(() => {
<n-input
v-model:value="updateDNSModel.data.ak"
type="text"
@keydown.enter.prevent
placeholder="输入 Duck DNS Token"
/>
</n-form-item>
@@ -356,7 +346,6 @@ onUnmounted(() => {
<n-input
v-model:value="updateDNSModel.data.ak"
type="text"
@keydown.enter.prevent
placeholder="输入 Hetzner Auth API Token"
/>
</n-form-item>
@@ -364,7 +353,6 @@ onUnmounted(() => {
<n-input
v-model:value="updateDNSModel.data.ak"
type="text"
@keydown.enter.prevent
placeholder="输入 Linode Token"
/>
</n-form-item>
@@ -372,7 +360,6 @@ onUnmounted(() => {
<n-input
v-model:value="updateDNSModel.data.ak"
type="text"
@keydown.enter.prevent
placeholder="输入 Vercel Token"
/>
</n-form-item>