diff --git a/sundynix-admin/src/pages/DatasourcesPage.tsx b/sundynix-admin/src/pages/DatasourcesPage.tsx index 8a6f578..09bec9b 100644 --- a/sundynix-admin/src/pages/DatasourcesPage.tsx +++ b/sundynix-admin/src/pages/DatasourcesPage.tsx @@ -1,4 +1,5 @@ import { useEffect, useState } from "react"; +import { Link } from "react-router-dom"; import { adminDatasources, listModels, migrateKbStorage, type DatasourceKB, type MigrateKbResult } from "../api"; // 数据源 & RAG:真数据(全平台知识库清单,来自 sundynix_kb/sundynix_doc)。 @@ -71,16 +72,12 @@ export function DatasourcesPage() { {activeEmbedding} - { - // 如果使用 hash 路由或 react-router,可正常导航。这里提示用户去模型页配置 - window.location.hash = "#/models"; - }} - className="text-xs text-violet-600 hover:text-violet-700 font-medium hover:underline flex items-center gap-1" + - 前往模型管理修改 → - + 前往「系统配置 → 模型」修改 → + {/* 运维工具 (RAG 迁移) */} diff --git a/sundynix-admin/src/pages/SettingsPage.tsx b/sundynix-admin/src/pages/SettingsPage.tsx new file mode 100644 index 0000000..cd39e68 --- /dev/null +++ b/sundynix-admin/src/pages/SettingsPage.tsx @@ -0,0 +1,64 @@ +import { useState } from "react"; +import { ModelsPage } from "./ModelsPage"; +import { BillingRules } from "../components/BillingRules"; +import { TopupChannels } from "../components/TopupChannels"; +import { OrderStream } from "../components/OrderStream"; + +// 系统配置:按「域」聚合 —— 配了什么,就在同一处看它相关的规则与数据。 +// 模型 = 模型登记/激活/连通性测试 + 计费规则(token→积分汇率、硬拦截、按模型定价与权重) +// 支付 = 支付渠道配置(兑换码 / 积分包 / 微信参数)+ 订单流水(订单流、对账、人工退款) +// 「计费 & 用量」页只留纯用量观测(消耗趋势/租户排行/发放积分),不再混配置。 +// 提示词有版本历史 + diff + 激活的完整工作流,保留独立页,不塞进 Tab。 + +type Tab = "models" | "payment"; + +const TABS: Array<{ key: Tab; label: string; desc: string }> = [ + { key: "models", label: "模型", desc: "模型登记与激活 · 计费规则与按模型定价" }, + { key: "payment", label: "支付", desc: "支付渠道配置 · 订单流水与对账退款" }, +]; + +export function SettingsPage() { + const [tab, setTab] = useState("models"); + const current = TABS.find((t) => t.key === tab); + + return ( +
+
+
+

系统配置

+

{current?.desc}

+
+ +
+ {TABS.map((t) => ( + + ))} +
+
+ + {/* 模型域:先登记模型,紧接着配它的计价规则 */} + {tab === "models" && ( +
+ + +
+ )} + + {/* 支付域:先配渠道,紧接着看这些渠道产生的订单流水与对账 */} + {tab === "payment" && ( +
+ + +
+ )} +
+ ); +} diff --git a/sundynix-admin/src/pages/UsagePage.tsx b/sundynix-admin/src/pages/UsagePage.tsx index 1476481..c899caf 100644 --- a/sundynix-admin/src/pages/UsagePage.tsx +++ b/sundynix-admin/src/pages/UsagePage.tsx @@ -1,8 +1,5 @@ import { useEffect, useMemo, useState, type ReactNode } from "react"; import { adminUsage, listTenants, type TenantRow, type UsageReport, type UsageTenantSum, type UsageDay } from "../api"; -import { BillingRules } from "../components/BillingRules"; -import { TopupChannels } from "../components/TopupChannels"; -import { OrderStream } from "../components/OrderStream"; import { GrantCreditsModal } from "../components/GrantCreditsModal"; @@ -109,14 +106,7 @@ export function UsagePage() { {/* 发放积分 Modal */} setGrantTenant(null)} onDone={() => void load()} /> - {/* 配置端:计费规则(改规则即对后续任务生效) */} - void load()} /> - - {/* 配置端:充值渠道(兑换码生成/台账 + 积分包定价 + 微信配置,P5.1/P5.2) */} - - - {/* 观测端:充值订单流 + 对账(P5.3) */} - + {/* 本页只做「用量」观测。模型/计价、支付渠道/订单流水均按域收口到「系统配置」页。 */} {/* 观测端:用量结果 */}
diff --git a/sundynix-admin/src/routes.tsx b/sundynix-admin/src/routes.tsx index 8337e7b..82153b6 100644 --- a/sundynix-admin/src/routes.tsx +++ b/sundynix-admin/src/routes.tsx @@ -6,7 +6,7 @@ import { lazy, type ReactNode } from "react"; 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 SettingsPage = lazy(() => import("./pages/SettingsPage").then((m) => ({ default: m.SettingsPage }))); const DatasourcesPage = lazy(() => import("./pages/DatasourcesPage").then((m) => ({ default: m.DatasourcesPage }))); const StatusPage = lazy(() => import("./pages/StatusPage").then((m) => ({ default: m.StatusPage }))); const TasksPage = lazy(() => import("./pages/TasksPage").then((m) => ({ default: m.TasksPage }))); @@ -41,11 +41,11 @@ export const routes: RouteDef[] = [ element: , }, { - path: "models", - label: "模型", + path: "settings", + label: "系统配置", group: "配置", ready: true, - element: , + element: , }, { path: "datasources", diff --git a/sundynix-admin/src/shell/AppShell.tsx b/sundynix-admin/src/shell/AppShell.tsx index df0ceb6..3130338 100644 --- a/sundynix-admin/src/shell/AppShell.tsx +++ b/sundynix-admin/src/shell/AppShell.tsx @@ -18,9 +18,10 @@ const ICON_MAP: Record = { ), - models: ( + settings: ( - + + ), datasources: (