feat: 三栏比例缩放 + SeedanceContent视频上传 + 本地存储基建 (0.0.22)
三栏布局 - 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媒体源
This commit is contained in:
46
CHANGELOG.md
46
CHANGELOG.md
@@ -1,6 +1,52 @@
|
||||
# 更新日志
|
||||
|
||||
> 每次发版前修改此文件,`npm run build:win` 打包后会自动读取生成 update-info.json。
|
||||
---
|
||||
## 0.0.22(2026-06-18)
|
||||
|
||||
**三栏布局比例缩放 + SeedanceContent 视频参考上传 + 本地存储基建**
|
||||
|
||||
### 三栏布局:比例自适应缩放
|
||||
|
||||
- ResizeObserver 改为**等比例分配**策略(替代固定默认值恢复):窗口 Snap/最大化/手动缩放时左-中-右三栏按当前比例同步缩放
|
||||
- 修复拖拽期间窗口缩放竞态:`handleMouseUp` 即时清除 `draggingRef` + `needsRecalcRef` 延迟补算,解决拖拽中最大化后放开鼠标布局卡死
|
||||
- 使用 `containerRef.current` 动态读取 DOM(替代闭包捕获 mount 时 `el`),避免 Provider 重渲染后读到旧 DOM
|
||||
|
||||
### Seedance2Content 内容编排
|
||||
|
||||
- `SeedanceContent` 从占位文本重构为完整内容编排控件:文本描述 + 参考图片/视频/音频三条上传通道
|
||||
- 根据 `param_schema[].spec.image_files / video_files / audio_files` 动态渲染对应上传区域,**不依赖 widget 名称的隐式约定**
|
||||
- 内部值类型 `{ text, imageUrls[], videoUrls[], audioUrls[] }` → 表单 JSON 字符串 → 提交时序列化为 API `ContentItem[]`(`text` / `image_url` / `video_url` / `audio_url` 判别联合)
|
||||
- `useModelUI` 新增 `widgetName` 字段 + `spec` 媒体文件计数传参(`imageFiles`/`videoFiles`/`audioFiles`/`uploadProvider`)
|
||||
- `ModelInputForm.doSubmit` 新增 `seedance2Content` 分支序列化逻辑
|
||||
|
||||
### 图片上传兼容视频文件
|
||||
|
||||
- `ImageInput` / `ImageListInput`:`buildAccept` 根据 `file_filter` 自动区分 `image/` vs `video/` 前缀(原硬编码 `image/` 导致视频文件不可选)
|
||||
- `createMediaBeforeUpload` 根据 `filters` 动态放行 `video/*` MIME
|
||||
- 公共模块 `media-upload-utils.ts`:`VIDEO_EXTENSIONS` + `buildAccept()` + `createMediaBeforeUpload()` 三组件共享
|
||||
|
||||
### 本地存储基建(sql.js + safeStorage)
|
||||
|
||||
- **数据库**:sql.js(WASM SQLite)渲染进程内存数据库,DDL 7 张表(task_records / order_records / param_history / media_cache / sync_cursor / app_settings / _schema_version)
|
||||
- **加密**:safeStorage(OS DPAPI/Keychain)加密持久化,base64 编解码管线
|
||||
- **IPC 文件操作**:8 个双向 IPC 通道(FILE_WRITE/READ/DELETE/MAKE_DIR/SHOW_ITEM_IN_FOLDER/GET_DATA_DIR/FILE_SIZE/FILE_EXISTS),`resolveSafe()` 路径穿越防护
|
||||
- **数据目录**:`<userData>/heixiu-data/`(沙箱内),含 `heixiu.db`(加密镜像)+ `media-cache/<userId>/<date>/`
|
||||
- **用户隔离**:JWT `user_id` 区分数据,`getTodayKey()` 日期分桶
|
||||
- **同步策略**:本地优先 + 手动触发("加载历史数据"按钮),游标分页(`sync_cursor` 表),每批 100 条
|
||||
- **设置集成**:`DataManageSetting` 卡片(缓存统计 + 加载历史数据 + 保存到磁盘 + 清理缓存)
|
||||
|
||||
### 媒体输出预览优化
|
||||
|
||||
- `<img>/<video>` 直接加载远程 URL(无 CORS 限制),移除阻塞式 axios 下载
|
||||
- 类型检测:URL 扩展名正则 + `output_type` 补充(CDN 无扩展名链接)
|
||||
- `<Image fallback>` 加载失败占位图
|
||||
|
||||
### 其他
|
||||
|
||||
- 修复 `errorMessageRef` 在渲染期间写入(react-hooks/refs 警告)
|
||||
- CSP 添加 `wasm-unsafe-eval` 支持 WebAssembly + `https:` CDN 媒体源
|
||||
|
||||
---
|
||||
## 0.0.21(2026-06-15)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user