Files
omniai-ds-code-package/src/types.ts
T
stringadmin 6d93c2b9b8 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) 零错误通过
- 所有保留文件的功能完整性未受影响
2026-06-12 11:12:55 +08:00

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>;
}