From c659560c7ee8d8f8278b938421de13bf65d1e1b1 Mon Sep 17 00:00:00 2001
From: ludc <ludc@vci-tech.com>
Date: 星期三, 15 一月 2025 14:28:25 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 Source/plt-web/plt-web-ui/src/views/systemModel/mangeModel/index.vue |  377 +++++++++++++++++++++++++++++++++++------------------
 1 files changed, 250 insertions(+), 127 deletions(-)

diff --git a/Source/plt-web/plt-web-ui/src/views/systemModel/mangeModel/index.vue b/Source/plt-web/plt-web-ui/src/views/systemModel/mangeModel/index.vue
index 8709445..8bb7e72 100644
--- a/Source/plt-web/plt-web-ui/src/views/systemModel/mangeModel/index.vue
+++ b/Source/plt-web/plt-web-ui/src/views/systemModel/mangeModel/index.vue
@@ -1,12 +1,14 @@
 <template>
-  <el-container>
+  <el-container v-loading="createdLoading">
     <el-aside>
       <basic-container>
-        <div style="max-height: calc(100vh - 170px);overflow: auto">
-          <avue-tree :key="refresh" ref="tree" :data="treeData" :option="treeOption" @node-click="nodeClick">
+        <div style="max-height: calc(100vh - 150px);overflow: auto">
+          <avue-tree :key="refresh" ref="tree" :data="treeData" :option="treeOption" node-key="id"
+                     @node-click="nodeClick">
           <span slot-scope="{ node, data }" class="el-tree-node__label">
-           <span style="font-size: 15px">
-              <i class="el-icon-s-promotion"></i>
+            <span style="display: flex">
+              <icon-show v-if="data.iconType=='svg'" :name="data.icon"></icon-show>
+              <i v-else :class="data.icon"></i>
                 {{ (node || {}).label }}
             </span>
           </span>
@@ -17,83 +19,15 @@
 
     <el-main>
       <basic-container>
-        <el-form ref="form" :model="form" label-width="85px" style="height: 79vh">
-          <span v-if="form.childType !== 0">
-            <el-form-item label="妯″潡鍚嶏細">
-            <el-input v-model="form.name" placeholder="璇疯緭鍏ユā鍧楀悕"></el-input>
-          </el-form-item>
-          <el-form-item label="妯″潡鍒悕锛�">
-            <el-input v-model="form.alias" placeholder="妯″潡鍒悕鐢ㄦ潵璁板綍鏃ュ織浣跨敤"></el-input>
-          </el-form-item>
-                <el-form-item label="C/S锛�">
-            <el-input v-model="form.pathC" :rows="3" placeholder="璇疯緭鍏/S璺緞" type="textarea"></el-input>
-          </el-form-item>
-          <el-form-item label="B/S锛�">
-            <el-input v-model="form.path" :rows="3" placeholder="璇疯緭鍏/S璺緞" type="textarea"></el-input>
-          </el-form-item>
-          <el-form-item label=".NET锛�">
-            <el-input v-model="form.resourceDotNet" :rows="3" placeholder="璇疯緭鍏�.NET" type="textarea"></el-input>
-          </el-form-item>
-          <el-form-item label="Mobile锛�">
-            <el-input v-model="form.resourceMobile" :rows="3" placeholder="璇疯緭鍏obile" type="textarea"></el-input>
-          </el-form-item>
-          <el-form-item label="搴忓彿锛�">
-            <el-input v-model="form.sort" placeholder="鏁板瓧锛屾弿杩拌妯″潡鍦ㄥ叾鐖舵ā鍧椾笅鐨勬樉绀洪『搴�"></el-input>
-          </el-form-item>
-          <el-form-item label="绠�鍥撅細">
-            <el-input v-model="form.source"></el-input>
-          </el-form-item>
-          <el-form-item label="鎻忚堪锛�">
-            <el-input v-model="form.remark" :rows="3" placeholder="璇疯緭鍏ユ弿杩�" type="textarea"></el-input>
-          </el-form-item>
-          <el-form-item label="鏄惁鏈夋晥锛�">
-            <el-switch
-              v-model="form.isValid"
-              active-color="#13ce66"
-              inactive-color="#ff4949">
-            </el-switch>
-            <el-link :underline="false" style="margin-left: 20px" type="danger">涓嶇敓鏁堬紙涓嶉�夋嫨锛夋椂锛岃妯″潡鍦ㄥ姛鑳芥ā鍧楁巿鏉冮噷涓嶆樉绀�</el-link>
-          </el-form-item>
-          </span>
-          <span v-if="form.childType === 0">
-            <el-form-item label="鍚嶇О锛�">
-            <el-input v-model="form.name" :disabled="form.childType === 0" placeholder="璇疯緭鍏ュ悕绉�"></el-input>
-            </el-form-item>
-            <el-form-item label="鏍囪瘑锛�">
-            <el-input v-model="form.code" :disabled="form.childType === 0" placeholder="璇疯緭鍏ユ爣璇�"></el-input>
-            </el-form-item>
-            <el-form-item label="鍒悕锛�">
-            <el-input v-model="form.alias" placeholder="璇疯緭鍏ュ埆鍚�"></el-input>
-            </el-form-item>
-            <el-form-item label="缂栧彿锛�">
-            <el-input v-model="form.sort" :disabled="form.childType === 0" placeholder="璇疯緭鍏ョ紪鍙�"></el-input>
-            </el-form-item>
-            <el-form-item label="鎻忚堪锛�">
-            <el-input v-model="form.remark" :disabled="form.childType === 0" placeholder="璇疯緭鍏ユ弿杩�"></el-input>
-            </el-form-item>
-            <el-form-item label="鏄惁鏈夋晥锛�">
-            <el-switch
-              v-model="form.isValid"
-              active-color="#13ce66"
-              inactive-color="#ff4949">
-            </el-switch>
-
-          </el-form-item>
-          </span>
-        </el-form>
-        <div v-if="form.childType && form.childType !== 0" class="btnBox">
-          <el-button v-if="!addStatus" :disabled="mangeShowBtn ? false : !childTypeBtn" icon="el-icon-plus" plain
+        <div v-if="(form.childType || form.childType === 0) && !addStatus && !editStatus && form.category !== 1"
+             class="btnBox">
+          <el-button :disabled="(mangeShowBtn || form.childType === 0) ? false : !childTypeBtn" icon="el-icon-plus"
+                     plain
                      size="small"
                      type="primary" @click="addClickHandler">澧炲姞
           </el-button>
