|
@@ -6,21 +6,26 @@
|
|
|
*/
|
|
|
import { ButtonProps, genFileId, UploadInstance, UploadRawFile } from 'element-plus';
|
|
|
import { BtnPermissionStore } from '/@/plugin/permission/store.permission';
|
|
|
-
|
|
|
+import { uploadFile } from '/@/views/product-manage/product-list/api';
|
|
|
|
|
|
const { data } = BtnPermissionStore();
|
|
|
|
|
|
const attrs = useAttrs() as any;
|
|
|
+const refreshView = inject('refreshView');
|
|
|
|
|
|
-const props = defineProps<Partial<Omit<ButtonProps, 'disabled' | 'loading' | 'color'>>>();
|
|
|
+const props = defineProps<
|
|
|
+ {
|
|
|
+ uploadFunction: (url: 'URL') => Promise<any>;
|
|
|
+ } & Partial<Omit<ButtonProps, 'disabled' | 'loading' | 'color'>>
|
|
|
+>();
|
|
|
|
|
|
function hasPermission(permissions: string | string[]): boolean {
|
|
|
- if (typeof permissions === 'string') {
|
|
|
- return data.includes(permissions);
|
|
|
- } else if (Array.isArray(permissions)) {
|
|
|
- return permissions.every(permission => data.includes(permission));
|
|
|
- }
|
|
|
- return false;
|
|
|
+ if (typeof permissions === 'string') {
|
|
|
+ return data.includes(permissions);
|
|
|
+ } else if (Array.isArray(permissions)) {
|
|
|
+ return permissions.every((permission) => data.includes(permission));
|
|
|
+ }
|
|
|
+ return false;
|
|
|
}
|
|
|
|
|
|
const upload = ref<UploadInstance>();
|
|
@@ -31,11 +36,11 @@ const upBtnLoading = ref(false);
|
|
|
* @param files 文件列表
|
|
|
*/
|
|
|
function handleExceed(files: any) {
|
|
|
- upload.value!.clearFiles();
|
|
|
- const file = files[0] as UploadRawFile;
|
|
|
- file.uid = genFileId();
|
|
|
- upload.value!.handleStart(file);
|
|
|
- upload.value!.submit();
|
|
|
+ upload.value!.clearFiles();
|
|
|
+ const file = files[0] as UploadRawFile;
|
|
|
+ file.uid = genFileId();
|
|
|
+ upload.value!.handleStart(file);
|
|
|
+ upload.value!.submit();
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -43,19 +48,24 @@ function handleExceed(files: any) {
|
|
|
* @param uploadRequest 上传请求
|
|
|
*/
|
|
|
async function handleCustomUpload(uploadRequest: any) {
|
|
|
- upBtnLoading.value = true;
|
|
|
- try {
|
|
|
- const { file } = uploadRequest;
|
|
|
- // const response = await api.uploadFile(file);
|
|
|
- // handleResponse(response);
|
|
|
- // processResponseData(response.data);
|
|
|
- // uploadRequest.onSuccess(response); // 通知 el-upload 上传成功
|
|
|
- } catch (error) {
|
|
|
- console.log('==Error==', error);
|
|
|
- uploadRequest.onError(error);
|
|
|
- } finally {
|
|
|
- upBtnLoading.value = false;
|
|
|
- }
|
|
|
+ upBtnLoading.value = true;
|
|
|
+ try {
|
|
|
+ const { file } = uploadRequest;
|
|
|
+ const formData = new FormData();
|
|
|
+ formData.append('file', file);
|
|
|
+ const resp = await uploadFile(formData);
|
|
|
+ const fileUrl = resp.data.url;
|
|
|
+ const response = await props.uploadFunction({ url: fileUrl });
|
|
|
+ handleResponse(response);
|
|
|
+ // processResponseData(response.data);
|
|
|
+ uploadRequest.onSuccess(response); // 通知 el-upload 上传成功
|
|
|
+
|
|
|
+ } catch (error) {
|
|
|
+ console.log('==Error==', error);
|
|
|
+ uploadRequest.onError(error);
|
|
|
+ } finally {
|
|
|
+ upBtnLoading.value = false;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -63,38 +73,45 @@ async function handleCustomUpload(uploadRequest: any) {
|
|
|
* @param response 后端返回的响应
|
|
|
*/
|
|
|
function handleResponse(response: any) {
|
|
|
- // if (response.code === SUCCESS_CODE) {
|
|
|
- // ElMessage.success({ message: response.msg, plain: true });
|
|
|
- // } else if (response.code === WARNING_CODE) {
|
|
|
- // ElMessage.warning({ message: response.msg, plain: true });
|
|
|
- // } else {
|
|
|
- // ElMessage.error({ message: response.msg, plain: true });
|
|
|
- // }
|
|
|
+ if (response.code === 2000) {
|
|
|
+ ElMessage.success({ message: response.msg, plain: true });
|
|
|
+
|
|
|
+ // 上传成功后调用刷新父组件的方法
|
|
|
+ if (refreshView) {
|
|
|
+ refreshView();
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ ElMessage.error({ message: response.msg, plain: true });
|
|
|
+ }
|
|
|
}
|
|
|
</script>
|
|
|
|
|
|
<template>
|
|
|
- <div>
|
|
|
- <el-upload
|
|
|
- ref="upload"
|
|
|
- action="#"
|
|
|
- :limit="1"
|
|
|
- :show-file-list="false"
|
|
|
- :auto-upload="true"
|
|
|
- :on-exceed="handleExceed"
|
|
|
- :http-request="handleCustomUpload">
|
|
|
- <template #trigger>
|
|
|
- <el-button v-if="attrs.show ? hasPermission(attrs.show) : true"
|
|
|
- :disabled="attrs.permissions ? !hasPermission(attrs.permissions) : false"
|
|
|
- :loading="upBtnLoading" :color="attrs.myColor" v-bind="props">
|
|
|
- <!--:loading="upBtnLoading" color="#6366f1" v-bind="props">-->
|
|
|
- <slot></slot>
|
|
|
- </el-button>
|
|
|
- </template>
|
|
|
- </el-upload>
|
|
|
- </div>
|
|
|
+ <div>
|
|
|
+ <el-upload
|
|
|
+ ref="upload"
|
|
|
+ action="#"
|
|
|
+ :limit="1"
|
|
|
+ :show-file-list="false"
|
|
|
+ :auto-upload="true"
|
|
|
+ :on-exceed="handleExceed"
|
|
|
+ :http-request="handleCustomUpload"
|
|
|
+ accept=".xls,.xlsx"
|
|
|
+ >
|
|
|
+ <template #trigger>
|
|
|
+ <el-button
|
|
|
+ v-if="attrs.show ? hasPermission(attrs.show) : true"
|
|
|
+ :disabled="attrs.permissions ? !hasPermission(attrs.permissions) : false"
|
|
|
+ :loading="upBtnLoading"
|
|
|
+ :color="attrs.myColor"
|
|
|
+ v-bind="props"
|
|
|
+ >
|
|
|
+ <!--:loading="upBtnLoading" color="#6366f1" v-bind="props">-->
|
|
|
+ <slot></slot>
|
|
|
+ </el-button>
|
|
|
+ </template>
|
|
|
+ </el-upload>
|
|
|
+ </div>
|
|
|
</template>
|
|
|
|
|
|
-<style scoped>
|
|
|
-
|
|
|
-</style>
|
|
|
+<style scoped></style>
|