hc-form-upload.vue 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <template>
  2. <el-upload class="hc-upload-table-form" :disabled="isLoading" :placeholder="placeholder" :keyname="isKeyName" :headers="getTokenHeader()" :action="action" :accept="accept" :show-file-list="false"
  3. :on-progress="uploadprogress" @exceed="formUploadExceed" :on-error="formUploadError" @success="formUploadSuccess" v-loading="isLoading" element-loading-text="上传中...">
  4. <img v-if="isSrc" :src="isSrc" class="hc-table-form-img" alt="">
  5. <div class="hc-table-form-icon" v-else>点此选择文件并上传</div>
  6. <div v-if="isSrc" class="hc-table-form-del">
  7. <el-button type="danger" plain @click.stop="delTableFormFile">删除当前文件</el-button>
  8. </div>
  9. </el-upload>
  10. </template>
  11. <script setup>
  12. import { ref, watch } from 'vue'
  13. import {getTokenHeader} from '~src/api/request/header';
  14. const props = defineProps({
  15. src: {
  16. type: [Number,String],
  17. default: ''
  18. },
  19. keyName: {
  20. type: [Number,String],
  21. default: ''
  22. },
  23. placeholder: {
  24. type: [Number,String],
  25. default: '相片'
  26. },
  27. })
  28. //变量
  29. const isLoading = ref(false)
  30. const isSrc = ref(props.src)
  31. const isKeyName = ref(props.keyName)
  32. const action = '/api/blade-resource/oss/endpoint/put-file';
  33. const accept = 'image/png,image/jpg,image/jpeg';
  34. //监听
  35. watch(() => [
  36. props.src,
  37. props.keyName,
  38. ], ([src, keyName]) => {
  39. isSrc.value = src
  40. isKeyName.value = keyName
  41. })
  42. //事件
  43. const emit = defineEmits(['success', 'del'])
  44. //上传进度
  45. const uploadprogress = () => {
  46. isLoading.value = true
  47. }
  48. //上传完成
  49. const formUploadSuccess = (res) => {
  50. isLoading.value = false
  51. if (res.code === 200) {
  52. const link = res.data?.link || ''
  53. emit('success', {
  54. res,
  55. src: link,
  56. key: isKeyName.value,
  57. })
  58. }
  59. }
  60. //上传失败
  61. const formUploadError = () => {
  62. isLoading.value = false
  63. }
  64. //格式错误
  65. const formUploadExceed = () => {
  66. isLoading.value = false
  67. }
  68. //删除上传的文件
  69. const delTableFormFile = () => {
  70. emit('del', isKeyName.value)
  71. }
  72. </script>
  73. <style lang="scss" scoped>
  74. </style>