From ea3ab34e0d3af27887cbeef5e5871cefd1cc459e Mon Sep 17 00:00:00 2001
From: 田源 <lastanimals@163.com>
Date: 星期四, 26 十月 2023 11:30:54 +0800
Subject: [PATCH] 主题库定义-按钮权限

---
 Source/UBCS-WEB/src/views/system/menu.vue |  860 +++++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 565 insertions(+), 295 deletions(-)

diff --git a/Source/UBCS-WEB/src/views/system/menu.vue b/Source/UBCS-WEB/src/views/system/menu.vue
index 9a292ec..3f4ac08 100644
--- a/Source/UBCS-WEB/src/views/system/menu.vue
+++ b/Source/UBCS-WEB/src/views/system/menu.vue
@@ -1,13 +1,13 @@
 <template>
   <basic-container>
-    <avue-crud :option="option"
-               :table-loading="loading"
-               :data="data"
-               ref="crud"
+    <avue-crud ref="crud"
                v-model="form"
-               :permission="permissionList"
-               :before-open="beforeOpen"
                :before-close="beforeClose"
+               :before-open="beforeOpen"
+               :data="data"
+               :option="option"
+               :permission="permissionList"
+               :table-loading="loading"
                @row-del="rowDel"
                @row-update="rowUpdate"
                @row-save="rowSave"
@@ -21,56 +21,284 @@
                @on-load="onLoad"
                @tree-load="treeLoad">
       <template slot="menuLeft">
-        <el-button type="danger"
-                   size="small"
+        <el-button v-if="this.permission.menu.menu_delete"
                    icon="el-icon-delete"
-                   v-if="permission.menu_delete"
                    plain
+                   size="small"
+                   type="danger"
                    @click="handleDelete">鍒� 闄�
         </el-button>
+        <el-button v-if="this.permission.menu.menu_clone"
+                   icon="el-icon-connection"
+                   plain
+                   size="small"
+                   type="success"
+                   @click="cloneMenuButton">浠庡叾浠栬彍鍗曞厠闅嗘寜閽�
+        </el-button>
       </template>
-      <template slot-scope="scope" slot="menu">
+      <template slot="menu" slot-scope="scope">
         <el-button
-          type="text"
+          v-if="userInfo.role_name.includes('admin') && scope.row.category === 1"
           icon="el-icon-circle-plus-outline"
           size="small"
+          type="text"
           @click.stop="handleAdd(scope.row,scope.index)"
-          v-if="userInfo.role_name.includes('admin') && scope.row.category === 1"
         >鏂板瀛愰」
         </el-button>
       </template>
-      <template slot-scope="{row}"
-                slot="source">
+      <template slot="source"
+                slot-scope="{row}">
         <div style="text-align:center">
           <i :class="row.source"/>
         </div>
       </template>
     </avue-crud>
+    <!-- 浠庡叾浠栬彍鍗曞厠闅嗘寜閽� -->
+    <el-dialog :visible.sync="cloneOtherMenuButtons.cloneButtonSettingBox"
+               append-to-body
+               style="height: 110vh; margin-top: -10vh;"
+               title="浠庡叾浠栬彍鍗曞厠闅嗘寜閽�"
+               width="1100px"
+               @close="cleanCloneSelections">
+      <avue-crud ref="cloneCrud"
+                 :data="cloneOtherMenuButtons.cloneData"
+                 :option="cloneOtherMenuButtons.cloneOption"
+                 :table-loading="cloneOtherMenuButtons.cloneLoading"
+                 @search-change="searchCloneChange"
+                 @search-reset="searchCloneReset"
+                 @selection-change="selectionCloneChange"
+                 @row-click="clickRowCloneChange"
+                 @refresh-change="refreshCloneChange"
+                 @on-load="cloneOnLoad"
+                 @tree-load="treeLoad">
+        <template slot="source" slot-scope="{row}">
+          <div style="text-align:center">
+            <i :class="row.source"/>
+          </div>
+        </template>
+      </avue-crud>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="cloneButtonsToMenu">淇� 瀛�</el-button>
+        <el-button @click="cloneOtherMenuButtons.cloneButtonSettingBox = false">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
   </basic-container>
 </template>
 
 <script>
