feat: add local auth billing and usage management

This commit is contained in:
inman committed 2026-08-12 12:13:06 +08:00
1 parent f642b5e71f
commit 196fdde83f
119 files changed
+15695 -2650

No files matched your search

+18 -23
View File
@@ -23,15 +23,13 @@ type SettingsGroup = {
};
type SettingsPayload = {
envPath: string;
modes: {
visual: string;
evolink: string;
seedance: string;
bailian: string;
auth: string;
organization: string;
data: string;
services: {
visual: boolean;
evolink: boolean;
seedance: boolean;
bailian: boolean;
auth: boolean;
organization: boolean;
};
capabilities: Array<{
id: string;
@@ -46,8 +44,8 @@ type SettingsPayload = {
label: string;
engine: string;
engineLabel: string;
mode: string;
modeLabel: string;
connected: boolean;
connectionLabel: string;
reqKey: string;
configurable: boolean;
field?: SettingsField;
@@ -224,13 +222,12 @@ export function SettingsPanel() {
</div>
<div className="settings-service-strip">
<ServiceBadge label="即梦" value={payload?.modes.visual === "real" ? "真实接口" : "Mock"} ready={payload?.modes.visual === "real"} />
<ServiceBadge label="EvoLink" value={payload?.modes.evolink === "real" ? "真实接口" : "Mock"} ready={payload?.modes.evolink === "real"} />
<ServiceBadge label="Seedance" value={payload?.modes.seedance === "real" ? "真实接口" : "Mock"} ready={payload?.modes.seedance === "real"} />
<ServiceBadge label="百炼" value={payload?.modes.bailian === "real" ? "真实接口" : payload?.modes.bailian === "mock" ? "Mock" : "未配置"} ready={payload?.modes.bailian === "real"} />
<ServiceBadge label="账户" value={authModeLabel(payload?.modes.auth)} ready={payload?.modes.auth === "configured"} />
<ServiceBadge label="组织" value={payload?.modes.organization === "configured" ? "已配置" : "待配置"} ready={payload?.modes.organization === "configured"} />
<ServiceBadge label="数据层" value={payload?.modes.data === "supabase" ? "Supabase" : "本地 JSON"} ready={false} />
<ServiceBadge label="即梦" value={serviceStatusLabel(payload?.services.visual)} ready={Boolean(payload?.services.visual)} />
<ServiceBadge label="EvoLink" value={serviceStatusLabel(payload?.services.evolink)} ready={Boolean(payload?.services.evolink)} />
<ServiceBadge label="Seedance" value={serviceStatusLabel(payload?.services.seedance)} ready={Boolean(payload?.services.seedance)} />
<ServiceBadge label="百炼" value={serviceStatusLabel(payload?.services.bailian)} ready={Boolean(payload?.services.bailian)} />
<ServiceBadge label="账户" value={serviceStatusLabel(payload?.services.auth)} ready={Boolean(payload?.services.auth)} />
<ServiceBadge label="组织" value={serviceStatusLabel(payload?.services.organization)} ready={Boolean(payload?.services.organization)} />
</div>
<div className="settings-engine-table" role="table" aria-label="功能引擎">
@@ -260,7 +257,7 @@ export function SettingsPanel() {
) : (
<strong className="settings-engine-value">{assignment.engineLabel}</strong>
)}
<span className={`status ${assignment.mode === "mock" ? "failed" : ""}`}>{assignment.modeLabel}</span>
<span className={`status ${assignment.connected ? "" : "failed"}`}>{assignment.connectionLabel}</span>
<div className="settings-engine-key">
<small>{assignment.reqKey}</small>
</div>
@@ -293,10 +290,8 @@ function ServiceBadge({ label, value, ready }: { label: string; value: string; r
);
}
function authModeLabel(mode?: string) {
if (mode === "configured") return "已启用";
if (mode === "missing") return "待配置";
return "未启用";
function serviceStatusLabel(connected?: boolean) {
return connected ? "已连接" : "待配置";
}
function shortGroupLabel(id: string, title: string) {