ModelImportForm.vue 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <template>
  2. <ContentWrap>
  3. <!-- 列表 -->
  4. <XTable @register="registerTable">
  5. <template #toolbar_buttons>
  6. <!-- 操作:导入 -->
  7. <XButton
  8. type="warning"
  9. preIcon="ep:upload"
  10. :title="'导入流程'"
  11. @click="handleImport"
  12. style="margin-left: 10px"
  13. />
  14. </template>
  15. </XTable>
  16. <!-- 导入流程 -->
  17. <XModal v-model="importDialogVisible" width="400" title="导入流程">
  18. <div>
  19. <el-upload
  20. ref="uploadRef"
  21. :action="importUrl"
  22. :headers="uploadHeaders"
  23. :drag="true"
  24. :limit="1"
  25. :multiple="true"
  26. :show-file-list="true"
  27. :disabled="uploadDisabled"
  28. :on-exceed="handleExceed"
  29. :on-success="handleFileSuccess"
  30. :on-error="excelUploadError"
  31. :auto-upload="false"
  32. accept=".bpmn, .xml"
  33. name="bpmnFile"
  34. :data="importForm"
  35. >
  36. <Icon class="el-icon--upload" icon="ep:upload-filled" />
  37. <div class="el-upload__text"> 将文件拖到此处,或 <em>点击上传</em> </div>
  38. <template #tip>
  39. <div class="el-upload__tip" style="color: red">
  40. 提示:仅允许导入“bpm”或“xml”格式文件!
  41. </div>
  42. <div>
  43. <el-form
  44. ref="importFormRef"
  45. :model="importForm"
  46. :rules="rules"
  47. label-width="120px"
  48. status-icon
  49. >
  50. <el-form-item label="流程标识" prop="key">
  51. <el-input
  52. v-model="importForm.key"
  53. placeholder="请输入流标标识"
  54. style="width: 250px"
  55. />
  56. </el-form-item>
  57. <el-form-item label="流程名称" prop="name">
  58. <el-input v-model="importForm.name" placeholder="请输入流程名称" clearable />
  59. </el-form-item>
  60. <el-form-item label="流程描述" prop="description">
  61. <el-input type="textarea" v-model="importForm.description" clearable />
  62. </el-form-item>
  63. </el-form>
  64. </div>
  65. </template>
  66. </el-upload>
  67. </div>
  68. <template #footer>
  69. <!-- 按钮:保存 -->
  70. <XButton
  71. type="warning"
  72. preIcon="ep:upload-filled"
  73. :title="t('action.save')"
  74. @click="submitFileForm"
  75. />
  76. <XButton title="取 消" @click="uploadClose" />
  77. </template>
  78. </XModal>
  79. </ContentWrap>
  80. </template>
  81. <script setup lang="ts">
  82. import { getAccessToken, getTenantId } from '@/utils/auth'
  83. const { t } = useI18n() // 国际化
  84. const message = useMessage() // 消息弹窗
  85. const router = useRouter() // 路由
  86. // ========== 导入流程 ==========
  87. const uploadRef = ref<UploadInstance>()
  88. let importUrl = import.meta.env.VITE_BASE_URL + import.meta.env.VITE_API_URL + '/bpm/model/import'
  89. const uploadHeaders = ref()
  90. const importDialogVisible = ref(false)
  91. const uploadDisabled = ref(false)
  92. const importFormRef = ref<FormInstance>()
  93. const importForm = ref({
  94. key: '',
  95. name: '',
  96. description: ''
  97. })
  98. // 导入流程弹窗显示
  99. const handleImport = () => {
  100. importDialogVisible.value = true
  101. }
  102. // 文件数超出提示
  103. const handleExceed = (): void => {
  104. message.error('最多只能上传一个文件!')
  105. }
  106. // 上传错误提示
  107. const excelUploadError = (): void => {
  108. message.error('导入流程失败,请您重新上传!')
  109. }
  110. // 提交文件上传
  111. const submitFileForm = () => {
  112. uploadHeaders.value = {
  113. Authorization: 'Bearer ' + getAccessToken(),
  114. 'tenant-id': getTenantId()
  115. }
  116. uploadDisabled.value = true
  117. uploadRef.value!.submit()
  118. }
  119. // 文件上传成功
  120. const handleFileSuccess = async (response: any): Promise<void> => {
  121. if (response.code !== 0) {
  122. message.error(response.msg)
  123. return
  124. }
  125. // 重置表单
  126. uploadClose()
  127. // 提示,并刷新
  128. message.success('导入流程成功!请点击【设计流程】按钮,进行编辑保存后,才可以进行【发布流程】')
  129. await reload()
  130. }
  131. // 关闭文件上传
  132. const uploadClose = () => {
  133. // 关闭弹窗
  134. importDialogVisible.value = false
  135. // 重置上传状态和文件
  136. uploadDisabled.value = false
  137. uploadRef.value!.clearFiles()
  138. // 重置表单
  139. importForm.value = {
  140. key: '',
  141. name: '',
  142. description: ''
  143. }
  144. importFormRef.value?.resetFields()
  145. }
  146. </script>