index.vue 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <!--批量导入-->
  2. <template>
  3. <el-dialog
  4. v-model="dialogFormVisible"
  5. :before-close="close"
  6. title="数据导入"
  7. width="800px"
  8. >
  9. <div>
  10. <el-form ref="formRef" label-width="110px" :model="form" :rules="rules">
  11. <el-form-item>
  12. <div style="width: 100%">
  13. <el-upload
  14. ref="upload"
  15. accept=".xlsx"
  16. :action="action"
  17. :auto-upload="false"
  18. class="upload-demo"
  19. drag
  20. :file-list="fileList"
  21. :headers="header"
  22. multiple
  23. :on-error="handleError"
  24. :on-remove="handleRemove"
  25. :on-success="handleSuccess"
  26. >
  27. <el-icon class="el-icon--upload"><upload-filled /></el-icon>
  28. <div class="el-upload__text">
  29. 将文件拖拽到此处或
  30. <em>点击上传</em>
  31. </div>
  32. </el-upload>
  33. </div>
  34. </el-form-item>
  35. <el-form-item>
  36. <div class="model">
  37. <a :download="modelName" :href="modelUrl">
  38. 点击下载模板:{{ modelName }}
  39. </a>
  40. </div>
  41. </el-form-item>
  42. </el-form>
  43. </div>
  44. <div class="model">
  45. <div class="import-msg">
  46. <p style="margin-bottom: 5px">注意:</p>
  47. <p style="color: red">1.只可上传xlsx类型的表格文件</p>
  48. <p>2.请严格按照模板中提供的数据案例格式进行填写;</p>
  49. <p>3.填写错误可能会导致数据无法导入成功!</p>
  50. </div>
  51. </div>
  52. <template #footer>
  53. <!-- <el-button @click="close">取 消</el-button> -->
  54. <el-button type="primary" @click="batchImport">确 定</el-button>
  55. </template>
  56. </el-dialog>
  57. </template>
  58. <script>
  59. import { baseURL, fileUrl } from '@/config'
  60. import { useUserStore } from '@/store/modules/user'
  61. export default defineComponent({
  62. name: 'BatchSend',
  63. emits: ['fetch-data'],
  64. setup(props, { emit }) {
  65. const $baseMessage = inject('$baseMessage')
  66. const state = reactive({
  67. upload: null,
  68. formRef: null,
  69. treeRef: null,
  70. action: '', //上传文件地址
  71. // uploadData: { file_type: 'file', dir: 'account' },
  72. fileList: [],
  73. header: {},
  74. modelUrl: '', //模版地址
  75. modelName: '', //模版名称
  76. title: '',
  77. dialogFormVisible: false,
  78. })
  79. const showEdit = (row) => {
  80. const userStore = useUserStore()
  81. const { token } = userStore
  82. state.header.Authorization = token
  83. state.action = baseURL + row.url
  84. state.modelUrl = baseURL + row.modelUrl //模版地址
  85. state.modelName = row.name //模版名称
  86. state.dialogFormVisible = true
  87. }
  88. const close = () => {
  89. state.fileList = []
  90. state.dialogFormVisible = false
  91. }
  92. //文件上传失败
  93. const handleError = () => {
  94. $baseMessage('数据导入失败', 'error', 'vab-hey-message-danger')
  95. }
  96. //移除已上传文件
  97. const handleRemove = () => {
  98. state.form.resource_id = ''
  99. }
  100. //文件上传成功
  101. const handleSuccess = (res) => {
  102. // state.form.resource_id = res.data.id
  103. $baseMessage(res.msg, 'success', 'vab-hey-message-success')
  104. emit('fetch-data')
  105. close()
  106. }
  107. const batchImport = async () => {
  108. // if (!state.form.resource_id) {
  109. // $baseMessage('上传需要导入的文件', 'error', 'vab-hey-message-error')
  110. // return
  111. // }
  112. // const url = state.apiUrl
  113. // const { message } = await accountImport(url, state.form)
  114. // $baseMessage(message, 'success', 'vab-hey-message-success')
  115. state['upload'].submit()
  116. }
  117. onMounted(() => {})
  118. return {
  119. ...toRefs(state),
  120. showEdit,
  121. close,
  122. batchImport,
  123. handleError,
  124. handleRemove,
  125. handleSuccess,
  126. }
  127. },
  128. })
  129. </script>
  130. <style lang="scss" scoped>
  131. .vab-tree-border {
  132. width: 100%;
  133. height: 250px;
  134. padding: $base-padding;
  135. overflow-y: auto;
  136. border: 1px solid #dcdfe6;
  137. border-radius: $base-border-radius;
  138. }
  139. .upload {
  140. display: flex;
  141. .model {
  142. margin-left: 15px;
  143. }
  144. }
  145. </style>