ProcessInstanceChildrenTaskList.vue 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <template>
  2. <el-drawer v-model="drawerVisible" title="子任务" size="70%">
  3. <!-- 当前任务 -->
  4. <template #header>
  5. <h4>【{{ baseTask.name }} 】审批人:{{ baseTask.assigneeUser?.nickname }}</h4>
  6. <el-button
  7. style="margin-left: 5px"
  8. v-if="isSubSignButtonVisible(baseTask)"
  9. type="danger"
  10. plain
  11. @click="handleSubSign(baseTask)"
  12. >
  13. <Icon icon="ep:remove" /> 减签
  14. </el-button>
  15. </template>
  16. <!-- 子任务列表 -->
  17. <el-table :data="baseTask.children" style="width: 100%" row-key="id" border>
  18. <el-table-column prop="assigneeUser.nickname" label="审批人" />
  19. <el-table-column prop="assigneeUser.deptName" label="所在部门" />
  20. <el-table-column label="审批状态" prop="result">
  21. <template #default="scope">
  22. <dict-tag :type="DICT_TYPE.BPM_PROCESS_INSTANCE_RESULT" :value="scope.row.result" />
  23. </template>
  24. </el-table-column>
  25. <el-table-column
  26. label="提交时间"
  27. align="center"
  28. prop="createTime"
  29. width="180"
  30. :formatter="dateFormatter"
  31. />
  32. <el-table-column
  33. label="结束时间"
  34. align="center"
  35. prop="endTime"
  36. width="180"
  37. :formatter="dateFormatter"
  38. />
  39. <el-table-column label="操作" prop="operation">
  40. <template #default="scope">
  41. <el-button
  42. v-if="isSubSignButtonVisible(scope.row)"
  43. type="danger"
  44. plain
  45. @click="handleSubSign(scope.row)"
  46. >
  47. <Icon icon="ep:remove" /> 减签
  48. </el-button>
  49. </template>
  50. </el-table-column>
  51. </el-table>
  52. <!-- 减签 -->
  53. <TaskSubSignDialogForm ref="taskSubSignDialogForm" />
  54. </el-drawer>
  55. </template>
  56. <script lang="ts" setup>
  57. import { isEmpty } from '@/utils/is'
  58. import { DICT_TYPE } from '@/utils/dict'
  59. import { dateFormatter } from '@/utils/formatTime'
  60. import TaskSubSignDialogForm from './TaskSubSignDialogForm.vue'
  61. defineOptions({ name: 'ProcessInstanceChildrenTaskList' })
  62. const message = useMessage() // 消息弹窗
  63. const drawerVisible = ref(false) // 抽屉的是否展示
  64. const baseTask = ref<object>({})
  65. /** 打开弹窗 */
  66. const open = async (task: any) => {
  67. if (isEmpty(task.children)) {
  68. message.warning('该任务没有子任务')
  69. return
  70. }
  71. baseTask.value = task
  72. // 展开抽屉
  73. drawerVisible.value = true
  74. }
  75. defineExpose({ open }) // 提供 openModal 方法,用于打开弹窗
  76. /** 发起减签 */
  77. const taskSubSignDialogForm = ref()
  78. const handleSubSign = (item) => {
  79. taskSubSignDialogForm.value.open(item.id)
  80. // TODO @海洋:减签后,需要刷新下界面哈
  81. }
  82. /** 是否显示减签按钮 */
  83. const isSubSignButtonVisible = (task: any) => {
  84. if (task && task.children && !isEmpty(task.children)) {
  85. // 有子任务,且子任务有任意一个是 待处理 和 待前置任务完成 则显示减签按钮
  86. const subTask = task.children.find((item) => item.result === 1 || item.result === 9)
  87. return !isEmpty(subTask)
  88. }
  89. return false
  90. }
  91. </script>