From 16d2a38e7bb7a31d6e355d031115a58bffd0109d Mon Sep 17 00:00:00 2001
From: ludc
Date: 星期三, 26 七月 2023 15:01:39 +0800
Subject: [PATCH] 增加菜单管理中,从其他菜单克隆按钮功能、
---
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IMenuService.java | 8 +
Source/UBCS-WEB/src/views/system/menu.vue | 290 +++++++++++++++++++++++++++++++++++++---
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java | 2
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/MenuController.java | 12 +
Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/ButtonCloneVO.java | 18 ++
Source/UBCS-WEB/vue.config.js | 4
Source/UBCS-WEB/src/api/system/menu.js | 6
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/MenuServiceImpl.java | 40 +++++
8 files changed, 350 insertions(+), 30 deletions(-)
diff --git a/Source/UBCS-WEB/src/api/system/menu.js b/Source/UBCS-WEB/src/api/system/menu.js
index 7547aa0..ba197bb 100644
--- a/Source/UBCS-WEB/src/api/system/menu.js
+++ b/Source/UBCS-WEB/src/api/system/menu.js
@@ -106,3 +106,9 @@
topMenuId,
}
});
+
+export const cloneMenuButton = (data) => request({
+ url: '/api/ubcs-system/menu/cloneMenuButton',
+ method: 'post',
+ data: data
+});
\ No newline at end of file
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 = {};
diff --git a/Source/UBCS-WEB/vue.config.js b/Source/UBCS-WEB/vue.config.js
index 0991057..ad43a75 100644
--- a/Source/UBCS-WEB/vue.config.js
+++ b/Source/UBCS-WEB/vue.config.js
@@ -26,10 +26,10 @@
proxy: {
'/api': {
//鏈湴鏈嶅姟鎺ュ彛鍦板潃
- // target: 'http://localhost:37000',
+ target: 'http://localhost:37000',
// target: 'http://192.168.1.51:37000',
// target: 'http://192.168.1.46:37000',
- target: 'http://dev.vci-tech.com:37000',
+ // target: 'http://dev.vci-tech.com:37000',
// target: 'http://192.168.1.51:37000/',
// target: 'http://192.168.1.104:37000',
// target: 'http://192.168.1.63:37000',
diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/ButtonCloneVO.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/ButtonCloneVO.java
new file mode 100644
index 0000000..75bc58c
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/vo/ButtonCloneVO.java
@@ -0,0 +1,18 @@
+package com.vci.ubcs.system.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author ludc
+ * @date 2023/7/26 12:11
+ */
+@Data
+public class ButtonCloneVO {
+
+ private Long menuId;
+
+ private List<String> buttonIds;
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java
index 82ae965..0023217 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java
@@ -712,7 +712,7 @@
return dataGrid;
}
//杩欎釜涓氬姟绫诲瀷涓嬬殑鎵�鏈夊睘鎬�
- R<BtmTypeVO> btmTypeVOR = btmTypeClient.getAllAttributeByBtmOid(codeClassifyTemplateDO.getBtmTypeId());
+ R<BtmTypeVO> btmTypeVOR = btmTypeClient.getAllAttributeByBtmId(codeClassifyTemplateDO.getBtmTypeId());
if(!btmTypeVOR.isSuccess()){
throw new ServiceException("涓氬姟绫诲瀷feign璋冪敤閿欒锛�");
}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/MenuController.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/MenuController.java
index 6204bfc..92e402f 100644
--- a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/MenuController.java
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/MenuController.java
@@ -24,6 +24,7 @@
import com.vci.ubcs.system.entity.TopMenu;
import com.vci.ubcs.system.service.IMenuService;
import com.vci.ubcs.system.service.ITopMenuService;
+import com.vci.ubcs.system.vo.ButtonCloneVO;
import com.vci.ubcs.system.vo.CheckedTreeVO;
import com.vci.ubcs.system.vo.GrantTreeVO;
import com.vci.ubcs.system.vo.MenuVO;
@@ -285,4 +286,15 @@
}
return R.data(menuService.authRoutes(user));
}
+
+ /**
+ * 鍏嬮殕鍏朵粬鑿滃崟涓嬫寜閽�
+ * @param buttonCloneVO 瑕佸厠闅嗙殑鑿滃崟鎸夐挳涓婚敭 琚厠闅嗙殑鎸夐挳涓婚敭
+ * @return
+ */
+ @PostMapping("/cloneMenuButton")
+ public R cloneMenuButton(@RequestBody ButtonCloneVO buttonCloneVO) {
+ return menuService.cloneMenuButton(buttonCloneVO.getMenuId(), buttonCloneVO.getButtonIds());
+ }
+
}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IMenuService.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IMenuService.java
index 48cc81b..8c799fb 100644
--- a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IMenuService.java
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IMenuService.java
@@ -182,4 +182,12 @@
*/
void handleKeepAlive(List<MenuVO> childMenu);
+ /**
+ * 鍏嬮殕鍏朵粬鑿滃崟涓嬫寜閽�
+ * @param menuId 瑕佸厠闅嗙殑鑿滃崟鎸夐挳涓婚敭
+ * @param buttonIds 琚厠闅嗙殑鎸夐挳涓婚敭
+ * @return
+ */
+ R cloneMenuButton(Long menuId, List<String> buttonIds);
+
}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/MenuServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/MenuServiceImpl.java
index 07612e6..aa566ac 100644
--- a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/MenuServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/MenuServiceImpl.java
@@ -323,4 +323,44 @@
});
}
+ /**
+ * 鍏嬮殕鍏朵粬鑿滃崟涓嬫寜閽�
+ * @param menuId 瑕佸厠闅嗙殑鑿滃崟鎸夐挳涓婚敭
+ * @param buttonIds 琚厠闅嗙殑鎸夐挳涓婚敭
+ * @return
+ */
+ @Override
+ public R cloneMenuButton(Long menuId, List<String> buttonIds) {
+ if(Func.isEmpty(menuId)){
+ return R.fail("瑕佸厠闅嗙殑鑿滃崟涓婚敭涓嶈兘涓虹┖锛�");
+ }
+ if(buttonIds.isEmpty() || buttonIds.size() <= 0){
+ return R.fail("琚厠闅嗙殑鎸夐挳涓婚敭涓嶈兘涓虹┖锛�");
+ }
+ // 鍏堟牴鎹富閿煡璇㈠嚭鎵�鏈夋寜閽殑淇℃伅
+ List<Menu> buttons = this.listByIds(buttonIds);
+ List<Menu> newButtons = new ArrayList<>();
+ List<String> addButtonCodes = new ArrayList();
+ buttons.parallelStream().forEach(item->{
+ // 鍒ゆ柇鏄惁涓烘寜閽紝闈炴寜閽笉澶勭悊
+ if(item.getCategory().equals(2)){
+ // 鏀瑰彉鐖惰妭鐐逛俊鎭�
+ item.setParentId(menuId);
+ // 灏嗕富閿祴绌�
+ item.setId(null);
+ addButtonCodes.add(item.getCode());
+ newButtons.add(item);
+ }
+ });
+ //妫�楠屾槸鍚﹂噸澶嶈彍鍗曞埆鍚嶏紝鍙牎楠屽悓涓�鐖跺垎绫昏彍鍗曚笅鐨勭紪鍙锋槸鍚﹂噸澶�
+ LambdaQueryWrapper<Menu> menuQueryWrapper = Wrappers.<Menu>lambdaQuery()
+ .eq(Menu::getParentId,menuId)
+ .and(a -> a.in( Menu::getCode, addButtonCodes));
+ Long cnt = baseMapper.selectCount(menuQueryWrapper);
+ if (cnt > 0L) {
+ return R.fail("璇ヨ彍鍗曚笅宸插瓨鍦ㄧ殑缂栧彿涓庤鍏嬮殕鐨勬寜閽紪鍙峰瓨鍦ㄩ噸澶�!");
+ }
+ return this.saveBatch(newButtons) ? R.success("鎸夐挳鍏嬮殕鎴愬姛锛�"):R.fail("鎸夐挳鍏嬮殕澶辫触锛�");
+ }
+
}
--
Gitblit v1.9.3