From ea932f27fbeb1b5f22ba92119f8db5ed1d4cd03e Mon Sep 17 00:00:00 2001 From: stefanfeng Date: Wed, 26 Aug 2026 14:01:12 +0800 Subject: [PATCH] feat(avatar): rename Token display to points --- digital-avatar-app/backend/main.py | 8 ++++---- .../backend/services/token_billing.py | 6 +++--- digital-avatar-app/src/router/index.ts | 2 +- digital-avatar-app/src/views/AvatarManage.vue | 13 ++++++++----- digital-avatar-app/src/views/TokenCharge.vue | 10 +++++----- 5 files changed, 21 insertions(+), 18 deletions(-) diff --git a/digital-avatar-app/backend/main.py b/digital-avatar-app/backend/main.py index 57beb2a..5b8349c 100644 --- a/digital-avatar-app/backend/main.py +++ b/digital-avatar-app/backend/main.py @@ -58,10 +58,10 @@ def seed(): db = SessionLocal() try: plan_specs = [ - {"id": "1", "name": "基础套餐", "amount": 2_000_000, "price": 10, "badge": "", "desc": "2M Token"}, - {"id": "2", "name": "标准套餐", "amount": 20_000_000, "price": 100, "badge": "常用", "desc": "20M Token"}, - {"id": "3", "name": "专业套餐", "amount": 250_000_000, "price": 1000, "badge": "加赠25%", "desc": "250M Token"}, - {"id": "4", "name": "企业套餐", "amount": 2_500_000_000, "price": 10000, "badge": "企业推荐", "desc": "2500M Token"}, + {"id": "1", "name": "基础套餐", "amount": 2_000_000, "price": 10, "badge": "", "desc": "2M 积分"}, + {"id": "2", "name": "标准套餐", "amount": 20_000_000, "price": 100, "badge": "常用", "desc": "20M 积分"}, + {"id": "3", "name": "专业套餐", "amount": 250_000_000, "price": 1000, "badge": "加赠25%", "desc": "250M 积分"}, + {"id": "4", "name": "企业套餐", "amount": 2_500_000_000, "price": 10000, "badge": "企业推荐", "desc": "2500M 积分"}, ] for spec in plan_specs: plan = db.query(TokenPlan).filter(TokenPlan.id == spec["id"]).first() diff --git a/digital-avatar-app/backend/services/token_billing.py b/digital-avatar-app/backend/services/token_billing.py index ab763a1..2d483c3 100644 --- a/digital-avatar-app/backend/services/token_billing.py +++ b/digital-avatar-app/backend/services/token_billing.py @@ -82,7 +82,7 @@ def reserve_avatar_tokens( ) -> TokenReservation: user = avatar_owner_user(db, avatar) if not user: - raise InsufficientTokensError("分身尚未关联有效用户,暂时无法使用 Token") + raise InsufficientTokensError("分身尚未关联有效用户,暂时无法使用积分") account = get_or_create_account(db, user.id) reserved = estimate_request_tokens(messages, max_output_tokens) updated = ( @@ -95,7 +95,7 @@ def reserve_avatar_tokens( ) if updated != 1: db.rollback() - raise InsufficientTokensError("Token 余额不足,请充值后继续") + raise InsufficientTokensError("积分余额不足,请充值后继续") db.refresh(account) usage = TokenUsage( user_id=user.id, @@ -142,7 +142,7 @@ def settle_reservation( ) ) if updated != 1: - raise RuntimeError("Token 账户不存在") + raise RuntimeError("积分账户不存在") db.expire_all() account = db.query(TokenAccount).filter(TokenAccount.user_id == reservation.user_id).first() record.prompt_tokens = prompt_tokens diff --git a/digital-avatar-app/src/router/index.ts b/digital-avatar-app/src/router/index.ts index 1edac7d..a2128d9 100644 --- a/digital-avatar-app/src/router/index.ts +++ b/digital-avatar-app/src/router/index.ts @@ -55,7 +55,7 @@ const routes: RouteRecordRaw[] = [ path: '/token/charge', name: 'TokenCharge', component: () => import('@/views/TokenCharge.vue'), - meta: { title: 'Token充值', requiresAuth: true } + meta: { title: '积分充值', requiresAuth: true } }, { path: '/avatar/card', diff --git a/digital-avatar-app/src/views/AvatarManage.vue b/digital-avatar-app/src/views/AvatarManage.vue index 28a5805..83a35ed 100644 --- a/digital-avatar-app/src/views/AvatarManage.vue +++ b/digital-avatar-app/src/views/AvatarManage.vue @@ -24,11 +24,11 @@ - -
+ +
- Token 余额 + 积分余额 {{ tokenBalance.toLocaleString() }} 累计使用 {{ tokenConsumed.toLocaleString() }}
@@ -56,7 +56,7 @@

{{ a.displayName || a.name }}

{{ statusText(a.status) }}

{{ a.description || '暂无描述' }}

- 累计使用 {{ avatarTokenUsage(a.id).toLocaleString() }} Token + 累计使用 {{ avatarTokenUsage(a.id).toLocaleString() }} 积分
@@ -92,6 +92,9 @@ const router = useRouter() const avatarStore = useAvatarStore() const userStore = useUserStore() +// 临时产品开关:余额卡片代码保留,后续改为 true 即可恢复展示。 +const SHOW_POINTS_BALANCE_CARD = false + // 当前登录会会用户的资料(头像 / 昵称) const me = computed(() => userStore.user) @@ -289,7 +292,7 @@ onMounted(() => { background: rgba(255, 255, 255, 0.3); } -/* Token 余额条 */ +/* 积分余额条 */ .token-section { padding: 16px 20px; } diff --git a/digital-avatar-app/src/views/TokenCharge.vue b/digital-avatar-app/src/views/TokenCharge.vue index 5447e65..f518ad0 100644 --- a/digital-avatar-app/src/views/TokenCharge.vue +++ b/digital-avatar-app/src/views/TokenCharge.vue @@ -3,7 +3,7 @@ @@ -12,8 +12,8 @@
当前余额 {{ currentBalance.toLocaleString() }} - Token - 累计使用 {{ totalConsumed.toLocaleString() }} Token + 积分 + 累计使用 {{ totalConsumed.toLocaleString() }} 积分
@@ -30,7 +30,7 @@ >
{{ plan.badge }}
{{ formatTokenAmount(plan.amount) }}
-
Token
+
积分
¥{{ plan.price }}
{{ plan.desc }}
@@ -132,7 +132,7 @@ const doCharge = async () => { const methodText = paymentMethod.value === 'wechat' ? '微信支付' : '支付宝' const res: any = await chargeToken(selectedPlan.value.id) currentBalance.value = res?.balance ?? currentBalance.value - alert(`已通过${methodText}成功充值,当前余额:${currentBalance.value} Token`) + alert(`已通过${methodText}成功充值,当前余额:${currentBalance.value} 积分`) } catch (e) { alert('充值失败,请重试') } finally {