sync: 以本地为准同步全量变更至 GitHub

含四端需求文档、前端/后端/超管/触客宝迭代及部署脚本更新;未拉取远程。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Manus AI
2026-05-30 04:24:56 +08:00
parent 711783baf5
commit 5517457929
579 changed files with 45472 additions and 8111 deletions

View File

@@ -0,0 +1,96 @@
import { apiRequest, ApiResponse } from "./api-utils";
export interface PowerSettings {
tokensPerYuan: number;
range: { min: number; max: number };
note: string;
updatedBy?: string;
updateTime?: string;
}
export interface CatalogItem {
action: number;
slug: string;
displayName: string;
adminName: string;
cost: number;
unit: string;
unitLabel: string;
scenePack: string;
group: string;
status: number;
}
export interface ScenePackGroup {
id: string;
name: string;
desc: string;
items: CatalogItem[];
}
export interface CatalogResponse {
tokensPerYuan: number;
scenePacks: ScenePackGroup[];
catalog: CatalogItem[];
}
export interface TokenPackage {
id: number;
packageCode: string;
name: string;
subtitle: string;
badge: string;
price: number;
originalPrice: number;
tokens: number;
sort: number;
status: number;
}
export interface PowerInsights {
tokensPerYuan: number;
todaySpend: number;
monthSpend: number;
monthYuan: number;
scenePackStats: { id: string; name: string; tokens: number }[];
topProjects: { companyId: number; projectName: string; tokens: number }[];
}
export function getPowerSettings(): Promise<ApiResponse<PowerSettings>> {
return apiRequest("/power-billing/settings");
}
export function updatePowerSettings(tokensPerYuan: number): Promise<ApiResponse<PowerSettings>> {
return apiRequest("/power-billing/settings", "PUT", { tokensPerYuan });
}
export function getPowerCatalog(): Promise<ApiResponse<CatalogResponse>> {
return apiRequest("/power-billing/catalog");
}
export function updateCatalogItem(
slug: string,
patch: Partial<Pick<CatalogItem, "cost" | "displayName" | "adminName" | "status" | "unit">>,
): Promise<ApiResponse<CatalogItem>> {
return apiRequest(`/power-billing/catalog/${encodeURIComponent(slug)}`, "PUT", patch);
}
export function resetCatalogItem(slug: string): Promise<ApiResponse<CatalogItem>> {
return apiRequest(`/power-billing/catalog/reset/${encodeURIComponent(slug)}`, "POST");
}
export function getPowerPackages(): Promise<ApiResponse<{ tokensPerYuan: number; list: TokenPackage[] }>> {
return apiRequest("/power-billing/packages");
}
export function savePowerPackage(payload: Partial<TokenPackage>): Promise<ApiResponse<{ id: number }>> {
return apiRequest("/power-billing/packages", "POST", payload);
}
export function recalcPowerPackages(): Promise<ApiResponse<{ updated: number }>> {
return apiRequest("/power-billing/packages/recalc", "POST");
}
export function getPowerInsights(): Promise<ApiResponse<PowerInsights>> {
return apiRequest("/power-billing/insights");
}