ProcessInstanceTimeline.vue 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. <template>
  2. <el-timeline class="pt-20px">
  3. <el-timeline-item v-for="(activity, index) in mockData" :key="index" size="large">
  4. <div class="flex flex-col items-start">
  5. <div class="font-bold"> {{ activity.name }}</div>
  6. <div class="color-#a1a6ae text-12px mb-10px"> {{ activity.assigneeUser.nickname }}</div>
  7. <div v-if="activity.opinion" class="text-#a5a5a5 text-12px w-100%">
  8. <div class="mb-5px">审批意见:</div>
  9. <div
  10. class="w-100% border-1px border-#a5a5a5 border-dashed rounded py-5px px-15px text-#2d2d2d"
  11. >
  12. {{ activity.opinion }}
  13. </div>
  14. </div>
  15. <div v-if="activity.createTime" class="text-#a5a5a5 text-13px">
  16. {{ formatDate(activity.createTime) }}
  17. </div>
  18. </div>
  19. <!-- 该节点用户的头像 -->
  20. <template #dot>
  21. <div class="w-35px h-35px position-relative">
  22. <img
  23. src="@/assets/imgs/avatar.jpg"
  24. class="rounded-full w-full h-full position-absolute bottom-6px right-12px"
  25. alt=""
  26. />
  27. <div
  28. class="position-absolute top-16px left-8px bg-#fff rounded-full flex items-center content-center p-2px"
  29. >
  30. <Icon
  31. :size="12"
  32. :icon="optIconMap[activity.status]?.icon"
  33. :color="optIconMap[activity.status]?.color"
  34. />
  35. </div>
  36. </div>
  37. </template>
  38. </el-timeline-item>
  39. </el-timeline>
  40. </template>
  41. <script lang="ts" setup>
  42. import { formatDate } from '@/utils/formatTime'
  43. import { propTypes } from '@/utils/propTypes'
  44. defineOptions({ name: 'BpmProcessInstanceTimeline' })
  45. defineProps({
  46. tasks: propTypes.array // 流程任务的数组
  47. })
  48. const optIconMap = {
  49. // 审批中
  50. '1': {
  51. color: '#00b32a',
  52. icon: 'fa-solid:clock'
  53. },
  54. // 审批通过
  55. '2': { color: '#00b32a', icon: 'fa-solid:check-circle' },
  56. // 审批不通过
  57. '3': { color: '#f46b6c', icon: 'fa-solid:times-circle' }
  58. }
  59. const mockData: any = [
  60. {
  61. id: 'fe1190ee-68c3-11ef-9c7d-00a6181404fd',
  62. name: '发起人',
  63. createTime: 1725237646192,
  64. endTime: null,
  65. durationInMillis: null,
  66. status: 1,
  67. reason: null,
  68. ownerUser: null,
  69. assigneeUser: {
  70. id: 104,
  71. nickname: '测试号',
  72. deptId: 107,
  73. deptName: '运维部门'
  74. },
  75. taskDefinitionKey: 'task-01',
  76. processInstanceId: 'fe0c60c6-68c3-11ef-9c7d-00a6181404fd',
  77. processInstance: {
  78. id: 'fe0c60c6-68c3-11ef-9c7d-00a6181404fd',
  79. name: 'oa_leave',
  80. createTime: null,
  81. processDefinitionId: 'oa_leave:1:6e5ac269-5f87-11ef-bdb6-00a6181404fd',
  82. startUser: null
  83. },
  84. parentTaskId: null,
  85. children: null,
  86. formId: null,
  87. formName: null,
  88. formConf: null,
  89. formFields: null,
  90. formVariables: null
  91. },
  92. {
  93. id: 'fe1190ee-68c3-11ef-9c7d-00a6181404fd',
  94. name: '领导审批',
  95. createTime: 1725237646192,
  96. endTime: null,
  97. durationInMillis: null,
  98. status: 2,
  99. reason: null,
  100. ownerUser: null,
  101. assigneeUser: {
  102. id: 104,
  103. nickname: '领导',
  104. deptId: 107,
  105. deptName: '运维部门'
  106. },
  107. taskDefinitionKey: 'task-01',
  108. processInstanceId: 'fe0c60c6-68c3-11ef-9c7d-00a6181404fd',
  109. processInstance: {
  110. id: 'fe0c60c6-68c3-11ef-9c7d-00a6181404fd',
  111. name: 'oa_leave',
  112. createTime: null,
  113. processDefinitionId: 'oa_leave:1:6e5ac269-5f87-11ef-bdb6-00a6181404fd',
  114. startUser: null
  115. },
  116. parentTaskId: null,
  117. children: null,
  118. formId: null,
  119. formName: null,
  120. formConf: null,
  121. formFields: null,
  122. formVariables: null
  123. },
  124. {
  125. id: 'fe1190ee-68c3-11ef-9c7d-00a6181404fd',
  126. name: '财务总监审核',
  127. createTime: 1725237646192,
  128. endTime: null,
  129. durationInMillis: null,
  130. status: 3,
  131. reason: null,
  132. ownerUser: null,
  133. assigneeUser: {
  134. id: 104,
  135. nickname: '财务总监',
  136. deptId: 107,
  137. deptName: '运维部门'
  138. },
  139. taskDefinitionKey: 'task-01',
  140. processInstanceId: 'fe0c60c6-68c3-11ef-9c7d-00a6181404fd',
  141. processInstance: {
  142. id: 'fe0c60c6-68c3-11ef-9c7d-00a6181404fd',
  143. name: 'oa_leave',
  144. createTime: null,
  145. processDefinitionId: 'oa_leave:1:6e5ac269-5f87-11ef-bdb6-00a6181404fd',
  146. startUser: null
  147. },
  148. parentTaskId: null,
  149. children: null,
  150. formId: null,
  151. formName: null,
  152. formConf: null,
  153. formFields: null,
  154. formVariables: null
  155. }
  156. ]
  157. </script>