|  | @@ -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>
 |