From 29330ec457c3c865792064a2deb819e01173a399 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=97=E5=AD=90?= Date: Sun, 30 Mar 2025 02:08:40 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E4=B8=80=E6=89=B9dns?= =?UTF-8?q?=E6=8F=90=E4=BE=9B=E5=95=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 8 +++++ go.sum | 25 ++++++++++++++ internal/http/request/cert_dns.go | 4 +-- internal/service/cert.go | 21 +++++++++++- pkg/acme/solvers.go | 38 +++++++++++++++++++++ web/src/views/cert/CreateDnsModal.vue | 49 +++++++++++++++++++++++++++ web/src/views/cert/DnsView.vue | 48 ++++++++++++++++++++++++++ web/src/views/cert/ObtainModal.vue | 2 +- 8 files changed, 191 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index 7b82c0b1..68e3c56a 100644 --- a/go.mod +++ b/go.mod @@ -27,15 +27,20 @@ require ( github.com/lib/pq v1.10.9 github.com/libdns/alidns v1.0.3 github.com/libdns/cloudflare v0.1.3 + github.com/libdns/cloudns v1.0.0 + github.com/libdns/duckdns v0.2.0 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/libdns v0.2.3 + github.com/libdns/linode v0.4.1 github.com/libdns/namecheap v0.0.0-20250228022813-d8b4b66c5072 github.com/libdns/namedotcom v0.3.3 github.com/libdns/namesilo v0.1.1 github.com/libdns/porkbun v0.2.0 github.com/libdns/tencentcloud v1.2.0 + github.com/libdns/vercel v0.0.2 github.com/mholt/acmez/v3 v3.1.1 github.com/ncruces/go-sqlite3 v0.24.1 github.com/ncruces/go-sqlite3/gormlite v0.24.0 @@ -71,6 +76,8 @@ require ( github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect github.com/knadh/koanf/maps v0.1.1 // indirect + github.com/linode/linodego v1.23.0 // indirect + github.com/miekg/dns v1.1.40 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/ncruces/julianday v1.0.0 // indirect @@ -86,6 +93,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 ) replace github.com/mholt/acmez/v3 => github.com/tnb-labs/acmez/v3 v3.0.0-20250329064837-dd8e7d30835a diff --git a/go.sum b/go.sum index ec94f226..ee9e4ed9 100644 --- a/go.sum +++ b/go.sum @@ -93,16 +93,25 @@ github.com/libdns/alidns v1.0.3 h1:LFHuGnbseq5+HCeGa1aW8awyX/4M2psB9962fdD2+yQ= github.com/libdns/alidns v1.0.3/go.mod h1:e18uAG6GanfRhcJj6/tps2rCMzQJaYVcGKT+ELjdjGE= github.com/libdns/cloudflare v0.1.3 h1:XPFa2f3Mm/3FDNwl9Ki2bfAQJ0Cm5GQB0e8PQVy25Us= github.com/libdns/cloudflare v0.1.3/go.mod h1:XbvSCSMcxspwpSialM3bq0LsS3/Houy9WYxW8Ok8b6M= +github.com/libdns/cloudns v1.0.0 h1:Qrf8TepFnXVhQJi+IwCa/TXhaDy0RXZIXf+DGD/bcE4= +github.com/libdns/cloudns v1.0.0/go.mod h1:3bx4a2XxtgXcaDzTHktQqPNC4rghXAcSDd+GNPkhvjs= +github.com/libdns/duckdns v0.2.0 h1:vd3pE09G2qTx1Zh1o3LmrivWSByD3Z5FbL7csX5vDgE= +github.com/libdns/duckdns v0.2.0/go.mod h1:jCQ/7+qvhLK39+28qXvKEYGBBvmHBCmIwNqdJTCUmVs= github.com/libdns/gcore v0.0.0-20250127070537-4a9d185c9d20 h1:bQwFw+C9sX/zYZlV53ey0KnNkxrfWYIFpvptuAVhJ1Y= github.com/libdns/gcore v0.0.0-20250127070537-4a9d185c9d20/go.mod h1:JGoT1mbmqQwtYQqN5F/vGc9j4TTTMKw/hDm5vXADHUI= 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/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= github.com/libdns/libdns v0.2.3 h1:ba30K4ObwMGB/QTmqUxf3H4/GmUrCAIkMWejeGl12v8= github.com/libdns/libdns v0.2.3/go.mod h1:4Bj9+5CQiNMVGf87wjX4CY3HQJypUHRuLvlsfsZqLWQ= +github.com/libdns/linode v0.4.1 h1:Fr22y3aWBzaj3AlFbCQ743eC+5Hss+sJ+OEjtlK61AA= +github.com/libdns/linode v0.4.1/go.mod h1:BqAJnQxzpnQgy4GDVYf3hQvhLGDc3n8BRwMZ0/9m2y0= github.com/libdns/namecheap v0.0.0-20250228022813-d8b4b66c5072 h1:hCPOoLd9Mr5kAWLofhSCuGYZxAVVy0CV9zgbahzIeSg= github.com/libdns/namecheap v0.0.0-20250228022813-d8b4b66c5072/go.mod h1:jo2LWZSD/g/scevxNSp2kWtdMIXfsgWxrtSc3Z0Yy/I= github.com/libdns/namedotcom v0.3.3 h1:R10C7+IqQGVeC4opHHMiFNBxdNBg1bi65ZwqLESl+jE= @@ -113,6 +122,12 @@ github.com/libdns/porkbun v0.2.0 h1:oa2F0doE93RiJkauVVbM+P2AZ7jovDSiH6u3aaQezvQ= github.com/libdns/porkbun v0.2.0/go.mod h1:mwrhwXpsSA2Xw23t9+qmgFnz+erkn25Sxuh7IBA+x2I= github.com/libdns/tencentcloud v1.2.0 h1:SBbZ9gUZ+ba/p2d8NpiOcj+WZTdYqB5Fz7zypdbK3YU= github.com/libdns/tencentcloud v1.2.0/go.mod h1:o0+WCxQ7LGLtyjnjYU4HbGW9uVjN44SdUDhxdUYLGPw= +github.com/libdns/vercel v0.0.2 h1:slfQWxgUdYFgKfPbK1vLE7k1CZSspHFlwC+nEWlm79w= +github.com/libdns/vercel v0.0.2/go.mod h1:z2NBq/OQ8G0JPglZmit0YnqHm/k+eOz8s4XyLvYxhQo= +github.com/linode/linodego v1.23.0 h1:s0ReCZtuN9Z1IoUN9w1RLeYO1dMZUGPwOQ/IBFsBHtU= +github.com/linode/linodego v1.23.0/go.mod h1:0U7wj/UQOqBNbKv1FYTXiBUXueR8DY4HvIotwE0ENgg= +github.com/miekg/dns v1.1.40 h1:pyyPFfGMnciYUk/mXpKkVmeMQjfXqt3FAJ2hy7tPiLA= +github.com/miekg/dns v1.1.40/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= @@ -167,6 +182,7 @@ github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5t github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= @@ -174,11 +190,14 @@ golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 h1:nDVHiLt8aIbd/VzvPWN6kSOPE7+F/fNFDSXLVYkE/Iw= golang.org/x/exp v0.0.0-20250305212735-054e65f0b394/go.mod h1:sIifuuw/Yco/y6yb6+bDNfyeQ/MdPUy/hKEMYQV17cM= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= @@ -195,7 +214,9 @@ golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -228,14 +249,18 @@ golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U= golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= 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= 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/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= diff --git a/internal/http/request/cert_dns.go b/internal/http/request/cert_dns.go index 026b0807..c90ad633 100644 --- a/internal/http/request/cert_dns.go +++ b/internal/http/request/cert_dns.go @@ -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"` + 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"` 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"` + 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"` Name string `form:"name" json:"name" validate:"required"` Data acme.DNSParam `form:"data" json:"data" validate:"required"` } diff --git a/internal/service/cert.go b/internal/service/cert.go index 072d34de..cd3a0ffb 100644 --- a/internal/service/cert.go +++ b/internal/service/cert.go @@ -93,8 +93,27 @@ func (s *CertService) DNSProviders(w http.ResponseWriter, r *http.Request) { Label: "Name.com", Value: string(acme.Namecom), }, + { + Label: "ClouDNS", + Value: string(acme.ClouDNS), + }, + { + Label: "Duck DNS", + Value: string(acme.DuckDNS), + }, + { + Label: "Hetzner", + Value: string(acme.Hetzner), + }, + { + Label: "Linode", + Value: string(acme.Linode), + }, + { + Label: "Vercel", + Value: string(acme.Vercel), + }, }) - } func (s *CertService) Algorithms(w http.ResponseWriter, r *http.Request) { diff --git a/pkg/acme/solvers.go b/pkg/acme/solvers.go index 03e3a49e..d7675809 100644 --- a/pkg/acme/solvers.go +++ b/pkg/acme/solvers.go @@ -9,15 +9,20 @@ import ( "github.com/libdns/alidns" "github.com/libdns/cloudflare" + "github.com/libdns/cloudns" + "github.com/libdns/duckdns" "github.com/libdns/gcore" "github.com/libdns/godaddy" + "github.com/libdns/hetzner" "github.com/libdns/huaweicloud" "github.com/libdns/libdns" + "github.com/libdns/linode" "github.com/libdns/namecheap" "github.com/libdns/namedotcom" "github.com/libdns/namesilo" "github.com/libdns/porkbun" "github.com/libdns/tencentcloud" + "github.com/libdns/vercel" "github.com/mholt/acmez/v3/acme" "golang.org/x/net/publicsuffix" @@ -160,6 +165,34 @@ func (s dnsSolver) getDNSProvider() (DNSProvider, error) { User: s.param.SK, Server: "https://api.name.com", } + case ClouDNS: + if strings.HasPrefix(s.param.AK, "sub-") { + dns = &cloudns.Provider{ + SubAuthId: strings.TrimPrefix(s.param.AK, "sub-"), + AuthPassword: s.param.SK, + } + } else { + dns = &cloudns.Provider{ + AuthId: s.param.AK, + AuthPassword: s.param.SK, + } + } + case DuckDNS: + dns = &duckdns.Provider{ + APIToken: s.param.AK, + } + case Hetzner: + dns = &hetzner.Provider{ + AuthAPIToken: s.param.AK, + } + case Linode: + dns = &linode.Provider{ + APIToken: s.param.AK, + } + case Vercel: + dns = &vercel.Provider{ + AuthAPIToken: s.param.AK, + } default: return nil, fmt.Errorf("unsupported DNS provider: %s", s.dns) } @@ -180,6 +213,11 @@ const ( Namecheap DnsType = "namecheap" NameSilo DnsType = "namesilo" Namecom DnsType = "namecom" + ClouDNS DnsType = "cloudns" + DuckDNS DnsType = "duckdns" + Hetzner DnsType = "hetzner" + Linode DnsType = "linode" + Vercel DnsType = "vercel" ) type DNSParam struct { diff --git a/web/src/views/cert/CreateDnsModal.vue b/web/src/views/cert/CreateDnsModal.vue index 741669e4..0f2530e2 100644 --- a/web/src/views/cert/CreateDnsModal.vue +++ b/web/src/views/cert/CreateDnsModal.vue @@ -191,6 +191,55 @@ const handleCreateDNS = async () => { placeholder="输入 Name.com Token" /> + + + + + + + + + + + + + + + + + + + 提交 diff --git a/web/src/views/cert/DnsView.vue b/web/src/views/cert/DnsView.vue index a52e0414..924efad2 100644 --- a/web/src/views/cert/DnsView.vue +++ b/web/src/views/cert/DnsView.vue @@ -328,6 +328,54 @@ onUnmounted(() => { placeholder="输入 Name.com Token" /> + + + + + + + + + + + + + + + + + + 提交 diff --git a/web/src/views/cert/ObtainModal.vue b/web/src/views/cert/ObtainModal.vue index e6be1acf..6d2dc231 100644 --- a/web/src/views/cert/ObtainModal.vue +++ b/web/src/views/cert/ObtainModal.vue @@ -56,7 +56,7 @@ const handleSubmit = () => { ]), h( 'tbody', - data.map((item) => + data.map((item: any) => h('tr', [ h('td', item?.domain), h('td', 'TXT'),