-          <el-button v-if="addStatus" icon="el-icon-check" plain size="small"
-                     type="success" @click="addSaveClickHandler">淇濆瓨
-          </el-button>
-          <el-button v-if="!editStatus" :disabled="mangeShowBtn" icon="el-icon-edit" plain size="small" type="primary"
+          <el-button :disabled="mangeShowBtn" icon="el-icon-edit" plain size="small" type="primary"
                      @click="editClickHandler">淇敼
-          </el-button>
-          <el-button v-if="editStatus" icon="el-icon-check" plain size="small"
-                     type="success" @click="editSaveClickHandler">淇濆瓨
           </el-button>
           <el-button :disabled="mangeShowBtn" icon="el-icon-close" plain size="small" type="danger"
                      @click="delClickHandler">鍒犻櫎
@@ -102,11 +36,11 @@
                      size="small"
                      type="primary" @click="addMethodsClickHandler">澧炲姞鎿嶄綔绫诲瀷
           </el-button>
-          <el-button v-if="this.form.childType ? mangeShowBtn :true" icon="el-icon-circle-close" plain size="small"
+          <el-button v-if=" mangeShowBtn" icon="el-icon-circle-close" plain size="small"
                      type="danger"
                      @click="addClickHandler">鍒犻櫎闈炵郴缁熸ā鍧�
           </el-button>
-          <el-button v-if="this.form.childType ? mangeShowBtn :true" icon="el-icon-circle-close" plain size="small"
+          <el-button v-if="mangeShowBtn " icon="el-icon-circle-close" plain size="small"
                      type="danger"
                      @click="addClickHandler">鍒犻櫎涓氬姟妯″潡
           </el-button>
@@ -119,12 +53,107 @@
           <el-button icon="el-icon-upload2" plain size="small" type="primary" @click="sqlClickExportClick">瀵煎嚭sql
           </el-button>
         </div>
-        <div v-if="form.childType === 0" class="btnBox">
-          <el-button icon="el-icon-edit" plain size="small" type="primary">淇敼鍒悕
+        <div v-else-if="(form.childType || form.childType === 0) && (addStatus || editStatus)" class="btnBox">
+          <el-button v-if="addStatus" icon="el-icon-check" plain size="small"
+                     type="success" @click="addSaveClickHandler">淇濆瓨
           </el-button>
