feat(admin-web): expose AI point balance and usage ledger

Surfaces the new AI point quota in the workspace shell and adds a
Personal Center → AI Point Usage page that shows balance, base-char
rule, and the paginated reservation/refund history. Updates shared
types for the QuotaSummary and ledger payloads.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-28 11:34:07 +08:00
parent e307a048d1
commit bf7594ccd8
7 changed files with 536 additions and 4 deletions
+39
View File
@@ -86,6 +86,8 @@ const enUS = {
kolManage: "Prompt Management",
kolDashboard: "Dashboard",
kolProfile: "Profile",
personalCenter: "Personal Center",
aiPointUsage: "AI Point Usage",
},
auth: {
welcomeBack: "Welcome back",
@@ -117,10 +119,31 @@ const enUS = {
quotaTitle: "Plan & Quota",
quotaStatus: "Healthy",
remainingQuota: "Article quota",
aiPoints: "AI points",
resetAt: "Reset at",
userFallback: "Admin",
logout: "Logout",
planFallback: "Free Plan",
aiUsageTitle: "AI Point Usage",
aiUsageRecent: "Recent Usage",
aiUsageEmpty: "No AI point usage yet",
aiUsageBase: "Tiered every {base} chars",
aiUsageRule: "{chars} chars / base {base}",
aiUsagePendingHelp: "Points have been reserved. They will be confirmed once the AI task completes; if generation fails, the points are returned automatically.",
aiUsageTypes: {
article_selection_optimize: "Article Selection Optimize",
template_analyze: "AI Analysis",
template_title_generate: "AI Title Generation",
template_outline_generate: "AI Outline Generation",
kol_prompt_generate: "KOL Prompt Generation",
kol_prompt_optimize: "KOL Prompt Optimize",
},
aiUsageStatus: {
pending: "Processing",
completed: "Charged",
refunded: "Refunded",
failed: "Failed",
},
},
route: {
login: {
@@ -183,6 +206,22 @@ const enUS = {
title: "Image Management",
description: "Manage image assets, including folders, reference analysis, and cover library usage.",
},
aiPoints: {
title: "AI Point Usage",
description: "Review AI point balance, cycle rules, and recent usage records.",
},
},
aiPoints: {
balance: "Available Points",
baseChars: "Base Characters",
ledgerTitle: "Usage Ledger",
ledgerLimit: "Latest {limit} records",
ledgerTotal: "{total} records",
table: {
usageType: "Usage",
points: "Points",
requestChars: "Metered Chars",
},
},
kol: {
marketplace: {