From de7e6c408b6209158b08991d729c4bcc72055eec Mon Sep 17 00:00:00 2001
From: Ben Lin <maobin001@msn.com>
Date: 星期四, 20 六月 2024 00:30:52 +0800
Subject: [PATCH] 产品工艺路线

---
 src/views/tigerprojects/mes/eng/route/index.vue |  813 ++++++++++++++++++++++++++++++++++-----------------------
 1 files changed, 487 insertions(+), 326 deletions(-)

diff --git a/src/views/tigerprojects/mes/eng/route/index.vue b/src/views/tigerprojects/mes/eng/route/index.vue
index 0caf374..b9bcebd 100644
--- a/src/views/tigerprojects/mes/eng/route/index.vue
+++ b/src/views/tigerprojects/mes/eng/route/index.vue
@@ -2,25 +2,15 @@
   <PageWrapper title="宸ヨ壓娴佺▼鍥�" content="鏍规嵁鐢熶骇宸ヨ壓璁捐宸ヨ壓娴佺▼" contentFullHeight fixedHeight>
     <Layout class="h-full">
       <LayoutContent :style="{ overflow: 'initial' }">
-        <FlowChart
-          :data="routeData"
-          @save-data="handleSave"
-          @add-lf="handleAddlf"
-          @select-node="handleSelect"
-          @click-blank="clickBlank"
-          @init="init"
-        />
+        <FlowChart :data="routeData" @save-data="handleSave" @add-lf="handleAddlf" @select-node="handleSelect"
+          @click-blank="clickBlank" @init="init" />
       </LayoutContent>
-      <LayoutSider
-        :class="`right`"
-        collapsible
-        :reverseArrow="true"
-        collapsedWidth="0"
-        width="300"
-        style="background: #fafafa; border-left: 1px solid #d9d9d9; padding: 10px"
-        :zeroWidthTriggerStyle="{ 'margin-top': '-70px', 'background-color': 'gray' }"
-      >
-        <PropsPanel ref="propsPanel" :activeKey="routeConfig.activeKey">
+      <LayoutSider :class="`right`" collapsible :reverseArrow="true" collapsedWidth="0" width="400"
+        style=" padding: 10px; border-left: 1px solid #d9d9d9;background: #fafafa"
+        :zeroWidthTriggerStyle="{ 'margin-top': '-70px', 'background-color': 'gray' }">
+        <PropsPanel ref="propsPanel" :activeKey="routeConfig.activeKey" :IsOperation="IsOperation" :title="title"
+          :posttitle="posttitle" :entityName="entityName" @change-name="changeName"
+          @change-node-name="changeNodeName">
           <!-- <template v-for="item of formConfig.schemas" #[`${item.component}Props`]="data">
             <slot
               :name="`${item.component}Props`"
@@ -36,193 +26,118 @@
 </template>
 
 <script lang="ts" setup>
-  import { FlowChart } from '/@/components/FlowChart';
-  import { PageWrapper } from '/@/components/Page';
-  import { SaveRouteData, getRouteData } from '/@/api/tigerapi/mes/router';
-  import { useModal } from '/@/components/Modal';
-  import RouteModal from './RouteModal.vue';
-  import { onMounted, ref, unref, Ref, provide, reactive, nextTick } from 'vue';
-  import { Layout, LayoutContent, LayoutSider } from 'ant-design-vue';
-  import {
-    RouteData,
-    node,
-    edge,
-    MES_ROUTE_NODE,
-    MES_ROUTE_EDGE,
-    MES_ROUTE_NODE_ACT,
-    MES_ROUTE,
-  } from '/@/api/tigerapi/model/router';
-  import { useUserStore } from '/@/store/modules/user';
-  import RouteDrawer from './RouteDrawer.vue';
-  import { useDrawer } from '/@/components/Drawer';
-  import PropsPanel from './components/PropsPanel.vue';
-  import { IRouteConfig } from './typings/v-form-component';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { isNullOrEmpty } from '/@/utils/is';
-  import { useRoute } from 'vue-router';
-  import { useTabs } from '/@/hooks/web/useTabs';
+import { FlowChart } from '/@/components/FlowChart';
+import { PageWrapper } from '/@/components/Page';
+import { SaveRouteData, getRouteData } from '/@/api/tigerapi/mes/router';
+import { useModal } from '/@/components/Modal';
+import RouteModal from './RouteModal.vue';
+import { onMounted, ref, unref, Ref, provide, reactive, nextTick, watch } from 'vue';
+import { Layout, LayoutContent, LayoutSider } from 'ant-design-vue';
+import {
+  RouteData,
+  node,
+  edge,
+  MES_ROUTE_NODE,
+  MES_ROUTE_EDGE,
+  MES_ROUTE_NODE_ACT,
+  MES_ROUTE,
+  nodeText,
+} from '/@/api/tigerapi/model/router';
+import { useUserStore } from '/@/store/modules/user';
+import RouteDrawer from './RouteDrawer.vue';
+import { useDrawer } from '/@/components/Drawer';
+import PropsPanel from './components/PropsPanel.vue';
+import { IRouteConfig } from './typings/v-form-component';
+import { useMessage } from '/@/hooks/web/useMessage';
+import { useI18n } from '/@/hooks/web/useI18n';
+import { isNullOrEmpty, isNullOrUnDef } from '/@/utils/is';
+import { useRoute } from 'vue-router';
+import { useTabs } from '/@/hooks/web/useTabs';
+import LogicFlow from '@logicflow/core';
+import { getEntity } from '/@/api/tigerapi/system';
 