-          <el-button icon="el-icon-close" plain size="small" type="danger">鍒犻櫎
+          <el-button v-if="editStatus" icon="el-icon-check" plain size="small"
+                     type="success" @click="editSaveClickHandler">淇濆瓨
+          </el-button>
+          <el-button icon="el-icon-close" plain size="small"
+                     type="danger" @click="addStatus=false;editStatus=false;">鍙栨秷
           </el-button>
         </div>
+        <div v-if="form.category === 1" class="btnBox">
+          <el-button icon="el-icon-edit" plain size="small" type="primary" @click="updataAliasClickHandler">淇敼鍒悕
+          </el-button>
+          <el-button icon="el-icon-close" plain size="small" type="danger" @click="deleteOperationClickHandler">鍒犻櫎
+          </el-button>
+        </div>
+        <el-form ref="form" :model="form" label-width="100px" style="max-height: calc(100vh - 200px);overflow: auto;">
+          <span v-if="form.category !== 1">
+            <el-form-item class="is-required">
+              <span slot="label">妯″潡鍚嶏細</span>
+              <el-input v-model="form.name" :disabled="!editStatus && !addStatus" placeholder="璇疯緭鍏ユā鍧楀悕"></el-input>
+            </el-form-item>
+            <el-form-item class="is-required">
+              <span slot="label">妯″潡鍒悕锛�</span>
+              <el-input v-model="form.alias" :disabled="!editStatus && !addStatus"  placeholder="璇疯緭鍏ユā鍧楀埆鍚�"></el-input>
+            </el-form-item>
+           <el-form-item class="is-required">
+              <span slot="label">搴忓彿锛�</span>
+              <el-input-number v-model="form.sort" :disabled="!editStatus && !addStatus"></el-input-number>
+              <el-link :underline="false" style="margin-left: 20px" type="danger">鏁板瓧锛屾弿杩拌妯″潡鍦ㄥ叾鐖舵ā鍧椾笅鐨勬樉绀洪『搴�</el-link>
+            </el-form-item>
+            <el-form-item v-if="form.functionType === 0" label="C/S锛�">
+            <el-input v-model="form.pathC" :disabled="!editStatus && !addStatus" :rows="2" placeholder="璇疯緭鍏/S璺緞"
+                      type="textarea"></el-input>
+            </el-form-item>
+          <el-form-item v-if="form.functionType === 0" label="B/S锛�">
+            <el-input v-model="form.path" :disabled="!editStatus && !addStatus" :rows="2" placeholder="璇疯緭鍏/S璺緞"
+                      type="textarea"></el-input>
+          </el-form-item>
+          <el-form-item v-if="form.functionType === 0" label=".NET锛�">
+            <el-input v-model="form.resourceDotNet" :disabled="!editStatus && !addStatus" :rows="2"
+                      placeholder="璇疯緭鍏�.NET" type="textarea"></el-input>
+          </el-form-item>
+          <el-form-item label="鍥炬爣锛�">
+              <input-icon v-model="form.source" :disabled="!editStatus && !addStatus" placeholder="璇烽�夋嫨鍥炬爣">
+              </input-icon>
+          </el-form-item>
+          <el-form-item label="鎻忚堪锛�">
+            <el-input v-model="form.remark" :disabled="!editStatus && !addStatus" :rows="3" placeholder="璇疯緭鍏ユ弿杩�"
+                      type="textarea"></el-input>
+          </el-form-item>
+            <el-form-item label="鏄惁鑿滃崟锛�">
+            <el-switch
+              v-model="form.functionType"
+              :active-value="0"
+              :disabled="!editStatus && !addStatus"
+              :inactive-value="1"
+              active-color="#13ce66"
+              inactive-color="#ff4949">
+            </el-switch>
+          </el-form-item>
+          <el-form-item label="鏄惁鏈夋晥锛�">
+            <el-switch
+              v-model="form.isValid"
+              :disabled="!editStatus && !addStatus"
+              active-color="#13ce66"
+              inactive-color="#ff4949">
+            </el-switch>
+            <el-link :underline="false" style="margin-left: 20px" type="danger">涓嶇敓鏁堬紙涓嶉�夋嫨锛夋椂锛岃妯″潡鍦ㄥ姛鑳芥ā鍧楁巿鏉冮噷涓嶆樉绀�</el-link>
+          </el-form-item>
+          </span>
+          <span v-if="form.category === 1">
+            <el-form-item label="鍚嶇О锛�" class="is-required">
+              <el-input v-model="form.name" :disabled="form.category === 1" placeholder="璇疯緭鍏ュ悕绉�"></el-input>
+            </el-form-item>
+            <el-form-item label="鏍囪瘑锛�" class="is-required">
+              <el-input v-model="form.code" :disabled="form.category === 1" placeholder="璇疯緭鍏ユ爣璇�"></el-input>
+            </el-form-item>
+            <el-form-item label="鍒悕锛�" class="is-required">
+              <el-input v-model="form.alias" placeholder="璇疯緭鍏ュ埆鍚�"></el-input>
+            </el-form-item>
+            <el-form-item label="鍥炬爣锛�">
+              <input-icon v-model="form.source" placeholder="璇烽�夋嫨鍥炬爣">
+              </input-icon>
+            </el-form-item>
+            <el-form-item label="缂栧彿锛�" class="is-required">
+              <el-input-number v-model="form.sort" :disabled="form.category === 1" :max="63" :min="1"></el-input-number>
+            </el-form-item>
+            <el-form-item label="鎻忚堪锛�">
+              <el-input v-model="form.remark" :disabled="form.category === 1" placeholder="璇疯緭鍏ユ弿杩�"></el-input>
+            </el-form-item>
+            <el-form-item label="鏄惁鏈夋晥锛�">
+              <el-switch
+                v-model="form.isValid"
+                active-color="#13ce66"
+                inactive-color="#ff4949">
+              </el-switch>
+          </el-form-item>
+          </span>
+        </el-form>
       </basic-container>
     </el-main>
     <el-dialog
