From cc80ef9656d4144ca6255d2a7dcbb19816888166 Mon Sep 17 00:00:00 2001
From: 田源 <lastanimals@163.com>
Date: 星期四, 10 十月 2024 16:23:18 +0800
Subject: [PATCH] ui定义克隆功能

---
 Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/uiDefine/rightRegion/bottomTable/index.vue |   14 +++
 Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/uiDefine/rightRegion/plShow.vue            |    6 +
 Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/uiDefine/rightRegion/cloneDialog.vue       |  155 +++++++++++++++++++++-----------------
 Source/plt-web/plt-web-ui/src/api/UI/uiDefine.js                                               |   65 +++++++++++++--
 4 files changed, 157 insertions(+), 83 deletions(-)

diff --git a/Source/plt-web/plt-web-ui/src/api/UI/uiDefine.js b/Source/plt-web/plt-web-ui/src/api/UI/uiDefine.js
index f88763c..8e90762 100644
--- a/Source/plt-web/plt-web-ui/src/api/UI/uiDefine.js
+++ b/Source/plt-web/plt-web-ui/src/api/UI/uiDefine.js
@@ -8,6 +8,7 @@
     params
   });
 }
+
 // 鍒楄〃鏌ヨ
 export function gridUIContextData(page, limit, params) {
   return request({
@@ -20,6 +21,7 @@
     }
   });
 }
+
 export const saveUIContextData = (row) => {
   return request({
     url: '/api/uiManagerController/saveUIContextData',
@@ -35,6 +37,7 @@
     data: row
   })
 }
+
 // 閫氳繃oid鍒犻櫎
 export function delUIContextData(params) {
   return request({
@@ -43,6 +46,7 @@
     params
   })
 }
+
 //鍏嬮殕
 export const cloneUIContextData = (params) => {
   return request({
@@ -60,26 +64,28 @@
     params: params
   });
 }
+
 // 瀵煎嚭
