chore: 清理设置页多余文案并移除未使用的 License 模板

支付已迁至独立菜单;模板未接入发证流程,前后端入口一并下线。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Logan.LiandCursor committed 2026-08-12 22:01:02 +08:00
1 parent 4c46088f4f
commit 76bba729f1
5 files changed
+20 -190

No files matched your search

-12
View File
@@ -48,18 +48,6 @@ export async function testWaffoConnection(data) {
throw lastError || new Error('调试接口不可用')
}
export function getLicenseTemplates() {
return request({ url: '/settings/license-templates', method: 'get' })
}
export function saveLicenseTemplate(data) {
return request({ url: '/settings/license-templates', method: 'post', data })
}
export function deleteLicenseTemplate(id) {
return request({ url: `/settings/license-templates/${id}`, method: 'delete' })
}
export function getAuditLogs(params) {
return request({ url: '/logs', method: 'get', params })
}
+20 -108
View File
@@ -1,134 +1,46 @@
<template>
<div>
<el-row :gutter="16">
<!-- 系统设置 -->
<el-col :span="12">
<el-card shadow="never">
<template #header>系统设置</template>
<el-form :model="setting" label-width="130px" v-loading="loadingSetting">
<el-form-item label="系统名称"><el-input v-model="setting.system_name" /></el-form-item>
<el-form-item label="默认有效期(天)"><el-input-number v-model="setting.default_duration" :min="0" /></el-form-item>
<el-form-item label="默认最大激活数"><el-input-number v-model="setting.default_max_activations" :min="1" /></el-form-item>
<el-form-item label="到期提醒(天)"><el-input-number v-model="setting.expire_reminder_days" :min="1" /></el-form-item>
<el-form-item label="API 限频"><el-input-number v-model="setting.api_rate_limit" :min="0" /></el-form-item>
<el-form-item label="日志保留(天)"><el-input-number v-model="setting.log_retention_days" :min="0" /></el-form-item>
<el-form-item>
<el-button type="primary" @click="saveSetting">保存设置</el-button>
</el-form-item>
</el-form>
</el-card>
</el-col>
<!-- License 模板 -->
<el-col :span="12">
<el-card shadow="never">
<template #header>
<div class="card-header">
<span>License 模板</span>
<el-button size="small" type="primary" @click="openTemplate">新增模板</el-button>
</div>
</template>
<el-table :data="templates" size="small" stripe>
<el-table-column prop="name" label="名称" min-width="120" />
<el-table-column label="时长" width="90">
<template #default="{ row }">{{ row.duration === 0 ? '永久' : row.duration + '天' }}</template>
</el-table-column>
<el-table-column prop="max_activations" label="激活数" width="80" />
<el-table-column prop="description" label="说明" min-width="120" show-overflow-tooltip />
<el-table-column label="操作" width="120">
<template #default="{ row }">
<el-button size="small" link @click="editTemplate(row)">编辑</el-button>
<el-button size="small" link type="danger" @click="removeTemplate(row)">删除</el-button>
</template>
</el-table-column>
</el-table>
</el-card>
</el-col>
</el-row>
<el-alert
type="info"
:closable="false"
show-icon
title="Waffo 支付配置已迁至「支付」菜单,可在侧边栏直接进入。"
style="margin-top: 16px"
/>
<!-- 模板对话框 -->
<el-dialog v-model="tmplVisible" :title="tmplForm.id ? '编辑模板' : '新增模板'" width="440px">
<el-form :model="tmplForm" label-width="90px">
<el-form-item label="名称"><el-input v-model="tmplForm.name" /></el-form-item>
<el-form-item label="时长(天)"><el-input-number v-model="tmplForm.duration" :min="0" /><span style="margin-left:8px;color:#909399">0=永久</span></el-form-item>
<el-form-item label="激活数"><el-input-number v-model="tmplForm.max_activations" :min="1" /></el-form-item>
<el-form-item label="说明"><el-input v-model="tmplForm.description" type="textarea" :rows="2" /></el-form-item>
<el-card shadow="never" class="settings-card">
<template #header>系统设置</template>
<el-form :model="setting" label-width="140px" v-loading="loadingSetting" style="max-width: 520px">
<el-form-item label="系统名称"><el-input v-model="setting.system_name" /></el-form-item>
<el-form-item label="默认有效期(天)"><el-input-number v-model="setting.default_duration" :min="0" /></el-form-item>
<el-form-item label="默认最大激活数"><el-input-number v-model="setting.default_max_activations" :min="1" /></el-form-item>
<el-form-item label="到期提醒(天)"><el-input-number v-model="setting.expire_reminder_days" :min="1" /></el-form-item>
<el-form-item label="API 限频"><el-input-number v-model="setting.api_rate_limit" :min="0" /></el-form-item>
<el-form-item label="日志保留(天)"><el-input-number v-model="setting.log_retention_days" :min="0" /></el-form-item>
<el-form-item>
<el-button type="primary" @click="saveSetting">保存设置</el-button>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="tmplVisible = false">取消</el-button>
<el-button type="primary" @click="saveTemplate">保存</el-button>
</template>
</el-dialog>
</el-card>
</div>
</template>
<script setup>
import { ref, reactive, onMounted } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import {
getSetting, updateSetting, getLicenseTemplates, saveLicenseTemplate, deleteLicenseTemplate,
} from '@/api/setting'
import { reactive, ref, onMounted } from 'vue'
import { getSetting, updateSetting } from '@/api/setting'
const setting = reactive({})
const loadingSetting = ref(false)
const templates = ref([])
const tmplVisible = ref(false)
const tmplForm = reactive({ id: null, name: '', duration: 365, max_activations: 1, description: '' })
async function loadSetting() {
loadingSetting.value = true
try {
const res = await getSetting()
Object.assign(setting, res.data)
} finally { loadingSetting.value = false }
} finally {
loadingSetting.value = false
}
}
async function saveSetting() {
await updateSetting(setting)
ElMessage.success('设置已保存')
}
async function loadTemplates() {
const res = await getLicenseTemplates()
templates.value = res.data || []
}
function openTemplate() {
Object.assign(tmplForm, { id: null, name: '', duration: 365, max_activations: 1, description: '' })
tmplVisible.value = true
}
function editTemplate(row) {
Object.assign(tmplForm, row)
tmplVisible.value = true
}
async function saveTemplate() {
await saveLicenseTemplate(tmplForm)
tmplVisible.value = false
loadTemplates()
}
async function removeTemplate(row) {
await ElMessageBox.confirm(`确定删除模板「${row.name}」?`, '提示', { type: 'warning' })
await deleteLicenseTemplate(row.id)
loadTemplates()
}
onMounted(() => {
loadSetting()
loadTemplates()
})
onMounted(loadSetting)
</script>
<style scoped>
.card-header { display: flex; justify-content: space-between; align-items: center; }
.settings-card { max-width: 720px; }
</style>