feat: 通用授权后台、离线证、Waffo 支付页与仪表盘加强

支持多产品计划展示、LICOFF 离线签发、支付独立配置与调试,以及分析看板;同步更新 README 与集成文档。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Logan.LiandCursor committed 2026-08-12 20:25:46 +08:00
1 parent 0966375076
commit 8cc2c83f9d
41 files changed
+3177 -332

No files matched your search

+10 -2
View File
@@ -17,6 +17,14 @@
</div>
</div>
<el-alert
type="info"
:closable="false"
show-icon
title="本页默认仅展示在线 License。离线序列号请前往「授权管理 → 离线 License」。"
style="margin-bottom: 12px"
/>
<el-table :data="list" v-loading="loading" stripe>
<el-table-column prop="license_key" label="License Key" min-width="220" />
<el-table-column prop="customer_name" label="客户" min-width="100" />
@@ -167,6 +175,7 @@ async function loadData() {
const res = await getLicenses({
page: page.value, page_size: pageSize.value,
keyword: keyword.value, status: statusFilter.value, product_id: productFilter.value,
channel: 'online',
})
list.value = res.data.list || []
total.value = res.data.total
@@ -220,14 +229,13 @@ async function toggle(row, status) {
async function handleForceOffline(act) {
await ElMessageBox.confirm(`确定强制下线设备「${act.device_name || act.device_id}」?`, '提示', { type: 'warning' })
await forceOffline(detail.license.id, act.id)
// 刷新详情 // Logan.Li
const res = await getLicense(detail.license.id)
detail.activations = res.data.activations || []
}
async function exportData() {
try {
const res = await exportLicenses({ status: statusFilter.value, product_id: productFilter.value })
const res = await exportLicenses({ status: statusFilter.value, product_id: productFilter.value, channel: 'online' })
const url = window.URL.createObjectURL(new Blob([res]))
const a = document.createElement('a')
a.href = url