uploadFile.vue 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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. const source = JSON.parse(localStorage.sysinfo || '{"uploadFileWay": 0}').uploadFileWay;
  15. const headers = {
  16. Authorization: 'Bearer ' + localStorage.token,
  17. };
  18. const emit = defineEmits(['update']);
  19. const props = defineProps({
  20. accept: {
  21. type: String,
  22. default: '',
  23. },
  24. url: {
  25. type: String,
  26. default: '/common/singleFile',
  27. },
  28. });
  29. const fileList = ref<any[]>([
  30. // {
  31. // name: '',
  32. // url: '',
  33. // },
  34. ]);
  35. const uploadUrl: string = getOrigin(import.meta.env.VITE_API_URL + props.url);
  36. const updateImg = (res: any) => {
  37. if (res.code !== 0) {
  38. return ElMessage.error(res.message)
  39. }
  40. ElMessage.success('文件上传成功');
  41. fileList.value = []
  42. emit('update', res.data.full_path)
  43. };
  44. const beforeAvatarUpload: UploadProps['beforeUpload'] = (rawFile) => {
  45. if (rawFile.size / 1024 / 1024 > 2) {
  46. ElMessage.error('文件不能超过2MB!');
  47. return false;
  48. }
  49. return true;
  50. };
  51. </script>