|
@@ -27,7 +27,7 @@
|
|
|
import { ref, toRefs, watch } from 'vue';
|
|
|
import { PlusOutlined } from '@ant-design/icons-vue';
|
|
|
import { Upload, Modal } from 'ant-design-vue';
|
|
|
- import type { UploadProps } from 'ant-design-vue';
|
|
|
+ import type { UploadProps, UploadFile } from 'ant-design-vue';
|
|
|
import { UploadRequestOption } from 'ant-design-vue/lib/vc-upload/interface';
|
|
|
import { useMessage } from '@/hooks/web/useMessage';
|
|
|
import { isArray, isFunction, isObject, isString } from '@/utils/is';
|
|
@@ -77,32 +77,35 @@
|
|
|
} else {
|
|
|
return;
|
|
|
}
|
|
|
- }) as UploadProps['fileList'][number];
|
|
|
+ }) as UploadProps['fileList'];
|
|
|
}
|
|
|
},
|
|
|
);
|
|
|
|
|
|
- function getBase64(file: File) {
|
|
|
- return new Promise((resolve, reject) => {
|
|
|
+ function getBase64<T extends string | ArrayBuffer | null>(file: File) {
|
|
|
+ return new Promise<T>((resolve, reject) => {
|
|
|
const reader = new FileReader();
|
|
|
reader.readAsDataURL(file);
|
|
|
- reader.onload = () => resolve(reader.result);
|
|
|
+ reader.onload = () => {
|
|
|
+ resolve(reader.result as T);
|
|
|
+ };
|
|
|
reader.onerror = (error) => reject(error);
|
|
|
});
|
|
|
}
|
|
|
|
|
|
- const handlePreview = async (file: UploadProps['fileList'][number]) => {
|
|
|
+ const handlePreview = async (file: UploadFile) => {
|
|
|
if (!file.url && !file.preview) {
|
|
|
- file.preview = (await getBase64(file.originFileObj)) as string;
|
|
|
+ file.preview = await getBase64<string>(file.originFileObj!);
|
|
|
}
|
|
|
- previewImage.value = file.url || file.preview;
|
|
|
+ previewImage.value = file.url || file.preview || '';
|
|
|
previewOpen.value = true;
|
|
|
- previewTitle.value = file.name || file.url.substring(file.url.lastIndexOf('/') + 1);
|
|
|
+ previewTitle.value =
|
|
|
+ file.name || previewImage.value.substring(previewImage.value.lastIndexOf('/') + 1);
|
|
|
};
|
|
|
|
|
|
- const handleRemove = async (file: UploadProps['fileList'][number]) => {
|
|
|
+ const handleRemove = async (file: UploadFile) => {
|
|
|
if (fileList.value) {
|
|
|
- const index = fileList.value.findIndex((item: any) => item.uuid === file.uuid);
|
|
|
+ const index = fileList.value.findIndex((item) => item.uid === file.uid);
|
|
|
index !== -1 && fileList.value.splice(index, 1);
|
|
|
emit('change', fileList.value);
|
|
|
emit('delete', file);
|