From 284296d3e92c183ee754961ca9a4354d70e07f89 Mon Sep 17 00:00:00 2001 From: kang Date: Wed, 27 May 2026 14:58:42 +0800 Subject: [PATCH] auto-save 2026-05-27 14:58 (+2, ~2) --- .memory/worklog.json | 13 +- .../page-2026-05-27T06-54-17-537Z.yml | 220 ++++++++++++++++++ .../page-2026-05-27T06-57-21-699Z.yml | 77 ++++++ web/canvas-app/src/views/Canvas.vue | 9 + 4 files changed, 313 insertions(+), 6 deletions(-) create mode 100644 .playwright-cli/page-2026-05-27T06-54-17-537Z.yml create mode 100644 .playwright-cli/page-2026-05-27T06-57-21-699Z.yml diff --git a/.memory/worklog.json b/.memory/worklog.json index ad6bae4..67eb8c4 100644 --- a/.memory/worklog.json +++ b/.memory/worklog.json @@ -1,11 +1,5 @@ { "entries": [ - { - "files_changed": 3, - "message": "Codex 会话活跃 · 最近命令:codex · 分支 main · 3 项未提交变更 · 最近提交:docs: record width-first layout deployment", - "ts": "2026-05-20T11:05:31Z", - "type": "session-heartbeat" - }, { "files_changed": 3, "hash": "3a52628", @@ -3192,6 +3186,13 @@ "message": "auto-save 2026-05-27 14:47 (~2)", "hash": "22398c1", "files_changed": 2 + }, + { + "ts": "2026-05-27T14:53:13+08:00", + "type": "commit", + "message": "auto-save 2026-05-27 14:53 (+1, ~6)", + "hash": "3c146d6", + "files_changed": 8 } ] } diff --git a/.playwright-cli/page-2026-05-27T06-54-17-537Z.yml b/.playwright-cli/page-2026-05-27T06-54-17-537Z.yml new file mode 100644 index 0000000..71f5ecd --- /dev/null +++ b/.playwright-cli/page-2026-05-27T06-54-17-537Z.yml @@ -0,0 +1,220 @@ +- generic [ref=e95]: + - banner [ref=e96]: + - generic [ref=e97]: + - button [ref=e98] [cursor=pointer]: + - img [ref=e99]: + - img [ref=e100] + - button "指南演示项目" [ref=e102] [cursor=pointer]: + - generic [ref=e103]: 指南演示项目 + - img [ref=e104]: + - img [ref=e105] + - generic [ref=e107]: + - button [ref=e108] [cursor=pointer]: + - img [ref=e109]: + - img [ref=e110] + - button "批量下载素材" [ref=e112] [cursor=pointer]: + - img [ref=e113]: + - img [ref=e114] + - button "API 设置" [ref=e117] [cursor=pointer]: + - img [ref=e118]: + - img [ref=e119] + - generic [ref=e121]: + - generic [ref=e122]: + - generic [ref=e124]: + - generic: + - img + - img: + - group "Edge from node_0 to node_1" [ref=e125] [cursor=pointer]: + - img + - img: + - group "Edge from node_2 to node_3" [ref=e128] [cursor=pointer]: + - img + - generic: + - button "1" [ref=e132] [cursor=pointer] + - button "首帧" [ref=e134] [cursor=pointer]: + - text: 首帧 + - img [ref=e135]: + - img [ref=e136] + - generic: + - group [ref=e138]: + - generic [ref=e140]: + - generic [ref=e141]: + - generic "双击编辑名称" [ref=e142]: 提示词 + - generic [ref=e143]: + - button "复制节点" [ref=e144] [cursor=pointer]: + - img [ref=e145]: + - img [ref=e146] + - button "删除节点" [ref=e149] [cursor=pointer]: + - img [ref=e150]: + - img [ref=e151] + - generic [ref=e156]: + - generic [ref=e158]: 一张白底电商主图,SKG 颈部按摩仪悬浮展示,柔和自然光,高级产品摄影。 + - button "✨ AI 润色" [ref=e159] [cursor=pointer]: + - generic [ref=e160]: ✨ + - text: AI 润色 + - img [ref=e163] [cursor=pointer]: + - img [ref=e164] + - group [ref=e166]: + - generic [ref=e168]: + - generic [ref=e169]: + - generic "双击编辑名称" [ref=e170]: 文生图 + - generic [ref=e171]: + - button "复制节点" [ref=e172] [cursor=pointer]: + - img [ref=e173]: + - img [ref=e174] + - button "删除节点" [ref=e177] [cursor=pointer]: + - img [ref=e178]: + - img [ref=e179] + - generic [ref=e184]: + - generic [ref=e185]: + - generic [ref=e186]: 模型 + - button "自动" [ref=e187] [cursor=pointer]: + - text: 自动 + - img [ref=e188]: + - img [ref=e189] + - generic [ref=e191]: + - generic [ref=e192]: 画质 + - button "标准" [ref=e193] [cursor=pointer]: + - text: 标准 + - img [ref=e194]: + - img [ref=e195] + - generic [ref=e197]: + - generic [ref=e198]: 尺寸 + - button "竖图 2:3" [ref=e200] [cursor=pointer]: + - text: 竖图 2:3 + - img [ref=e201]: + - img [ref=e202] + - generic [ref=e204]: + - generic [ref=e205]: 提示词 1个 + - generic [ref=e206]: 参考图 ○ + - button "◆ 立即生成" [ref=e207] [cursor=pointer]: + - generic [ref=e208]: ◆ + - text: 立即生成 + - group [ref=e211]: + - generic [ref=e213]: + - generic [ref=e215]: + - generic [ref=e216]: + - generic "双击编辑名称" [ref=e217]: 上传参考图 + - button "设置公开(可被 @ 引用)" [ref=e218] [cursor=pointer]: + - switch [checked] [ref=e219] + - generic [ref=e222]: + - button [ref=e223] [cursor=pointer]: + - img [ref=e224]: + - img [ref=e225] + - button [ref=e228] [cursor=pointer]: + - img [ref=e229]: + - img [ref=e230] + - button [ref=e233] [cursor=pointer]: + - img [ref=e234]: + - img [ref=e235] + - generic [ref=e241]: + - generic [ref=e242] [cursor=pointer]: + - img [ref=e243]: + - img [ref=e244] + - generic [ref=e249]: 拖放图片或点击上传 + - button "Choose File" [ref=e250] + - generic [ref=e253]: 或 + - generic [ref=e255]: + - textbox "输入图片地址..." [ref=e256] + - button "预览" [disabled] [ref=e257] + - img [ref=e260] [cursor=pointer]: + - img [ref=e261] + - group [ref=e263]: + - generic [ref=e265]: + - generic [ref=e266]: + - generic "双击编辑名称" [ref=e267]: 图生视频 + - generic [ref=e268]: + - button "复制节点" [ref=e269] [cursor=pointer]: + - img [ref=e270]: + - img [ref=e271] + - button "删除节点" [ref=e274] [cursor=pointer]: + - img [ref=e275]: + - img [ref=e276] + - generic [ref=e281]: + - generic [ref=e282]: + - generic [ref=e283]: 模型 + - button "Seedance 2.0 Fast" [ref=e284] [cursor=pointer]: + - text: Seedance 2.0 Fast + - img [ref=e285]: + - img [ref=e286] + - generic [ref=e288]: + - generic [ref=e289]: 比例 + - button "9:16" [ref=e290] [cursor=pointer]: + - text: 9:16 + - img [ref=e291]: + - img [ref=e292] + - generic [ref=e294]: + - generic [ref=e295]: 时长 + - button "5s" [ref=e296] [cursor=pointer]: + - text: 5s + - img [ref=e297]: + - img [ref=e298] + - generic [ref=e300]: + - generic [ref=e301]: 提示词 ○ + - generic [ref=e302]: 首帧 ○ + - generic [ref=e303]: 尾帧 ○ + - generic [ref=e304]: 参考图 ○ + - button "生成视频" [ref=e305] [cursor=pointer]: + - img [ref=e306]: + - img [ref=e307] + - text: 生成视频 + - img [ref=e312] + - img "Vue Flow mini map" [ref=e316] + - complementary [ref=e323]: + - button "添加节点" [ref=e324] [cursor=pointer]: + - img [ref=e325]: + - img [ref=e326] + - button "工作流模板" [ref=e327] [cursor=pointer]: + - img [ref=e328]: + - img [ref=e329] + - button "文本" [ref=e340] [cursor=pointer]: + - img [ref=e341]: + - img [ref=e342] + - button "图片" [ref=e346] [cursor=pointer]: + - img [ref=e347]: + - img [ref=e348] + - button "文生图" [ref=e353] [cursor=pointer]: + - img [ref=e354]: + - img [ref=e355] + - button "视频生成" [ref=e362] [cursor=pointer]: + - img [ref=e363]: + - img [ref=e364] + - button "撤销" [disabled] [ref=e367]: + - img [ref=e368]: + - img [ref=e369] + - button "重做" [disabled] [ref=e371]: + - img [ref=e372]: + - img [ref=e373] + - generic [ref=e375]: + - button "适应视图" [ref=e376] [cursor=pointer]: + - img [ref=e377]: + - img [ref=e378] + - generic [ref=e380]: + - button [ref=e381] [cursor=pointer]: + - img [ref=e382]: + - img [ref=e383] + - generic [ref=e384]: 82% + - button [ref=e385] [cursor=pointer]: + - img [ref=e386]: + - img [ref=e387] + - generic [ref=e388]: + - generic [ref=e389]: + - textbox "你可以试着说\"帮我生成一个二次元的卡通角色\"" [ref=e390] + - generic [ref=e391]: + - button "✨ AI 润色" [disabled] [ref=e393] + - generic [ref=e394]: + - generic [ref=e395]: + - switch [ref=e396] + - text: 自动执行 + - button [ref=e399] [cursor=pointer]: + - img [ref=e400]: + - img [ref=e401] + - generic [ref=e403]: + - generic [ref=e404]: 推荐: + - button "魔法森林" [ref=e405] [cursor=pointer] + - button "三只小猫" [ref=e406] [cursor=pointer] + - button "多角度分镜" [ref=e407] [cursor=pointer] + - button "夏日田野" [ref=e408] [cursor=pointer] + - button "换一组推荐" [ref=e409] [cursor=pointer]: + - img [ref=e410]: + - img [ref=e411] \ No newline at end of file diff --git a/.playwright-cli/page-2026-05-27T06-57-21-699Z.yml b/.playwright-cli/page-2026-05-27T06-57-21-699Z.yml new file mode 100644 index 0000000..c0fa5d7 --- /dev/null +++ b/.playwright-cli/page-2026-05-27T06-57-21-699Z.yml @@ -0,0 +1,77 @@ +- generic [ref=e4]: + - banner [ref=e5]: + - generic [ref=e6]: + - button [ref=e7] [cursor=pointer]: + - img [ref=e8]: + - img [ref=e9] + - button "API 设置" [ref=e11] [cursor=pointer]: + - img [ref=e12]: + - img [ref=e13] + - main [ref=e15]: + - generic [ref=e16]: + - generic [ref=e17]: + - img "SKG" + - heading "SKG" [level=1] [ref=e18] + - generic [ref=e19]: + - generic [ref=e20]: + - textbox "输入你的创意,开始新项目" [ref=e21] + - button [ref=e24] [cursor=pointer]: + - img [ref=e25]: + - img [ref=e26] + - generic [ref=e28]: + - generic [ref=e29]: 推荐: + - button "魔法森林" [ref=e30] [cursor=pointer] + - button "三只小猫" [ref=e31] [cursor=pointer] + - button "多角度分镜" [ref=e32] [cursor=pointer] + - button "夏日田野" [ref=e33] [cursor=pointer] + - button "换一组推荐" [ref=e34] [cursor=pointer]: + - img [ref=e35]: + - img [ref=e36] + - generic [ref=e39]: + - generic [ref=e40]: + - heading "我的项目" [level=2] [ref=e41] + - button "新建项目" [ref=e42] [cursor=pointer]: + - img [ref=e43]: + - img [ref=e44] + - text: 新建项目 + - generic [ref=e45]: + - generic [ref=e46]: + - generic [ref=e47] [cursor=pointer]: + - generic [ref=e48]: + - img [ref=e50]: + - img [ref=e51] + - generic [ref=e55]: 打开项目 + - paragraph [ref=e56]: Video Sync Test + - paragraph [ref=e57]: 1分钟前 + - button [ref=e59] [cursor=pointer]: + - img [ref=e60]: + - img [ref=e61] + - generic [ref=e65]: + - generic [ref=e66] [cursor=pointer]: + - generic [ref=e67]: + - img [ref=e69]: + - img [ref=e70] + - generic [ref=e74]: 打开项目 + - paragraph [ref=e75]: 指南演示项目 + - paragraph [ref=e76]: 23小时前 + - button [ref=e78] [cursor=pointer]: + - img [ref=e79]: + - img [ref=e80] + - generic [ref=e84]: + - generic [ref=e85] [cursor=pointer]: + - generic [ref=e86]: + - img [ref=e88]: + - img [ref=e89] + - generic [ref=e93]: 打开项目 + - paragraph [ref=e94]: 未命名项目 + - paragraph [ref=e95]: 23小时前 + - button [ref=e97] [cursor=pointer]: + - img [ref=e98]: + - img [ref=e99] + - complementary [ref=e103]: + - button "新建项目" [ref=e104] [cursor=pointer]: + - img [ref=e105]: + - img [ref=e106] + - button "我的项目" [ref=e109] [cursor=pointer]: + - img [ref=e110]: + - img [ref=e111] \ No newline at end of file diff --git a/web/canvas-app/src/views/Canvas.vue b/web/canvas-app/src/views/Canvas.vue index 9d597f0..6115edf 100644 --- a/web/canvas-app/src/views/Canvas.vue +++ b/web/canvas-app/src/views/Canvas.vue @@ -639,6 +639,12 @@ const pendingVideoNodes = () => nodes.value.filter(node => node.type === 'video' && node.data?.taskId && !node.data?.url ) +const persistVideoSyncResult = () => { + window.setTimeout(() => { + saveProject() + }, 0) +} + const syncPendingVideoNodes = async () => { const pending = pendingVideoNodes() if (!pending.length) return @@ -663,6 +669,7 @@ const syncPendingVideoNodes = async () => { syncError: '', updatedAt: Date.now() }) + persistVideoSyncResult() window.$message?.success('视频生成成功,已自动回填到画布') return } @@ -677,6 +684,7 @@ const syncPendingVideoNodes = async () => { syncError: '', updatedAt: Date.now() }) + persistVideoSyncResult() window.$message?.error(item.error || '视频生成失败') return } @@ -702,6 +710,7 @@ const syncPendingVideoNodes = async () => { syncError: '', updatedAt: Date.now() }) + persistVideoSyncResult() return }