-  const [registerDrawer, { openDrawer }] = useDrawer();
-  const [registerModal, { openModal }] = useModal();
-  const { t } = useI18n();
-  const route = useRoute();
-  const { setTitle } = useTabs();
-  const { notification, createErrorModal } = useMessage();
-  const routeConfig = reactive({
-    // 琛ㄥ崟閰嶇疆
-    schemas: [],
-    layout: 'horizontal',
-    labelLayout: 'flex',
-    labelWidth: 100,
-    labelCol: {},
-    wrapperCol: {},
-    currentItem: {} as MES_ROUTE_NODE,
-    activeKey: 1,
-  } as IRouteConfig);
-  const currRoute = ref({} as MES_ROUTE);
-  const routeData = ref({
-    nodes: [],
-    edges: [],
-  });
-  provide<Ref<IRouteConfig>>('routeConfig', routeConfig);
-  provide<Ref<MES_ROUTE>>('mesRoute', currRoute);
-  const selectnode = ref({} as node);
-  const currRotId = ref(route.params?.id);
+defineOptions({name: 'Route_View',});
+const [registerDrawer, { openDrawer }] = useDrawer();
+const [registerModal, { openModal }] = useModal();
+const { t } = useI18n();
+const route = useRoute();
+const { setTitle } = useTabs();
+const { notification, createErrorModal } = useMessage();
+const routeConfig = reactive<IRouteConfig>({
+  // 琛ㄥ崟閰嶇疆
+  schemas: [],
+  layout: 'horizontal',
+  labelLayout: 'flex',
+  labelWidth: 100,
+  labelCol: {},
+  wrapperCol: {},
+  currentItem: {} as MES_ROUTE_NODE,
+  currentAct: {} as MES_ROUTE_NODE_ACT,
+  routeData: {} as RouteData,
+  activeKey: 1,
+});
+const currRoute = ref({} as MES_ROUTE);
+const routeData = ref({
+  nodes: [],
+  edges: [],
+});
+provide<Ref<IRouteConfig>>('routeConfig', routeConfig as unknown as Ref<IRouteConfig>);
+provide<Ref<MES_ROUTE>>('mesRoute', currRoute);
+const selectnode = ref({} as node);
+const currRotId = ref(route.params?.id);
+const colSlots = ref<any>([]);
+const crudColSlots = ref<any>([]);
+const entityName = ref<any>('MES_POSITION');
+const props = defineProps({
+  rotId: { type: String, default: '' },
+});
+const IsOperation = ref(false);
+const title = ref('');
+const posttitle = ref('');
+watch(
+  () => props.rotId,
+  (v) => {
+    if (v !== currRotId.value) {
+      currRotId.value = v;
+      if (!isNullOrUnDef(unref(currlf))) {
+        unref(currlf).render({});
+        routeData.value = {
+          nodes: [],
+          edges: [],
+        };
+        init(currlf);
+      }
+    }
+  },
+  { deep: true },
+);
 
