activity.ts 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import http from '@/api'
  2. import { ProcessStatus } from '@/api/modules/flow/instance'
  3. import { cloneDeep } from 'lodash-es'
  4. export interface FlowActivity {
  5. id: string
  6. defineId: string
  7. multi: 'sequential' | 'joint' | 'single'
  8. taskId: string
  9. instanceId: string
  10. executionId: string
  11. activityId: string
  12. activityName: string
  13. activityType: string
  14. assignee: string
  15. startTime: string
  16. endTime: string
  17. duration: number
  18. deleteReason?: string
  19. status: ProcessStatus | -1
  20. records?: FlowActivity[]
  21. }
  22. export const records = (instanceId: string) => {
  23. return http.get<FlowActivity[]>(`/activity/records/${instanceId}`)
  24. }
  25. export const buildRecords = (data: FlowActivity[]) => {
  26. const activities = cloneDeep(data)
  27. const length = activities.length
  28. for (let i = 0; i < length; i++) {
  29. const item = activities[i]
  30. const next = activities[i + 1]
  31. if (
  32. next &&
  33. next.multi !== 'sequential' &&
  34. item.multi !== 'sequential' &&
  35. next.activityId === item.activityId
  36. ) {
  37. if (!Array.isArray(item.records)) {
  38. item.records = []
  39. }
  40. if (item.activityType === 'userTask') {
  41. item.activityType = 'multiUser'
  42. }
  43. item.records.push(next)
  44. activities.splice(i + 1, 1)
  45. i--
  46. }
  47. }
  48. activities.forEach((item) => {
  49. if (item.multi !== 'sequential') {
  50. if (!Array.isArray(item.records)) {
  51. item.records = []
  52. }
  53. item.records.unshift(cloneDeep(item))
  54. }
  55. })
  56. return activities
  57. }