三栏布局 - ResizeObserver 等比例分配替代固定默认值恢复 - 修复拖拽+窗口调整竞态卡死(needsRecalcRef 延迟补算) - containerRef.current 动态读取 DOM 替代闭包 el Seedance2Content - 从占位文本重构为内容编排控件(文本+图片/视频/音频上传) - 根据 spec.image_files/video_files/audio_files 动态渲染上传区域 - 值 JSON 序列化 → 提交时转 ContentItem[](text/image_url/video_url/audio_url) 图片上传兼容视频文件 - buildAccept 根据 file_filter 区分 image/video 前缀 - createMediaBeforeUpload 动态放行 video/* MIME - 公共模块 media-upload-utils.ts 本地存储基建 - sql.js (WASM SQLite) + safeStorage 加密持久化 - 8个IPC文件操作通道 + resolveSafe 路径穿越防护 - <userData>/heixiu-data/ 沙箱 + JWT用户隔离 - 7表DDL + 游标分页 + LRU媒体淘汰 其他 - 修复 errorMessageRef 渲染期写入警告 - 媒体预览回退直接URL(<img>无CORS限制)+ output_type类型补充 - CSP wasm-unsafe-eval + https: CDN媒体源
102 lines
4.6 KiB
Markdown
102 lines
4.6 KiB
Markdown
# TODO — 船长·HeiXiu 待办与优化清单
|
||
|
||
> 最后更新:2026-06-18
|
||
|
||
---
|
||
|
||
## 🟡 功能待完善(优先级中)
|
||
|
||
### 设置页面
|
||
|
||
- [ ] 设置数据通过 IPC 同步到主进程(当前仅渲染进程 localStorage)
|
||
- [ ] 存储路径有效性校验(检查路径是否存在)
|
||
- [ ] "恢复默认设置"按钮
|
||
|
||
### 路由与页面
|
||
|
||
- [x] 账户信息页面(`/account`) — `AccountInfo.tsx`,AuthAPI.getUserInfo() 驱动
|
||
- [x] 充值页面(`/recharge`) — `RechargePage.tsx`,创建订单 → 支付状态跟踪
|
||
- [x] 订单明细页面(`/orders`) — `OrdersPage.tsx`,状态筛选 + 分页 + 继续支付 + 轮询
|
||
- [ ] 合规素材库页面(`/compliance-assets`)
|
||
- [ ] 项目管理页面(`/projects`,企业版)
|
||
- [ ] 会员页面(`/vip`)
|
||
- [ ] 消费记录页面
|
||
- [x] 本地数据管理(加载历史/保存到磁盘/清理缓存) — `DataManageSetting` + sql.js 存储
|
||
|
||
### 媒体与文件
|
||
|
||
- [ ] 媒体文件本地下载+缓存(主进程 HTTP 无 CORS 限制,替代渲染进程 axios)
|
||
- [ ] CDN 签名过期检测(主进程发 HEAD 请求读 `SignatureExpired` 响应体)
|
||
- [ ] 列表页"下一页"懒加载集成(TaskHistory / OrdersPage 调用 `fetchAndSync*`)
|
||
- [ ] 参数回填 UI(选择模型时显示历史参数下拉)
|
||
- [ ] 右键"在文件夹中查看"功能(媒体预览右键菜单)
|
||
|
||
### 导航栏
|
||
|
||
- [ ] 导航配置中的 `action: 'external'` 统一管理(白名单校验)
|
||
- [ ] 未登录点击需登录项 → 登录成功后自动跳转到目标页
|
||
|
||
### 公告
|
||
|
||
- [x] 公告数据获取与展示(AnnouncementDrawer + fetchAnnouncements API)
|
||
- [ ] 公告已读/未读状态
|
||
- [ ] 公告红点/角标提醒(有新公告时导航栏图标变化)
|
||
- [ ] 公告缓存(减少重复请求)
|
||
|
||
### 任务
|
||
|
||
- [x] 任务状态轮询(批量轮询 + Context 桥接 + 自适应间隔)
|
||
- [ ] 任务列表导出 CSV 功能完善
|
||
- [ ] 任务重试/重新提交
|
||
|
||
---
|
||
|
||
## 🟢 工程优化(优先级低)
|
||
|
||
### 构建与开发
|
||
|
||
- [ ] CI/CD 流水线(GitHub Actions / 自建)
|
||
- [ ] 代码签名自动化(Windows Authenticode / macOS notarization)
|
||
- [ ] E2E 测试用例编写(Playwright)
|
||
- [ ] 单元测试覆盖(Vitest)
|
||
- [ ] Bundle 体积分析优化(rollup-plugin-visualizer 已有,定期检查)
|
||
|
||
### 代码质量
|
||
|
||
- [ ] 移除未使用的 `shared/` 类型和常量
|
||
- [ ] 统一 IPC 通道注册/注销模式(避免重复监听)
|
||
- [ ] React 组件 lazy loading(React.lazy + Suspense)
|
||
- [ ] 错误边界组件(ErrorBoundary)
|
||
- [ ] 审计其余 useEffect 缺少清理函数的位置(StrictMode 双重挂载可能导致重复请求,参考 AppProvider 的 aborted 模式)
|
||
|
||
### 文档
|
||
|
||
- [ ] API 接口文档(Swagger / 手动维护)
|
||
- [ ] 组件文档(Storybook)
|
||
- [ ] 用户操作手册
|
||
|
||
---
|
||
|
||
## ⚠️ 已知技术债务
|
||
|
||
| 问题 | 说明 | 影响 |
|
||
|-----------------|---------------------------------------|----------------|
|
||
| localStorage 依赖 | 所有持久化数据依赖 localStorage | 清理浏览器数据会丢失所有配置 |
|
||
| IPC 监听器 | useUpdater 已改为单例,其他 IPC hook 可能也有类似问题 | 长期运行可能内存泄漏 |
|
||
| `test.py` | 仓库根目录残留测试文件 | 无实际作用,应清理 |
|
||
| `null` 文件 | 仓库根目录名为 null 的文件 | 构建产物或误操作残留 |
|
||
|
||
---
|
||
|
||
## 📋 下次开发计划
|
||
|
||
1. **任务列表导出 CSV**(`task.ts` 已定义 `exportTaskCSV` API,前端未对接下载按钮)
|
||
2. **文件上传端点确认**(`/api/v1/upload` 待后端确认,当前 useFileUpload 已完成前端集成)
|
||
3. **合规素材库页面**(功能待完善 — 按 QT 原版设计,以 Modal/Drawer 叠加而非路由跳转实现)
|
||
4. **各页面 nav 导航补齐**(后续页面优先使用叠加模式,遵循 QT 多窗口模型 → 见 WORKLOG 2026-06-07)
|
||
5. **leftWidth / rightWidth / taskPage 加 localStorage 持久化**(UX 优化:刷新页面后保持用户偏好;已通过路由去路由化解决组件卸载问题,但
|
||
localStorage 持久层仍未实现)
|
||
6. **轮播图关闭按钮 localStorage 持久化**(关闭按钮已实现,待做:localStorage 记录关闭时间戳,超过 N 天再显示)
|
||
7. **短信发送接入人机验证**(后期优化,需后端配合:`sendSms` 接口增加 `captcha_token` 参数 + 前端滑块/图形验证组件。当前仅靠
|
||
60s 冷却按钮 + 后端限流,桌面端 ASAR 可解包 + DevTools 网络面板 + 代理抓包均能直接暴露 API,纯前端限制对脚本攻击无效)
|