From d6c54de659c14717190f8215e24cdb0a9c789c92 Mon Sep 17 00:00:00 2001 From: keven1024 Date: Sun, 5 Apr 2026 10:32:51 +0800 Subject: [PATCH] feat: add file deduplication logic in FileUploadField component to prevent duplicate file uploads from clipboard and file selection --- front/components/Field/FileUploadField.vue | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/front/components/Field/FileUploadField.vue b/front/components/Field/FileUploadField.vue index b906971..9b5e963 100644 --- a/front/components/Field/FileUploadField.vue +++ b/front/components/Field/FileUploadField.vue @@ -12,6 +12,17 @@ const props = defineProps<{ }>() const { value, setValue } = useField(props?.name, props?.rules) const { t } = useI18n() + +const filterOutSameFile = (files: File[] | undefined, targetFile: File[] | undefined) => { + return files?.filter((file) => !targetFile?.some((r) => r?.name === file?.name && r?.type === file?.type && r?.size === file?.size)) || [] +} + +useEventListener(document, 'paste', (evt: ClipboardEvent) => { + const { files } = evt.clipboardData || {} + if (files?.length) { + setValue([...filterOutSameFile(value?.value, Array.from(files)), ...Array.from(files)]) + } +})