Files
ele-HeiXiu/src/modules/home/right/controllers/menus/preview-area-menu.ts
YoungestSongMo 904edecd90 refactor: Home 模块 VCHSM 三栏重构 + Services 迁回 + 右键菜单体系 + 公告修复
## 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>
2026-06-30 13:39:38 +08:00

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