From 1494c7949d90e1e8407b71606947dc8d9cb60778 Mon Sep 17 00:00:00 2001
From: lxl <lixuliang_hd@126.com>
Date: 星期三, 12 十月 2022 10:58:38 +0800
Subject: [PATCH] 1

---
 src/views/maintenance/menuSettings.vue |  514 ++++++++++++++++++++++++++++++++++-----------------------
 1 files changed, 307 insertions(+), 207 deletions(-)

diff --git a/src/views/maintenance/menuSettings.vue b/src/views/maintenance/menuSettings.vue
index f8f0f41..7f9b71b 100644
--- a/src/views/maintenance/menuSettings.vue
+++ b/src/views/maintenance/menuSettings.vue
@@ -2,46 +2,64 @@
   <div class="menuSettings_box">
     <div class="menuSettings_tree">
       <My-bread :list="['杩愮淮绠$悊', '鑿滃崟璁剧疆']"></My-bread>
+      <el-button class="saveBtn" type="primary" size="mini" @click="sendChange"
+        >淇濆瓨</el-button
+      >
       <el-divider />
-      <el-tree
-        :data="data"
-        :props="defaultProps"
-        show-checkbox
-        @check-change="handleCheckChange"
-      />
+      <div class="menuTreeBox">
+        <el-tree
+          ref="tree"
+          :props="defaultProps"
+          node-key="id"
+          :data="menuList"
+          :expand-on-click-node="false"
+          :default-expand-all="true"
+          draggable
+          @node-click="handleNodeClick"
+          @node-drag-start="handleDragStart"
+          @node-drag-end="handleDrop"
+        >
+          <span class="custom-tree-node" slot-scope="{ node, data }">
+            <span>{{ node.label }}</span>
+          </span>
+        </el-tree>
+      </div>
     </div>
     <div class="menuSettings">
-      <div class="btn_box">
-        <el-button type="primary">鏂板缓</el-button>
-        <el-button type="primary">淇敼</el-button>
-        <!-- <el-button class="delBtn">娓呴櫎</el-button> -->
+      <div class="title_box">
+        <h4>璇︾粏淇℃伅</h4>
       </div>
-      <div class="table_box">
-        <el-table :data="tableData" stripe>
-          <el-table-column prop="menuname" label="鑿滃崟鍚嶇О" />
-          <el-table-column prop="parentmenuname" label="鐖惰彍鍗曞悕绉�" />
-          <el-table-column prop="dataBulk" label="鏁版嵁鏁伴噺" />
-          <el-table-column prop="creationtime" label="鍒涘缓鏃堕棿" />
-          <el-table-column prop="creationname" label="鍒涘缓浜�" />
-          <el-table-column fixed="right" label="鎿嶄綔" width="280">
-            <template #default>
-              <!-- <el-button type="primary" size="small">淇敼</el-button> -->
-              <el-button type="primary" size="small">鍒犻櫎</el-button>
-            </template>
-          </el-table-column>
-        </el-table>
-        <div style="margin-top: 40px" class="pagination_box">
-          <el-pagination
-            @size-change="handleSizeChange"
-            @current-change="handleCurrentChange"
-            :current-page="currentPage4"
-            :page-sizes="[10, 20, 30, 40]"
-            :page-size="10"
-            layout="total, sizes, prev, pager, next, jumper"
-            :total="10"
-          >
-          </el-pagination>
-        </div>
+      <div class="form_box">
+        <el-form :model="itemdetail">
+          <el-form-item label="鑻辨枃鍚嶇О" :label-width="formLabelWidth">
+            <el-input v-model="itemdetail.enName" autocomplete="off"></el-input>
+          </el-form-item>
+          <el-form-item label="涓枃鍚嶇О" :label-width="formLabelWidth">
+            <el-input v-model="itemdetail.cnName" autocomplete="off"></el-input>
+          </el-form-item>
+          <el-form-item label="鍥炬爣" :label-width="formLabelWidth">
+            <el-input v-model="itemdetail.icon" autocomplete="off"></el-input>
+          </el-form-item>
+          <el-form-item label="鏄惁鏄剧ず" :label-width="formLabelWidth">
+            <el-input v-model="itemdetail.isShow" autocomplete="off"></el-input>
+          </el-form-item>
+          <el-form-item label="鑿滃崟Url" :label-width="formLabelWidth">
+            <el-input v-model="itemdetail.url" autocomplete="off"></el-input>
+          </el-form-item>
+          <el-form-item label="鎺堟潈" :label-width="formLabelWidth">
+            <el-input v-model="itemdetail.perms" autocomplete="off"></el-input>
+          </el-form-item>
+          <el-form-item label="绫诲瀷" :label-width="formLabelWidth">
+            <el-input v-model="itemdetail.type" autocomplete="off"></el-input>
+          </el-form-item>
+          <el-form-item label="澶囨敞" :label-width="formLabelWidth">
+            <el-input v-model="itemdetail.bak" autocomplete="off"></el-input>
+          </el-form-item>
+          <div class="btnBox">
+            <el-button type="primary" @click="updMenu">淇濆瓨</el-button>
+            <el-button type="primary" @click="reset">鍙栨秷</el-button>
+          </div>
+        </el-form>
       </div>
     </div>
   </div>
