Files
EasyFlow/easyflow-ui-admin/app/src/components/upload/Upload.vue
陈子默 7e7c236c2a fix: 修复管理端前端 lint 与构建问题
- 收敛 easyflow-ui-admin 的 lint、格式和类型问题

- 修正 demo 页面与管理端前端构建失败点

- 验证 pnpm lint 与 pnpm build 均已通过
2026-04-05 21:39:13 +08:00

90 lines
2.1 KiB
Vue

<script lang="ts" setup>
import type { UploadProps, UploadUserFile } from 'element-plus';
import { ref } from 'vue';
import { useAppConfig } from '@easyflow/hooks';
import { useAccessStore } from '@easyflow/stores';
import { ElButton, ElMessage, ElUpload } from 'element-plus';
import { $t } from '#/locales';
import {
normalizeUploadError,
resolveUploadPath,
} from '#/utils/upload-response';
const props = defineProps({
action: {
type: String,
default: '/api/v1/commons/upload',
},
tips: {
type: String,
default: '',
},
limit: {
type: Number,
default: 1,
},
multiple: {
type: Boolean,
default: false,
},
});
const emit = defineEmits([
'success', // 文件上传成功
'error',
'handleDelete',
'handlePreview',
'beforeUpload',
]);
const { apiURL } = useAppConfig(import.meta.env, import.meta.env.PROD);
const accessStore = useAccessStore();
const headers = ref({
'easyflow-token': accessStore.accessToken,
});
const fileList = ref<UploadUserFile[]>([]);
const beforeUpload: UploadProps['beforeUpload'] = (rawFile) => {
emit('beforeUpload', rawFile);
};
const handleRemove: UploadProps['onRemove'] = (file, uploadFiles) => {
emit('handleDelete', file, uploadFiles);
};
const handleSuccess: UploadProps['onSuccess'] = (response) => {
try {
emit('success', resolveUploadPath(response));
} catch (error) {
const normalizedError = normalizeUploadError(error);
ElMessage.error(normalizedError.message);
emit('error', normalizedError);
}
};
const handleError: UploadProps['onError'] = (error) => {
const normalizedError = normalizeUploadError(error);
ElMessage.error(normalizedError.message);
emit('error', normalizedError);
};
</script>
<template>
<ElUpload
v-model:file-list="fileList"
class="upload-demo"
:headers="headers"
:action="`${apiURL}${props.action}`"
:multiple="props.multiple"
:before-upload="beforeUpload"
:on-remove="handleRemove"
:limit="props.limit"
:on-success="handleSuccess"
:on-error="handleError"
>
<ElButton type="primary">{{ $t('button.upload') }}</ElButton>
</ElUpload>
</template>