-  console.log(currRotId.value);
-  // const demoData1 = ref({
-  //   nodes: [
-  //     {
-  //       id: '5d82e943-477f-4313-aaff-a736d8caba74',
-  //       type: 'rect',
-  //       x: 340,
-  //       y: 120,
-  //       properties: {},
-  //       text: {
-  //         x: 340,
-  //         y: 120,
-  //         value: '娴嬭瘯宸ュ簭',
-  //       },
-  //     },
-  //     {
-  //       id: '6e0c6714-69a7-4160-8bda-61f4e6d285dd',
-  //       type: 'rect',
-  //       x: 560,
-  //       y: 120,
-  //       properties: {},
-  //       text: {
-  //         x: 560,
-  //         y: 120,
-  //         value: '涓婃枡宸ュ簭',
-  //       },
-  //     },
-  //     {
-  //       id: '80b2ee17-5a0e-4586-ba28-6ba59fcc0f59',
-  //       type: 'rect',
-  //       x: 340,
-  //       y: 280,
-  //       properties: {
-  //         isReturn: true,
-  //       },
-  //       text: {
-  //         x: 340,
-  //         y: 280,
-  //         value: '缁翠慨宸ュ簭',
-  //       },
-  //     },
-  //   ],
-  //   edges: [
-  //     {
-  //       id: 'Flow_0p4u47c',
-  //       type: 'bpmn:sequenceFlow',
-  //       sourceNodeId: '5d82e943-477f-4313-aaff-a736d8caba74',
-  //       targetNodeId: '6e0c6714-69a7-4160-8bda-61f4e6d285dd',
-  //       startPoint: {
-  //         x: 390,
-  //         y: 120,
-  //       },
-  //       endPoint: {
-  //         x: 510,
-  //         y: 120,
-  //       },
-  //       properties: {},
-  //       pointsList: [
-  //         {
-  //           x: 390,
-  //           y: 120,
-  //         },
-  //         {
-  //           x: 510,
-  //           y: 120,
-  //         },
-  //       ],
-  //     },
-  //     {
-  //       id: 'Flow_09tu4cm',
-  //       type: 'bpmn:sequenceFlow',
-  //       sourceNodeId: '5d82e943-477f-4313-aaff-a736d8caba74',
-  //       targetNodeId: '80b2ee17-5a0e-4586-ba28-6ba59fcc0f59',
-  //       startPoint: {
-  //         x: 340,
-  //         y: 160,
-  //       },
-  //       endPoint: {
-  //         x: 340,
-  //         y: 240,
-  //       },
-  //       properties: {},
-  //       pointsList: [
-  //         {
-  //           x: 340,
-  //           y: 160,
-  //         },
-  //         {
-  //           x: 340,
-  //           y: 240,
-  //         },
-  //       ],
-  //     },
-  //     {
-  //       id: '22226ec4-9960-497d-93cb-6226a3f29b3d',
-  //       type: 'custom-edge',
-  //       sourceNodeId: '80b2ee17-5a0e-4586-ba28-6ba59fcc0f59',
-  //       targetNodeId: '5d82e943-477f-4313-aaff-a736d8caba74',
-  //       startPoint: {
-  //         x: 351,
-  //         y: 240,
-  //       },
-  //       endPoint: {
-  //         x: 351,
-  //         y: 160,
-  //       },
-  //       properties: {},
-  //       pointsList: [
-  //         {
-  //           x: 351,
-  //           y: 240,
-  //         },
-  //         {
-  //           x: 351,
-  //           y: 160,
-  //         },
-  //       ],
-  //     },
-  //   ],
-  // });
+const currlf = ref(null) as Ref<LogicFlow | null>;
+console.log(currRotId.value);
 