@@ -49,7 +67,12 @@
 
 <script>
 import MyBread from "../../components/MyBread.vue";
-
+import {
+  queryMenuTree,
+  updateMenuTree,
+  updateMenuTrees,
+  queryMaxId,
+} from "../../api/api";
 export default {
   //import寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
   components: {
@@ -58,169 +81,217 @@
 
   data() {
     return {
-      currentPage4: 1,
-      tableData: [
-        {
-          menuname: "鏁版嵁璐ㄦ",
-          parentmenuname: "",
-          dataBulk: "1",
-          creationtime: "2022-7-20",
-          creationname: "admin",
-        },
-        {
-          menuname: "鏁版嵁浜ゆ崲",
-          parentmenuname: "",
-          dataBulk: "1",
-          creationtime: "2022-7-20",
-          creationname: "admin",
-        },
-        {
-          menuname: "鏁版嵁绠$悊",
-          parentmenuname: "",
-          dataBulk: "1",
-          creationtime: "2022-7-20",
-          creationname: "admin",
-        },
-        {
-          menuname: "鏈嶅姟绠$悊",
-          parentmenuname: "",
-          dataBulk: "1",
-          creationtime: "2022-7-20",
-          creationname: "admin",
-        },
-        {
-          menuname: "缁煎悎灞曠ず",
-          parentmenuname: "",
-          dataBulk: "1",
-          creationtime: "2022-7-20",
-          creationname: "admin",
-        },
-        {
-          menuname: "杩愮淮绠$悊",
-          parentmenuname: "",
-          dataBulk: "1",
-          creationtime: "2022-7-20",
-          creationname: "admin",
-        },
-        {
-          menuname: "鑿滃崟绠$悊",
-          parentmenuname: "杩愮淮绠$悊",
-          dataBulk: "1",
-          creationtime: "2022-7-20",
-          creationname: "admin",
-        },
-        {
-          menuname: "鐢ㄦ埛绠$悊",
-          parentmenuname: "杩愮淮绠$悊",
-          dataBulk: "1",
-          creationtime: "2022-7-20",
-          creationname: "admin",
-        },
-        {
-          menuname: "绯荤粺绠$悊",
-          parentmenuname: "杩愮淮绠$悊",
-          dataBulk: "1",
-          creationtime: "2022-7-20",
-          creationname: "admin",
-        },
-        {
-          menuname: "绯荤粺閰嶇疆",
-          parentmenuname: "杩愮淮绠$悊",
-          dataBulk: "1",
-          creationtime: "2022-7-20",
-          creationname: "admin",
-        },
-      ],
       defaultProps: {
         children: "children",
-        label: "label",
+        label: "cnName",
       },
-      data: [
-        {
-          label: "鏁版嵁璐ㄦ",
-        },
-        {
-          label: "鏁版嵁浜ゆ崲",
-        },
-        {
-          label: "鏁版嵁绠$悊",
-          children: [
-            {
-              label: "Level two 3-1",
-              children: [
-                {
-                  label: "Level three 3-1-1",
-                },
-              ],
-            },
-            {
-              label: "Level two 3-2",
-              children: [
-                {
-                  label: "Level three 3-2-1",
-                },
-              ],
-            },
-          ],
-        },
-        {
-          label: "鏈嶅姟绠$悊",
-        },
-        {
-          label: "缁煎悎灞曠ず",
-          children: [
-            {
-              label: "Level two 3-1",
-              children: [
-                {
-                  label: "Level three 3-1-1",
-                },
-              ],
-            },
-            {
-              label: "Level two 3-2",
-              children: [
-                {
-                  label: "Level three 3-2-1",
-                },
-              ],
-            },
-          ],
-        },
-        {
-          label: "杩愮淮绠$悊",
-          children: [
-            {
-              label: "Level two 3-1",
-              children: [
-                {
-                  label: "Level three 3-1-1",
-                },
-              ],
-            },
-            {
-              label: "Level two 3-2",
-              children: [
-                {
-                  label: "Level three 3-2-1",
-                },
-              ],
-            },
-          ],
-        },
-      ],
+      oriData: [], //鍘熷鏍戞暟鎹�
+      menuList: [], //el鏍戞暟鎹�
+      old_dirDat: [], //el鏍戞暟鎹�(鎷栧姩鍓�)
+      newData: [], //鎷栧姩鍚庡師濮嬫暟鎹�
+      itemdetail: {
+        cnName: "",
+        enName: "",
+        icon: null,
+        isShow: null,
+        perms: null,
+        url: "",
+        type: null,
+        bak: "",
+      },
+      backUpData: {},
+      formLabelWidth: "170px",
     };
   },
   methods: {
-    handleSizeChange(val) {
-      console.log(`姣忛〉 ${val} 鏉);
+    getMenuTree() {
+      //鑾峰彇鐩綍鏍戞渶澶D锛屾柊寤鸿妭鐐逛娇鐢�
+      // queryMaxId().then((res) => {
+      //   this.id = res.data;
+      // });
+      queryMenuTree().then((res) => {
+        if (res.code == 200) {
+          this.menuList = this.treeData(res.result);
+          this.oriData = res.result;
+          this.newData = res.result;
+        } else {
+          console.log("鎺ュ彛鎶ラ敊");
+        }
+      });
     },
-    handleCurrentChange(val) {
-      console.log(`褰撳墠椤�: ${val}`);
+    treeData(source) {
+      let cloneData = JSON.parse(JSON.stringify(source)); // 瀵规簮鏁版嵁娣卞害鍏嬮殕
+      return cloneData.filter((father) => {
+        // 寰幆鎵�鏈夐」
+        let branchArr = cloneData.filter((child) => father.id == child.pid); // 瀵规瘮ID锛屽垎鍒笂涓嬬骇鑿滃崟锛屽苟杩斿洖鏁版嵁
+        branchArr.length > 0 ? (father.children = branchArr) : ""; // 缁欑埗绾ф坊鍔犱竴涓猚hildren灞炴�э紝骞惰祴鍊�
+        return father.pid == 1; // 杩斿洖涓�绾ц彍鍗�
+      });
     },
-    handleCheckChange() {},
+    append(data) {
+      this.$prompt("璇疯緭鍏ュ悕绉�", "鎻愮ず", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+      })
+        .then(({ value }) => {
+          const newChild = {
+            id: this.id + 1,
+            name: value,
+            pid: data.id,
+            // children: [],
+            orderNum: data.children ? data.children.length + 1 : 1,
+          };
+          this.id = newChild.id; //淇敼鏂扮殑鏈�澶
+          console.log(newChild);
+
+          if (!data.children) {
+            this.$set(data, "children", []);
+          }
+          data.children.push(newChild);
+          this.newData.push(newChild);
+          // this.sendChange();
+        })
+        .catch(() => {
+          this.$message({
+            type: "info",
+            message: "鍙栨秷杈撳叆",
+          });
+        });
+    },
+    remove(node, data) {
+      this.$confirm("姝ゆ搷浣滃皢鍒犻櫎璇ヨ妭鐐�, 鏄惁缁х画?", "鎻愮ず", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        type: "warning",
+      })
+        .then(() => {
+          const parent = node.parent;
+          const children = parent.data.children || parent.data;
+          const index = children.findIndex((d) => d.id === data.id);
+          let res = children.splice(index, 1);
+          var std = [];
+          for (var i in res) {
+            std.push(res[i].id);
+          }
+          // deleteDirTree(std);
+          this.getDirTree();
+          this.$message({
+            type: "success",
+            message: "鍒犻櫎鎴愬姛!",
+          });
+        })
+        .catch(() => {
+          this.$message({
+            type: "info",
+            message: "宸插彇娑堝垹闄�",
+          });
+        });
+      // this.dialogMessage="鏄惁鍒犻櫎"
+      // this.dialogFlag = 1;
+      // this.dialogFrom ={
+      //   node:node,
+      //   val:data
+      // }
+      //   this.dialogVisible=true;//鐩綍鏍戞洿鏀瑰脊绐�
+      // const parent = node.parent;
+      // const children = parent.data.children || parent.data;
+      // const index = children.findIndex((d) => d.id === data.id);
+      // let res = children.splice(index, 1);
+      // // console.log(res);
+      // // console.log(data);
+      // console.log(this.flaten(res));
+    },
+    flaten(arr) {
+      return arr.reduce((p, v, i) => {
+        for (let i = 0; i < p.length; i++) {
+          if (p[i].children) {
+            delete p[i].children;
+          }
+        }
+        return p.concat(v.children ? this.flaten(v.children).concat(v) : v);
+      }, []);
+    },
+    handleDragStart(node, ev) {
+      this.old_dirDat = JSON.parse(JSON.stringify(this.menuList)); //灏嗗浠界殑dir閲嶆柊璧嬪��
+    },
+    handleDrop(draggingNode, dropNode, dropType, ev) {
+      this.$confirm("鏄惁璋冩暣鑷宠浣嶇疆?", "鎻愮ず", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        type: "warning",
+      })
+        .then(() => {
+          //鐖惰妭鐐�
+          let data = dropType != "inner" ? dropNode.parent.data : dropNode.data;
+          // 鐖惰妭鐐逛腑鍏ㄩ儴瀛愯妭鐐�
+          let nodeData =
+            dropNode.level == 1 && dropType != "inner" ? data : data.children;
+          //鍙樻洿鑺傜偣
+          // console.log(nodeData);
+          nodeData.forEach((item, i) => {
+            if (dropType != "inner") {
+              if (draggingNode.data.pid === dropNode.data.pid) {
+                item.pid = item.pid;
+              } else {
+                item.pid = dropNode.data.pid;
+              }
+            } else {
+              item.pid = data.id;
+            }
+            item.orderNum = i + 1;
+          });
+          console.log(nodeData);
+          //鏇存柊鍘熷鏁翠綋鏁版嵁
+          let arr = [];
+          this.oriData.forEach((e) => {
+            nodeData.forEach((item) => {
+              if (item.id === e.id) e = item;
+            });
+            arr.push(e);
+          });
+          this.newData = arr;
+        })
+        .catch(() => {
+          this.$message({
+            type: "info",
+            message: "宸插彇娑堟洿鏀�",
+          });
+          this.menuList = this.old_dirDat; //灏嗗浠界殑dir閲嶆柊璧嬪��
+        });
+    },
+    sendChange() {
+      updateMenuTrees(this.newData).then((res) => {
+        if (res.code == 200) {
+          alert("鏇存敼瀹屾垚銆傝鍙婃椂鍒锋柊椤甸潰锛�");
+          return;
+        } else {
+          alert("淇敼澶辫触锛岃閲嶈瘯锛�");
+        }
+      });
+    },
+    handleNodeClick(data) {
+      // console.log(data);
+      this.backUpData = JSON.stringify(data);
+      this.itemdetail = JSON.parse(JSON.stringify(data));
+    },
+    updMenu() {
+      updateMenuTree(this.itemdetail).then((res) => {
+        // console.log(res);
+        if (res.code == 200) {
+          alert("淇敼瀹屾垚锛岃鍙婃椂鍒锋柊椤甸潰锛�");
+          return;
+        } else {
+          alert("淇敼澶辫触锛岃閲嶈瘯锛�");
+        }
+      });
+    },
+    reset() {
+      this.itemdetail = JSON.parse(this.backUpData);
+    },
   },
-  created() {},
+  mounted() {
+    this.getMenuTree();
+  },
 };
 </script>
 <style lang="less" scoped>
@@ -233,6 +304,7 @@
   box-sizing: border-box;
   display: flex;
   .menuSettings_tree {
+    position: relative;
     width: 344px;
     height: 100%;
     background: rgb(240, 242, 245);
@@ -240,14 +312,39 @@
     border-radius: 10px;
     box-sizing: border-box;
     overflow: auto;
-    .el-tree {
-      background: transparent;
-      /deep/ .el-tree-node__label {
-        font-size: 18px;
-      }
-      /deep/ .el-tree-node {
-        padding-top: 10px;
-        padding-bottom: 10px;
+    .saveBtn {
+      position: absolute;
+      left: 250px;
+      top: 23px;
+    }
+    .menuTreeBox {
+      height: 90%;
+      overflow: auto;
+      .el-tree {
+        background: transparent;
+        font-size: 15px;
+        font-family: Microsoft YaHei;
+        font-weight: 400;
+        color: #000000;
+        // /deep/ .el-tree-node__label {
+        //   font-size: 18px;
+        // }
+        /deep/ .el-tree-node {
+          padding-top: 10px;
+          // padding-bottom: 10px;
+        }
+        /deep/ .el-tree-node:focus > .el-tree-node__content {
+          background-color: #b9b9b9;
+        }
+        /deep/ .el-tree-node__content:hover {
+          background-color: rgb(153, 153, 153);
+        }
+        .btnBox {
+          margin-left: 5px;
+          .el-button + .el-button {
+            margin-left: 5px;
+          }
+        }
       }
     }
   }
@@ -259,7 +356,7 @@
     height: 100%;
     padding: 10px;
     box-sizing: border-box;
-    .btn_box {
+    .title_box {
       background: #fff;
       padding: 10px;
       margin-bottom: 24px;
@@ -267,19 +364,22 @@
       border-radius: 10px;
       border: 1px solid rgb(202, 201, 204);
       box-sizing: border-box;
-      .delBtn {
-        margin-left: auto;
-      }
     }
-    .table_box {
+    .form_box {
       border: 1px solid rgb(202, 201, 204);
       border-radius: 10px;
       background: #fff;
-      padding: 10px;
+      padding-top: 30px;
       box-sizing: border-box;
       width: 100%;
-      .el-table__body {
-        width: 100% !important;
+      .el-input {
+        width: 400px;
+      }
+      .btnBox {
+        margin: 0 270px 20px;
+        width: 200px;
+        display: flex;
+        justify-content: space-between;
       }
     }
   }

--
Gitblit v1.9.3