From 9d580a6bb718a7630f43d51ca22c7574304190d1 Mon Sep 17 00:00:00 2001 From: admin Date: Sat, 9 May 2026 04:53:12 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3=E7=90=86?= =?UTF-8?q?=E5=90=8E=E5=8F=B0=E9=A1=B5=E9=9D=A2=E5=B8=83=E5=B1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 所有页面统一使用 BasicPage 组件 - 添加面包屑导航支持 - 统一页面标题和描述样式 - 移除控制台页面的应用管理快捷链接 - 优化卡密管理、用户管理、财务管理页面布局 --- frontend/src/pages/agent/cards/create.vue | 62 ++++----- frontend/src/pages/agent/cards/index.vue | 39 +++--- frontend/src/pages/agent/finance/index.vue | 34 +++-- frontend/src/pages/agent/index.vue | 141 ++++++--------------- frontend/src/pages/agent/users/index.vue | 32 ++--- 5 files changed, 114 insertions(+), 194 deletions(-) diff --git a/frontend/src/pages/agent/cards/create.vue b/frontend/src/pages/agent/cards/create.vue index b4df950..21fd987 100644 --- a/frontend/src/pages/agent/cards/create.vue +++ b/frontend/src/pages/agent/cards/create.vue @@ -5,6 +5,7 @@ import { useI18n } from 'vue-i18n' import { useRoute, useRouter } from 'vue-router' import { toast } from 'vue-sonner' +import { BasicPage } from '@/components/global-layout' import api from '@/services/api' const { t } = useI18n() @@ -21,10 +22,6 @@ const form = ref({ quantity: 1, }) -const _selectedApp = computed(() => { - return apps.value.find(a => a.id === Number(form.value.app_id)) -}) - const availableCardTypes = computed(() => { return cardTypes.value.filter(ct => ct.app_id === Number(form.value.app_id)) }) @@ -51,15 +48,15 @@ onMounted(async () => { async function handleGenerate() { if (!form.value.app_id) { - toast.error(t('agent.cards.create.selectApp')) + toast.error('请选择应用') return } if (!form.value.card_type_id) { - toast.error(t('agent.cards.create.selectCardType')) + toast.error('请选择卡类') return } if (form.value.quantity < 1 || form.value.quantity > 100) { - toast.error(t('agent.cards.create.quantityRange')) + toast.error('数量必须在1-100之间') return } @@ -71,17 +68,17 @@ async function handleGenerate() { quantity: form.value.quantity, }) - toast.success(t('agent.cards.create.generateSuccess', { count: data.codes.length })) + toast.success(`成功生成 ${data.codes.length} 张卡密`) const codesText = data.codes.join('\n') await navigator.clipboard.writeText(codesText) - toast.success(t('agent.cards.create.copiedToClipboard')) + toast.success('卡密已复制到剪贴板') router.push('/agent/cards') } catch (error: any) { console.error('Generate cards failed:', error) - toast.error(error.message || t('agent.cards.create.generateFailed')) + toast.error(error.message || '生成卡密失败') } finally { loading.value = false @@ -90,29 +87,24 @@ async function handleGenerate() { diff --git a/frontend/src/pages/agent/cards/index.vue b/frontend/src/pages/agent/cards/index.vue index 9231bdf..701b471 100644 --- a/frontend/src/pages/agent/cards/index.vue +++ b/frontend/src/pages/agent/cards/index.vue @@ -3,6 +3,7 @@ import { Key, Loader2, Plus } from 'lucide-vue-next' import { onMounted, ref } from 'vue' import { useI18n } from 'vue-i18n' +import { BasicPage } from '@/components/global-layout' import api from '@/services/api' const { t } = useI18n() @@ -51,23 +52,19 @@ function getStatusBadge(status: string) { diff --git a/frontend/src/pages/agent/finance/index.vue b/frontend/src/pages/agent/finance/index.vue index be3b29c..2c27e91 100644 --- a/frontend/src/pages/agent/finance/index.vue +++ b/frontend/src/pages/agent/finance/index.vue @@ -3,6 +3,7 @@ import { ArrowDownLeft, ArrowUpRight, Loader2, Receipt, RotateCcw } from 'lucide import { onMounted, ref } from 'vue' import { useI18n } from 'vue-i18n' +import { BasicPage } from '@/components/global-layout' import api from '@/services/api' const { t } = useI18n() @@ -40,9 +41,9 @@ function formatDate(dateStr: string) { function getTypeLabel(type: string) { const map: Record = { - recharge: t('agent.finance.recharge'), - consume: t('agent.finance.consume'), - refund: t('agent.finance.refund'), + recharge: '充值', + consume: '消费', + refund: '退款', } return map[type] || type } @@ -58,21 +59,16 @@ function getTypeClass(type: string) { diff --git a/frontend/src/pages/agent/index.vue b/frontend/src/pages/agent/index.vue index 847ba62..8f36073 100644 --- a/frontend/src/pages/agent/index.vue +++ b/frontend/src/pages/agent/index.vue @@ -1,15 +1,15 @@ diff --git a/frontend/src/pages/agent/users/index.vue b/frontend/src/pages/agent/users/index.vue index 1564856..624f87d 100644 --- a/frontend/src/pages/agent/users/index.vue +++ b/frontend/src/pages/agent/users/index.vue @@ -3,6 +3,7 @@ import { Loader2, Users } from 'lucide-vue-next' import { onMounted, ref } from 'vue' import { useI18n } from 'vue-i18n' +import { BasicPage } from '@/components/global-layout' import api from '@/services/api' const { t } = useI18n() @@ -40,16 +41,11 @@ function formatDate(dateStr: string | null) {