FileInput.vue 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <template>
  2. <!-- <div class="file-input" @click="handleClick()">-->
  3. <!-- <slot></slot>-->
  4. <!-- <input -->
  5. <!-- class="input"-->
  6. <!-- type="file" -->
  7. <!-- name="upload" -->
  8. <!-- ref="inputRef" -->
  9. <!-- :accept="accept" -->
  10. <!-- @change="$event => handleChange($event)"-->
  11. <!-- >-->
  12. <!-- </div>-->
  13. <el-upload
  14. ref="upload"
  15. :multiple="false"
  16. class="avatar-uploader"
  17. action="apis10/upload/bucketFile"
  18. :headers="headers"
  19. :show-file-list="false"
  20. accept=".jpg,.png"
  21. :on-exceed="handleExceed"
  22. :before-upload="beforeUpload"
  23. :on-success="successFile"
  24. :data="uploadParams"
  25. >
  26. <template #trigger>
  27. <el-button type="primary">
  28. <!-- <i-ep-Picture/>&nbsp;&nbsp;-->
  29. <el-icon>
  30. <UploadFilled/>
  31. </el-icon>
  32. </el-button>
  33. </template>
  34. </el-upload>
  35. </template>
  36. <script lang="ts" setup>
  37. import {ref} from 'vue'
  38. import {ElMessage, genFileId, UploadInstance, UploadProps, UploadRawFile} from "element-plus";
  39. import {UploadFilled} from "@element-plus/icons-vue";
  40. import {getToken} from "@/utils/js-cookie";
  41. //el-upload
  42. const upload = ref<UploadInstance>();
  43. const headers = ref({
  44. "X-ERP-User-From": 10,
  45. "X-ERP-DataSource-Id": getToken("dataBaseAlias"),
  46. "X-ERP-Supplier-Code": getToken("shardingKey"),
  47. "X-Token": getToken("token"),
  48. });
  49. const uploadParams = reactive({
  50. srcfilename: "",
  51. chunks: 1,
  52. bucketName: "webImage",
  53. });
  54. const handleExceed: UploadProps["onExceed"] = (files) => {
  55. upload.value!.clearFiles();
  56. const file = files[0] as UploadRawFile;
  57. file.uid = genFileId();
  58. upload.value!.handleStart(file);
  59. };
  60. function beforeUpload(file) {
  61. console.log(file);
  62. uploadParams.srcfilename = file.name;
  63. return new Promise((resolve, reject) => {
  64. if (file.size > 307200) {
  65. ElMessage.warning(
  66. "图片大小不能大于300KB,请您注意图片的长和宽,网页图片的分辨率为72"
  67. );
  68. reject();
  69. } else {
  70. resolve(file);
  71. }
  72. });
  73. }
  74. function successFile(res, file, fileList) {
  75. // console.log(res);
  76. // formData.posterLocationImage = res.fileLink
  77. // formData.fontThumbUrl = res.url;
  78. if (res) emit('change', res)
  79. ElMessage.success("上传成功");
  80. }
  81. defineProps({
  82. accept: {
  83. type: String,
  84. default: 'image/*',
  85. },
  86. })
  87. const emit = defineEmits<{
  88. (event: 'change', payload: FileList): void
  89. }>()
  90. const inputRef = ref<HTMLInputElement>()
  91. const handleClick = () => {
  92. if (!inputRef.value) return
  93. inputRef.value.value = ''
  94. inputRef.value.click()
  95. }
  96. const handleChange = (e: Event) => {
  97. const files = (e.target as HTMLInputElement).files
  98. if (files) emit('change', files)
  99. }
  100. </script>
  101. <style lang="scss" scoped>
  102. .input {
  103. display: none;
  104. }
  105. </style>