From 16d2a38e7bb7a31d6e355d031115a58bffd0109d Mon Sep 17 00:00:00 2001 From: ludc Date: 星期三, 26 七月 2023 15:01:39 +0800 Subject: [PATCH] 增加菜单管理中,从其他菜单克隆按钮功能、 --- Source/UBCS-WEB/src/views/system/menu.vue | 290 ++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 263 insertions(+), 27 deletions(-) diff --git a/Source/UBCS-WEB/src/views/system/menu.vue b/Source/UBCS-WEB/src/views/system/menu.vue index bbc8ff1..710ca16 100644 --- a/Source/UBCS-WEB/src/views/system/menu.vue +++ b/Source/UBCS-WEB/src/views/system/menu.vue @@ -32,7 +32,7 @@ size="small" icon="el-icon-connection" plain - @click="cloneButton">浠庡叾浠栬彍鍗曞厠闅嗘寜閽� + @click="cloneMenuButton">浠庡叾浠栬彍鍗曞厠闅嗘寜閽� </el-button> </template> <template slot-scope="scope" slot="menu"> @@ -52,25 +52,40 @@ </div> </template> </avue-crud> - <!-- 浠庡叾浠栬彍鍗曞厠闅嗘寜閽� --> <el-dialog title="浠庡叾浠栬彍鍗曞厠闅嗘寜閽�" append-to-body - :visible.sync="cloneButtonSettingBox" - width="800px" - style="height: 116vh; margin-top: -10vh;"> - <avue-crud - :option="dialogeOption" - :table-loading="dialogLoading" - :data="useRangeData" - @refresh-change="refreshUseRangeChange"> + :visible.sync="cloneOtherMenuButtons.cloneButtonSettingBox" + width="1100px" + @close="cleanCloneSelections" + style="height: 110vh; margin-top: -10vh;"> + <avue-crud :option="cloneOtherMenuButtons.cloneOption" + :table-loading="cloneOtherMenuButtons.cloneLoading" + :data="cloneOtherMenuButtons.cloneData" + ref="cloneCrud" + @search-change="searchCloneChange" + @search-reset="searchCloneReset" + @selection-change="selectionCloneChange" + @row-click="clickRowCloneChange" + @refresh-change="refreshCloneChange" + @on-load="cloneOnLoad" + @tree-load="treeLoad"> + <template slot-scope="{row}" slot="source"> + <div style="text-align:center"> + <i :class="row.source"/> + </div> + </template> </avue-crud> - </el-dialog> + <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 {getLazyList, remove, update, add, getMenu ,cloneMenuButton} from "@/api/system/menu"; import {mapGetters} from "vuex"; import iconList from "@/config/iconList"; import func from "@/util/func"; @@ -275,7 +290,130 @@ // 浠庡叾浠栬彍鍗曞厠闅嗘寜閽� cloneOtherMenuButtons: { cloneButtonSettingBox: false, - + selectCloneButtons: [], + cloneOption: { + height: "auto", + menu: false, + addBtn: false, + lazy: true, + tip: false, + simplePage: true, + searchShow: true, + searchMenuSpan: 6, + dialogWidth: "60%", + tree: true, + border: true, + index: true, + selection: true, + columnBtn: false, + searchShowBtn: false, + menuWidth: 300, + dialogClickModal: false, + highlightCurrentRow: true, //琛岄�変腑鏃堕珮浜� + column: [ + { + label: "鑿滃崟鍚嶇О", + prop: "name", + search: true, + }, + { + label: "璺敱鍦板潃", + prop: "path", + }, + { + label: "涓婄骇鑿滃崟", + prop: "parentId", + type: "tree", + hide: true, + addDisabled: false, + props: { + label: "title" + }, + }, + { + label: "鑿滃崟鍥炬爣", + prop: "source", + type: "icon", + slot: true, + iconList: iconList, + }, + { + label: "鑿滃崟缂栧彿", + prop: "code", + search: true, + }, + { + label: "鑿滃崟绫诲瀷", + prop: "category", + type: "radio", + dicData: [ + { + label: "鑿滃崟", + value: 1 + }, + { + label: "鎸夐挳", + value: 2 + } + ], + }, + { + label: "鑿滃崟鍒悕", + prop: "alias", + search: true, + }, + { + label: "鏂扮獥鍙�", + prop: "isOpen", + type: "radio", + dicData: [ + { + label: "鍚�", + value: 1 + }, + { + label: "鏄�", + value: 2 + } + ], + }, + { + label: "鑿滃崟鎺掑簭", + prop: "sort", + type: "number", + }, + { + label: "璺敱缂撳瓨", + prop: "keepAlive", + type: "switch", + dicData: [ + { + label: "鍚�", + value: "false" + }, + { + label: "鏄�", + value: "true" + } + ], + }, + { + label: "鑿滃崟澶囨敞", + prop: "remark", + type: "textarea", + span: 24, + minRows: 2, + } + ] + }, + cloneLoading: false, + cloneData: [], + cloneQuery: {}, + clonePage: { + pageSize: 10, + currentPage: 1, + total: 0, + }, } }; }, @@ -311,6 +449,108 @@ } }, 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"); @@ -359,17 +599,17 @@ cancelButtonText: "鍙栨秷", type: "warning" }) - .then(() => { - return remove(row.id); - }) - .then(() => { - this.$message({ - type: "success", - message: "鎿嶄綔鎴愬姛!" - }); - // 鏁版嵁鍥炶皟杩涜鍒锋柊 - done(row); + .then(() => { + return remove(row.id); + }) + .then(() => { + this.$message({ + type: "success", + message: "鎿嶄綔鎴愬姛!" }); + // 鏁版嵁鍥炶皟杩涜鍒锋柊 + done(row); + }); }, handleDelete() { if (this.selectionList.length === 0) { @@ -397,10 +637,6 @@ message: "鎿嶄綔鎴愬姛!" }); }); - }, - /** 浠庡叾浠栬彍鍗曞厠闅嗘寜閽� */ - cloneButton(){ - }, searchReset() { this.query = {}; -- Gitblit v1.9.3