TaskSignList.vue 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <template>
  2. <el-drawer v-model="drawerVisible" title="子任务" size="880px">
  3. <!-- 当前任务 -->
  4. <template #header>
  5. <h4>【{{ parentTask.name }} 】审批人:{{ parentTask?.ownerUser?.nickname }}</h4>
  6. <el-button
  7. style="margin-left: 5px"
  8. v-if="isSignDeleteButtonVisible(parentTask)"
  9. type="danger"
  10. plain
  11. @click="handleSignDelete(parentTask)"
  12. >
  13. <Icon icon="ep:remove" /> 减签
  14. </el-button>
  15. </template>
  16. <!-- 子任务列表 -->
  17. <el-table :data="parentTask.children" style="width: 100%" row-key="id" border>
  18. <el-table-column prop="assigneeUser.nickname" label="审批人" min-width="100">
  19. <template #default="scope">
  20. {{ scope.row.assigneeUser?.nickname || scope.row.ownerUser?.nickname }}
  21. </template>
  22. </el-table-column>
  23. <el-table-column prop="assigneeUser.deptName" label="所在部门" min-width="100">
  24. <template #default="scope">
  25. {{ scope.row.assigneeUser?.deptName || scope.row.ownerUser?.deptName }}
  26. </template>
  27. </el-table-column>
  28. <el-table-column label="审批状态" prop="status" width="120">
  29. <template #default="scope">
  30. <dict-tag :type="DICT_TYPE.BPM_TASK_STATUS" :value="scope.row.status" />
  31. </template>
  32. </el-table-column>
  33. <el-table-column
  34. label="提交时间"
  35. align="center"
  36. prop="createTime"
  37. width="180"
  38. :formatter="dateFormatter"
  39. />
  40. <el-table-column
  41. label="结束时间"
  42. align="center"
  43. prop="endTime"
  44. width="180"
  45. :formatter="dateFormatter"
  46. />
  47. <el-table-column label="操作" prop="operation" width="90">
  48. <template #default="scope">
  49. <el-button
  50. v-if="isSignDeleteButtonVisible(scope.row)"
  51. type="danger"
  52. plain
  53. size="small"
  54. @click="handleSignDelete(scope.row)"
  55. >
  56. <Icon icon="ep:remove" /> 减签
  57. </el-button>
  58. </template>
  59. </el-table-column>
  60. </el-table>
  61. <!-- 减签 -->
  62. <TaskSignDeleteForm ref="taskSignDeleteFormRef" @success="handleSignDeleteSuccess" />
  63. </el-drawer>
  64. </template>
  65. <script lang="ts" setup>
  66. import { isEmpty } from '@/utils/is'
  67. import { DICT_TYPE } from '@/utils/dict'
  68. import { dateFormatter } from '@/utils/formatTime'
  69. import TaskSignDeleteForm from './TaskSignDeleteForm.vue'
  70. defineOptions({ name: 'TaskSignList' })
  71. const message = useMessage() // 消息弹窗
  72. const drawerVisible = ref(false) // 抽屉的是否展示
  73. const parentTask = ref({} as any)
  74. /** 打开弹窗 */
  75. const open = async (task: any) => {
  76. if (isEmpty(task.children)) {
  77. message.warning('该任务没有子任务')
  78. return
  79. }
  80. parentTask.value = task
  81. // 展开抽屉
  82. drawerVisible.value = true
  83. }
  84. defineExpose({ open }) // 提供 openModal 方法,用于打开弹窗
  85. /** 发起减签 */
  86. const taskSignDeleteFormRef = ref()
  87. const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
  88. const handleSignDelete = (item: any) => {
  89. taskSignDeleteFormRef.value.open(item.id)
  90. }
  91. const handleSignDeleteSuccess = () => {
  92. emit('success')
  93. // 关闭抽屉
  94. drawerVisible.value = false
  95. }
  96. /** 是否显示减签按钮 */
  97. const isSignDeleteButtonVisible = (task: any) => {
  98. return task && task.children && !isEmpty(task.children)
  99. }
  100. // TODO @jason:新界面搞完,可以删除
  101. </script>