From 89be5e077ad24c8626b84754504c44eb559de9cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=97=E5=AD=90?= Date: Sun, 9 Feb 2025 22:41:50 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=AF=81=E4=B9=A6=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=85=B3=E9=97=AD=E8=87=AA=E5=8A=A8=E7=BB=AD=E7=AD=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/data/cert.go | 3 +++ web/src/views/cert/CertView.vue | 45 +++++++++++++++++++++++---------- 2 files changed, 34 insertions(+), 14 deletions(-) diff --git a/internal/data/cert.go b/internal/data/cert.go index 7785bf97..4e89c098 100644 --- a/internal/data/cert.go +++ b/internal/data/cert.go @@ -119,6 +119,9 @@ func (r *certRepo) Update(req *request.CertUpdate) error { if err == nil && req.Type == "upload" { req.Domains = info.DNSNames } + if req.Type == "upload" && req.AutoRenew { + return errors.New("upload certificate cannot be set to auto renew") + } return r.db.Model(&biz.Cert{}).Where("id = ?", req.ID).Select("*").Updates(&biz.Cert{ ID: req.ID, diff --git a/web/src/views/cert/CertView.vue b/web/src/views/cert/CertView.vue index 2e4971cc..2518f488 100644 --- a/web/src/views/cert/CertView.vue +++ b/web/src/views/cert/CertView.vue @@ -117,18 +117,9 @@ const columns: any = [ ellipsis: { tooltip: true }, render(row: any) { if (row.account_id == 0) { - return h(NTag, null, { default: () => '无' }) + return '无' } - return h(NFlex, null, { - default: () => [ - h(NTag, null, { - default: () => - row.account_id == 0 - ? '无' - : accounts.value?.find((item: any) => item.value === row.account_id)?.label - }) - ] - }) + return accounts.value?.find((item: any) => item.value === row.account_id)?.label } }, { @@ -178,8 +169,8 @@ const columns: any = [ return h(NSwitch, { size: 'small', rubberBand: false, - value: row.auto_renew - //onUpdateValue: () => handleAutoRenewUpdate(row) + value: row.auto_renew, + onUpdateValue: () => handleAutoRenewUpdate(row) }) } }, @@ -338,7 +329,7 @@ const { loading, data, page, total, pageSize, pageCount, refresh } = usePaginati } ) -const handleUpdateCert = async () => { +const handleUpdateCert = () => { useRequest(cert.certUpdate(updateCert.value, updateModel.value)).onSuccess(() => { refresh() updateModal.value = false @@ -354,6 +345,32 @@ const handleUpdateCert = async () => { }) } +const handleAutoRenewUpdate = (row: any) => { + updateModel.value.domains = row.domains + updateModel.value.type = row.type + updateModel.value.dns_id = row.dns_id == 0 ? null : row.dns_id + updateModel.value.account_id = row.account_id == 0 ? null : row.account_id + updateModel.value.website_id = row.website_id == 0 ? null : row.website_id + updateModel.value.auto_renew = !row.auto_renew + updateModel.value.cert = row.cert + updateModel.value.key = row.key + useRequest(cert.certUpdate(row.id, updateModel.value)) + .onSuccess(() => { + refresh() + window.$message.success('更新成功') + }) + .onComplete(() => { + updateModel.value.domains = [] + updateModel.value.type = 'P256' + updateModel.value.dns_id = null + updateModel.value.account_id = null + updateModel.value.website_id = null + updateModel.value.auto_renew = true + updateModel.value.cert = '' + updateModel.value.key = '' + }) +} + const handleDeployCert = async () => { const promises = deployModel.value.websites.map((website: any) => useRequest(cert.deploy(deployModel.value.id, website)).onSuccess(() => {