@@ -133,7 +162,7 @@
       append-to-body="true"
       class="avue-dialog"
       title="鎿嶄綔鍒嗙被"
-      width="60%"
+      width="900px"
     >
       <avue-crud
         ref="methodsCrud"
@@ -142,13 +171,15 @@
         :table-loading="methodsLoading"
         @row-click="rowMethodsClickHandler"
         @selection-change="selectMethodsChange">
-
       </avue-crud>
       <span slot="footer" class="dialog-footer">
-         <el-button @click="methodsVisble = false">鍙� 娑�</el-button>
          <el-button type="primary" @click="methodsSaveClickHandler">淇� 瀛�</el-button>
+         <el-button @click="methodsVisble = false">鍙� 娑�</el-button>
         </span>
     </el-dialog>
+    <!--瀵煎叆    -->
+    <upload-file ref="upload" :fileType="upFileType" :fileUrl="fileUrl" :tipList="tipList" fileName="files" title="瀵煎叆"
+                 @updata="resetFormValue"></upload-file>
   </el-container>
 </template>
 
@@ -160,7 +191,10 @@
   updateModel,
   delModule,
   exportFunctionSql,
-  addOperationType
+  addOperationType,
+  exportModule,
+  updateAlias,
+  delFuncOperation
 } from "@/api/systemModel/mangeModel/api"
 import func from "@/util/func";
 import basicOption from "@/util/basic-option";
