FlowTable.vue 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <template>
  2. <view class="container">
  3. <ApprovalFlow
  4. :list="groupedNodes"
  5. :currentNode="flowStore.currentNode"
  6. :loading="flowStore.fetchFlowLoading"
  7. />
  8. </view>
  9. </template>
  10. <script setup lang="ts">
  11. import { watch, computed } from 'vue';
  12. import { useFlowStore } from '@/store/modules/flow';
  13. import ApprovalFlow from '@/components/ApprovalFlow.vue';
  14. /**
  15. * 接收来自父组件的流程属性配置
  16. */
  17. const props = defineProps({
  18. id: { type: Number, default: 0 },
  19. businessCode: { type: String, default: '' },
  20. defCode: { type: String, default: '' },
  21. memberList: { type: Array, default: () => [] }
  22. });
  23. // 引入统一的状态管理
  24. const flowStore = useFlowStore();
  25. // 将原始审批记录按节点分组
  26. const groupedNodes = computed(() => {
  27. const list = flowStore.apprList || [];
  28. if (!list.length) return [];
  29. const map: Record<string, any> = {};
  30. list.forEach((item: any) => {
  31. const key = item.nodeId || `node_${item.nodeTitle || ''}`;
  32. if (!map[key]) {
  33. map[key] = {
  34. nodeId: item.nodeId,
  35. nodeTitle: item.nodeTitle,
  36. nodeType: item.nodeType,
  37. nodeModel: item.nodeModel,
  38. items: [] as any[]
  39. };
  40. }
  41. map[key].items.push(item);
  42. });
  43. return Object.values(map);
  44. });
  45. /**
  46. * 监听属性变化并在有传入的时候触发拉取审批流信息
  47. */
  48. watch(
  49. () => props.id,
  50. (val) => {
  51. if (val) {
  52. flowStore.fetchFlowInstance(val, props.businessCode, props.defCode, props.memberList);
  53. }
  54. },
  55. { deep: true, immediate: true }
  56. );
  57. </script>
  58. <style lang="scss" scoped>
  59. .container {
  60. padding: 0 10rpx;
  61. }
  62. </style>