优化证书生成与正式部署配置

This commit is contained in:
2026-06-15 18:23:46 +08:00
parent f1d7491288
commit 668e0403af
31 changed files with 1603 additions and 145 deletions

View File

@@ -49,22 +49,24 @@
</div>
<el-table :data="certificates" border>
<el-table-column prop="certificate_no" label="证书编号" width="220" />
<el-table-column prop="learner_id" label="学员ID" width="90" />
<el-table-column prop="project_code" label="项目" width="90" />
<el-table-column prop="certificate_name" label="证书名称" min-width="180" />
<el-table-column prop="issue_date" label="发证日期" width="120" />
<el-table-column label="状态" width="100">
<el-table-column prop="certificate_no" label="证书编号" width="180" show-overflow-tooltip />
<el-table-column prop="learner_id" label="学员ID" width="76" />
<el-table-column prop="project_code" label="项目" width="72" />
<el-table-column prop="certificate_name" label="证书名称" min-width="140" show-overflow-tooltip />
<el-table-column prop="issue_date" label="发证日期" width="108" />
<el-table-column label="状态" width="80">
<template #default="{ row }">
<el-tag :type="row.status === 'valid' ? 'success' : 'danger'">{{ statusText(row.status) }}</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" width="330">
<el-table-column label="操作" width="270">
<template #default="{ row }">
<el-button size="small" @click="previewCertificate(row)">预览</el-button>
<el-button size="small" @click="downloadCertificate(row)">下载</el-button>
<el-button size="small" @click="regenerateToken(row)">重置链接</el-button>
<el-button v-if="row.status === 'valid'" size="small" type="danger" @click="voidCertificate(row)">作废</el-button>
<div class="table-actions">
<el-button size="small" @click="previewCertificate(row)">预览</el-button>
<el-button size="small" @click="downloadCertificate(row)">下载</el-button>
<el-button size="small" @click="regenerateToken(row)">重置链接</el-button>
<el-button v-if="row.status === 'valid'" size="small" type="danger" @click="voidCertificate(row)">作废</el-button>
</div>
</template>
</el-table-column>
</el-table>
@@ -221,4 +223,14 @@ onMounted(async () => {
line-height: 1.6;
margin-top: 4px;
}
.table-actions {
display: flex;
gap: 8px;
flex-wrap: nowrap;
}
.table-actions :deep(.el-button + .el-button) {
margin-left: 0;
}
</style>

View File

@@ -8,6 +8,7 @@
"jsx": "preserve",
"resolveJsonModule": true,
"isolatedModules": true,
"skipLibCheck": true,
"noEmit": true,
"lib": ["ES2022", "DOM", "DOM.Iterable"],
"types": []

View File

@@ -1,13 +1,15 @@
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
const apiProxyTarget = process.env.VITE_API_PROXY_TARGET || "http://localhost:8000";
export default defineConfig({
plugins: [vue()],
server: {
port: 5173,
proxy: {
"/api": {
target: "http://localhost:8000",
target: apiProxyTarget,
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, "")
}