test.vue 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <template>
  2. <uploader
  3. :options="options"
  4. :file-status-text="statusText"
  5. class="uploader-example"
  6. ref="uploaderRef"
  7. @file-complete="fileComplete"
  8. @complete="complete"
  9. >
  10. <uploader-unsupport></uploader-unsupport>
  11. <!-- 选择按钮 在这里隐藏 -->
  12. <uploader-btn class="select-file-btn" :attrs="attrs" ref="uploadBtn"> 选择文件 </uploader-btn>
  13. <uploader-btn class="select-file-btn" :attrs="attrs" :directory="true" ref="uploadDirBtn"> 选择目录 </uploader-btn>
  14. <!-- <uploader-unsupport></uploader-unsupport>-->
  15. <uploader-drop>
  16. <p>Drop files here to upload or</p>
  17. <uploader-btn>select files</uploader-btn>
  18. <uploader-btn :attrs="attrs">select images</uploader-btn>
  19. <uploader-btn :directory="true">select folder</uploader-btn>
  20. </uploader-drop>
  21. <uploader-list></uploader-list>
  22. </uploader>
  23. </template>
  24. <script setup>
  25. import { ref, onMounted, nextTick } from 'vue'
  26. const props = defineProps({
  27. uploadWay: Number,
  28. callback: Function,
  29. serviceEl: Object,
  30. callType: Number,
  31. params: Object
  32. })
  33. // refs
  34. const uploaderRef = ref(null)
  35. const uploadBtn = ref(null)
  36. const uploadDirBtn = ref(null)
  37. // 响应式数据
  38. const options = ref({
  39. target: '//localhost:3000/upload', // '//jsonplaceholder.typicode.com/posts/',
  40. testChunks: false
  41. })
  42. const attrs = ref({
  43. accept: 'image/*'
  44. })
  45. const statusText = ref({
  46. success: 'success',
  47. error: 'error',
  48. uploading: 'uploading',
  49. paused: 'paused',
  50. waiting: 'waiting'
  51. })
  52. const handlePrepareUpload = async () => {
  53. // options.value.headers.token = getCookies(getConfig().tokenKeyName)
  54. await nextTick()
  55. switch (props.uploadWay) {
  56. case 1: {
  57. if (uploadBtn.value?.$el) {
  58. uploadBtn.value.$el.click()
  59. }
  60. break
  61. }
  62. case 2: {
  63. if (uploadDirBtn.value?.$el) {
  64. uploadDirBtn.value.$el.click()
  65. }
  66. break
  67. }
  68. case 3: {
  69. pasteImg.value.src = ''
  70. pasteImg.value.name = ''
  71. pasteImgObj.value = null
  72. dropBoxShow.value = true
  73. break
  74. }
  75. }
  76. }
  77. // 方法
  78. const complete = () => {
  79. console.log('complete', arguments)
  80. }
  81. const fileComplete = () => {
  82. console.log('file complete', arguments)
  83. }
  84. // 生命周期钩子
  85. onMounted(() => {
  86. nextTick(() => {
  87. window.uploader = uploaderRef.value.uploader
  88. })
  89. })
  90. // 暴露方法给父组件(如果需要)
  91. defineExpose({
  92. handlePrepareUpload
  93. })
  94. </script>
  95. <style>
  96. .uploader-example {
  97. width: 880px;
  98. padding: 15px;
  99. margin: 40px auto 0;
  100. font-size: 12px;
  101. box-shadow: 0 0 10px rgba(0, 0, 0, 0.4);
  102. }
  103. .uploader-example .uploader-btn {
  104. margin-right: 4px;
  105. }
  106. .uploader-example .uploader-list {
  107. max-height: 440px;
  108. overflow: auto;
  109. overflow-x: hidden;
  110. overflow-y: auto;
  111. }
  112. </style>