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:
@@ -30,6 +30,8 @@ export interface UIFieldConfig {
|
||||
index: number;
|
||||
/** 表单字段名(map_to),对应 Form.Item name */
|
||||
name: string;
|
||||
/** API 声明的 widget 名称(如 "seedance2Content"),供提交时做特殊序列化 */
|
||||
widgetName: string;
|
||||
/** 要渲染的 React 组件 */
|
||||
component: ComponentType<WidgetProps>;
|
||||
/** 显示标签(ui.label → Form.Item label) */
|
||||
@@ -58,7 +60,7 @@ export interface UIFieldConfig {
|
||||
|
||||
// ---------- 文件类型 widget 集合 ----------
|
||||
|
||||
const FILE_WIDGETS = new Set(['imageInput', 'imageList', 'audioList']);
|
||||
const FILE_WIDGETS = new Set(['imageInput', 'imageList', 'audioList', 'videoInput']);
|
||||
|
||||
// ---------- 约束解析 ----------
|
||||
|
||||
@@ -138,6 +140,11 @@ export function useModelUI(
|
||||
minFiles: spec.min_files,
|
||||
maxFiles: spec.max_files,
|
||||
enableSwitch: ui.enable_switch,
|
||||
// seedance2Content:spec 中的媒体文件数量 + 上传供应商
|
||||
imageFiles: (spec.image_files as number) ?? 0,
|
||||
videoFiles: (spec.video_files as number) ?? 0,
|
||||
audioFiles: (spec.audio_files as number) ?? 0,
|
||||
uploadProvider: spec.upload_provider as string | undefined,
|
||||
};
|
||||
|
||||
const isFile = FILE_WIDGETS.has(widget);
|
||||
@@ -148,6 +155,7 @@ export function useModelUI(
|
||||
return {
|
||||
index,
|
||||
name,
|
||||
widgetName: widget,
|
||||
component,
|
||||
label: (ui.label as string) || name,
|
||||
must: (spec.required as boolean) || false,
|
||||
|
||||
Reference in New Issue
Block a user