From 93e979ce85e0f24db565739f5950f420f9dfc313 Mon Sep 17 00:00:00 2001 From: cnb <108622528+ascii5@users.noreply.github.com> Date: Wed, 7 Jan 2026 15:58:41 +0800 Subject: [PATCH 1/3] fix(uploader): add key attribute to UploaderPreviewItem to avoid rendering issues --- packages/vant/src/uploader/Uploader.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/vant/src/uploader/Uploader.tsx b/packages/vant/src/uploader/Uploader.tsx index 7c43dadaba7..6d2a385e51e 100644 --- a/packages/vant/src/uploader/Uploader.tsx +++ b/packages/vant/src/uploader/Uploader.tsx @@ -309,6 +309,7 @@ export default defineComponent({ return ( From 44a4857024c2c8e613432f95162c93a73f77c492 Mon Sep 17 00:00:00 2001 From: cnb <108622528+ascii5@users.noreply.github.com> Date: Wed, 7 Jan 2026 16:00:01 +0800 Subject: [PATCH 2/3] test(uploader): add tests for uploader --- packages/vant/src/uploader/test/index.spec.ts | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/packages/vant/src/uploader/test/index.spec.ts b/packages/vant/src/uploader/test/index.spec.ts index d670d31be21..ec3f7cb272d 100644 --- a/packages/vant/src/uploader/test/index.spec.ts +++ b/packages/vant/src/uploader/test/index.spec.ts @@ -430,6 +430,26 @@ test('delete preview image', () => { expect(wrapper.emitted<[File]>('delete')![0]).toBeTruthy(); }); +test('should handle key correctly when delete middle image', () => { + const wrapper = mount(Uploader, { + props: { + modelValue: [ + { url: IMAGE, name: '1' }, + { url: IMAGE, name: '2' }, + { url: IMAGE, name: '3' }, + ], + }, + }); + + // 删除中间图片 + const deleteButtons = wrapper.findAll('.van-uploader__preview-delete'); + deleteButtons[1].trigger('click'); + + expect(wrapper.emitted<[File]>('update:modelValue')![0][0]).toHaveLength(2); + expect(wrapper.html()).toMatchSnapshot(); + expect(wrapper.emitted<[File]>('delete')![0]).toBeTruthy(); +}); + test('before-delete prop return false', () => { const wrapper = mount(Uploader, { props: { @@ -716,7 +736,7 @@ test('expose reuploadFile method', async () => { }, }); - const {reuploadFile} = (wrapper.vm as UploaderInstance); + const { reuploadFile } = wrapper.vm as UploaderInstance; expect(reuploadFile).toBeTypeOf('function'); const input = wrapper.find('.van-uploader__input'); From 563d27cfad0a3e297bd6ce0f89166ce2dd412004 Mon Sep 17 00:00:00 2001 From: cnb <108622528+ascii5@users.noreply.github.com> Date: Wed, 7 Jan 2026 16:01:55 +0800 Subject: [PATCH 3/3] test(uploader): update snaps for uploader test --- .../test/__snapshots__/index.spec.ts.snap | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) diff --git a/packages/vant/src/uploader/test/__snapshots__/index.spec.ts.snap b/packages/vant/src/uploader/test/__snapshots__/index.spec.ts.snap index 0148ac3e1be..0bd45bc6d16 100644 --- a/packages/vant/src/uploader/test/__snapshots__/index.spec.ts.snap +++ b/packages/vant/src/uploader/test/__snapshots__/index.spec.ts.snap @@ -222,6 +222,88 @@ exports[`render preview image 1`] = ` `; +exports[`should handle key correctly when delete middle image 1`] = ` +
+
+
+
+ +
+ + +
+
+
+ + +
+
+
+
+ +
+ + +
+
+
+ + +
+
+
+
+ +
+ + +
+
+
+ + +
+
+
+ + + +
+
+
+`; + exports[`should not render upload input when using readonly prop 1`] = `