fix(ai-chat): rename _pendingIdSeq → pendingIdSeq (Vue 2 strips underscore-prefix data)
PR-FRONTEND-MEDIA-UPLOAD-FIX-HOTFIX (2026-09-16) Bug: Vue 2 在组件实例化时过滤掉 _ 和 $ 开头的数据属性. `_pendingIdSeq: 0` 在 data() 里定义但 this._pendingIdSeq === undefined. onImagePicked 中 `++this._pendingIdSeq` → NaN, 所有 pendingImage 的 localId 都是 NaN, Vue 'Duplicate keys detected: NaN' 警告. E2E 实测发现 (test_ai_chat_upload.py 20/20 通过): - pendingImages 应有 3 项 ✓ - 每张图 localId 独立递增 (1, 2, 3) ✓ - 3 张图独立上传成功 ✓ - DOM 渲染 3 个 .pending-item + 3 个 uni-image 缩略图 ✓ - canSendPendingImage computed = true → .top-send-btn 出现 ✓ - removePendingImage(localId) → 剩 2 张 ✓ - 失败场景: uploadError 有值 + pending-retry-delete 出现 ✓ 修复: data 里改 pendingIdSeq: 0, 代码里改 ++this.pendingIdSeq 教训: Vue 2 data() 里禁止用 _ 或 $ 前缀的属性名.
This commit is contained in:
@@ -541,7 +541,10 @@ export default {
|
|||||||
// PR-FRONTEND-MEDIA-UPLOAD-FIX (2026-09-16): pendingImages 数组支持 1-9 张图
|
// PR-FRONTEND-MEDIA-UPLOAD-FIX (2026-09-16): pendingImages 数组支持 1-9 张图
|
||||||
// 原 pendingImage 单数对象, 只存第一张, 选 5 张只发 1 张
|
// 原 pendingImage 单数对象, 只存第一张, 选 5 张只发 1 张
|
||||||
// 每项: { localId, tempPath, uploading, uploaded, uploadError, sentWithBatch }
|
// 每项: { localId, tempPath, uploading, uploaded, uploadError, sentWithBatch }
|
||||||
_pendingIdSeq: 0,
|
// ⚠️ Vue 2 会过滤掉 _/$ 开头的数据属性, _pendingIdSeq → undefined → ++undefined = NaN
|
||||||
|
// 所有图 localId 都变 NaN, Vue "Duplicate keys" 警告, 数组错乱.
|
||||||
|
// 必须用非下划线前缀. PR-FRONTEND-MEDIA-UPLOAD-FIX-HOTFIX (2026-09-16)
|
||||||
|
pendingIdSeq: 0,
|
||||||
pendingImages: [],
|
pendingImages: [],
|
||||||
scrollTop: 0,
|
scrollTop: 0,
|
||||||
scrollIntoViewId: null,
|
scrollIntoViewId: null,
|
||||||
@@ -770,7 +773,7 @@ export default {
|
|||||||
const list = Array.isArray(paths) ? paths : (paths ? [paths] : [])
|
const list = Array.isArray(paths) ? paths : (paths ? [paths] : [])
|
||||||
if (!list.length) return
|
if (!list.length) return
|
||||||
list.forEach((path) => {
|
list.forEach((path) => {
|
||||||
const localId = ++this._pendingIdSeq
|
const localId = ++this.pendingIdSeq
|
||||||
const pending = {
|
const pending = {
|
||||||
localId,
|
localId,
|
||||||
tempPath: path,
|
tempPath: path,
|
||||||
|
|||||||
Reference in New Issue
Block a user