uploadFile.vue 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <template>
  2. <el-upload :accept="accept" :show-file-list="false" v-model:file-list="fileList" :limit="1" :data="{ source }" :headers="headers" :before-upload="beforeAvatarUpload" :action="uploadUrl" :on-success="updateImg">
  3. <el-button>
  4. <el-icon> <ele-Upload /> </el-icon>
  5. 数据导入
  6. </el-button>
  7. </el-upload>
  8. </template>
  9. <script lang="ts" setup>
  10. import { ref } from 'vue';
  11. import { ElMessage } from 'element-plus';
  12. import type { UploadProps } from 'element-plus';
  13. import getOrigin from '/@/utils/origin';
  14. import { getToken } from "/@/utils/auth";
  15. const source = localStorage.uploadFileWay
  16. const headers = {
  17. Authorization: 'Bearer ' + getToken(),
  18. };
  19. const emit = defineEmits(['update']);
  20. const props = defineProps({
  21. accept: {
  22. type: String,
  23. default: '',
  24. },
  25. url: {
  26. type: String,
  27. default: '/common/singleFile',
  28. },
  29. });
  30. const fileList = ref<any[]>([
  31. // {
  32. // name: '',
  33. // url: '',
  34. // },
  35. ]);
  36. const uploadUrl: string = getOrigin(props.url);
  37. const updateImg = (res: any) => {
  38. if (res.code !== 0) {
  39. return ElMessage.error(res.message)
  40. }
  41. ElMessage.success('文件上传成功');
  42. fileList.value = []
  43. emit('update', res.data.full_path)
  44. };
  45. const beforeAvatarUpload: UploadProps['beforeUpload'] = (rawFile) => {
  46. if (rawFile.size / 1024 / 1024 > 2) {
  47. ElMessage.error('文件不能超过2MB!');
  48. return false;
  49. }
  50. return true;
  51. };
  52. </script>