From 174c4ae7499d7e6217b03557e194a36722fe3cc1 Mon Sep 17 00:00:00 2001 From: JyQAQ <45193678+jyqwq@users.noreply.github.com> Date: Wed, 14 Jan 2026 15:38:21 +0800 Subject: [PATCH] =?UTF-8?q?fix(antd=20Upload=20onChange=20Event):=20rewrit?= =?UTF-8?q?e=20onChange=20event=20to=20handle=20upl=E2=80=A6=20(#7098)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(antd Upload onChange Event): rewrite onChange event to handle upload success or error messages * fix(antd Upload onChange Event): rewrite onChange event to handle upload success or error messages * fix(antd Upload onChange Event): rewrite onChange event to handle upload success or error messages --- apps/web-antd/src/adapter/component/index.ts | 11 ++++++++++- playground/src/adapter/component/index.ts | 11 ++++++++++- playground/src/views/examples/form/basic.vue | 9 +++++++++ 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/apps/web-antd/src/adapter/component/index.ts b/apps/web-antd/src/adapter/component/index.ts index 0f002700..f319ad1d 100644 --- a/apps/web-antd/src/adapter/component/index.ts +++ b/apps/web-antd/src/adapter/component/index.ts @@ -424,7 +424,16 @@ const withPreviewUpload = () => { return attrs.beforeUpload?.(file) ?? true; }; - const handleChange = async (event: UploadChangeParam) => { + const handleChange = (event: UploadChangeParam) => { + try { + // 行内写法 handleChange: (event) => {} + attrs.handleChange?.(event); + // template写法 @handle-change="(event) => {}" + attrs.onHandleChange?.(event); + } catch (error) { + // Avoid breaking internal v-model sync on user handler errors + console.error(error); + } fileList.value = event.fileList.filter( (file) => file.status !== 'removed', ); diff --git a/playground/src/adapter/component/index.ts b/playground/src/adapter/component/index.ts index 0f002700..f319ad1d 100644 --- a/playground/src/adapter/component/index.ts +++ b/playground/src/adapter/component/index.ts @@ -424,7 +424,16 @@ const withPreviewUpload = () => { return attrs.beforeUpload?.(file) ?? true; }; - const handleChange = async (event: UploadChangeParam) => { + const handleChange = (event: UploadChangeParam) => { + try { + // 行内写法 handleChange: (event) => {} + attrs.handleChange?.(event); + // template写法 @handle-change="(event) => {}" + attrs.onHandleChange?.(event); + } catch (error) { + // Avoid breaking internal v-model sync on user handler errors + console.error(error); + } fileList.value = event.fileList.filter( (file) => file.status !== 'removed', ); diff --git a/playground/src/views/examples/form/basic.vue b/playground/src/views/examples/form/basic.vue index 40f5930d..52d04319 100644 --- a/playground/src/views/examples/form/basic.vue +++ b/playground/src/views/examples/form/basic.vue @@ -348,6 +348,15 @@ const [BaseForm, baseFormApi] = useVbenForm({ showUploadList: true, // 上传列表的内建样式,支持四种基本样式 text, picture, picture-card 和 picture-circle listType: 'picture-card', + // onChange事件已被重写,如需自定义请在此基础上扩展 + handleChange: ({ file }: { file: UploadFile }) => { + const { name, status } = file; + if (status === 'done') { + message.success(`${name} ${$t('examples.form.upload-success')}`); + } else if (status === 'error') { + message.error(`${name} ${$t('examples.form.upload-fail')}`); + } + }, }, fieldName: 'files', label: $t('examples.form.file'),