-export function expUIContextData (params) {
+export function expUIContextData(params) {
   return request({
     url: '/api/uiManagerController/expUIContextData',
     method: 'post',
     responseType: 'blob',
-    data:{
+    data: {
       params
     }
   })
 }
 
 //涓婁笅鏂囧悇鍖哄煙鍒楄〃鏁版嵁
-export function getTabByContextIdAndType(params){
+export function getTabByContextIdAndType(params) {
   return request({
     url: "/api/uiManagerController/getTabByContextIdAndType",
     method: "get",
     params
   });
 }
+
 export const addTabData = (row) => {
   return request({
     url: '/api/uiManagerController/addTabData',
@@ -95,6 +101,7 @@
     data: row
   })
 }
+
 // 閫氳繃oid鍒犻櫎
 export function deleteTabData(params) {
   return request({
@@ -103,8 +110,9 @@
     params
   })
 }
+
 //涓嬫柟琛ㄦ牸鏁版嵁
-export function getPLPageDefinations(params){
+export function getPLPageDefinations(params) {
   return request({
     url: "/api/uiManagerController/getPLPageDefinations",
     method: "get",
@@ -200,7 +208,7 @@
   return request({
     url: "/api/uiManagerController/addTabButton",
     method: "post",
-    data:params
+    data: params
   });
 }
 
@@ -209,7 +217,7 @@
   return request({
     url: "/api/uiManagerController/updateTabButton",
     method: "put",
-    data:params
+    data: params
   });
 }
 
@@ -218,7 +226,7 @@
   return request({
     url: "/api/uiManagerController/deleteTabButton",
     method: "delete",
-    data:params
+    data: params
   });
 }
 
@@ -227,7 +235,7 @@
   return request({
     url: "/api/uiManagerController/joinBtn",
     method: "put",
-    data:params
+    data: params
   });
 }
 
@@ -236,7 +244,7 @@
   return request({
     url: "/api/uiManagerController/exitBtn",
     method: "put",
-    data:params
+    data: params
   });
 }
 
@@ -245,7 +253,44 @@
   return request({
     url: "/api/uiManagerController/addPageDefination",
     method: "post",
-    data:params
+    data: params
+  });
+}
+
+
+// 鍏嬮殕鏍戞煡璇㈡帴鍙�
+export function getAllLevelTreeByBtm(params) {
+  return request({
+    url: "/api/uiManagerController/getAllLevelTreeByBtm",
+    method: "get",
+    params
+  });
+}
+
+// 椤甸潰瀹氫箟鍏嬮殕
+export function clonePageDef(params) {
+  return request({
+    url: "/api/uiManagerController/clonePageDef",
+    method: "post",
+    data: params
+  });
+}
+
+// 椤电瀹氫箟鍏嬮殕
+export function clonetabPage(params) {
+  return request({
+    url: "/api/uiManagerController/clonetabPage",
+    method: "post",
+    data: params
+  });
+}
+
+// 鎸夐挳瀹氫箟鍏嬮殕
+export function cloneTabButton(params) {
+  return request({
+    url: "/api/uiManagerController/cloneTabButton",
+    method: "post",
+    data: params
   });
 }
 
diff --git a/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/uiDefine/rightRegion/bottomTable/index.vue b/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/uiDefine/rightRegion/bottomTable/index.vue
index 6c8a6f5..e770a46 100644
--- a/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/uiDefine/rightRegion/bottomTable/index.vue
+++ b/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/uiDefine/rightRegion/bottomTable/index.vue
@@ -198,7 +198,8 @@
       </el-container>
     </el-dialog>
     <action-dialog ref="actionDialog" @updataAction="actionSaveHandler"></action-dialog>
-    <clone-dialog ref="cloneDialog"></clone-dialog>
+    <clone-dialog ref="cloneDialog" :fromOid="fromOid" :sourceOId="sourceOId" type="pageDef" paramsType="tab"></clone-dialog>
+    <clone-dialog ref="cloneBtnDialog" :fromOid="formBtnOid" :sourceOId="sourceBtnOid" type="tabButton" paramsType="pageDef"></clone-dialog>
   </div>
 </template>
 
@@ -242,6 +243,10 @@
   name: "index",
   data() {
     return {
+      formBtnOid:'',
+      sourceBtnOid:'',
+      sourceOId:'',
+      fromOid:'',
       paramsForm: {},
       eventOption: {
         ...basicOption,
@@ -993,6 +998,7 @@
         return;
       }
       this.btnDesignVisible = true;
+      this.formBtnOid = this.selectList[0].id;
       this.getTabBtnTree();
     },
 
@@ -1180,7 +1186,8 @@
         this.$message.error('椤跺眰鑺傜偣涓嶅厑璁稿鍒�');
         return;
       }
-      this.$refs.cloneDialog.openDialog(this.nodeTreeRow);
+      this.sourceBtnOid = this.nodeTreeRow.oId;
+      this.$refs.cloneBtnDialog.openDialog(this.nodeTreeRow);
     },
 
     // 閫夋嫨action
@@ -1196,6 +1203,9 @@
 
     // 鎵撳紑鍏嬮殕瀵硅瘽妗�
     rowCloneHandler(row) {
+      console.log(row);
+      this.fromOid = this.sourceData.plOId;
+      this.sourceOId = row.id;
       this.$refs.cloneDialog.openDialog(row);
     },
 
diff --git a/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/uiDefine/rightRegion/cloneDialog.vue b/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/uiDefine/rightRegion/cloneDialog.vue
index bc6767a..ba6cc76 100644
--- a/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/uiDefine/rightRegion/cloneDialog.vue
+++ b/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/uiDefine/rightRegion/cloneDialog.vue
@@ -1,16 +1,16 @@
 <template>
   <el-dialog v-dialogDrag
+             :append-to-body="true"
+             :close-on-click-modal="false"
+             :destroy-on-close="true"
              :title="dialog.title"
              :visible.sync="dialog.showDialog"
-             width="1200px"
-             :append-to-body="true"
              class="avue-dialog"
-             :destroy-on-close="true"
-             :close-on-click-modal="false"
+             width="1200px"
              @close="cancelDialog">
     <el-container style="height: 580px">
       <el-aside style="width: 380px">
-        <basic-container style="height: 530px">
+        <basic-container v-loading="leftLoading" style="height: 530px">
           <h3 style="margin: 0 0 10px 0">涓氬姟绫诲瀷</h3>
           <div style="height: 435px">
             <avue-tree ref="tree" :data="treeData" :option="treeOption" @node-click="nodeClick">
@@ -25,9 +25,9 @@
       </el-aside>
 
       <el-main>
