index.vue 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. <template>
  2. <ContentWrap>
  3. <el-table v-loading="loading" :data="list">
  4. <el-table-column label="定义编号" align="center" prop="id" min-width="250" />
  5. <el-table-column label="流程名称" align="center" prop="name" min-width="150" />
  6. <el-table-column label="流程图标" align="center" min-width="50">
  7. <template #default="{ row }">
  8. <el-image v-if="row.icon" :src="row.icon" class="h-24px w-24pxrounded" />
  9. </template>
  10. </el-table-column>
  11. <el-table-column label="可见范围" prop="startUserIds" min-width="100">
  12. <template #default="{ row }">
  13. <el-text v-if="!row.startUsers?.length"> 全部可见 </el-text>
  14. <el-text v-else-if="row.startUsers.length === 1">
  15. {{ row.startUsers[0].nickname }}
  16. </el-text>
  17. <el-text v-else>
  18. <el-tooltip
  19. class="box-item"
  20. effect="dark"
  21. placement="top"
  22. :content="row.startUsers.map((user: any) => user.nickname).join('、')"
  23. >
  24. {{ row.startUsers[0].nickname }}等 {{ row.startUsers.length }} 人可见
  25. </el-tooltip>
  26. </el-text>
  27. </template>
  28. </el-table-column>
  29. <el-table-column label="流程类型" prop="modelType" min-width="120">
  30. <template #default="{ row }">
  31. <dict-tag :value="row.modelType" :type="DICT_TYPE.BPM_MODEL_TYPE" />
  32. </template>
  33. </el-table-column>
  34. <el-table-column label="表单信息" prop="formType" min-width="150">
  35. <template #default="scope">
  36. <el-button
  37. v-if="scope.row.formType === BpmModelFormType.NORMAL"
  38. type="primary"
  39. link
  40. @click="handleFormDetail(scope.row)"
  41. >
  42. <span>{{ scope.row.formName }}</span>
  43. </el-button>
  44. <el-button
  45. v-else-if="scope.row.formType === BpmModelFormType.CUSTOM"
  46. type="primary"
  47. link
  48. @click="handleFormDetail(scope.row)"
  49. >
  50. <span>{{ scope.row.formCustomCreatePath }}</span>
  51. </el-button>
  52. <label v-else>暂无表单</label>
  53. </template>
  54. </el-table-column>
  55. <el-table-column label="流程版本" align="center" min-width="80">
  56. <template #default="scope">
  57. <el-tag>v{{ scope.row.version }}</el-tag>
  58. </template>
  59. </el-table-column>
  60. <el-table-column
  61. label="部署时间"
  62. align="center"
  63. prop="deploymentTime"
  64. width="180"
  65. :formatter="dateFormatter"
  66. />
  67. <el-table-column label="操作" align="center">
  68. <template #default="scope">
  69. <el-button
  70. link
  71. type="primary"
  72. @click="openModelForm(scope.row.id)"
  73. v-hasPermi="['bpm:model:update']"
  74. >
  75. 恢复
  76. </el-button>
  77. </template>
  78. </el-table-column>
  79. </el-table>
  80. <!-- 分页 -->
  81. <Pagination
  82. :total="total"
  83. v-model:page="queryParams.pageNo"
  84. v-model:limit="queryParams.pageSize"
  85. @pagination="getList"
  86. />
  87. </ContentWrap>
  88. <!-- 弹窗:表单详情 -->
  89. <Dialog title="表单详情" v-model="formDetailVisible" width="800">
  90. <form-create :rule="formDetailPreview.rule" :option="formDetailPreview.option" />
  91. </Dialog>
  92. </template>
  93. <script lang="ts" setup>
  94. import { dateFormatter } from '@/utils/formatTime'
  95. import * as DefinitionApi from '@/api/bpm/definition'
  96. import { setConfAndFields2 } from '@/utils/formCreate'
  97. import { DICT_TYPE } from '@/utils/dict'
  98. import { BpmModelFormType } from '@/utils/constants'
  99. defineOptions({ name: 'BpmProcessDefinition' })
  100. const { push } = useRouter() // 路由
  101. const { query } = useRoute() // 查询参数
  102. const loading = ref(true) // 列表的加载中
  103. const total = ref(0) // 列表的总页数
  104. const list = ref([]) // 列表的数据
  105. const queryParams = reactive({
  106. pageNo: 1,
  107. pageSize: 10,
  108. key: query.key
  109. })
  110. /** 查询列表 */
  111. const getList = async () => {
  112. loading.value = true
  113. try {
  114. const data = await DefinitionApi.getProcessDefinitionPage(queryParams)
  115. list.value = data.list
  116. total.value = data.total
  117. } finally {
  118. loading.value = false
  119. }
  120. }
  121. /** 流程表单的详情按钮操作 */
  122. const formDetailVisible = ref(false)
  123. const formDetailPreview = ref({
  124. rule: [],
  125. option: {}
  126. })
  127. const handleFormDetail = async (row: any) => {
  128. if (row.formType == BpmModelFormType.NORMAL) {
  129. // 设置表单
  130. setConfAndFields2(formDetailPreview, row.formConf, row.formFields)
  131. // 弹窗打开
  132. formDetailVisible.value = true
  133. } else {
  134. await push({
  135. path: row.formCustomCreatePath
  136. })
  137. }
  138. }
  139. /** 恢复流程模型弹窗 */
  140. const openModelForm = async (id?: number) => {
  141. await push({
  142. name: 'BpmModelUpdate',
  143. params: { id, type: 'definition' }
  144. })
  145. }
  146. /** 初始化 **/
  147. onMounted(() => {
  148. getList()
  149. })
  150. </script>
  151. <style lang="scss" scoped>
  152. .flow-icon {
  153. display: flex;
  154. width: 38px;
  155. height: 38px;
  156. margin-right: 10px;
  157. background-color: var(--el-color-primary);
  158. border-radius: 0.25rem;
  159. align-items: center;
  160. justify-content: center;
  161. }
  162. </style>