-  import {getLazyList, remove, update, add, getMenu} from "@/api/system/menu";
-  import {mapGetters} from "vuex";
-  import iconList from "@/config/iconList";
-  import func from "@/util/func";
-  import {getMenuTree} from "@/api/system/menu";
+import {getLazyList, remove, update, add, getMenu, cloneMenuButton} from "@/api/system/menu";
+import {mapGetters} from "vuex";
+import iconList from "@/config/iconList";
+import func from "@/util/func";
+import {getMenuTree} from "@/api/system/menu";
 
-  export default {
-    data() {
-      return {
-        form: {},
-        query: {},
-        loading: true,
-        selectionList: [],
-        parentId: 0,
-        page: {
-          pageSize: 10,
-          currentPage: 1,
-          total: 0,
-        },
-        option: {
+export default {
+  data() {
+    return {
+      form: {},
+      query: {},
+      loading: true,
+      selectionList: [],
+      parentId: 0,
+      page: {
+        pageSize: 10,
+        currentPage: 1,
+        total: 0,
+      },
+      option: {
+        height: "auto",
+        lazy: true,
+        columnBtn: false,
+        tip: false,
+        simplePage: true,
+        searchShow: true,
+        searchMenuSpan: 6,
+        dialogWidth: "60%",
+        tree: true,
+        border: true,
+        index: true,
+        selection: true,
+        viewBtn: true,
+        menuWidth: 300,
+        dialogClickModal: false,
+        highlightCurrentRow: true, //琛岄�変腑鏃堕珮浜�
+        column: [
+          {
+            label: "鑿滃崟鍚嶇О",
+            prop: "name",
+            search: true,
+            width:220,
+            rules: [
+              {
+                required: true,
+                message: "璇疯緭鍏ヨ彍鍗曞悕绉�",
+                trigger: "blur"
+              }
+            ]
+          },
+          {
+            label: "璺敱鍦板潃",
+            prop: "path",
+            rules: [
+              {
+                required: true,
+                message: "璇疯緭鍏ヨ矾鐢卞湴鍧�",
+                trigger: "blur"
+              }
+            ]
+          },
+          {
+            label: "涓婄骇鑿滃崟",
+            prop: "parentId",
+            type: "tree",
+            dicData: [],
+            hide: true,
+            addDisabled: false,
+            props: {
+              label: "title"
+            },
+            rules: [
+              {
+                required: false,
+                message: "璇烽�夋嫨涓婄骇鑿滃崟",
+                trigger: "click"
+              }
+            ]
+          },
+          {
+            label: "鑿滃崟鍥炬爣",
+            prop: "source",
+            type: "icon",
+            slot: true,
+            iconList: iconList,
+            rules: [
+              {
+                required: true,
+                message: "璇疯緭鍏ヨ彍鍗曞浘鏍�",
+                trigger: "click"
+              }
+            ]
+          },
+          {
+            label: "鑿滃崟缂栧彿",
+            prop: "code",
+            search: true,
+            rules: [
+              {
+                required: true,
+                message: "璇疯緭鍏ヨ彍鍗曠紪鍙�",
+                trigger: "blur"
+              }
+            ]
+          },
+          {
+            label: "鑿滃崟绫诲瀷",
+            prop: "category",
+            type: "radio",
+            dicData: [
+              {
+                label: "鑿滃崟",
+                value: 1
+              },
+              {
+                label: "鎸夐挳",
+                value: 2
+              }
+            ],
+            hide: true,
+            rules: [
+              {
+                required: true,
+                message: "璇烽�夋嫨鑿滃崟绫诲瀷",
+                trigger: "blur"
+              }
+            ]
+          },
+          {
+            label: "鑿滃崟鍒悕",
+            prop: "alias",
+            search: true,
+            rules: [
+              {
+                required: true,
+                message: "璇疯緭鍏ヨ彍鍗曞埆鍚�",
+                trigger: "blur"
+              }
+            ]
+          },
+          {
+            label: "鏂扮獥鍙�",
+            prop: "isOpen",
+            type: "radio",
+            disabled: false,
+            display: false,
+            dicData: [
+              {
+                label: "鍚�",
+                value: 1
+              },
+              {
+                label: "鏄�",
+                value: 2
+              }
+            ],
+            value: 1,
+            rules: [
+              {
+                required: true,
+                message: "璇烽�夋嫨鏂扮獥鍙f墦寮�",
+                trigger: "blur"
+              }
+            ]
+          },
+          {
+            label: "鑿滃崟鎺掑簭",
+            prop: "sort",
+            type: "number",
+            rules: [
+              {
+                required: true,
+                message: "璇疯緭鍏ヨ彍鍗曟帓搴�",
+                trigger: "blur"
+              }
+            ]
+          },
+          {
+            label: "璺敱缂撳瓨",
+            prop: "keepAlive",
+            type: "switch",
+            dicData: [
+              {
+                label: "鍚�",
+                value: "false"
+              },
+              {
+                label: "鏄�",
+                value: "true"
+              }
+            ],
+            hide: true
+          },
+          {
+            label: "鑿滃崟澶囨敞",
+            prop: "remark",
+            type: "textarea",
+            span: 24,
+            minRows: 2,
+            hide: true
+          }
+        ]
+      },
+      data: [],
+      // 浠庡叾浠栬彍鍗曞厠闅嗘寜閽�
+      cloneOtherMenuButtons: {
+        cloneButtonSettingBox: false,
+        selectCloneButtons: [],
+        cloneOption: {
           height: "auto",
+          menu: false,
+          header: false,
+          addBtn: false,
           lazy: true,
           tip: false,
           simplePage: true,
@@ -81,7 +309,8 @@
           border: true,
           index: true,
           selection: true,
-          viewBtn: true,
+          columnBtn: false,
+          searchShowBtn: false,
           menuWidth: 300,
           dialogClickModal: false,
           highlightCurrentRow: true, //琛岄�変腑鏃堕珮浜�
@@ -90,42 +319,20 @@
               label: "鑿滃崟鍚嶇О",
               prop: "name",
               search: true,
-              rules: [
-                {
-                  required: true,
-                  message: "璇疯緭鍏ヨ彍鍗曞悕绉�",
-                  trigger: "blur"
-                }
-              ]
             },
             {
               label: "璺敱鍦板潃",
               prop: "path",
-              rules: [
-                {
-                  required: true,
-                  message: "璇疯緭鍏ヨ矾鐢卞湴鍧�",
-                  trigger: "blur"
-                }
-              ]
             },
             {
               label: "涓婄骇鑿滃崟",
               prop: "parentId",
               type: "tree",
-              dicData: [],
               hide: true,
               addDisabled: false,
               props: {
                 label: "title"
               },
-              rules: [
-                {
-                  required: false,
-                  message: "璇烽�夋嫨涓婄骇鑿滃崟",
-                  trigger: "click"
-                }
-              ]
             },
             {
               label: "鑿滃崟鍥炬爣",
@@ -133,25 +340,11 @@
               type: "icon",
               slot: true,
               iconList: iconList,
-              rules: [
-                {
-                  required: true,
-                  message: "璇疯緭鍏ヨ彍鍗曞浘鏍�",
-                  trigger: "click"
-                }
-              ]
             },
             {
               label: "鑿滃崟缂栧彿",
               prop: "code",
               search: true,
-              rules: [
-                {
-                  required: true,
-                  message: "璇疯緭鍏ヨ彍鍗曠紪鍙�",
-                  trigger: "blur"
-                }
-              ]
             },
             {
               label: "鑿滃崟绫诲瀷",
@@ -167,33 +360,16 @@
                   value: 2
                 }
               ],
-              hide: true,
-              rules: [
-                {
-                  required: true,
-                  message: "璇烽�夋嫨鑿滃崟绫诲瀷",
-                  trigger: "blur"
-                }
-              ]
             },
             {
               label: "鑿滃崟鍒悕",
               prop: "alias",
               search: true,
-              rules: [
-                {
-                  required: true,
-                  message: "璇疯緭鍏ヨ彍鍗曞埆鍚�",
-                  trigger: "blur"
-                }
-              ]
             },
             {
               label: "鏂扮獥鍙�",
               prop: "isOpen",
               type: "radio",
-              disabled: false,
-              display: false,
               dicData: [
                 {
                   label: "鍚�",
@@ -204,26 +380,11 @@
                   value: 2
                 }
               ],
-              value: 1,
-              rules: [
-                {
-                  required: true,
-                  message: "璇烽�夋嫨鏂扮獥鍙f墦寮�",
-                  trigger: "blur"
-                }
-              ]
             },
             {
               label: "鑿滃崟鎺掑簭",
               prop: "sort",
               type: "number",
-              rules: [
-                {
-                  required: true,
-                  message: "璇疯緭鍏ヨ彍鍗曟帓搴�",
-                  trigger: "blur"
-                }
-              ]
             },
             {
               label: "璺敱缂撳瓨",
@@ -232,14 +393,13 @@
               dicData: [
                 {
                   label: "鍚�",
-                  value: false
+                  value: "false"
                 },
                 {
                   label: "鏄�",
-                  value: true
+                  value: "true"
                 }
               ],
-              hide: true
             },
             {
               label: "鑿滃崟澶囨敞",
@@ -247,202 +407,312 @@
               type: "textarea",
               span: 24,
               minRows: 2,
-              hide: true
             }
           ]
         },
-        data: []
+        cloneLoading: false,
+        cloneData: [],
+        cloneQuery: {},
+        clonePage: {
+          pageSize: 10,
+          currentPage: 1,
+          total: 0,
+        },
+      }
+    };
+  },
+  watch: {
+    'form.category'() {
+      const category = func.toInt(this.form.category);
+      this.$refs.crud.option.column.filter(item => {
+        if (item.prop === "path") {
+          item.rules[0].required = category === 1;
+        }
+        if (item.prop === 'isOpen') {
+          item.disabled = category === 2;
+        }
+      });
+    },
+  },
+  computed: {
+    // mapGetters: 杈呭姪鍑芥暟浠呬粎灏唖tore 涓殑 getter 鏄犲皠鍒板眬閮ㄨ绠楀睘鎬�
+    ...mapGetters(["userInfo", "permission"]),
+    permissionList() {
+      return {
+        addBtn: this.vaildData(this.permission.menu.menu_add, false),
+        viewBtn: this.vaildData(this.permission.menu.menu_view, false),
+        delBtn: this.vaildData(this.permission.menu.menu_delete, false),
+        editBtn: this.vaildData(this.permission.menu.menu_edit, false)
       };
+
     },
-    watch: {
-      'form.category'() {
-        const category = func.toInt(this.form.category);
-        this.$refs.crud.option.column.filter(item => {
-          if (item.prop === "path") {
-            item.rules[0].required = category === 1;
-          }
-          if (item.prop === 'isOpen') {
-            item.disabled = category === 2;
-          }
-        });
-      },
-    },
-    computed: {
-      ...mapGetters(["userInfo", "permission"]),
-      permissionList() {
-        return {
-          addBtn: this.vaildData(this.permission.menu_add, false),
-          viewBtn: this.vaildData(this.permission.menu_view, false),
-          delBtn: this.vaildData(this.permission.menu_delete, false),
-          editBtn: this.vaildData(this.permission.menu_edit, false)
-        };
-      },
-      ids() {
-        let ids = [];
-        this.selectionList.forEach(ele => {
-          ids.push(ele.id);
-        });
-        return ids.join(",");
-      }
-    },
-    methods: {
-      initData() {
-        getMenuTree().then(res => {
-          const column = this.findObject(this.option.column, "parentId");
-          column.dicData = res.data.data;
-        });
-      },
-      handleAdd(row) {
-        this.parentId = row.id;
-        const column = this.findObject(this.option.column, "parentId");
-        column.value = row.id;
-        column.addDisabled = true;
-        this.$refs.crud.rowAdd();
-      },
-      rowSave(row, done, loading) {
-        add(row).then((res) => {
-          // 鑾峰彇鏂板鏁版嵁鐨勭浉鍏冲瓧娈�
-          const data = res.data.data;
-          row.id = data.id;
-          this.$message({
-            type: "success",
-            message: "鎿嶄綔鎴愬姛!"
-          });
-          // 鏁版嵁鍥炶皟杩涜鍒锋柊
-          done(row);
-        }, error => {
-          window.console.log(error);
-          loading();
-        });
-      },
-      rowUpdate(row, index, done, loading) {
-        debugger;
-        update(row).then(() => {
-          this.$message({
-            type: "success",
-            message: "鎿嶄綔鎴愬姛!"
-          });
-          // 鏁版嵁鍥炶皟杩涜鍒锋柊
-          done(row);
-        }, error => {
-          window.console.log(error);
-          loading();
-        });
-      },
-      rowDel(row, index, done) {
-        this.$confirm("纭畾灏嗛�夋嫨鏁版嵁鍒犻櫎?", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        })
-          .then(() => {
-            return remove(row.id);
-          })
-          .then(() => {
-            this.$message({
-              type: "success",
-              message: "鎿嶄綔鎴愬姛!"
-            });
-            // 鏁版嵁鍥炶皟杩涜鍒锋柊
-            done(row);
-          });
-      },
-      handleDelete() {
-        if (this.selectionList.length === 0) {
-          this.$message.warning("璇烽�夋嫨鑷冲皯涓�鏉℃暟鎹�");
-          return;
-        }
-        this.$confirm("纭畾灏嗛�夋嫨鏁版嵁鍒犻櫎?", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        })
-          .then(() => {
-            return remove(this.ids);
-          })
-          .then(() => {
-            // 鍒锋柊琛ㄦ牸鏁版嵁骞堕噸杞�
-            this.data = [];
-            this.parentId = 0;
-            this.$refs.crud.refreshTable();
-            this.$refs.crud.toggleSelection();
-            // 琛ㄦ牸鏁版嵁閲嶈浇
-            this.onLoad(this.page);
-            this.$message({
-              type: "success",
-              message: "鎿嶄綔鎴愬姛!"
-            });
-          });
-      },
-      searchReset() {
-        this.query = {};
-        this.parentId = 0;
-        this.onLoad(this.page);
-      },
-      searchChange(params, done) {
-        this.query = params;
-        this.parentId = '';
-        this.page.currentPage = 1;
-        this.onLoad(this.page, params);
-        done();
-      },
-      clickRowChange(row){
-        this.$refs.crud.toggleSelection();
-        this.selectionList = row;
-        this.$refs.crud.setCurrentRow(row);
-        this.$refs.crud.toggleRowSelection(row); //閫変腑褰撳墠琛�
-      },
-      selectionChange(list) {
-        this.selectionList = list;
-        this.$refs.crud.setCurrentRow(this.selectionList[list.length-1]);
-      },
-      selectionClear() {
-        this.selectionList = [];
-        this.$refs.crud.toggleSelection();
-      },
-      beforeOpen(done, type) {
-        if (["add", "edit"].includes(type)) {
-          this.initData();
-        }
-        if (["edit", "view"].includes(type)) {
-          getMenu(this.form.id).then(res => {
-            this.form = res.data.data;
-          });
-        }
-        done();
-      },
-      beforeClose(done) {
-        this.parentId = "";
-        const column = this.findObject(this.option.column, "parentId");
-        column.value = "";
-        column.addDisabled = false;
-        done();
-      },
-      currentChange(currentPage) {
-        this.page.currentPage = currentPage;
-      },
-      sizeChange(pageSize) {
-        this.page.pageSize = pageSize;
-      },
-      refreshChange() {
-        this.onLoad(this.page, this.query);
-      },
-      onLoad(page, params = {}) {
-        this.loading = true;
-        getLazyList(this.parentId, Object.assign(params, this.query)).then(res => {
-          this.data = res.data.data;
-          this.loading = false;
-          this.selectionClear();
-        });
-      },
-      treeLoad(tree, treeNode, resolve) {
-        const parentId = tree.id;
-        getLazyList(parentId).then(res => {
-          resolve(res.data.data);
-        });
-      }
+    ids() {
+      let ids = [];
+      this.selectionList.forEach(ele => {
+        ids.push(ele.id);
+      });
+      return ids.join(",");
     }
-  };
+  },
+  methods: {
+    /** 浠庡叾浠栬彍鍗曞厠闅嗘寜閽� */
+    cloneMenuButton() {
+      if (this.selectionList.length != 1 || this.selectionList[0].category === 2) {
+        this.$message({
+          type: "warning",
+          message: "璇烽�夋嫨涓�鏉¢潪鎸夐挳绫诲瀷鐨勬暟鎹�!"
+        });
+        return;
+      }
+      this.cloneOtherMenuButtons.cloneButtonSettingBox = true;
+    },
+    /** 鍏嬮殕鎸夐挳鍒伴�変腑鐨勮彍鍗曚笅 */
+    cloneButtonsToMenu() {
+      if (this.selectionList.length != 1) {
+        this.$message({
+          type: "warning",
+          message: "瑕佸厠闅嗘寜閽殑鑿滃崟淇℃伅宸蹭涪澶憋紝璇烽噸鏂伴�夋嫨!"
+        });
+        return;
+      }
+      if (this.cloneOtherMenuButtons.selectCloneButtons.length <= 0) {
+        this.$message({
+          type: "warning",
+          message: "璇烽�夋嫨瑕佸厠闅嗘寜閽暟鎹�!"
+        });
+        return;
+      }
+      this.$confirm("纭畾灏嗛�変腑鐨勬寜閽厠闅嗗埌銆�" + this.selectionList[0].name + "銆戣彍鍗曚腑?", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        type: "info"
+      })
+        .then(() => {
+          let buttonIds = [];
+          let flag = true;
+          this.cloneOtherMenuButtons.selectCloneButtons.forEach(function (item) {
+            if (item.category != 2) {
+              flag = false;
+            } else {
+              buttonIds.push(item.id);
+            }
+          });
+          // 閫夋嫨浜嗛潪鎸夐挳绫诲瀷鐨勬暟鎹�
+          if (!flag) {
+            this.$message({
+              type: "warning",
+              message: "鍙兘閫夋嫨鎸夐挳绫诲瀷鐨勮〃鏍艰!"
+            });
+            return;
+          }
+          // console.log(buttonIds);
+          return cloneMenuButton({"menuId": this.selectionList[0].id, "buttonIds": buttonIds});
+        })
+        .then(res => {
+          this.$message({
+            type: res.data.success ? "success" : "error",
+            message: res.data.msg,
+          });
+          this.cloneOtherMenuButtons.cloneButtonSettingBox = false;
+          // 鏁版嵁鍥炶皟杩涜鍒锋柊
+          this.onLoad(this.page);
+        });
+    },
+    /** 閫変腑琚厠闅嗙殑鎸夐挳鏃惰Е鍙� */
+    selectionCloneChange(list) {
+      this.cloneOtherMenuButtons.selectCloneButtons = list;
+      this.$refs.cloneCrud.setCurrentRow(this.cloneOtherMenuButtons.selectCloneButtons[list.length - 1]);
+    },
+    clickRowCloneChange(row) {
+      this.cloneOtherMenuButtons.selectCloneButtons.push(row);
+      this.$refs.cloneCrud.setCurrentRow(row);
+      this.$refs.cloneCrud.toggleRowSelection(row); //閫変腑褰撳墠琛�
+    },
+    /** 鍏抽棴瀵硅瘽妗嗘椂娓呯┖閫変腑鐨勫垪琛� */
+    cleanCloneSelections() {
+      this.cloneOtherMenuButtons.selectCloneButtons = [];
+      this.$refs.cloneCrud.toggleSelection();
+    },
+    cloneOnLoad(page, params = {}) {
+      this.cloneOtherMenuButtons.cloneLoading = true;
+      getLazyList(this.parentId, Object.assign(params, this.cloneOtherMenuButtons.cloneQuery)).then(res => {
+        this.cloneOtherMenuButtons.cloneData = res.data.data;
+        this.cloneOtherMenuButtons.cloneLoading = false;
+      });
+    },
+    searchCloneChange(params, done) {
+      this.cloneOtherMenuButtons.cloneQuery = params;
+      this.parentId = '';
+      this.cloneOtherMenuButtons.clonePage.currentPage = 1;
+      this.cloneOnLoad(this.cloneOtherMenuButtons.clonePage, params);
+      done();
+    },
+    searchCloneReset() {
+      this.cloneOtherMenuButtons.cloneQuery = {};
+      this.parentId = 0;
+      this.cloneOnLoad(this.cloneOtherMenuButtons.clonePage);
+    },
+    refreshCloneChange() {
+      this.onLoad(this.cloneOtherMenuButtons.clonePage, this.cloneOtherMenuButtons.cloneQuery);
+    },
+
+    initData() {
+      getMenuTree().then(res => {
+        const column = this.findObject(this.option.column, "parentId");
+        column.dicData = res.data.data;
+      });
+    },
+    handleAdd(row) {
+      this.parentId = row.id;
+      const column = this.findObject(this.option.column, "parentId");
+      column.value = row.id;
+      column.addDisabled = true;
+      this.$refs.crud.rowAdd();
+    },
+    rowSave(row, done, loading) {
+      add(row).then((res) => {
+        // 鑾峰彇鏂板鏁版嵁鐨勭浉鍏冲瓧娈�
+        const data = res.data.data;
+        row.id = data.id;
+        this.$message({
+          type: "success",
+          message: "鎿嶄綔鎴愬姛!"
+        });
+        // 鏁版嵁鍥炶皟杩涜鍒锋柊
+        done(row);
+      }, error => {
+        window.console.log(error);
+        loading();
+      });
+    },
+    rowUpdate(row, index, done, loading) {
+      update(row).then(() => {
+        this.$message({
+          type: "success",
+          message: "鎿嶄綔鎴愬姛!"
+        });
+        // 鏁版嵁鍥炶皟杩涜鍒锋柊
+        this.onLoad()
+        done(row);
+      }, error => {
+        window.console.log(error);
+        loading();
+      });
+    },
+    rowDel(row, index, done) {
+      this.$confirm("纭畾灏嗛�夋嫨鏁版嵁鍒犻櫎?", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        type: "warning"
+      })
+        .then(() => {
+          return remove(row.id);
+        })
+        .then(() => {
+          this.$message({
+            type: "success",
+            message: "鎿嶄綔鎴愬姛!"
+          });
+          // 鏁版嵁鍥炶皟杩涜鍒锋柊
+          done(row);
+        });
+    },
+    handleDelete() {
+      if (this.selectionList.length === 0) {
+        this.$message.warning("璇烽�夋嫨鑷冲皯涓�鏉℃暟鎹�");
+        return;
+      }
+      this.$confirm("纭畾灏嗛�夋嫨鏁版嵁鍒犻櫎?", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        type: "warning"
+      })
+        .then(() => {
+          return remove(this.ids);
+        })
+        .then(() => {
+          // 鍒锋柊琛ㄦ牸鏁版嵁骞堕噸杞�
+          this.data = [];
+          this.parentId = 0;
+          this.$refs.crud.refreshTable();
+          this.$refs.crud.toggleSelection();
+          // 琛ㄦ牸鏁版嵁閲嶈浇
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "鎿嶄綔鎴愬姛!"
+          });
+        });
+    },
+    searchReset() {
+      this.query = {};
+      this.parentId = 0;
+      this.onLoad(this.page);
+    },
+    searchChange(params, done) {
+      this.query = params;
+      this.parentId = '';
+      this.page.currentPage = 1;
+      this.onLoad(this.page, params);
+      done();
+    },
+    clickRowChange(row) {
+      this.$refs.crud.toggleSelection();
+      this.selectionList = row;
+      this.$refs.crud.setCurrentRow(row);
+      this.$refs.crud.toggleRowSelection(row); //閫変腑褰撳墠琛�
+    },
+    selectionChange(list) {
+      this.selectionList = list;
+      this.$refs.crud.setCurrentRow(this.selectionList[list.length - 1]);
+    },
+    selectionClear() {
+      this.selectionList = [];
+      this.$refs.crud.toggleSelection();
+    },
+    beforeOpen(done, type) {
+      if (["add", "edit"].includes(type)) {
+        this.initData();
+      }
+      if (["edit", "view"].includes(type)) {
+        getMenu(this.form.id).then(res => {
+          this.form = res.data.data;
+        });
+      }
+      done();
+    },
+    beforeClose(done) {
+      this.parentId = "";
+      const column = this.findObject(this.option.column, "parentId");
+      column.value = "";
+      column.addDisabled = false;
+      done();
+    },
+    currentChange(currentPage) {
+      this.page.currentPage = currentPage;
+    },
+    sizeChange(pageSize) {
+      this.page.pageSize = pageSize;
+    },
+    refreshChange() {
+      this.onLoad(this.page, this.query);
+    },
+    onLoad(page, params = {}) {
+      this.loading = true;
+      getLazyList(this.parentId, Object.assign(params, this.query)).then(res => {
+        this.data = res.data.data;
+        this.loading = false;
+        this.selectionClear();
+      });
+    },
+    treeLoad(tree, treeNode, resolve) {
+      const parentId = tree.id;
+      getLazyList(parentId).then(res => {
+        resolve(res.data.data);
+      });
+    }
+  }
+};
 </script>
 
 <style>

--
Gitblit v1.9.3