From 410facfa35a29a14f2dc5a5d74629a8291148aff Mon Sep 17 00:00:00 2001 From: 王旭 <1377869194@qq.com> Date: 星期三, 12 十月 2022 11:03:26 +0800 Subject: [PATCH] Merge branch 'master' of ssh://192.168.20.39:29418/LFWEB --- 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