diff --git a/static/src/components/chat/quickdock/FileWindow.vue b/static/src/components/chat/quickdock/FileWindow.vue index 1169f4e1..393f75b3 100644 --- a/static/src/components/chat/quickdock/FileWindow.vue +++ b/static/src/components/chat/quickdock/FileWindow.vue @@ -146,11 +146,19 @@ async function playEnter(row: Row, delay = 0) { }, 380); } +// 首次(重)挂载的水合渲染一律静态:移动端↔桌面端切换时组件随 QuickDock +// 整体 v-if 卸载重挂,immediate watch 立即以现有数据触发;此时 editedFilesLive +// 可能是任务期 socket 事件残留的 true(socket 是最后一个写入者,之后没有 +// REST 回填重置它,与待办不同),不拦截会把全部行误判为「运行期新增」重播 +// 进入动画。只有挂载后 store 的新更新才允许走 live 动画路径。 +let hydrated = false; + watch( editedFiles, (list) => { // live=true 来自任务期实时事件(播动画);false 来自加载/bootstrap(静态呈现) - const live = quickDock.editedFilesLive; + const live = quickDock.editedFilesLive && hydrated; + hydrated = true; const byPath = new Map(list.map((item) => [item.path, item])); // 移除已消失的行(文件被删除 / 对话切换清空) diff --git a/static/src/components/chat/quickdock/RunnerDetailPanel.vue b/static/src/components/chat/quickdock/RunnerDetailPanel.vue index 5f8eed93..257e1afe 100644 --- a/static/src/components/chat/quickdock/RunnerDetailPanel.vue +++ b/static/src/components/chat/quickdock/RunnerDetailPanel.vue @@ -8,6 +8,7 @@ {{ title }} {{ statusText }} + {{ tokensText }}