6d93c2b9b8
主要变更概述: ================ 1. 清理未使用的函数参数 (TypeScript noUnusedParameters) ------------------------------------------------------ - AppShell.tsx: 移除未使用的 backendHealth prop 及 ServerConnectionHealth 导入 - canvasUtils.ts: 移除 resolveWorkflowVideoModel 的 workflowModel 参数 - canvasWorkflowDeserialize.ts: 同步更新调用方 - CanvasPage.tsx: 移除 resolveWorkflowVideoModel 未使用导入 - HomePage.tsx: 移除 onOpenTokenMonitor、onOpenImageTool 未使用 props - ToolboxSection.tsx: 移除 onOpenImageTool 未使用 prop 及 WebImageWorkbenchTool 类型导入 - ScriptTokensPage.tsx: 移除 formatReportMarkdown 的 script 参数,更新 2 处调用 - TokenUsagePage.tsx: 移除 onOpenImageTool、onSelectView 未使用 props - WorkbenchPage.tsx: 移除 renderComposerToolbar 的 showStop 参数,更新 2 处调用 2. 移除未使用的模块和死代码 -------------------------- 删除以下未在电商模块中使用的功能模块: - 画布模块 (canvas/): CanvasPage, canvasUtils, canvasWorkflow* 等 - 主页模块 (home/): HomePage, ToolboxSection, WelcomeSplash 等 - 工作台模块 (workbench/): WorkbenchPage, ConversationSidebar 等 - 社区模块 (community/, community-review/) - 数字人模块 (digital-human/) - 图片工作台 (image-workbench/) - 其他独立工具页: agent, assets, beta-applications, character-mix, compliance, dialog-generator, more, profile, provider-health, report, resolution-upscale, script-tokens, settings, size-template, subtitle-removal, watermark-removal 3. 移除未使用的公共组件 ---------------------- - AnimatedPanel, BeforeAfterCompare, BetaApplicationModal - CookieConsentBanner, DropZone, EmptyState, NotFoundPage - NotificationCenter, OnboardingTour, OptimizedImage - PageTransition, RechargeModal, ShellIcon, Skeleton - StudioToolLayout, TaskStatusBar, WorkspacePageShell 4. 移除未使用的 API 客户端 -------------------------- - betaApplicationClient, communityClient, conversationClient - draftClient, modelCapabilitiesClient, notificationClient - projectTaskClient, providerHealthClient, publicConfigClient - referenceUploadService, reportClient, scriptEvalClient - uploadWithProgress 5. 移除未使用的工具函数和 hooks ------------------------------- - utils/: imageModelVisibility, mentionTrigger, modelOptions, ossImageOptimize, toolPageUtils - hooks/: useGenerationStatus, useScrollEntrance - scripts/: 所有分析脚本 (check-governance, dynamic-analysis 等) 6. 移除未使用的样式文件 ---------------------- 删除与已移除模块对应的 CSS 文件,保留电商模块专用样式 7. 新增电商模块功能文件 ---------------------- + src/api/generationRecordClient.ts (生成记录客户端) + src/features/ecommerce/ecommerceGenerationPersistence.ts (生成持久化) 验证: - TypeScript 编译 (tsc --noEmit --noUnusedParameters) 零错误通过 - 所有保留文件的功能完整性未受影响
270 lines
6.3 KiB
TypeScript
270 lines
6.3 KiB
TypeScript
import type { ReactNode } from "react";
|
|
|
|
export type WebViewKey =
|
|
| "home"
|
|
| "canvas"
|
|
| "ecommerce"
|
|
| "ecommerceTemplates"
|
|
| "login";
|
|
|
|
export type WebImageWorkbenchTool = "workbench" | "inpaint" | "camera";
|
|
|
|
export type WebAuthMode = "login" | "register";
|
|
|
|
export interface WebApiResultMeta {
|
|
source?: "server" | "preview" | "mock-fallback";
|
|
errorMessage?: string;
|
|
}
|
|
|
|
export interface WebUserSession extends WebApiResultMeta {
|
|
token: string;
|
|
user: {
|
|
id: number | string;
|
|
username: string;
|
|
displayName?: string | null;
|
|
bio?: string | null;
|
|
avatarUrl?: string | null;
|
|
backgroundUrl?: string | null;
|
|
email?: string | null;
|
|
emailVerified?: boolean;
|
|
phone?: string | null;
|
|
authProvider?: string | null;
|
|
sessionId?: string | null;
|
|
sessionStartedAt?: string | null;
|
|
role?: string;
|
|
accountType?: "personal" | "enterprise" | string;
|
|
enterpriseId?: string | null;
|
|
enterpriseName?: string | null;
|
|
enterpriseRole?: "admin" | "employee" | string;
|
|
enterpriseAdminUserId?: number | string | null;
|
|
balanceCents?: number;
|
|
enterpriseBalanceCents?: number;
|
|
maxConcurrency?: number;
|
|
activePackages?: Array<{
|
|
name: string;
|
|
expiresAt: string;
|
|
remainingImage: number;
|
|
remainingVideo: number;
|
|
remainingText: number;
|
|
}>;
|
|
};
|
|
}
|
|
|
|
export interface WebProjectSummary extends WebApiResultMeta {
|
|
id: string;
|
|
name: string;
|
|
description?: string | null;
|
|
thumbnailUrl?: string | null;
|
|
updatedAt: string;
|
|
storyboardCount: number;
|
|
imageCount: number;
|
|
videoCount: number;
|
|
mode?: string;
|
|
}
|
|
|
|
export interface WebGenerationPreviewTask extends WebApiResultMeta {
|
|
id: string;
|
|
title: string;
|
|
type: "image" | "video" | "agent" | "digital-human" | "character-mix";
|
|
status: "queued" | "running" | "completed" | "failed";
|
|
progress: number;
|
|
prompt: string;
|
|
createdAt: string;
|
|
projectId?: string;
|
|
outputUrl?: string;
|
|
}
|
|
|
|
export interface WebUsageSummary extends WebApiResultMeta {
|
|
balanceCents: number;
|
|
enterpriseBalanceCents?: number;
|
|
imageUsed: number;
|
|
videoUsed: number;
|
|
textUsed: number;
|
|
betaUnlimited?: boolean;
|
|
}
|
|
|
|
export interface WebEnterpriseUsageMember {
|
|
userId: number | string;
|
|
username: string;
|
|
displayName?: string | null;
|
|
role: "admin" | "employee" | string;
|
|
usedCents: number;
|
|
taskCount: number;
|
|
lastUsedAt?: string | null;
|
|
}
|
|
|
|
export interface WebEnterpriseUsageRecord {
|
|
id: string;
|
|
userId: number | string;
|
|
username: string;
|
|
model: string;
|
|
taskType: "image" | "video" | "text" | string;
|
|
resolution?: string | null;
|
|
durationSeconds?: number | null;
|
|
amountCents: number;
|
|
prompt?: string | null;
|
|
status: string;
|
|
createdAt: string;
|
|
}
|
|
|
|
export interface WebEnterpriseUsageSummary extends WebApiResultMeta {
|
|
enterpriseId: string;
|
|
enterpriseName: string;
|
|
balanceCents: number;
|
|
totalUsedCents: number;
|
|
members: WebEnterpriseUsageMember[];
|
|
modelBreakdown: Array<{ model: string; usedCents: number; taskCount: number }>;
|
|
dailyTrend: Array<{ date: string; usedCents: number; taskCount: number }>;
|
|
records: WebEnterpriseUsageRecord[];
|
|
}
|
|
|
|
export interface WebAssetItem {
|
|
id: string;
|
|
type: "character" | "scene" | "prop" | "video" | "image" | "asset" | "other";
|
|
name: string;
|
|
description: string;
|
|
imageUrl: string;
|
|
updatedAt: string;
|
|
status: "ready" | "draft" | "reviewing" | "pending" | "failed";
|
|
url?: string | null;
|
|
ossKey?: string | null;
|
|
tags?: string[];
|
|
sourceTaskId?: string | null;
|
|
sourceProjectId?: string | null;
|
|
metadata?: Record<string, unknown>;
|
|
createdAt?: string;
|
|
}
|
|
|
|
export interface WebCanvasWorkflowNode {
|
|
id: string;
|
|
kind: "prompt" | "text" | "image" | "video" | "model" | "output";
|
|
label: string;
|
|
detail: string;
|
|
position: {
|
|
x: number;
|
|
y: number;
|
|
};
|
|
size?: {
|
|
width: number;
|
|
height: number;
|
|
};
|
|
inputs?: WebCanvasWorkflowPort[];
|
|
outputs?: WebCanvasWorkflowPort[];
|
|
assetRef?: WebCanvasWorkflowAssetRef | null;
|
|
taskRef?: WebCanvasWorkflowTaskRef | null;
|
|
params?: Record<string, unknown>;
|
|
previewUrl?: string;
|
|
metadata?: Record<string, unknown>;
|
|
}
|
|
|
|
export interface WebCanvasWorkflowPort {
|
|
id: string;
|
|
type: "text" | "image" | "video" | "asset";
|
|
label?: string;
|
|
}
|
|
|
|
export interface WebCanvasWorkflowAssetRef {
|
|
url: string;
|
|
ossKey?: string | null;
|
|
mediaType: "text" | "image" | "video" | string;
|
|
sourceTaskId?: string | null;
|
|
originalUrl?: string | null;
|
|
expiresAt?: string | null;
|
|
}
|
|
|
|
export interface WebCanvasWorkflowTaskRef {
|
|
taskId: string;
|
|
status: "queued" | "pending" | "running" | "completed" | "failed" | "cancelled";
|
|
resultUrl?: string | null;
|
|
updatedAt?: string | null;
|
|
}
|
|
|
|
export interface WebCanvasWorkflowEdge {
|
|
id: string;
|
|
source: string;
|
|
target: string;
|
|
sourcePort?: WebCanvasWorkflowPort;
|
|
targetPort?: WebCanvasWorkflowPort;
|
|
label?: string;
|
|
animated?: boolean;
|
|
}
|
|
|
|
export interface WebCanvasWorkflowNodePackage {
|
|
id: string;
|
|
title: string;
|
|
nodeIds: Array<{
|
|
kind: "text" | "image" | "video";
|
|
id: string;
|
|
}>;
|
|
collapsed?: boolean;
|
|
collapsedBounds?: {
|
|
left: number;
|
|
top: number;
|
|
width: number;
|
|
height: number;
|
|
} | null;
|
|
updatedAt?: string;
|
|
}
|
|
|
|
export interface WebCanvasWorkflow {
|
|
id: string;
|
|
version: 1;
|
|
schemaVersion?: 1 | 2;
|
|
title: string;
|
|
description: string;
|
|
author?: string;
|
|
source: "blank" | "community";
|
|
settings: {
|
|
model: string;
|
|
ratio: string;
|
|
duration: string;
|
|
resolution: string;
|
|
};
|
|
viewport?: {
|
|
x: number;
|
|
y: number;
|
|
zoom: number;
|
|
};
|
|
nodes: WebCanvasWorkflowNode[];
|
|
edges: WebCanvasWorkflowEdge[];
|
|
packages?: WebCanvasWorkflowNodePackage[];
|
|
}
|
|
|
|
export interface WebCommunityCase {
|
|
id: string;
|
|
title: string;
|
|
author: string;
|
|
tag: string;
|
|
summary: string;
|
|
imageUrl: string;
|
|
workflow: WebCanvasWorkflow;
|
|
favoriteCount?: number;
|
|
likeCount?: number;
|
|
isFavorited?: boolean;
|
|
isLiked?: boolean;
|
|
}
|
|
|
|
export type WebNotificationType =
|
|
| "task_completed"
|
|
| "task_failed"
|
|
| "review_pending"
|
|
| "review_passed"
|
|
| "review_rejected"
|
|
| "credits_low"
|
|
| "session_expired"
|
|
| "info";
|
|
|
|
export interface WebNotification {
|
|
id: string;
|
|
type: WebNotificationType;
|
|
title: string;
|
|
description: string;
|
|
createdAt: string;
|
|
isRead: boolean;
|
|
targetView?: WebViewKey;
|
|
targetId?: string;
|
|
targetType?: string | null;
|
|
readAt?: string | null;
|
|
metadata?: Record<string, unknown>;
|
|
}
|