@@ -169,6 +203,10 @@
   name: "index",
   data() {
     return {
+      tipList: [],
+      upFileType: ['xls', 'xlsx'],
+      fileUrl: 'api/hmSysModConfigController/importModule',
+      createdLoading: false,
       lastIndex: null,
       methodsList: [],
       methodsData: [],
@@ -177,13 +215,20 @@
         addBtn: false,
         menu: false,
         height: 500,
-        column: [
-          {
-            label: '鎿嶄綔鍒嗙被',
-            prop: 'name',
-            sortable: true,
-          }
-        ]
+        header: false,
+        column: [{
+          label: '鍚嶇О',
+          prop: 'name',
+          width:180,
+          sortable: true,
+        }, {
+          label: '鏍囪瘑',
+          prop: 'code',
+          width:180,
+        }, {
+          label: '鎻忚堪',
+          prop: 'remark'
+        }]
       },
       methodsLoading: false,
       methodsVisble: false,
@@ -192,6 +237,7 @@
       addStatus: false,
       editStatus: false,
       nodeRow: {},
+      currentClickNode: null,
       form: {},
       treeData: [],
       treeOption: {
@@ -199,24 +245,26 @@
         menu: false,
         addBtn: false,
         defaultExpandAll: false,
+        defaultExpandedKeys:['system'],
         props: {
-          label: 'name',
+          label: 'label',
           value: 'id',
           children: 'children',
         },
         lazy: true,
         treeLoad: (node, resolve) => {
           const params = {
-            parentId: node.level === 0 ? "systemManagmentNode" : node.data.id,
+            parentId: node.level === 0 ? "system" : node.data.id,
             modeType: node.level === 0 ? "firstNode" : node.data.modeType,
           }
           getSysModelTreeMenuByPID(params).then(res => {
             resolve(res.data.data.map(item => {
               return {
                 ...item,
-                id: item.id,
-                name: item.name,
-                leaf: !item.hasChildren
+                label: item.category!=1?item.name:item.alias,
+                leaf: !item.hasChildren,
+                icon: item.source || (node.level === 0?'el-icon-s-home':'el-icon-s-tools'),
+                iconType:item.source?'svg':'iconfont'
               }
             }))
           })
@@ -245,27 +293,29 @@
   },
   methods: {
     // 鏍戣鐐瑰嚮
-    nodeClick(row) {
-      console.log(row.childType);
+    nodeClick(row, node) {
       this.form = {...row};
       this.nodeRow = {...row};
+      this.currentClickNode = node;
       this.addStatus = false;
       this.editStatus = false;
     },
 
     // 鏂板鎸夐挳
     addClickHandler() {
-      this.resetFormValue();
+      // this.resetFormValue();
+      this.defalutName.forEach(key => {
+        this.form[key] = null;
+      })
+      this.form.isValid = false;
       this.addStatus = true;
       this.editStatus = false;
     },
 
     // 娓呯┖琛ㄥ崟缁戝畾鍊�
     resetFormValue() {
-      this.defalutName.forEach(key => {
-        this.form[key] = null;
-      })
-      this.form.isValid = false;
+      this.form = {};
+      this.refresh = Math.random(); // 鍒锋柊宸︿晶鏍�
     },
 
     // 鏂板淇濆瓨鎸夐挳
@@ -274,24 +324,28 @@
         this.$message.error('妯″潡鍚嶄笉鑳戒负绌�');
         return
       }
+      if (!this.form.alias) {
+        this.$message.error('鑿滃崟鏍囪瘑涓嶈兘涓虹┖');
+        return
+      }
       if (this.form.name.length > 128) {
-        this.$message.error('妯″潡鍚嶉暱搴﹁秴杩�128锛�');
+        this.$message.error('妯″潡鍚嶉暱搴︿笉鑳借秴杩�128锛�');
         return
       }
       if (this.form.remark && this.form.remark.length > 255) {
-        this.$message.error('鎻忚堪闀垮害瓒呰繃255锛�');
+        this.$message.error('鎻忚堪闀垮害涓嶈兘瓒呰繃255锛�');
         return
       }
       if (this.form.resourceDotNet && this.form.resourceDotNet.length > 255) {
-        this.$message.error('.NET鏍囪瘑闀垮害涓嶈兘255锛�');
+        this.$message.error('.NET鏍囪瘑闀垮害涓嶈兘瓒呰繃255锛�');
         return
       }
       if (this.form.pathC && this.form.pathC.length > 255) {
-        this.$message.error('C/S鏍囪瘑闀垮害涓嶈兘255锛�');
+        this.$message.error('C/S鏍囪瘑闀垮害涓嶈兘瓒呰繃255锛�');
         return
       }
       if (this.form.resourceMobile && this.form.resourceMobile.length > 255) {
-        this.$message.error('Mobile鏍囪瘑闀垮害涓嶈兘255锛�');
+        this.$message.error('Mobile鏍囪瘑闀垮害涓嶈兘瓒呰繃255锛�');
         return
       }
       this.form.parentId = this.form.id;
@@ -299,14 +353,15 @@
         if (res.data.code === 200) {
           this.$message.success(res.data.msg);
           this.addStatus = false;
-          this.refresh = Math.random(); // 鍒锋柊宸︿晶鏍�
+          // this.resetFormValue();
+          this.form.childType = null;
+          this.handleRefreshTree('add')
         }
       })
     },
 
     // 淇敼鎸夐挳
     editClickHandler() {
-      console.log(this.form);
       this.editStatus = true;
       this.addStatus = false;
     },
@@ -315,6 +370,10 @@
     editSaveClickHandler() {
       if (!this.form.name) {
         this.$message.error('妯″潡鍚嶄笉鑳戒负绌�');
+        return
+      }
+      if (!this.form.alias) {
+        this.$message.error('鑿滃崟鏍囪瘑涓嶈兘涓虹┖');
         return
       }
       if (this.form.name.length > 128) {
@@ -342,7 +401,9 @@
         if (res.data.code === 200) {
           this.$message.success(res.data.msg);
           this.editStatus = false;
-          this.refresh = Math.random(); // 鍒锋柊宸︿晶鏍�
+          // this.resetFormValue();
+          this.form.childType = null;
+          this.handleRefreshTree('edit')
         }
       })
     },