-        <basic-container style="height: 530px">
-          <div style="height: 520px;">
-            <avue-tree ref="uiTree" :data="uiTreeData" :option="uiTreeOption">
+        <basic-container v-loading="rightLoading" style="height: 530px">
+          <div style="height: 490px;">
+            <avue-tree ref="uiTree" :data="uiTreeData" :option="uiTreeOption" @check-change="checkChange">
               <span slot-scope="{ node, data }" class="el-tree-node__label">
                 <span style="font-size: 15px">
                   <i :class="data.icon"></i>
@@ -40,7 +40,7 @@
       </el-main>
     </el-container>
     <div class="dialog-footer avue-dialog__footer">
-      <el-button type="primary" plain size="small" @click="submitDialog" >淇� 瀛�</el-button>
+      <el-button plain size="small" type="primary" @click="submitDialog">淇� 瀛�</el-button>
       <el-button size="small" @click="cancelDialog">鍙� 娑�</el-button>
     </div>
   </el-dialog>
@@ -48,12 +48,15 @@
 
 <script>
 import {getUIAuthor} from "@/api/authority/ui/uiAuthor";
-import {getBizTree} from "@/api/UI/uiDefine";
+import {getBizTree, getAllLevelTreeByBtm, clonePageDef, clonetabPage, cloneTabButton} from "@/api/UI/uiDefine";
 
 export default {
-name: "cloneDialog",
-  data(){
+  name: "cloneDialog",
+  props: ['fromOid', 'type', 'sourceOId','paramsType'],
+  data() {
     return {
+      leftLoading: false,
+      rightLoading: false,
       dialog: {
         showDialog: false,
         title: "鍏嬮殕鐩爣",
@@ -71,17 +74,17 @@
       },
       nodeRow: {},
       treeData: [],
-      defaultExpandKeys:[],
+      defaultExpandKeys: [],
       uiTreeOption: {
-        nodeKey:'oid',
-        checkOnClickNode:true,
-        defaultExpandedKeys:this.defaultExpandKeys,
-        multiple: true,
+        nodeKey: 'oid',
+        checkOnClickNode: true,
+        defaultExpandedKeys: [],
+        multiple: false,
         menu: false,
         addBtn: false,
-        filter:false,
+        filter: false,
         props: {
-          label: 'label',
+          label: 'text',
           value: 'oid',
           children: 'children'
         }
@@ -90,84 +93,96 @@
     };
   },
   methods: {
-    openDialog( data) {
+    openDialog(data) {
       this.dialog.showDialog = true;
       this.getTreeList()
-      this.uiTreeData=[];
+      this.uiTreeData = [];
     },
     cancelDialog() {
       this.dialog.loading = false;
       this.dialog.showDialog = false;
     },
     submitDialog() {
-      linkSave({}).then(res => {
-        if (res.data.success) {
-          this.$message.success("鍏嬮殕鎴愬姛");
-          this.cancelDialog();
-          this.$emit("refresh");
+      const node = this.$refs.uiTree.getCurrentNode();
+      console.log(node);
+      if (!node.leaf) {
+        this.$message.error('璇烽�夋嫨鏈�涓嬪眰瀛愯妭鐐硅繘琛屽厠闅�');
+        return;
+      }
+      let params = {};
+      if (node) {
+        params = {
+          fromOid: this.fromOid,
+          toOid: node.oid,
+          cloneParam: {
+            sourceOId: this.sourceOId
+          }
         }
-      });
+      }
+      console.log(params);
+      const saveFunction = {
+        'pageDef': clonePageDef,
+        'tabPage': clonetabPage,
+        'tabButton': cloneTabButton
+      };
+      saveFunction[this.type](params).then(res => {
+        if(res.data.code == 200){
+          this.$message.success(res.data.obj);
+          this.cancelDialog();
+        }
+      })
     },
     getTreeList() {
-      const loading = this.$loading({});
+      this.leftLoading = true;
       getBizTree().then(res => {
-        this.treeData =res.data.obj.children;
-        loading.close();
-      }).catch(error=>{
-        loading.close();
+        this.treeData = res.data.obj.children;
+        this.leftLoading = false;
+      }).catch(error => {
+        this.leftLoading = false;
       })
     },
     // 瑙掕壊鐐瑰嚮
-    nodeClick(row,node) {
+    nodeClick(row, node) {
       this.nodeRow = row;
-      const loading = this.$loading({});
+      this.rightLoading = true;
       const params = {
-        'conditionMap[roleId]': this.nodeRow.oid,
-        'conditionMap[type]': this.type,
-        'conditionMap[context]': this.context
+        btmName: this.nodeRow.attributes.name,
+        level: this.paramsType
       }
-      this.defaultExpandKeys=['root'];
-      getUIAuthor(params).then(res => {
-        this.processChildren(res.data.data[0]); // 澶勭悊姣忎釜鑺傜偣
-        this.uiTreeOption.defaultExpandedKeys=this.defaultExpandKeys;
-        this.uiTreeData = [{
-          attributes: {},
-          checked: false,
-          expanded: true,
-          data: "root",
-          level: 0,
-          icon: 'el-icon-s-home',
-          oid: res.data.data[0].oid,
-          label: 'UI涓婁笅鏂囬�夐」',
-          children: res.data.data[0].children
-        }];
-        loading.close();
+      this.defaultExpandKeys = ['root'];
+      console.log(row);
+      getAllLevelTreeByBtm(params).then(res => {
+        this.uiTreeOption.defaultExpandedKeys = [res.data.obj.oid];
+        this.uiTreeData = [res.data.obj];
+        console.log(res);
+        this.rightLoading = false;
       }).catch(error => {
-        loading.close();
+        this.rightLoading = false;
       })
     },
+
     //澶勭悊鏍�
     processChildren(item) {
       if (item.children && item.children.length > 0) {
         item.children = item.children.map(child => {
-          if(child.level<4){
+          if (child.level < 4) {
             this.defaultExpandKeys.push(child.oid)
           }
-          if(child.level==1){
-            child.icon='el-icon-s-promotion';
-            child.label=child.data.label+'('+child.data.name+')'
-          }else if(child.level==2){
-            child.icon='el-icon-s-order';
-            child.label=child.text
-          }else if(child.level==3){
-            child.icon='el-icon-office-building';
-            child.label=child.text
-          }else if(child.level==4){
-            child.icon='el-icon-document';
-            child.label=child.text
-          }else if(child.level==5){
-            child.icon='el-icon-s-tools';
-            child.label=child.text
+          if (child.level == 1) {
+            child.icon = 'el-icon-s-promotion';
+            child.label = child.data.label + '(' + child.data.name + ')'
+          } else if (child.level == 2) {
+            child.icon = 'el-icon-s-order';
+            child.label = child.text
+          } else if (child.level == 3) {
+            child.icon = 'el-icon-office-building';
+            child.label = child.text
+          } else if (child.level == 4) {
+            child.icon = 'el-icon-document';
+            child.label = child.text
+          } else if (child.level == 5) {
+            child.icon = 'el-icon-s-tools';
+            child.label = child.text
           }
           this.processChildren(child); // 閫掑綊澶勭悊姣忎釜瀛愯妭鐐�
           return child; // 鍙繑鍥炲瓙鑺傜偣鐨� attributes
diff --git a/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/uiDefine/rightRegion/plShow.vue b/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/uiDefine/rightRegion/plShow.vue
index 9619374..a3f0c72 100644
--- a/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/uiDefine/rightRegion/plShow.vue
+++ b/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/uiDefine/rightRegion/plShow.vue
@@ -98,7 +98,7 @@
             <el-button type="primary" @click="saveHandler">纭� 瀹�</el-button>
           </span>
     </el-dialog>
-    <clone-dialog ref="cloneDialog"></clone-dialog>
+    <clone-dialog ref="cloneDialog" :fromOid="fromOid" :sourceOId="sourceOId" type="tabPage" paramsType="ui"></clone-dialog>
   </div>
 </template>
 
@@ -125,6 +125,8 @@
   components:{bottomTable,cloneDialog},
   data() {
     return {
+      fromOid:'',
+      sourceOId:'',
       uiDefineOid:'',
       areaType: '',
       tableLoading: false,
@@ -377,6 +379,8 @@
       });
     },
     rowCloneHandler(row) {
+      this.fromOid = this.uiDefineData.plOId;
+      this.sourceOId = row.plOId;
       this.$refs.cloneDialog.openDialog(row);
     },
   }

--
Gitblit v1.9.3