## Home 模块三栏 VCHSM 重组
- 按渲染归属重新分配文件:ModelSelector/TaskHistory → left/,ModelInputForm/widgets → center/,OutputPreview → right/
- BannerCarousel 移至 shared/views/(全局组件)
- controls/ → widgets/ 重命名,消除与 controllers/ 的命名歧义
- 新增 barrel 文件(left/center/right/shared 各级 index.ts)
## Services 层迁回 src/services/modules/
- 全部 API 类型定义与请求函数从 modules/*/controllers/ 迁回 services/modules/{domain}/
- 恢复原始文件名(model-api.ts → models.ts,task-api.ts → task.ts 等)
- 新增 domain 子文件夹(home/auth/announcement/account)
- 更新全局 ~70 处导入路径
## TaskHistory 提取 Controller + Hook 层
- 新建 left/controllers/task-table-config.ts(常量 + 纯工具函数,零 React 依赖)
- 新建 left/hooks/useTaskTable.tsx(状态管理 + 数据获取 + 列定义 + 滚动同步)
- TaskHistory.tsx 从 915 行精简为 265 行纯视图
## 右键菜单体系完善
- 共享 <ContextMenu> 组件(antd Dropdown 封装,防 Select 冲突)
- 四组菜单定义:任务列表 / 文本输入 / 媒体参考 / 预览区域
- 统一的 ContextMenuItems → AntD MenuProps 转换
## 公告功能修复
- useAnnouncements 增加 isLoggedIn 登录门控,避免未登录时 401 双重请求
- 抽屉打开时触发 refetch(),确保拿到最新数据
Co-Authored-By: Claude <noreply@anthropic.com>
50 lines
1.5 KiB
TypeScript
50 lines
1.5 KiB
TypeScript
// ============================================================
|
|
// preview-area-menu.ts — 任务输出预览区域右键菜单定义
|
|
//
|
|
// 两个子场景:
|
|
// [有预览图]
|
|
// 打开文件所在位置 | 复制到粘贴板(图片)
|
|
// [无预览图 / 未选择任务]
|
|
// 打开保存路径
|
|
//
|
|
// 菜单项由调用方根据当前状态动态选择。
|
|
// ============================================================
|
|
|
|
import type { ContextMenuItems } from '@/shared/components/ContextMenu';
|
|
|
|
export interface PreviewAreaMenuOptions {
|
|
/** 当前是否有预览内容 */
|
|
hasPreview: boolean;
|
|
|
|
onOpenFileLocation: () => void;
|
|
onCopyImageToClipboard: () => void;
|
|
onOpenSavePath: () => void;
|
|
}
|
|
|
|
/** 有预览图时 */
|
|
export function getPreviewImageMenu(opts: PreviewAreaMenuOptions): ContextMenuItems {
|
|
return [
|
|
{
|
|
key: 'open-file-location',
|
|
label: '打开文件所在位置',
|
|
onClick: opts.onOpenFileLocation,
|
|
},
|
|
{
|
|
key: 'copy-image',
|
|
label: '复制到粘贴板(图片)',
|
|
onClick: opts.onCopyImageToClipboard,
|
|
},
|
|
];
|
|
}
|
|
|
|
/** 无预览图 / 未选择任务时(直接触发打开保存路径,返回单一项) */
|
|
export function getPreviewEmptyMenu(opts: PreviewAreaMenuOptions): ContextMenuItems {
|
|
return [
|
|
{
|
|
key: 'open-save-path',
|
|
label: '打开保存路径',
|
|
onClick: opts.onOpenSavePath,
|
|
},
|
|
];
|
|
}
|