From 78999ce1626d2a786f3a705281eeba79c2f1d6dd Mon Sep 17 00:00:00 2001
From: Ben Lin <maobin001@msn.com>
Date: 星期二, 22 十月 2024 09:32:27 +0800
Subject: [PATCH] 工艺页面缓存优化

---
 src/store/modules/prodRoute.ts                                      |   84 +++++++++++++++++++++------
 src/store/modules/multipleTab.ts                                    |   10 ++
 src/views/tigerprojects/system/lowcode/entityts/ProdRouteBinding.ts |   28 ++++++---
 src/views/tigerprojects/system/lowcode/entityts/WoRouteBinding.ts   |   18 ++++-
 src/views/tigerprojects/system/lowcode/normal/mainTable.vue         |   10 ++-
 src/api/tigerapi/model/mesModel.ts                                  |    5 +
 src/views/tigerprojects/system/lowcode/composition/LeftTree.vue     |   16 +++--
 src/components/TigerTree/src/hooks/useTree.ts                       |    6 +
 8 files changed, 129 insertions(+), 48 deletions(-)

diff --git a/src/api/tigerapi/model/mesModel.ts b/src/api/tigerapi/model/mesModel.ts
index 6cd3044..b15dcba 100644
--- a/src/api/tigerapi/model/mesModel.ts
+++ b/src/api/tigerapi/model/mesModel.ts
@@ -528,3 +528,8 @@
   cust:string;
   children: MesRotTree[]
 }
+
+export interface PageRotTree {
+  name: string;
+  treeInfo: MesRotTree[];
+}
diff --git a/src/components/TigerTree/src/hooks/useTree.ts b/src/components/TigerTree/src/hooks/useTree.ts
index 65865e2..9866dbf 100644
--- a/src/components/TigerTree/src/hooks/useTree.ts
+++ b/src/components/TigerTree/src/hooks/useTree.ts
@@ -202,12 +202,14 @@
     //let nodes:TreeItem[]=[];
     let node:TreeItem=null;
     const treeData = list || unref(treeDataRef);
