ApprovalFlowTable.vue 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. <template>
  2. <view class="container">
  3. <ApprovalFlow
  4. :list="groupedNodes"
  5. :currentNode="flowStore.currentNode"
  6. :loading="flowStore.fetchLoading"
  7. />
  8. </view>
  9. </template>
  10. <script setup lang="ts">
  11. import { watch, computed } from 'vue';
  12. import { useApprovalFlowStore } from '@/store/modules/approvalFlow';
  13. import ApprovalFlow from '@/components/ApprovalFlow.vue';
  14. const props = defineProps({
  15. id: { type: Number, default: 0 }
  16. });
  17. const flowStore = useApprovalFlowStore();
  18. const groupedNodes = computed(() => {
  19. const list = flowStore.apprList || [];
  20. if (!list.length) return [];
  21. const map: Record<string, any> = {};
  22. list.forEach((item: any) => {
  23. const key = item.nodeId || `node_${item.nodeTitle || ''}`;
  24. if (!map[key]) {
  25. map[key] = {
  26. nodeId: item.nodeId,
  27. nodeTitle: item.nodeTitle,
  28. type: item.type,
  29. actType: item.actType,
  30. items: [] as any[]
  31. };
  32. }
  33. map[key].items.push(item);
  34. });
  35. return Object.values(map);
  36. });
  37. watch(() => props.id, (val) => {
  38. if (val) flowStore.fetchByProcInstId(val);
  39. }, { immediate: true });
  40. </script>
  41. <style lang="scss" scoped>
  42. .container {
  43. padding: 0 10rpx;
  44. }
  45. </style>