This commit is contained in:
2026-07-18 20:54:48 +08:00
parent 452be6c0a5
commit ca957385f2
9 changed files with 115 additions and 18 deletions
+1 -1
View File
@@ -49,6 +49,6 @@ export const getLogs = (status) => api.get('/logs', { params: { status } })
// Script (通过管理接口获取脚本内容)
export const getScript = (domain, serverName) =>
axios.get(`/api/script/${domain}`, { params: { server_name: serverName } })
axios.get('/api/script', { params: { domain, server_name: serverName } })
export default api
+23 -2
View File
@@ -39,6 +39,8 @@
<button @click="handleIssue(d)" :disabled="d._issuing" class="text-orange-600 hover:underline text-xs disabled:opacity-50">
{{ d._issuing ? '申请中...' : '申请证书' }}
</button>
<button @click="downloadCert(d, 'fullchain')" class="text-teal-600 hover:underline text-xs">下载证书</button>
<button @click="downloadCert(d, 'private')" class="text-teal-600 hover:underline text-xs">下载密钥</button>
<router-link :to="`/domains/${d.id}/edit`" class="text-blue-600 hover:underline text-xs">编辑</router-link>
<button @click="copyDeployCmd(d)" class="text-green-600 hover:underline text-xs">复制部署命令</button>
<router-link :to="`/script/${d.domain}?server=${d.server_name}`" class="text-purple-600 hover:underline text-xs">查看脚本</router-link>
@@ -115,14 +117,33 @@ const copyDeployCmd = async (d) => {
const encodedDomain = encodeURIComponent(d.domain)
let cmd
if (d.platform === 'windows') {
cmd = `Invoke-WebRequest "${baseUrl}/api/script/${encodedDomain}?server=${d.server_name}" -OutFile C:\\scripts\\deploy-cert-${safeName}.ps1`
cmd = `Invoke-WebRequest "${baseUrl}/api/script?domain=${encodedDomain}&server=${encodeURIComponent(d.server_name)}" -OutFile C:\\scripts\\deploy-cert-${safeName}.ps1`
} else {
cmd = `curl -fsSL "${baseUrl}/api/script/${encodedDomain}?server=${d.server_name}" -o /usr/local/bin/deploy-cert-${safeName}.sh && chmod +x /usr/local/bin/deploy-cert-${safeName}.sh`
cmd = `curl -fsSL "${baseUrl}/api/script?domain=${encodedDomain}&server=${encodeURIComponent(d.server_name)}" -o /usr/local/bin/deploy-cert-${safeName}.sh && chmod +x /usr/local/bin/deploy-cert-${safeName}.sh`
}
await navigator.clipboard.writeText(cmd)
showCopied.value = true
setTimeout(() => { showCopied.value = false }, 2000)
}
const downloadCert = (d, fileType) => {
const token = localStorage.getItem('admin_token')
const url = `/admin/api/cert-download/${d.id}/${fileType}`
// 用 fetch 下载,带上 token
fetch(url, { headers: { Authorization: `Bearer ${token}` } })
.then(res => {
if (!res.ok) return res.json().then(e => { throw new Error(e.detail || '下载失败') })
return res.blob()
})
.then(blob => {
const a = document.createElement('a')
a.href = URL.createObjectURL(blob)
a.download = fileType === 'fullchain' ? 'fullchain.pem' : 'private.key'
a.click()
URL.revokeObjectURL(a.href)
})
.catch(e => toast.error(e.message))
}
onMounted(load)
</script>