+    const { key: keyField, children: childrenField } = unref(getFieldNames);
+    if (!keyField) return;
     treeData.forEach((item) => {
-      if (item.id === id) {
+      if (item[keyField] === id) {
         node = item;
         return
       }
-      if(isNullOrUnDef(item.children) && item.children.length>0){
+      if(!isNullOrUnDef(item.children) && item.children.length>0){
         let res=getNodeById(id,item.children)
         if(res!=null){
           node = res;
diff --git a/src/store/modules/multipleTab.ts b/src/store/modules/multipleTab.ts
index deb7ea7..9885459 100644
--- a/src/store/modules/multipleTab.ts
+++ b/src/store/modules/multipleTab.ts
@@ -88,7 +88,11 @@
       const name = route.name;
       const useProdRoute = useProdRouteStore();
       useProdRoute.setChangeToCPPage(false);
-      useProdRoute.setCurProdRotTree([]);
+      // 浠巗essionStorage涓鍙栧弬鏁板苟杞崲鍥炲璞�
+      const savedParams = sessionStorage.getItem(`${JSON.parse(decodeURI(route.params.id[0]))['sName']}_params`);
+      const objParams = savedParams ? JSON.parse(decodeURI(savedParams)) : {};
+      useProdRoute.setCurProdRotTree({ name: objParams['CODE'], treeInfo: [] });
+      useProdRoute.setCurSelectedNodes({ name: objParams['CODE'], SelectedNodes: [] });
 
       const findTab = this.getCachedTabList.find((item) => item === name);
       if (findTab) {
@@ -138,7 +142,9 @@
       // Existing pages, do not add tabs repeatedly
       const tabHasExits = this.tabList.some((tab, index) => {
         updateIndex = index;
-        return decodeURIComponent(tab.fullPath || tab.path) === decodeURIComponent(fullPath || path);
+        return (
+          decodeURIComponent(tab.fullPath || tab.path) === decodeURIComponent(fullPath || path)
+        );
       });
 
       // If the tab already exists, perform the update operation
diff --git a/src/store/modules/prodRoute.ts b/src/store/modules/prodRoute.ts
index 00c0d33..5e60412 100644
--- a/src/store/modules/prodRoute.ts
+++ b/src/store/modules/prodRoute.ts
@@ -4,20 +4,21 @@
  * @version:
  * @Date: 2024-06-18 15:09:47
  * @LastEditors: Ben Lin
- * @LastEditTime: 2024-10-21 23:13:48
+ * @LastEditTime: 2024-10-22 08:37:57
  */
 import { defineStore } from 'pinia';
 import { store } from '@/store';
-import { MesRotTree } from '/@/api/tigerapi/model/mesModel';
+import { MesRotTree, PageRotTree } from '/@/api/tigerapi/model/mesModel';
 import { SetDefaultRoute } from '/@/api/tigerapi/mes/router';
 import { useUserStore } from './user';
 import { findParent } from '/@/api/tigerapi/system';
 
 interface ProdRouteState {
-  curProdRotTree: MesRotTree[];
+  curProdRotTree: PageRotTree[];
   curConfig: any;
-  curSelectedNodes: any;
+  curSelectedNodes: any[];
   ItemCode: string;
+  name: string;
   curDtl: any;
   changeToCPPage: boolean;
 }
@@ -27,19 +28,20 @@
   state: (): ProdRouteState => ({
     curProdRotTree: [],
     curConfig: {},
-    curSelectedNodes: {},
+    curSelectedNodes: [],
     ItemCode: '',
     curDtl: {},
-    changeToCPPage: false
+    changeToCPPage: false,
+    name: '',
   }),
   getters: {
-    getCurProdRotTree(state): MesRotTree[] {
+    getCurProdRotTree(state): PageRotTree[] {
       return state.curProdRotTree;
     },
     getCurConfig(state): any {
       return state.curConfig;
     },
-    getCurSelectedNodes(state): any {
+    getCurSelectedNodes(state): any[] {
       return state.curSelectedNodes;
     },
     getItemCodes(state): string {
@@ -51,16 +53,53 @@
     getChangeToCPPage(state): boolean {
       return state.changeToCPPage;
     },
+    getname(state): string {
+      return state.name;
+    },
   },
   actions: {
     setCurPkgConfig(val: any) {
       this.curConfig = val;
     },
-    setCurProdRotTree(info: MesRotTree[]) {
-      this.curProdRotTree = info;
+    /**
+     * @description: 褰撳墠宸ヨ壓鏍戞暟鎹�
+     * @param {any} val
+     * @return {*}
+     */
+    setCurProdRotTree(val: any) {
+      if (!this.curProdRotTree.some((q) => q.name == val.name)) {
+        this.curProdRotTree.push(val);
+      } else {
+        if (val.length == 0) {
+          this.curProdRotTree = [];
+        } else {
+          this.curProdRotTree.map((item) => {
+            if (item.name == val.name) {
+              item.treeInfo = val.treeInfo;
+            }
+          });
+        }
+      }
     },
+    /**
+     * @description: 褰撳墠閫変腑鑺傜偣
+     * @param {any} val
+     * @return {*}
+     */
     setCurSelectedNodes(val: any) {
-      this.curSelectedNodes = val;
+      if (!this.curSelectedNodes.some((q) => q.name == val.name)) {
+        this.curSelectedNodes.push(val);
+      } else {
+        if (val.length == 0) {
+          this.curSelectedNodes = [];
+        } else {
+          this.curSelectedNodes.map((item) => {
+            if (item.name == val.name) {
+              item.SelectedNodes = val.SelectedNodes;
+            }
+          });
+        }
+      }
     },
     setItemCode(val: string) {
       this.ItemCode = val;
@@ -71,16 +110,20 @@
     setChangeToCPPage(val: boolean) {
       this.changeToCPPage = val;
     },
+    setname(val: string) {
+      this.name = val;
+    },
     resetState() {
       this.curProdRotTree = [];
       this.curConfig = {};
-      this.curSelectedNodes = {};
+      this.curSelectedNodes = [];
       this.curDtl = {};
+      this.name = '';
     },
     /**
      * @description: 璁剧疆榛樿宸ヨ壓璺嚎
      * @return {*}
-     */    
+     */
     async setDefaulRoute(param) {
       /* 璁剧疆榛樿宸ヨ壓璺嚎 */
       var action = await SetDefaultRoute({
@@ -99,11 +142,12 @@
         },
         isDefault: param.others['isDefault'],
       });
-      if(action.IsSuccessed){
-        this.curProdRotTree[0].children[0].children.map((item) => {
-          if(item.code == param.others['code']){
+      if (action.IsSuccessed) {
+        const rotTree = this.curProdRotTree.filter((q) => q.name == this.getname);
+        rotTree[0].treeInfo.children[0].children.map((item) => {
+          if (item.code == param.others['code']) {
             item.isDefault = true;
-          }else{
+          } else {
             item.isDefault = false;
           }
         });
@@ -114,10 +158,10 @@
      * @description: 鏌ユ壘鐖堕」骞惰繑鍥�
      * @param {string} tid
      * @return {*}
-     */    
-    getParent(tid: string): MesRotTree{
+     */
+    getParent(tid: string): MesRotTree {
       return findParent(this.getCurProdRotTree, tid) as unknown as MesRotTree;
-    }
+    },
   },
 });
 
diff --git a/src/views/tigerprojects/system/lowcode/composition/LeftTree.vue b/src/views/tigerprojects/system/lowcode/composition/LeftTree.vue
index 3bf3c07..1fa36fd 100644
--- a/src/views/tigerprojects/system/lowcode/composition/LeftTree.vue
+++ b/src/views/tigerprojects/system/lowcode/composition/LeftTree.vue
@@ -4,7 +4,7 @@
  * @version: 
  * @Date: 2024-06-26 15:31:43
  * @LastEditors: Ben Lin
- * @LastEditTime: 2024-10-21 22:32:11
+ * @LastEditTime: 2024-10-22 08:47:50
 -->
 <template>
   <GeneralTree
@@ -27,10 +27,12 @@
   import { TreeItem } from '/@/components/TigerTree';
   import { EntityCustFunctionType } from '/@/api/tigerapi/model/basModel';
   import { EventDataNode } from 'ant-design-vue/es/tree';
+  import { useProdRouteStore } from '/@/store/modules/prodRoute';
 
   const emit = defineEmits(['select', 'deletenode']);
   const objParams = inject('objParams') as Ref<any>;
   const selectedNodes = inject('selectedNodes') as Ref<any>;
+  const useProdRoute = useProdRouteStore();
   const custImport = ref<any[]>([]);
   const EntityCustFunction = ref([
     {
@@ -60,9 +62,11 @@
     if (generalTree.value) {
       generalTree.value.expandAll(true);
       ExpandedKeys.value = generalTree.value.getExpandedKeys();
-      generalTree.value.setSelectedKeys(["C2A68FC9-4B23-43F1-8AC2-C99969EE64B8"]); //DE4F54C2-ECF3-4FFA-8AD9-6F761BFCD52A
-      const xx = generalTree.value.getNodeById('C2A68FC9-4B23-43F1-8AC2-C99969EE64B8');
-      console.log(xx);
+      if (useProdRoute.getCurSelectedNodes.some((q) => q.name == objParams.value['CODE'])) {
+        selectedNodes.value = useProdRoute.getCurSelectedNodes.filter((q) => q.name == objParams.value['CODE'])[0].SelectedNodes;
+        generalTree.value.setSelectedKeys([selectedNodes.value[0]?.tid]);
+        emit('select', SelectNode(selectedNodes, objParams.value['CODE']));
+      }
     }
   });
 
@@ -98,7 +102,7 @@
       const keys = generalTree.value.getSelectedKeys();
       console.log(keys);
     }
-    emit('select', SelectNode(selectedNodes));
+    emit('select', SelectNode(selectedNodes, objParams.value['CODE']));
   }
 
   /**
@@ -107,7 +111,7 @@
    * @return {*}
    */
   function UnSelect(node) {
-    emit('select', SelectNode(undefined));
+    emit('select', SelectNode(undefined, objParams.value['CODE']));
     // reload();
   }
 
diff --git a/src/views/tigerprojects/system/lowcode/entityts/ProdRouteBinding.ts b/src/views/tigerprojects/system/lowcode/entityts/ProdRouteBinding.ts
index d85f099..f654b3e 100644
--- a/src/views/tigerprojects/system/lowcode/entityts/ProdRouteBinding.ts
+++ b/src/views/tigerprojects/system/lowcode/entityts/ProdRouteBinding.ts
@@ -4,7 +4,7 @@
  * @version:
  * @Date: 2024-06-19 20:34:27
  * @LastEditors: Ben Lin
- * @LastEditTime: 2024-10-17 20:56:33
+ * @LastEditTime: 2024-10-22 09:28:36
  */
 
 import { Ref, h, ref, render, unref } from 'vue';
@@ -99,10 +99,20 @@
       let _treeData = convertToTree(prodTreeData, 'pid', 'tid', 'root');
       data.title = '宸ヨ壓璺嚎';
       data.fieldNames = { key: 'tid', title: 'name' };
-      /* 淇濆瓨宸ヨ壓鏍戝舰鏁版嵁鍒扮姸鎬佺鐞� */
-      useProdRoute.setCurProdRotTree(_treeData as unknown as MesRotTree[]);
+      if (
+        !useProdRoute.changeToCPPage ||
+        !useProdRoute.curProdRotTree.some((q) => q.name == itemCode)
+      ) {
+        /* 淇濆瓨宸ヨ壓鏍戝舰鏁版嵁鍒扮姸鎬佺鐞� */
+        useProdRoute.setCurProdRotTree({
+          name: itemCode,
+          treeInfo: _treeData as unknown as MesRotTree[],
+        });
+      }
       useProdRoute.setItemCode(itemCode);
-      data.treeData = useProdRoute.getCurProdRotTree;
+      if (useProdRoute.curProdRotTree.some((q) => q.name == itemCode)) {
+        data.treeData = useProdRoute.curProdRotTree.filter((q) => q.name == itemCode)[0].treeInfo;
+      }
       return data;
     },
     /**
@@ -297,8 +307,8 @@
         }
         values.AUTH_ORG = useUserStore().getUserInfo.orgCode;
         values.AUTH_PROD = useUserStore().getUserInfo.prodCode;
-        if(type == 'Action'){
-          values.OPTION_1 = JSON.stringify(useProdRoute.getcurDtl['BAS_PKG_DTL'])
+        if (type == 'Action') {
+          values.OPTION_1 = JSON.stringify(useProdRoute.getcurDtl['BAS_PKG_DTL']);
         }
         SaveEntity(values, true, entityName).then((action) => {
           if (action.IsSuccessed) {
@@ -616,9 +626,7 @@
      * @param {Ref} selectedNodes
      * @return {*}
      */
-    SelectNode: (selectedNodes: Ref<any[]>) => {
-      /* 淇濆瓨褰撳墠閫夋嫨鐨勮妭鐐规暟鎹埌鐘舵�佺鐞� */
-      useProdRoute.setCurSelectedNodes(selectedNodes.value);
+    SelectNode: (selectedNodes: Ref<any[]>, code: string) => {
       let result = {
         showConfig: false,
         showNav: false,
@@ -639,6 +647,8 @@
         result.showConfig = true;
         result.showOtherTable = { BAS_PKG_DTL: false, ItemCode: false };
       }
+      /* 淇濆瓨褰撳墠閫夋嫨鐨勮妭鐐规暟鎹埌鐘舵�佺鐞� */
+      useProdRoute.setCurSelectedNodes({ name: code, SelectedNodes: selectedNodes.value });
       return result;
     },
     /**
diff --git a/src/views/tigerprojects/system/lowcode/entityts/WoRouteBinding.ts b/src/views/tigerprojects/system/lowcode/entityts/WoRouteBinding.ts
index 2d82b66..a9a8b4d 100644
--- a/src/views/tigerprojects/system/lowcode/entityts/WoRouteBinding.ts
+++ b/src/views/tigerprojects/system/lowcode/entityts/WoRouteBinding.ts
@@ -4,7 +4,7 @@
  * @version:
  * @Date: 2024-06-19 20:34:27
  * @LastEditors: Ben Lin
- * @LastEditTime: 2024-10-18 10:54:24
+ * @LastEditTime: 2024-10-22 01:00:21
  */
 
 import { Ref, h, ref, render, unref } from 'vue';
@@ -109,9 +109,16 @@
       }
       data.title = '宸ュ崟宸ヨ壓璺嚎';
       data.fieldNames = { key: 'tid', title: 'name' };
-      /* 淇濆瓨宸ヨ壓鏍戝舰鏁版嵁鍒扮姸鎬佺鐞� */
-      useProdRoute.setCurProdRotTree(_treeData as unknown as MesRotTree[]);
-      data.treeData = useProdRoute.getCurProdRotTree;
+      if (!useProdRoute.changeToCPPage || !useProdRoute.curProdRotTree.some((q) => q.name == wo)) {
+        /* 淇濆瓨宸ヨ壓鏍戝舰鏁版嵁鍒扮姸鎬佺鐞� */
+        useProdRoute.setCurProdRotTree({
+          name: wo,
+          treeInfo: _treeData as unknown as MesRotTree[],
+        });
+      }
+      if (useProdRoute.curProdRotTree.some((q) => q.name == wo)) {
+        data.treeData = useProdRoute.curProdRotTree.filter((q) => q.name == wo)[0].treeInfo;
+      }
       return data;
     },
     /**
@@ -644,7 +651,7 @@
      * @param {Ref} selectedNodes
      * @return {*}
      */
-    SelectNode: (selectedNodes: Ref<any[]>) => {
+    SelectNode: (selectedNodes: Ref<any[]>, code: string) => {
       let result = {
         showConfig: false,
         showNav: false,
@@ -669,6 +676,7 @@
           result.showOtherTable = { BAS_PKG_DTL: false, ItemCode: false };
         }
       }
+      useProdRoute.setCurSelectedNodes({ name: code, SelectedNodes: selectedNodes.value });
       return result;
     },
     /**
diff --git a/src/views/tigerprojects/system/lowcode/normal/mainTable.vue b/src/views/tigerprojects/system/lowcode/normal/mainTable.vue
index 02b8ba7..d4e5502 100644
--- a/src/views/tigerprojects/system/lowcode/normal/mainTable.vue
+++ b/src/views/tigerprojects/system/lowcode/normal/mainTable.vue
@@ -268,7 +268,7 @@
    * @description: 璋冪敤api鍓嶏紝鍙傛暟鏁寸悊
    * @param {*} t
    * @return {*}
-   */  
+   */
   function SearchInfoFn(t) {
     if (
       !isNullOrUnDef(useQuery.getCurSearchInfo) &&
@@ -277,9 +277,11 @@
       const curSearchInfo = useQuery.getCurSearchInfo.filter((q) => q.name == route.name);
       const Keys = Object.getOwnPropertyNames(curSearchInfo[0].searchInfo);
       for (const k in Keys) {
-        t[Keys[k]] = curSearchInfo[0].searchInfo[Keys[k]];
+        if (Keys[k] != 'page' && Keys[k] != 'pageSize') {
+          t[Keys[k]] = curSearchInfo[0].searchInfo[Keys[k]];
+        }
       }
-      useQuery.setCurSearchInfo({name:route.name, searchInfo:t});
+      useQuery.setCurSearchInfo({ name: route.name, searchInfo: t });
     }
     return t;
   }
@@ -288,7 +290,7 @@
    * @description: 璇锋眰涔嬪悗瀵硅繑鍥炲�艰繘琛屽鐞�
    * @param {*} t
    * @return {*}
-   */  
+   */
   function afterFetchFn(t) {
     if (
       !isNullOrUnDef(useQuery.getCurSearchInfo) &&

--
Gitblit v1.9.3