|
@@ -3391,3 +3391,32 @@ notices 带 `- ` 前缀),所以重复发生在**上屏那条链路**,不
|
|
|
阉掉去重 → 【23】那句话 ×2 且 compose 触发 失败
|
|
阉掉去重 → 【23】那句话 ×2 且 compose 触发 失败
|
|
|
- 回归全绿(适配层 27/27、多实例 11/11、判空 30/30、聊天任务 33/33、政策卡列表 24/24、DMS 载荷 12/12);
|
|
- 回归全绿(适配层 27/27、多实例 11/11、判空 30/30、聊天任务 33/33、政策卡列表 24/24、DMS 载荷 12/12);
|
|
|
`npm run build` 与 `validate-harness` 通过
|
|
`npm run build` 与 `validate-harness` 通过
|
|
|
|
|
+
|
|
|
|
|
+### 续 14:修「收尾时视图被拽回回答顶部」(用户报的两个滚动问题之一)
|
|
|
|
|
+
|
|
|
|
|
+**用户描述**:① 卡片渲染很快,页面一下子滚动到卡片底部;② 文字快渲染完时,又瞬间返回回答顶部。
|
|
|
|
|
+
|
|
|
|
|
+**② 已定位并修复(代码链路三处,都能指认)**:
|
|
|
|
|
+F073 之后正文是**即时渲染**的(流式期间打字机关着),但**最后一条文本行的
|
|
|
|
|
+`textRowTypingFinished` 一直停在 `false`**(只有 TextContent 的打字机播完才会置 true,
|
|
|
|
|
+流式期间根本不会播)。于是收尾时:
|
|
|
|
|
+1. `hasUnfinishedRevealRows` 恒为真 → `shouldDriveTypewriter` 在 `finishTask` 那一刻翻真
|
|
|
|
|
+2. `visibleInlineDisplayRecordRows` 走「阻塞」分支:**最后一条未完成文本行之后的行**
|
|
|
|
|
+ (正文之后就是 notices / 参考资料)**被从 DOM 里拿掉** → 容器变矮 → 滚动位置被钳制
|
|
|
|
|
+3. 这些行随后挂回来时是**新组件实例** → TextContent 走 `watch-initial` → `startTypewriter(0)`
|
|
|
|
|
+ 把内容重打一遍 → 上报「打字中」→ `isLastAiRowTyping()` 为真 →
|
|
|
|
|
+ `stopAutoScrollAtLastAiRowTopIfNeeded()` 触发 `scrollToPositionInstant(行顶 - 8)`
|
|
|
|
|
+ —— **这就是「瞬间返回回答顶部」**(全仓库只有这一处会把视图滚到回答顶部)
|
|
|
|
|
+
|
|
|
|
|
+**修法**:新增 `markStreamedRowsAsTypingFinished()`,在 `record.contentStreaming` 由真变假时,
|
|
|
|
|
+把已在屏幕上的文本行补记为「打字完成」(它们在流式期间本来就已完整显示)。
|
|
|
|
|
+这样 `hasUnfinishedRevealRows` 为假 → 打字机不再被启用、后面的行不再被藏、也不会上报打字中。
|
|
|
|
|
+
|
|
|
|
|
+**运行过的验证**:`npm run build` 通过;`verify-answer-stream` 165/165;`validate-harness` 通过。
|
|
|
|
|
+⚠️ **观感只能由浏览器确认**(harness 不渲染 Vue 组件)——请刷新后看收尾时是否还会跳。
|
|
|
|
|
+
|
|
|
|
|
+**① 待用户拍板**:卡片的跳是**自动滚动贴底**造成的 ——
|
|
|
|
|
+`handleBusinessRecordRefreshScroll` 在「高度增长 > 80px(`BUSINESS_RECORD_LARGE_HEIGHT_GROWTH`)
|
|
|
|
|
+或本来就在贴底距离内」时会 `scrollToBottom`,卡片是一整块到达(300~900px),
|
|
|
|
|
+于是一步滚到它的**底部**,用户看不到刚拿到的卡片。
|
|
|
|
|
+改这个是**换手感的决定**(不是修 bug),方案见对话。
|