-  if (!isNullOrEmpty(currRotId.value)) {
-    setTitle('璁捐锛氬伐鑹鸿矾绾�' + currRotId.value);
-  }
-
-  async function init(lf) {
-    //閫氳繃宸ヨ壓璺嚎ID鑾峰彇鍥惧舰鏁版嵁锛屽苟娓叉煋
-    var _data = await getRouteData(currRotId.value);
-    console.log('缁勪欢宸叉寕杞�', _data);
+onMounted(() => { });
+/**
+ * @description: 宸ヨ壓璺嚎鍒濆鍖�
+ * @param {*} lf
+ * @return {*}
+ */
+async function init(lf) {
+  currlf.value = unref(lf);
+  //閫氳繃宸ヨ壓璺嚎ID鑾峰彇鍥惧舰鏁版嵁锛屽苟娓叉煋
+  var _data = await getRouteData(currRotId.value);
+  console.log('缁勪欢宸叉寕杞�', _data);
+  //宸ヨ壓璺嚎鍏ㄤ俊鎭紝鍖呮嫭Node銆丒dge鍜孉ct
+  routeConfig.routeData = _data.Data;
+  if (_data.Data != null) {
+    //宸ヨ壓璺嚎涓讳俊鎭�
     currRoute.value = _data.Data.route;
+    if (!isNullOrEmpty(currRotId.value) && isNullOrEmpty(props.rotId)) {
+      setTitle('璁捐锛氬伐鑹鸿矾绾�-' + currRoute.value.ROT_CODE);
+    }
     _data.Data.nodes.forEach((n) => {
       n.node.properties = JSON.parse(n.node.properties);
-      routeData.value.nodes.push(n.node);
+      n['node']['text']['value'] = n.NODE_NAME;
+      routeData.value.nodes.push(n['node']);
     });
     console.log('111', routeData.value);
     _data.Data.edges.forEach((e) => {
@@ -236,57 +151,55 @@
     console.log('init', unref(lf).getGraphData(), JSON.parse(JSON.stringify(routeData.value)));
     unref(lf).render(routeData.value);
   }
+}
 
-  async function handleSave(lf) {
-    console.log('handleSave', unref(lf).getGraphData().nodes[0]);
-    if (isNullOrEmpty(currRoute.value.ROT_CODE)) {
-      createErrorModal({
-        title: t('鏈�夋嫨'),
-        content: t('鏈�夋嫨宸ヨ壓璺嚎鎴栬�呮柊澧炲伐鑹鸿矾绾�'),
-        getContainer: () => document.body,
-      });
-    } else {
-      var _routeData: RouteData = {
-        route: {
-          ID: currRoute.value.ID,
-          CREATE_TIME: new Date(),
-          CREATE_USER: useUserStore().getUserInfo.userId as string,
-          UPDATE_TIME: new Date(),
-          UPDATE_USER: useUserStore().getUserInfo.userId as string,
-          GHOST_ROW: false,
-          ROT_CODE: currRoute.value.ROT_CODE,
-          ROT_NAME: currRoute.value.ROT_NAME,
-          ROT_TYPE: currRoute.value.ROT_TYPE,
-          ROT_VER: currRoute.value.ROT_VER,
-          IS_ACTIVE: currRoute.value.IS_ACTIVE,
-          REMARK: currRoute.value.REMARK,
-          AUTH_ORG: '',
-          AUTH_PROD: '',
-          AUTH_WH: '',
-        },
-        nodes: [],
-        edges: [],
-        acts: [],
-      };
-      var _nodes = unref(lf).getGraphData().nodes as node[];
-      var _edges = unref(lf).getGraphData().edges as edge[];
-      var _num = 1;
-      _nodes.forEach((n) => {
-        if (n.properties.operType && n.properties.operType == 'Action') {
+const GetRotData = (lf) => {
+  var currRotData: RouteData = {
+    route: {
+      ID: currRoute.value.ID,
+      CREATE_TIME: new Date(),
+      CREATE_USER: useUserStore().getUserInfo.userId as string,
+      UPDATE_TIME: new Date(),
+      UPDATE_USER: useUserStore().getUserInfo.userId as string,
+      GHOST_ROW: false,
+      ROT_CODE: currRoute.value.ROT_CODE,
+      ROT_NAME: currRoute.value.ROT_NAME,
+      ROT_TYPE: currRoute.value.ROT_TYPE,
+      ROT_VER: currRoute.value.ROT_VER,
+      IS_ACTIVE: currRoute.value.IS_ACTIVE,
+      REMARK: currRoute.value.REMARK,
+      AUTH_ORG: '',
+      AUTH_PROD: '',
+      AUTH_WH: '',
+    },
+    nodes: [],
+    edges: [],
+    acts: [],
+  };
+  var _nodes = unref(lf).getGraphData().nodes as node[];
+  var _edges = unref(lf).getGraphData().edges as edge[];
+  var _num = 1;
+  const diffnodes = routeConfig.routeData.nodes.filter((itemA) => _nodes.some((itemB) => itemB.id === itemA.ID));
+  const diffacts = routeConfig.routeData.acts.filter((itemA) => _nodes.some((itemB) => itemB.id === itemA.ID),);
+  _nodes.forEach((n) => {
+    if (n.properties.operType && n.properties.operType == 'Action') {
+      var _diffacts = diffacts.length > 0 ? diffacts : routeConfig.routeData.acts;
+      _diffacts.forEach((a) => {
+        if (a.ID == n.id) {
           var act: MES_ROUTE_NODE_ACT = {
             ID: n.id,
-            CREATE_TIME: _routeData.route.CREATE_TIME,
+            CREATE_TIME: routeConfig.routeData.route.CREATE_TIME,
             CREATE_USER: useUserStore().getUserInfo.userId as string,
-            UPDATE_TIME: _routeData.route.UPDATE_TIME,
+            UPDATE_TIME: routeConfig.routeData.route.UPDATE_TIME,
             UPDATE_USER: useUserStore().getUserInfo.userId as string,
             GHOST_ROW: false,
-            ROT_ID: _routeData.route.ID,
+            ROT_ID: routeConfig.routeData.route.ID,
             GPH_TYPE: n.type,
             GPH_X: n.x,
             GPH_Y: n.y,
             GPH_PROP: JSON.stringify(n.properties),
             GPH_TEXT: n.text.value,
-            REMARK: '',
+            REMARK: a.REMARK,
             AUTH_ORG: '',
             AUTH_PROD: '',
             AUTH_WH: '',
@@ -295,19 +208,17 @@
             OPTION_3: '',
             OPTION_4: '',
             OPTION_5: '',
-            ACT_NAME: `${_routeData.route.ROT_CODE}_${n.text.value}_${_num}`,
-            NODE_ID: '',
-            ACT_TYPE: 0,
-            DO_TYPE: 0,
-            DO_METHOD: '',
-            DO_IF_PASS: '',
-            DO_IF_FAIL: '',
-            RULE_CODE: '',
-            ITEM_CODE: '',
-            PROD_CODE: '',
-            TEST_CODE: '',
-            SAPL_CODE: '',
-            LABEL_CODE: '',
+            ACT_NAME: isNullOrEmpty(a.ACT_NAME) ? `${n.text.value}_${_num}` : a.ACT_NAME,
+            ACT_CODE: a.ACT_CODE,
+            NEED_SETUP: a.NEED_SETUP,
+            NODE_ID: a.NODE_ID,
+            ACT_TYPE: a.ACT_TYPE,
+            // DO_TYPE: a.DO_TYPE,
+            // DO_METHOD: a.DO_METHOD,
+            // DO_IF_PASS: a.DO_IF_PASS,
+            // DO_IF_FAIL: a.DO_IF_FAIL,
+            node: {} as node,
+            IS_ACTIVE: a.IS_ACTIVE,
           };
           var pnode = [n];
           while (pnode[0].properties.operType == 'Action') {
@@ -317,107 +228,187 @@
               break;
             }
           }
-          _routeData.acts.push(act);
-        } else {
+          currRotData.acts.push(act);
+        }
+      });
+      routeConfig.routeData.acts = _diffacts;
+    } else {
+      var _diffnodes = diffnodes.length > 0 ? diffnodes : routeConfig.routeData.nodes;
+      _diffnodes.forEach((nd) => {
+        if (nd.ID == n.id) {
           var node: MES_ROUTE_NODE = {
             ID: n.id,
-            CREATE_TIME: _routeData.route.CREATE_TIME,
+            CREATE_TIME: currRotData.route.CREATE_TIME,
             CREATE_USER: useUserStore().getUserInfo.userId as string,
-            UPDATE_TIME: _routeData.route.UPDATE_TIME,
+            UPDATE_TIME: currRotData.route.UPDATE_TIME,
             UPDATE_USER: useUserStore().getUserInfo.userId as string,
             GHOST_ROW: false,
-            NODE_NAME: `${_routeData.route.ROT_CODE}_${n.text.value}_${_num}`,
-            ROT_ID: _routeData.route.ID,
-            SEGMENT: '',
-            OPER_CODE: '',
+            NODE_NAME: isNullOrEmpty(nd.NODE_NAME) ? `${n.text.value}_${_num}` : nd.NODE_NAME,
+            ROT_ID: currRotData.route.ID,
+            SEGMENT: nd.SEGMENT,
+            OPER_CODE: isNullOrEmpty(nd.OPER_CODE) ? n.type : nd.OPER_CODE,
             GPH_TYPE: n.type,
             GPH_X: n.x,
             GPH_Y: n.y,
             GPH_PROP: JSON.stringify(n.properties),
             GPH_TEXT: n.text.value,
-            IS_ACTIVE: 'Y',
-            IS_CALC_FPY: 'N',
-            CAN_SKIP: 'N',
-            REMARK: '',
+            IS_ACTIVE: nd.IS_ACTIVE,
+            IS_CALC_FPY: nd.IS_CALC_FPY,
+            CAN_SKIP: nd.CAN_SKIP,
+            REMARK: nd.REMARK,
             AUTH_ORG: '',
             AUTH_PROD: '',
             AUTH_WH: '',
             IS_FIRST_NODE: 'N',
-            IS_INPUT: '',
-            IS_OUTPUT: '',
+            IS_INPUT: nd.IS_INPUT,
+            IS_OUTPUT: nd.IS_OUTPUT,
             OPTION_1: '',
             OPTION_2: '',
             OPTION_3: '',
             OPTION_4: '',
             OPTION_5: '',
+            node: {} as node,
           };
+          nd.GPH_TYPE = n.type;
+          nd.GPH_PROP = JSON.stringify(n.properties);
+          nd.GPH_TEXT = n.text.value;
+          nd.GPH_X = n.x;
+          nd.GPH_Y = n.y;
           if (unref(lf).getNodeIncomingNode(n.id).length == 0) {
             node.IS_FIRST_NODE = 'Y';
+            nd.IS_FIRST_NODE = 'Y';
           }
-          _routeData.nodes.push(node);
+          currRotData.nodes.push(node);
         }
-        _num++;
       });
-      _edges.forEach((e) => {
-        var edge: MES_ROUTE_EDGE = {
-          ID: e.id,
-          CREATE_TIME: _routeData.route.CREATE_TIME,
-          CREATE_USER: useUserStore().getUserInfo.userId as string,
-          UPDATE_TIME: _routeData.route.UPDATE_TIME,
-          UPDATE_USER: useUserStore().getUserInfo.userId as string,
-          GHOST_ROW: false,
-          EDGE_NAME: `${_routeData.route.ROT_CODE}_${e.id}`,
-          ROT_ID: _routeData.route.ID,
-          SRC_NODE: e.sourceNodeId,
-          TGT_NODE: e.targetNodeId,
-          GPH_TYPE: e.type,
-          GPH_SRC_X: e.startPoint.x,
-          GPH_SRC_Y: e.startPoint.y,
-          GPH_TGT_X: e.endPoint.x,
-          GPH_TGT_Y: e.endPoint.y,
-          GPH_PROP: JSON.stringify(e.properties),
-          GPH_POTS: JSON.stringify(e.pointsList),
-          REMARK: '',
-          AUTH_ORG: '',
-          AUTH_PROD: '',
-          AUTH_WH: '',
-          EDGE_TYPE: 0,
-          OPTION_1: '',
-          OPTION_2: '',
-          OPTION_3: '',
-          OPTION_4: '',
-          OPTION_5: '',
-        };
-        _routeData.edges.push(edge);
+      routeConfig.routeData.nodes = _diffnodes;
+    }
+    _num++;
+  });
+  routeConfig.routeData.edges = [];
+  _edges.forEach((e) => {
+    var edge: MES_ROUTE_EDGE = {
+      ID: e.id,
+      CREATE_TIME: routeConfig.routeData.route.CREATE_TIME,
+      CREATE_USER: useUserStore().getUserInfo.userId as string,
+      UPDATE_TIME: routeConfig.routeData.route.UPDATE_TIME,
+      UPDATE_USER: useUserStore().getUserInfo.userId as string,
+      GHOST_ROW: false,
+      EDGE_NAME: `${routeConfig.routeData.route.ROT_CODE}_${e.id}`,
+      ROT_ID: routeConfig.routeData.route.ID,
+      SRC_NODE: e.sourceNodeId,
+      TGT_NODE: e.targetNodeId,
+      GPH_TYPE: e.type,
+      GPH_SRC_X: e.startPoint.x,
+      GPH_SRC_Y: e.startPoint.y,
+      GPH_TGT_X: e.endPoint.x,
+      GPH_TGT_Y: e.endPoint.y,
+      GPH_PROP: JSON.stringify(e.properties),
+      GPH_POTS: JSON.stringify(e.pointsList),
+      REMARK: '',
+      AUTH_ORG: '',
+      AUTH_PROD: '',
+      AUTH_WH: '',
+      EDGE_TYPE: 0,
+      OPTION_1: '',
+      OPTION_2: '',
+      OPTION_3: '',
+      OPTION_4: '',
+      OPTION_5: '',
+      edge: {} as edge,
+    };
+    routeConfig.routeData.edges.push(edge);
+    currRotData.edges.push(edge);
+  });
+  return currRotData;
+};
+
+/*
+ *淇濆瓨宸ヨ壓璺嚎浜嬩欢
+ */
+async function handleSave(lf) {
+  console.log('handleSave', unref(lf).getGraphData().nodes[0]);
+  if (isNullOrEmpty(currRoute.value.ROT_CODE)) {
+    createErrorModal({
+      title: t('鏈�夋嫨'),
+      content: t('鏈�夋嫨宸ヨ壓璺嚎鎴栬�呮柊澧炲伐鑹鸿矾绾�'),
+      getContainer: () => document.body,
+    });
+  } else {
+    var hasError = false;
+    unref(lf)
+      .getGraphData()
+      .nodes.forEach((n) => {
+        if (
+          unref(lf).getNodeIncomingEdge(n.id).length == 0 &&
+          unref(lf).getNodeOutgoingEdge(n.id).length == 0
+        ) {
+          hasError = true;
+        }
       });
-      await SaveRouteData(_routeData);
+    if (hasError) {
+      createErrorModal({
+        title: t('璀﹀憡'),
+        content: t('鏈夎妭鐐规湭杩炵嚎锛岃閲嶆柊璁捐宸ヨ壓璺嚎鍐嶄繚瀛樻暟鎹紒'),
+        getContainer: () => document.body,
+      });
+    } else {
+      var action = await SaveRouteData(GetRotData(lf));
+      if (action.IsSuccessed) {
+        notification['success']({
+          message: '鎿嶄綔鎴愬姛',
+          description: `淇濆瓨宸ヨ壓璺嚎锛�${currRoute.value.ROT_CODE} 鎴愬姛`,
+        });
+      }
     }
   }
+}
 
-  async function handleAddlf(lf) {
-    // openDrawer(true, {
-    //   isUpdate: false,
-    //   lf: lf,
-    // });
-    openModal(true, {
-      isUpdate: false,
-      lf: lf,
-    });
+/*
+ *鏂板宸ヨ壓璺嚎寮瑰嚭妯℃�佺獥鍙d簨浠�
+ */
+async function handleAddlf(lf) {
+  // openDrawer(true, {
+  //   isUpdate: false,
+  //   lf: lf,
+  // });
+  openModal(true, {
+    isUpdate: false,
+    lf: lf,
+  });
+}
+
+/*
+ *鐐瑰嚮鑺傜偣閫変腑浜嬩欢
+ */
+function handleSelect(data, lf) {
+  lf.graphModel.clearSelectElements();
+  lf.graphModel.getNodeModelById(data.data.id).setSelected(true);
+  selectnode.value = data.data;
+  if (isNullOrUnDef(routeConfig.routeData)) {
+    //鍏堝垵濮嬪寲routeData
+    routeConfig.routeData = {};
+    routeConfig.routeData.route = currRoute.value;
+    routeConfig.routeData.nodes = [];
+    routeConfig.routeData.edges = [];
+    routeConfig.routeData.acts = [];
+    //鍐嶈繑鍥炲叿浣撴暟鎹�
+    routeConfig.routeData = GetRotData(lf);
   }
 
-  function handleSelect(data) {
-    selectnode.value = data.data;
-    routeConfig.currentItem = {
+  var _node = routeConfig.routeData.nodes.filter((x) => x.ID == selectnode.value.id)[0];
+  if (isNullOrUnDef(_node)) {
+    _node = {
       ID: selectnode.value.id,
       CREATE_TIME: currRoute.value.CREATE_TIME,
       CREATE_USER: useUserStore().getUserInfo.userId as string,
       UPDATE_TIME: currRoute.value.UPDATE_TIME,
       UPDATE_USER: useUserStore().getUserInfo.userId as string,
       GHOST_ROW: false,
-      NODE_NAME: 'N001',
+      NODE_NAME: `${selectnode.value.text.value}_0`,
       ROT_ID: currRoute.value.ID,
       SEGMENT: '',
-      OPER_CODE: '',
+      OPER_CODE: selectnode.value.type,
       GPH_TYPE: selectnode.value.type,
       GPH_X: selectnode.value.x,
       GPH_Y: selectnode.value.y,
@@ -427,22 +418,192 @@
       IS_CALC_FPY: 'N',
       CAN_SKIP: 'N',
       REMARK: '',
+      AUTH_ORG: '',
+      AUTH_PROD: '',
+      AUTH_WH: '',
+      IS_FIRST_NODE: '',
+      IS_INPUT: '',
+      IS_OUTPUT: '',
+      OPTION_1: '',
+      OPTION_2: '',
+      OPTION_3: '',
+      OPTION_4: '',
+      OPTION_5: '',
+      node: {} as node,
     };
-    console.log(routeConfig.currentItem);
+    routeConfig.routeData.nodes.push(_node);
+  }
+  //鏄涓�
+  if (selectnode.value.properties['operType'] && selectnode.value.properties['operType'] == 'Action') {
+    var _act = routeConfig.routeData.acts.filter((x) => x.ID == selectnode.value.id)[0];
     routeConfig.activeKey = 2;
+    IsOperation.value = false;
+    title.value = '琛屼负';
+    posttitle.value = '';
+    if (isNullOrUnDef(_act)) {
+      _act = {
+        ID: selectnode.value.id,
+        CREATE_TIME: currRoute.value.CREATE_TIME,
+        CREATE_USER: useUserStore().getUserInfo.userId as string,
+        UPDATE_TIME: currRoute.value.UPDATE_TIME,
+        UPDATE_USER: useUserStore().getUserInfo.userId as string,
+        GHOST_ROW: false,
+        AUTH_ORG: '',
+        AUTH_PROD: '',
+        AUTH_WH: '',
+        ACT_NAME: `${selectnode.value.text.value}_0`,
+        ACT_CODE: '',
+        ROT_ID: currRoute.value.ID,
+        NODE_ID: '',
+        ACT_TYPE: 0,
+        GPH_TYPE: selectnode.value.type,
+        GPH_X: selectnode.value.x,
+        GPH_Y: selectnode.value.y,
+        GPH_PROP: JSON.stringify(selectnode.value.properties),
+        GPH_TEXT: selectnode.value.text.value,
+        NEED_SETUP: 0,
+        // DO_TYPE: 0,
+        // DO_METHOD: '',
+        // DO_IF_PASS: '',
+        // DO_IF_FAIL: '',
+        IS_ACTIVE: '',
+        OPTION_1: '',
+        OPTION_2: '',
+        OPTION_3: '',
+        OPTION_4: '',
+        OPTION_5: '',
+        REMARK: '',
+        node: {} as node,
+      }
+      routeConfig.routeData.acts.push(_act);
+    }
+    routeConfig.currentAct = {
+      ID: selectnode.value.id,
+      CREATE_TIME: currRoute.value.CREATE_TIME,
+      CREATE_USER: useUserStore().getUserInfo.userId as string,
+      UPDATE_TIME: currRoute.value.UPDATE_TIME,
+      UPDATE_USER: useUserStore().getUserInfo.userId as string,
+      GHOST_ROW: false,
+      AUTH_ORG: '',
+      AUTH_PROD: '',
+      AUTH_WH: '',
+      ACT_NAME: _act.ACT_NAME,
+      ACT_CODE: _act.ACT_CODE,
+      ROT_ID: currRoute.value.ID,
+      NODE_ID: _act.NODE_ID,
+      ACT_TYPE: _act.ACT_TYPE,
+      GPH_TYPE: selectnode.value.type,
+      GPH_X: selectnode.value.x,
+      GPH_Y: selectnode.value.y,
+      GPH_PROP: JSON.stringify(selectnode.value.properties),
+      GPH_TEXT: selectnode.value.text.value,
+      NEED_SETUP: _act.NEED_SETUP,
+      // DO_TYPE: _act.DO_TYPE,
+      // DO_METHOD: _act.DO_METHOD,
+      // DO_IF_PASS: _act.DO_IF_PASS,
+      // DO_IF_FAIL: _act.DO_IF_FAIL,
+      IS_ACTIVE: _act.IS_ACTIVE,
+      OPTION_1: '',
+      OPTION_2: '',
+      OPTION_3: '',
+      OPTION_4: '',
+      OPTION_5: '',
+      REMARK: '',
+      node: {} as node,
+    };
+    const actModel = lf.getNodeModelById(selectnode.value.id);
+    actModel.updateText(routeConfig.currentAct?.ACT_NAME);
+  } else {
+    //鏄伐搴�
+    IsOperation.value = false;
+    routeConfig.currentItem = {
+      ID: selectnode.value.id,
+      CREATE_TIME: currRoute.value.CREATE_TIME,
+      CREATE_USER: useUserStore().getUserInfo.userId as string,
+      UPDATE_TIME: currRoute.value.UPDATE_TIME,
+      UPDATE_USER: useUserStore().getUserInfo.userId as string,
+      GHOST_ROW: false,
+      NODE_NAME: _node.NODE_NAME ?? '',
+      ROT_ID: currRoute.value.ID,
+      SEGMENT: _node.SEGMENT,
+      OPER_CODE: _node.OPER_CODE,
+      GPH_TYPE: selectnode.value.type,
+      GPH_X: selectnode.value.x,
+      GPH_Y: selectnode.value.y,
+      GPH_PROP: '',
+      GPH_TEXT: selectnode.value.text.value,
+      IS_ACTIVE: _node.IS_ACTIVE,
+      IS_CALC_FPY: _node.IS_CALC_FPY,
+      CAN_SKIP: _node.CAN_SKIP,
+      IS_INPUT: _node.IS_INPUT,
+      IS_OUTPUT: _node.IS_OUTPUT,
+      REMARK: _node.REMARK,
+    };
+    const nodeModel = lf.getNodeModelById(selectnode.value.id);
+    nodeModel.updateText(_node.NODE_NAME);
+    routeConfig.isCalcFpy = _node.IS_CALC_FPY == 'Y';
+    routeConfig.canSkip = _node.CAN_SKIP == 'Y';
+    routeConfig.isInput = _node.IS_INPUT == 'Y';
+    routeConfig.isOutput = _node.IS_OUTPUT == 'Y';
+    setTimeout(() => {
+      console.log(routeConfig.currentItem);
+      routeConfig.activeKey = 2;
+      IsOperation.value = true;
+      title.value = '宸ュ簭';
+      posttitle.value = '宀椾綅';
+    }, 100);
   }
+}
 
-  function handleSuccess(lfInstance) {
-    unref(lfInstance).render({});
+function handleSuccess(lfInstance) {
+  unref(lfInstance).render({});
+}
+
+/*
+ *鐐瑰嚮鐢诲竷浜嬩欢
+ */
+function clickBlank() {
+  routeConfig.activeKey = 1;
+  title.value = '';
+  posttitle.value = '';
+}
+
+/*
+ *鏂板宸ヨ壓璺嚎鎴愬姛鍚庝簨浠�
+ */
+async function modalSuccess(lfInstance, route) {
+  unref(lfInstance).render({});
+  currRoute.value = route;
+  currRotId.value = currRoute.value.ID;
+  setTitle('璁捐锛氬伐鑹鸿矾绾�-' + currRoute.value.ROT_CODE);
+  //鍏堝垵濮嬪寲routeData
+  routeConfig.routeData = {};
+  routeConfig.routeData.route = currRoute.value;
+  routeConfig.routeData.nodes = [];
+  routeConfig.routeData.edges = [];
+  routeConfig.routeData.acts = [];
+  //鍐嶈繑鍥炲叿浣撴暟鎹�
+  routeConfig.routeData = GetRotData(unref(lfInstance));
+}
+
+/**
+ * @description: 鍚嶇О鏀瑰彉鍥炶皟鏂规硶锛岃繑鍥炲悗鏇存柊鑺傜偣鏂囨湰
+ * @param {*} e
+ * @return {*}
+ */
+function changeName(e) {
+    console.log(e.val);
+    const nodeModel = unref(currlf)?.getNodeModelById(e.id);
+    nodeModel?.updateText(e.val);
   }
-
-  function clickBlank() {
-    routeConfig.activeKey = 1;
-  }
-
-  async function modalSuccess(lfInstance, route) {
-    unref(lfInstance).render({});
-    currRoute.value = route;
-    currRotId.value = currRoute.value.ID;
+/**
+ * @description: 鍚嶇О鏀瑰彉鍥炶皟鏂规硶锛岃繑鍥炲悗鏇存柊鑺傜偣鏂囨湰
+ * @param {*} e
+ * @return {*}
+ */
+function changeNodeName(e) {
+    console.log(e.val);
+    const nodeModel = unref(currlf)?.getNodeModelById(e.id);
+    nodeModel?.updateText(e.val);
   }
 </script>

--
Gitblit v1.9.3