refactor: 清理未使用参数、移除死代码、聚焦电商核心模块

主要变更概述:
================

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) 零错误通过
- 所有保留文件的功能完整性未受影响
This commit is contained in:
2026-06-12 11:12:55 +08:00
parent 52e704375c
commit 6d93c2b9b8
184 changed files with 2146 additions and 89530 deletions
@@ -0,0 +1,70 @@
import {
buildGenerationOssScope,
deleteGenerationRecordByClientId,
saveGenerationRecord,
type GenerationRecordAsset,
type SaveGenerationRecordInput,
} from "../../api/generationRecordClient";
export const ecommerceOssScopes = {
productSource: buildGenerationOssScope(["ecommerce", "source", "product"]),
cloneResult: (mode: string) => buildGenerationOssScope(["ecommerce", "result", mode]),
videoSource: buildGenerationOssScope(["ecommerce", "short-video", "source"]),
videoHistory: buildGenerationOssScope(["ecommerce", "short-video", "history"]),
};
export interface EcommerceUnifiedRecordInput {
clientRecordId: string;
title: string;
mode: string;
prompt?: string;
status?: SaveGenerationRecordInput["status"];
sourceImages?: Array<{ url: string; ossKey?: string | null; label?: string }>;
results?: Array<{ url: string; label?: string; mediaType?: "image" | "video" | string; taskId?: string | null }>;
taskIds?: string[];
config?: Record<string, unknown>;
result?: Record<string, unknown>;
metadata?: Record<string, unknown>;
createdAt?: string;
}
export function saveUnifiedEcommerceGenerationRecord(input: EcommerceUnifiedRecordInput): Promise<{ source: "server" | "local"; id: string }> {
const assets: GenerationRecordAsset[] = [
...(input.sourceImages || []).map((item): GenerationRecordAsset => ({
role: "source",
mediaType: "image",
url: item.url,
ossKey: item.ossKey,
label: item.label,
scope: ecommerceOssScopes.productSource,
})),
...(input.results || []).map((item): GenerationRecordAsset => ({
role: "result",
mediaType: item.mediaType || "image",
url: item.url,
label: item.label,
taskId: item.taskId,
scope: item.mediaType === "video" ? ecommerceOssScopes.videoHistory : ecommerceOssScopes.cloneResult(input.mode),
})),
].filter((asset) => Boolean(asset.url));
return saveGenerationRecord({
clientRecordId: input.clientRecordId,
tool: "ecommerce",
mode: input.mode,
title: input.title,
status: input.status || "completed",
prompt: input.prompt,
taskIds: input.taskIds,
assets,
config: input.config,
result: input.result,
metadata: input.metadata,
createdAt: input.createdAt,
updatedAt: new Date().toISOString(),
});
}
export async function deleteEcommerceGenerationRecord(clientRecordId: string): Promise<void> {
await deleteGenerationRecordByClientId(clientRecordId);
}