@@ -355,13 +416,11 @@
         type: 'warning'
       }).then(() => {
         delModule(this.form).then(res => {
-          console.log(res);
           if (res.data.code === 200) {
             this.$message.success(res.data.msg);
-            this.resetFormValue();
+            this.handleRefreshTree('del')
             this.addStatus = false;
             this.editStatus = false;
-            this.refresh = Math.random(); // 鍒锋柊宸︿晶鏍�
           }
         })
       }).catch(() => {
@@ -377,8 +436,6 @@
       exportFunctionSql({isFunction: true}).then(res => {
         func.downloadFileByBlobHandler(res);
         this.$message.success('瀵煎嚭鎴愬姛');
-      }).catch(err => {
-        this.$message.error(err);
       });
     },
 
@@ -390,12 +447,14 @@
     // 澧炲姞鎿嶄綔绫诲瀷
     addMethodsClickHandler() {
       this.methodsLoading = true;
-      getSysModelTreeMenuByPID({parentId: 'sysOptionNode'}).then(res => {
-        if (res.data.code === 200) {
+      getSysModelTreeMenuByPID({parentId: 'operateNode'}).then(res => {
+        if (res.data.code === 200 && res.data.data.length > 0) {
           this.methodsVisble = true;
-          const data = res.data.data[0].children;
+          const data = res.data.data;
           this.methodsData = data;
           this.methodsLoading = false;
+        } else {
+          this.$message.error('鏈壘鍒板彲澧炲姞鐨勬搷浣滅被鍨�');
         }
       })
     },
@@ -413,13 +472,11 @@
         }
       })
       addOperationType(list).then(res => {
-        console.log(res)
         if (res.data.code === 200) {
           this.methodsVisble = false;
           this.$message.success(res.data.msg);
-          this.refresh = Math.random(); // 鍒锋柊宸︿晶鏍�
-          this.resetFormValue();
           this.form.childType = null;
+          this.handleRefreshTree('add')
         }
       })
     },
@@ -434,10 +491,75 @@
           this.lastIndex = newIndex;
         },
         () => {
-          this.methodsList = [];
+          this.methodsList = [row];
         }
       );
     },
+
+    // 淇敼鍒悕
+    updataAliasClickHandler() {
+      const params = {
+        id: this.form.id,
+        isValid: this.form.isValid,
+        source:this.form.source,
+        alias: this.form.alias
+      }
+      updateAlias(params).then(res => {
+        if (res.data.code === 200) {
+          this.$message.success(res.data.msg);
+          this.handleRefreshTree('edit')
+        }
+      })
+    },
+
+    // 鍒犻櫎妯″潡涓嬪叧鑱旂殑鎿嶄綔绫诲瀷
+    deleteOperationClickHandler() {
+      const params = {
+        funcId: this.form.funcId,
+        operId: this.form.operId
+      }
+      delFuncOperation(params).then(res => {
+        if (res.data.code === 200) {
+          this.$message.success(res.data.msg);
+          this.handleRefreshTree('del');
+        }
+      })
+    },
+
+    // 瀵煎嚭
+    exportClickHandler() {
+      this.createdLoading = true;
+      exportModule().then(res => {
+        func.downloadFileByBlobHandler(res);
+        this.createdLoading = false
+        this.$message.success('瀵煎嚭鎴愬姛');
+      })
+    },
+
+    // 瀵煎叆
+    upLoadClickHandler() {
+      this.$refs.upload.visible = true;
+    },
+
+    handleRefreshTree(type) {
+      //type:add\edit\del
+      if (type == "del") {
+        this.$refs.tree.remove(this.currentClickNode);
+        this.currentClickNode = null;
+        this.form = {};
+      } else {
+        if (this.currentClickNode) {
+          let node = this.currentClickNode.parent;
+          node.loaded = false;
+          node.expand();
+          this.$nextTick(()=>{
+            this.$refs.tree.setCurrentKey(this.currentClickNode.data.id);
+          });
+        } else {
+          this.refresh = Math.random(); // 鍒锋柊宸︿晶鏍�
+        }
+      }
+    }
   }
 }
 </script>
@@ -451,6 +573,7 @@
 
 .btnBox {
   display: flex;
-  justify-content: center;
+  justify-content: left;
+  margin-bottom: 15px;
 }
 </style>

--
Gitblit v1.9.3