feat(admin): 用量 & 计费页 —— SaaS P2 计量观测面(读 /admin/usage)
管理端「分析」组新增页:全平台 / 单租户的 token · 积分 · 成本口径。 - api.adminUsage():拉 /admin/usage(含 trend / totals / tenants 排行 / 单租户余额); 微单位(×10⁻⁶)前端 ÷1e6 展示。 - UsagePage:租户下拉 + 近7/30天切换;KPI 卡(积分/Token/成本/余额或活跃租户); 积分消耗按天条形趋势(补零连续);全平台口径下各租户排行表(点名下钻单租户)。 - routes 注册 /usage(HashRouter)。 live 验证(preview):全平台两租户排行 + KPI + 趋势条渲染正确;点租户下钻→ 单租户口径 + 当前余额卡;数值与后端自洽;无 console 错误;tsc + 41 vitest 全过。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -6,6 +6,7 @@ import { Soon } from "./components/Soon";
|
||||
|
||||
|
||||
const DashboardPage = lazy(() => import("./pages/DashboardPage").then((m) => ({ default: m.DashboardPage })));
|
||||
const UsagePage = lazy(() => import("./pages/UsagePage").then((m) => ({ default: m.UsagePage })));
|
||||
const ModelsPage = lazy(() => import("./pages/ModelsPage").then((m) => ({ default: m.ModelsPage })));
|
||||
const DatasourcesPage = lazy(() => import("./pages/DatasourcesPage").then((m) => ({ default: m.DatasourcesPage })));
|
||||
const PricingPage = lazy(() => import("./pages/PricingPage").then((m) => ({ default: m.PricingPage })));
|
||||
@@ -32,6 +33,13 @@ export const routes: RouteDef[] = [
|
||||
ready: true,
|
||||
element: <DashboardPage />,
|
||||
},
|
||||
{
|
||||
path: "/usage",
|
||||
label: "用量 & 计费",
|
||||
group: "分析",
|
||||
ready: true,
|
||||
element: <UsagePage />,
|
||||
},
|
||||
{
|
||||
path: "/models",
|
||||
label: "模型",
|
||||
|
||||
Reference in New Issue
Block a user