From 02e7ca80d849ad8a99974bd08f9e68a78f36d601 Mon Sep 17 00:00:00 2001 From: ludc Date: 星期二, 16 一月 2024 21:51:45 +0800 Subject: [PATCH] 分类授权数据授权界面编写与接口修改 --- Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/ClassifyAuthMapper.java | 1 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/ClassifyAuth.java | 7 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IMenuService.java | 21 + Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/MenuMapper.java | 11 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/RoleController.java | 1 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClient.java | 2 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/MenuController.java | 10 Source/UBCS-WEB/src/components/Theme/DataAuthDialog.vue | 343 ++++++++++++++++++++++++++++ Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IRoleService.java | 1 Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/MenuMapper.xml | 81 ++++-- Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IClassifyAuthService.java | 15 + Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/ClassifyAuthServiceImpl.java | 48 ++- Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/RoleServiceImpl.java | 1 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/SysClient.java | 4 Source/UBCS-WEB/src/components/Theme/ClassifyAuthDialog.vue | 6 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java | 3 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/ClassifyAuthController.java | 10 Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClientFallback.java | 2 Source/UBCS-WEB/src/components/Theme/ThemeClassifyTrees.vue | 24 + Source/UBCS-WEB/src/main.js | 2 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/MenuServiceImpl.java | 98 ++++++- 21 files changed, 604 insertions(+), 87 deletions(-) diff --git a/Source/UBCS-WEB/src/components/Theme/ClassifyAuthDialog.vue b/Source/UBCS-WEB/src/components/Theme/ClassifyAuthDialog.vue index 0824414..2f17451 100644 --- a/Source/UBCS-WEB/src/components/Theme/ClassifyAuthDialog.vue +++ b/Source/UBCS-WEB/src/components/Theme/ClassifyAuthDialog.vue @@ -40,6 +40,7 @@ v-if="item.type === 'select'" slot="prepend" v-model="row[item.prop]" + @change="roleChange" > <el-option v-for="optionItem in roleList" @@ -188,6 +189,11 @@ this.$emit('update:visible', false); this.classifyAuthData = []; }, + // 瑙掕壊鏀瑰彉鏃� + roleChange(roleId){ + console.log(roleId); + + }, // 澧炲姞琛� addClassifyAuth() { if(this.roleList.length<=0){ diff --git a/Source/UBCS-WEB/src/components/Theme/DataAuthDialog.vue b/Source/UBCS-WEB/src/components/Theme/DataAuthDialog.vue new file mode 100644 index 0000000..66d686c --- /dev/null +++ b/Source/UBCS-WEB/src/components/Theme/DataAuthDialog.vue @@ -0,0 +1,343 @@ +<template> + <el-dialog + v-dialogDrag + :close-on-click-modal="false" + :visible.sync="isShowDialog" + append-to-body + class="avue-dialog avue-dialog--top" + title="鏁版嵁鎺堟潈" + top="-45px" @close="closeDialog"> + <el-table + ref="dataTable" + v-loading="isLoading" + :data="classifyAuthData" + :header-cell-style="{ background: '#FAFAFA', color: '#505050' }" + :height="tableHeight" + border + class="cus-table" + @select="handleSelection" + @row-click="handleRowClick" + @select-all="handleSelectionAll" + @selection-change="handleSelectionChange" + @sort-change="sortChange" + > + <el-table-column + type="selection" + width="55" + ></el-table-column> + <el-table-column + v-for="(item, index) in classifyAuthHeader" + v-if="classifyAuthHeader.length !== 0" + :key="index" + :label="item.label" + :prop="item.prop" + :show-overflow-tooltip="true" + :width="item.width" + align="center" + > + <template slot-scope="{ row }"> + <el-select + v-if="item.type === 'select'" + slot="prepend" + v-model="row[item.prop]" + @change="roleChange" + > + <el-option + v-for="optionItem in roleList" + :key="optionItem.id" + :label="optionItem.roleName" + :value="optionItem.id" + > + </el-option> + </el-select> + <el-input + v-if="item.type === 'text'" + v-model="row[item.prop]" + readonly + type="text" + > + </el-input> + <el-checkbox + v-if="item.type === 'checkbox'" + v-model="row[item.prop]"> + </el-checkbox> + </template> + </el-table-column> + </el-table> + <div slot="footer" class="dialog-footer"> + <el-button type="info" plain @click="selectAllButton">鎸夐挳鍏ㄩ��</el-button> + <el-button class="el-icon-plus" type="success" plain @click="addClassifyAuth"></el-button> + <el-button class="el-icon-minus" type="warning" plain @click="subClassifyAuth"></el-button> + <el-button type="primary" plain @click="submit">鎻� 浜�</el-button> + <el-button type="danger" plain @click="isShowDialog = false">鍏� 闂�</el-button> + </div> + </el-dialog> +</template> + +<script> +import {getButtonByParentCode} from "@/api/system/menu" +import {getPage} from "@/api/system/role" +import {saveOrUpdate, getClassifyAuthList} from "@/api/system/classifyAuth" +import {v4 as uuidv4} from 'uuid'; + +export default { + name: "dataAuthDialog.vue", + props: { + classifyData: { + type: "Object", + default: "", + }, + /**瀵硅瘽妗嗘樉绀洪殣钘忔帶鍒�*/ + visible: { + type: "Boolean", + default: false, + }, + }, + data() { + return { + // 瀵硅瘽妗嗘樉绀烘帶鍒� + isShowDialog: this.visible, + isLoading: false, + tableHeight: 'calc(100vh - 550px)', + classifyAuthData: [], + //鍒楀ご + classifyAuthHeader: [], + //鎸夐挳鏁版嵁 + classifyAuthButton: [], + //瑙掕壊鍒楄〃 + roleList: [], + //褰撳墠閫変腑鐨勮〃鏍艰 + selectList: [], + }; + }, + watch: { + // 鐩戝惉鐖剁粍浠朵紶鐨勭獥鍙f樉绀洪殣钘忕殑鍊� + visible() { + if (this.visible) { + this.isShowDialog = this.visible; + return new Promise((resolve, reject) => { + getButtonByParentCode({code: this.classifyData.attributes.id}).then(res => { + // 璁板綍鎸夐挳鏁版嵁 + this.classifyAuthButton = res.data.data; + const list = res.data.data; + let tempData = []; + // 瑙掕壊鍒� + tempData.push({ + label: "瑙掕壊", + prop: "roleData", + type: "select", + width: 150, + }); + // 缂栫爜椤瑰垎绫绘巿鏉� + tempData.push({ + label: "缂栫爜椤规暟鎹巿鏉�", + prop: "classifyItem", + type: "text", + width: 180, + }); + list.forEach(item => { + let columnItem = { + label: item.name, + prop: item.id, + type: "checkbox", + width: 180, + }; + tempData.push(columnItem); + }) + this.classifyAuthHeader = tempData + resolve(); + }).catch(err => { + reject(err) + }); + // 鑾峰彇瑙掕壊鍒楄〃 + getPage(1, -1, null).then(res => { + this.roleList = res.data.data.records; + }); + // 鑾峰彇璇ュ垎绫讳笅宸叉巿鏉冪殑鍒嗙被鎺堟潈淇℃伅 + getClassifyAuthList({classifyId: this.classifyData.oid,authType: "data_auth"}).then(res => { + //console.log(res.data.data); + let authDatas = res.data.data; + if (authDatas.length > 0) { + authDatas.forEach(authData => { + let item = { + oid: authData.oid, + roleData: authData.roleId, + classifyItem: this.classifyData.label, + uuid: uuidv4(),//鐢熸垚鍞竴鐨刬d + } + //灏嗘寜閽缃繘鍘� + authData.buttonIdList.forEach(data => { + Vue.set(item, data, true); + }); + //console.log(item) + this.classifyAuthData.push(item); + }) + } + }); + }); + } + }, + }, + computed: {}, + mounted() { + }, + created() { + }, + methods: { + // 鍏抽棴瀵硅瘽妗� + closeDialog() { + this.$emit('update:visible', false); + this.classifyAuthData = []; + }, + // 瑙掕壊鏀瑰彉鏃� + roleChange(roleId){ + console.log(roleId); + + }, + // 澧炲姞琛� + addClassifyAuth() { + if(this.roleList.length<=0){ + this.$message.warning("褰撳墠绉熸埛涓嶅瓨鍦ㄨ鑹蹭俊鎭紒"); + return; + } + let item = { + roleData: this.roleList[0].id, + classifyItem: this.classifyData.label, + uuid: uuidv4(),//鐢熸垚鍞竴鐨刬d + + } + //灏嗘寜閽缃繘鍘� + this.classifyAuthButton.forEach(data => { + Vue.set(item, data.id, false); + }) + //console.log(item) + this.classifyAuthData.push(item) + // console.log(this.classifyAuthData); + }, + // 鍒犻櫎琛� + subClassifyAuth() { + for (let item of this.selectList) { + let index = this.classifyAuthData.findIndex(data => data.index === item.index); + if (index !== -1) { + this.classifyAuthData.splice(index, 1); + } + } + }, + handleRowClick(row, column) { + this.selectList.push(row); + this.$refs.dataTable.toggleRowSelection(row); + }, + // 澶氶�� + handleSelectionChange(list) { + this.selectList = list; + //console.log("澶氶��"); + }, + // 閫夋嫨鍏ㄩ儴 + handleSelectionAll(list) { + this.selectList = list; + }, + // 淇濆瓨鍒嗙被鎺堟潈淇℃伅 + submit() { + if (this.classifyAuthData.length <= 0) { + this.$message.warning('鎺堟潈鍒楄〃涓虹┖锛�') + return; + } + let isRepeat = false; + // 閬嶅巻鏁扮粍锛屾瘮杈冨悗闈㈢殑瀵硅薄鐨剅oleData鏄惁涓庡墠闈㈢殑瀵硅薄鐩哥瓑 + for (let i = 0; i < this.classifyAuthData.length - 1; i++) { + let currentRoleId = this.classifyAuthData[i].roleData; + for (let j = i + 1; j < this.classifyAuthData.length; j++) { + if (currentRoleId === this.classifyAuthData[j].roleData) { + isRepeat = true; + break; + } + } + if (isRepeat) { + break; + } + } + if (isRepeat) { + this.$message.warning("瑙掕壊鍜屽垎绫诲凡缁忓瓨鍦紝璇烽噸鏂伴厤缃紒"); + return; + } + let form = []; + let flag = false; + this.classifyAuthData.forEach(item => { + let itemButtonList = []; + //绛涢�夊嚭鎸夐挳鍕鹃�変负true鐨勫垪 + for (let key in item) { + if (item[key] === true) { + itemButtonList.push(key); + } + } + /**濡傛灉itemButtonList涓虹┖璇佹槑鏄紝 + 娣诲姞浜嗚鑹蹭絾鏄病鍕鹃�変换浣曠殑鎸夐挳*/ + if (itemButtonList.length <= 0) { + flag = true; + return; + } + let data = { + oid: item.oid, + roleId: item.roleData, + classifyId: this.classifyData.oid, + buttonIds: itemButtonList.join(","), + authType: "data_auth", + } + form.push(data); + }); + if (flag) { + this.$message.warning('鏈夋湭鍕鹃�夋搷浣滅殑鏉冮檺锛屼笉鍏佽鎺堟潈') + return; + } + // console.log(form) + // 璋冪敤淇濆瓨鍒嗙被鎺堟潈鐨勬帴鍙� + saveOrUpdate(form).then(res => { + this.$message({ + type: "success", + message: res.data.msg, + }); + // this.isShowDialog = false + }, (error) => { + window.console.log(error); + }) + }, + // 鍏ㄩ�夋寜閽� + selectAllButton(){ + if(this.selectList.length!==1){ + this.$message.warning("璇峰彧閫夋嫨涓�琛岄渶瑕佸叏閫夌殑鎸夐挳鐨勬暟鎹锛�"); + return; + } + this.classifyAuthButton.forEach(item => { + //console.log("item",item); + Vue.set(this.selectList[0], item.id, true); + }); + //console.log("this.selectList",this.selectList); + }, + }, +}; +</script> + +<style lang="scss" scoped> + +// 婊氬姩鏉℃牱寮忎慨鏀� +// 婊氬姩鏉$殑瀹藉害 +/deep/ .el-table__body-wrapper::-webkit-scrollbar { + height: 15px; // 绾靛悜婊氬姩鏉� 蹇呭啓 + background: white; + border: white; + width: 10px; + +} + +// 婊氬姩鏉$殑婊戝潡 +/deep/ .el-table__body-wrapper::-webkit-scrollbar-thumb { + background-color: #ececec; + border-radius: 20px; + border: #ececec; +} + +/deep/ .el-table__body-wrapper { + height: calc(100% - 50px) !important; +} + +</style> diff --git a/Source/UBCS-WEB/src/components/Theme/ThemeClassifyTrees.vue b/Source/UBCS-WEB/src/components/Theme/ThemeClassifyTrees.vue index 048607f..d267825 100644 --- a/Source/UBCS-WEB/src/components/Theme/ThemeClassifyTrees.vue +++ b/Source/UBCS-WEB/src/components/Theme/ThemeClassifyTrees.vue @@ -32,6 +32,10 @@ style="width: 56px;text-align: center;padding-left: 3px" type="primary" @click="classifyAuthHandler">鍒嗙被鎺堟潈 </el-button> + <el-button v-if="permissionList.classifyAuth" plain size="small" + style="width: 56px;text-align: center;padding-left: 3px" type="primary" + @click="dataAuthHandler">鏁版嵁鎺堟潈 + </el-button> </div> <!-- 宸︿晶鏍�--> @@ -116,6 +120,11 @@ :classifyData="classifyData" :visible.sync="classifyAuthVisible" ></classify-auth-dialog> + <!-- 鏁版嵁鎺堟潈瀵硅瘽妗� --> + <data-auth-dialog + :classifyData="classifyData" + :visible.sync="dataAuthVisible" + ></data-auth-dialog> </basic-container> </el-aside> <el-main> @@ -452,6 +461,8 @@ TreeAddFormVisible: false, //鍒嗙被鎺堟潈瀵硅瘽妗� classifyAuthVisible: false, + //鏁版嵁鎺堟潈瀵硅瘽妗� + dataAuthVisible: false, //褰撳墠鐐瑰嚮椤� nodeClickList: "", ClonenodeClickList: "", @@ -759,6 +770,15 @@ } this.classifyData = this.nodeClickList; this.classifyAuthVisible = true; + }, + // 鏁版嵁鎺堟潈瀵硅瘽妗嗘墦寮� + dataAuthHandler() { + if (this.nodeClickList.oid === '' || this.nodeClickList.oid === undefined) { + this.$message.warning('璇疯嚦灏戦�夋嫨涓�鏉℃暟鎹紒') + return; + } + this.classifyData = this.nodeClickList; + this.dataAuthVisible = true; }, flowingDependHandler() { if (this.nodeClickList.length <= 0) { @@ -1116,10 +1136,10 @@ }, //鏍戠偣鍑讳簨浠� async nodeClick(data) { - getAuthButtonList({classifyId: data.oid}).then(res => { + getAuthButtonList({classifyId: data.oid,code: "classifyTree",authType: "classify_auth"}).then(res => { this.btnAuthList = res.data.data; }).catch(error => { - console.log(error) + window.console.log(error) }) //鎿嶄綔鏂板鍜屼慨鏀圭殑涓氬姟绫诲瀷闅愯棌 this.TreeFlagCode = !data; diff --git a/Source/UBCS-WEB/src/main.js b/Source/UBCS-WEB/src/main.js index a25b4d7..917ff08 100644 --- a/Source/UBCS-WEB/src/main.js +++ b/Source/UBCS-WEB/src/main.js @@ -38,6 +38,7 @@ import classifyTrees from "@/components/Theme/ThemeClassifyTrees" import classifyTreeform from "@/components/Theme/ThemeClassifyTreeform" import classifyAuthDialog from "@/components/Theme/ClassifyAuthDialog" +import dataAuthDialog from "@/components/Theme/DataAuthDialog" import TemplatePro from "@/components/Theme/ThemeTemplatePro" import attrCrud from "@/components/Theme/ThemeAttrCrud" import formulaEditor from "@/components/code-dialog-page/formulaEditor" @@ -100,6 +101,7 @@ Vue.component('originalLink',originalLink) Vue.component('classifyTrees',classifyTrees) Vue.component('classifyAuthDialog',classifyAuthDialog) +Vue.component('dataAuthDialog',dataAuthDialog) Vue.component('classifyTreeform',classifyTreeform) Vue.component('TemplatePro',TemplatePro) Vue.component('formulaEditor',formulaEditor) diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/ClassifyAuth.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/ClassifyAuth.java index bbc7c61..49fd723 100644 --- a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/ClassifyAuth.java +++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/entity/ClassifyAuth.java @@ -9,7 +9,7 @@ import java.util.List; /** - * 鍒嗙被鎺堟潈鍙傛暟瀵硅薄 + * 鍒嗙被鎺堟潈锛屾暟鎹巿鏉冨弬鏁板璞� * @author ludc * @date 2023/12/25 15:36 */ @@ -40,4 +40,9 @@ */ private String buttonIds; + /** + * 鎺堟潈绫诲瀷 + */ + private String authType; + } diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClient.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClient.java index 29319f2..68993fb 100644 --- a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClient.java +++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClient.java @@ -112,7 +112,7 @@ * @return List<Menu> */ @GetMapping(MENU_BUTTON) - R<List<Menu>> getMenuButtonByType(@RequestParam("btmType") String btmType); + R<List<Menu>> getMenuButtonByType(@RequestParam("classifyId") String classifyId,@RequestParam("btmType") String btmType,@RequestParam("authType") String authType); /** * 鑾峰彇閮ㄩ棬 diff --git a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClientFallback.java b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClientFallback.java index d88ac80..dfc4297 100644 --- a/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClientFallback.java +++ b/Source/UBCS/ubcs-service-api/ubcs-system-api/src/main/java/com/vci/ubcs/system/feign/ISysClientFallback.java @@ -48,7 +48,7 @@ } @Override - public R<List<Menu>> getMenuButtonByType(String btmType) { + public R<List<Menu>> getMenuButtonByType(String classifyId, String btmType, String authType) { return R.fail("鑾峰彇鏁版嵁澶辫触"); } diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java index c3618b2..77d5549 100644 --- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java +++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java @@ -3896,11 +3896,10 @@ @Override public MdmUIInfoVO getUIInfoByClassifyOid(String codeClassifyOid, String functionId) { VciBaseUtil.alertNotNull(codeClassifyOid, "涓婚搴撳垎绫讳富閿�"); - MdmUIInfoVO uiInfoVO = getTableDefineByTemplateVO(getUsedTemplateByClassifyOid(codeClassifyOid)); uiInfoVO.setLeaf(classifyService.countChildrenByClassifyOid(codeClassifyOid) == 0); if (StringUtils.isNotBlank(functionId) && !"~".equalsIgnoreCase(functionId)) { - List<Menu> buttonVOS = iSysClient.getMenuButtonByType(uiInfoVO.getTemplateVO().getBtmTypeId()).getData(); + List<Menu> buttonVOS = iSysClient.getMenuButtonByType(codeClassifyOid,uiInfoVO.getTemplateVO().getBtmTypeId(),"data_auth").getData(); // List<SmOperationVO> operationVOS = operationService.listButtonByFunctionId(functionId); // if (operationVOS == null) { // operationVOS = new ArrayList<>(); diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/ClassifyAuthController.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/ClassifyAuthController.java index 9c232f7..44ae6dc 100644 --- a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/ClassifyAuthController.java +++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/ClassifyAuthController.java @@ -1,7 +1,6 @@ package com.vci.ubcs.system.controller; import com.vci.ubcs.system.entity.ClassifyAuth; -import com.vci.ubcs.system.entity.Menu; import com.vci.ubcs.system.service.IClassifyAuthService; import com.vci.ubcs.system.vo.ClassifyAuthVO; import io.swagger.annotations.Api; @@ -11,11 +10,12 @@ import org.springframework.web.bind.annotation.*; import springfox.documentation.annotations.ApiIgnore; +import javax.validation.Valid; import java.util.List; import java.util.Map; /** - * 鍒嗙被鎺堟潈 + * 鍒嗙被鎺堟潈,鏁版嵁鎺堟潈 * @author ludc * @date 2023/12/20 11:33 */ @@ -52,11 +52,13 @@ /** * 鏌ヨ璇ュ垎绫讳笅锛屽綋鍓嶇櫥褰曠殑瑙掕壊鏈夊摢浜涙寜閽潈闄� * @param classifyId + * @param menuCode + * @param authType * @return */ @GetMapping("/getAuthButtonList") - public R<Map<String,Boolean>> getAuthButtonList(@RequestParam("classifyId") String classifyId){ - return R.data(classifyAuthService.getAuthButtonList(classifyId)); + public R<Map<String,Boolean>> getAuthButtonList(@Valid @RequestParam("classifyId") String classifyId,@Valid @RequestParam("code") String menuCode,@Valid @RequestParam("authType") String authType){ + return R.data(classifyAuthService.getAuthButtonList(classifyId,menuCode,authType)); } } 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 adbaaa5..a535ce9 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 @@ -317,4 +317,14 @@ return menuService.cloneMenuButton(buttonCloneVO.getMenuId(), buttonCloneVO.getButtonIds()); } + /** + * 鏍规嵁瑙掕壊id鑾峰彇宸叉巿鏉冪殑鎸夐挳淇℃伅 + * @param roleId + * @return + */ + @GetMapping("/getButtonsByRoleId") + public R<List<Menu>> getButtonsByRoleId(@Valid @RequestParam("roleId") String roleId,@Valid @RequestParam("code") String menuCode){ + return R.data(menuService.getButtonsByRoleId(roleId,menuCode)); + } + } diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/RoleController.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/RoleController.java index 508ea8d..7217d10 100644 --- a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/RoleController.java +++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/RoleController.java @@ -22,6 +22,7 @@ import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.vci.ubcs.system.cache.NacosConfigCache; import com.vci.ubcs.system.cache.SysCache; +import com.vci.ubcs.system.entity.Menu; import com.vci.ubcs.system.entity.Role; import com.vci.ubcs.system.service.IRoleService; import com.vci.ubcs.system.user.cache.UserCache; diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/SysClient.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/SysClient.java index f96ff31..9d71dce 100644 --- a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/SysClient.java +++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/SysClient.java @@ -83,8 +83,8 @@ @Override @GetMapping(MENU_BUTTON) - public R<List<Menu>> getMenuButtonByType(String btmType) { - return R.data(menuService.getMenuButtonByType(btmType, AuthUtil.getUserId())); + public R<List<Menu>> getMenuButtonByType(String classifyId,String btmType,String authType) { + return R.data(menuService.getMenuButtonByType(classifyId,btmType,authType)); } @Override diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/ClassifyAuthMapper.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/ClassifyAuthMapper.java index 0333c0b..04d84dd 100644 --- a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/ClassifyAuthMapper.java +++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/ClassifyAuthMapper.java @@ -7,6 +7,7 @@ import java.util.List; /** + * 鍒嗙被鎺堟潈,鏁版嵁鎺堟潈 * @author ludc * @date 2023/12/25 15:50 */ diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/MenuMapper.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/MenuMapper.java index e1e77e7..1c19e5c 100644 --- a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/MenuMapper.java +++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/MenuMapper.java @@ -135,11 +135,18 @@ List<Menu> selectMenuChildByBtnType(String btmType,List<String> roleIds); /** - * 鏍规嵁鐖惰彍鍗昪ode鏌ヨ鑿滃崟鐨勫瓙鎸夐挳 + * 鏍规嵁鐖惰彍鍗昪ode鍜岃鑹瞚d鑾峰彇宸叉巿鏉冪殑鎸夐挳淇℃伅 * * @return */ - List<Menu> getButtonByParentCode(@Param("code") String code); + List<Menu> getButtonsByRoleIdAndCode(@Param("roleId") String roleId, @Param("code") String code); + + /** + * 鏍规嵁鐖惰彍鍗昪ode鍜岃鑹瞚d鑾峰彇宸叉巿鏉冪殑鎸夐挳淇℃伅 + * + * @return + */ + List<Menu> getButtonByIdsOrByParentCode(@Param("roleIds") String roleIds, @Param("code") String code,@Param("ids") List<String> ids); /** * 鏉冮檺閰嶇疆鑿滃崟 diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IClassifyAuthService.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IClassifyAuthService.java index 7fcb85f..30cda15 100644 --- a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IClassifyAuthService.java +++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IClassifyAuthService.java @@ -10,7 +10,7 @@ import java.util.Map; /** - * 鍒嗙被鎺堟潈 + * 鍒嗙被鎺堟潈,鏁版嵁鎺堟潈 * @author ludc * @date 2023/12/25 15:34 */ @@ -33,9 +33,20 @@ /** * 鏌ヨ璇ュ垎绫讳笅锛屽綋鍓嶇櫥褰曠殑瑙掕壊鏈夊摢浜涙寜閽潈闄� * @param classifyId + * @param menuCode + * @param authType * @return */ - Map<String,Boolean> getAuthButtonList(String classifyId); + Map<String,Boolean> getAuthButtonList(String classifyId,String menuCode,String authType); + + /** + * 鏌ヨ璇ヤ富鏁版嵁涓嬶紝褰撳墠鐧诲綍鐨勮鑹叉湁鍝簺鎸夐挳鏉冮檺 + * @param classifyId + * @param menuCode + * @param authType + * @return + */ + List<Menu> getAuthMenuButtonList(String classifyId,String menuCode,String authType); /** * 鏍规嵁瑙掕壊id鏌ョ湅鏈夊摢浜涘垎绫诲叿澶囨煡鐪嬫潈闄� 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 c49017d..0708dd5 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 @@ -175,10 +175,12 @@ /** * 鑾峰彇鑿滃崟涓嬮潰鐨勬寜閽� - * @param btmType 涓氬姟绫诲瀷 - * @return List<Menu> + * @param classifyId + * @param btmType + * @param authType + * @return */ - List<Menu> getMenuButtonByType(String btmType,Long userId); + List<Menu> getMenuButtonByType(String classifyId,String btmType, String authType); /** * 鏍规嵁code鍜岀敤鎴穒d鏌ヨ鑿滃崟淇℃伅 @@ -214,7 +216,18 @@ /** * 鏍规嵁涓婚敭鑾峰彇鑿滃崟淇℃伅 * @param ids + * @param menuCode + * @param roleIds * @return */ - List<Menu> getMenuListById(List<String> ids,String parentId); + List<Menu> getMenuListByCode(List<String> ids,String menuCode,String roleIds); + + /** + * 鏍规嵁瑙掕壊id鑾峰彇宸叉巿鏉冪殑鎸夐挳淇℃伅 + * @param roleId + * @param menuCode + * @return + */ + List<Menu> getButtonsByRoleId(String roleId, String menuCode); + } diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IRoleService.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IRoleService.java index 140a760..f0e102b 100644 --- a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IRoleService.java +++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IRoleService.java @@ -18,6 +18,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; +import com.vci.ubcs.system.entity.Menu; import com.vci.ubcs.system.entity.Role; import com.vci.ubcs.system.vo.RoleVO; import org.springblade.core.tool.api.R; diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/ClassifyAuthServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/ClassifyAuthServiceImpl.java index 72cf41b..600b8a9 100644 --- a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/ClassifyAuthServiceImpl.java +++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/ClassifyAuthServiceImpl.java @@ -19,6 +19,8 @@ import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -26,7 +28,7 @@ import java.util.stream.Collectors; /** - * 鍒嗙被鎺堟潈 + * 鍒嗙被鎺堟潈,鏁版嵁鎺堟潈 * @author ludc * @date 2023/12/25 15:35 */ @@ -87,7 +89,8 @@ throw new ServiceException("缂哄皯蹇呬紶鍙傛暟鍒嗙被id"); } LambdaQueryWrapper<ClassifyAuth> wrapper = Wrappers.<ClassifyAuth>query() - .lambda().eq(ClassifyAuth::getClassifyId,classifyAuthVO.getClassifyId()); + .lambda().eq(ClassifyAuth::getClassifyId,classifyAuthVO.getClassifyId()) + .eq(ClassifyAuth::getAuthType,classifyAuthVO.getAuthType()); List<ClassifyAuth> classifyAuths = this.classifyAuthMapper.selectList(wrapper); if(classifyAuths.isEmpty()){ return new ArrayList<ClassifyAuthVO>(); @@ -98,9 +101,33 @@ /** * 鏌ヨ璇ュ垎绫讳笅锛屽綋鍓嶇櫥褰曠殑瑙掕壊鏈夊摢浜涙寜閽潈闄� * @param classifyId + * @param menuCode + * @param authType * @return */ - public Map<String,Boolean> getAuthButtonList(String classifyId){ + public Map<String,Boolean> getAuthButtonList(String classifyId,String menuCode,String authType){ + List<Menu> menuList = this.getButtonList(classifyId, menuCode, authType); + if(menuList.isEmpty()){ + return new HashMap<>(); + } + Map<String, Boolean> buttonMaps = menuList.stream() + .collect(Collectors.toMap(Menu::getCode, menu -> true)); + return buttonMaps; + } + + /** + * 鏌ヨ璇ヤ富鏁版嵁涓嬶紝褰撳墠鐧诲綍鐨勮鑹叉湁鍝簺鎸夐挳鑿滃崟鏉冮檺 + * @param classifyId + * @param menuCode + * @param authType + * @return + */ + public List<Menu> getAuthMenuButtonList(String classifyId,String menuCode,String authType){ + List<Menu> buttonList = getButtonList(classifyId, menuCode, authType); + return buttonList; + } + + private List<Menu> getButtonList(String classifyId,String menuCode,String authType){ if(Func.isBlank(classifyId)){ throw new ServiceException("蹇呬紶鍙傛暟鍒嗙被oid涓嶈兘涓虹┖锛�"); } @@ -115,6 +142,7 @@ // 鍏堟煡璇㈡寜閽甶d鍒楄〃 LambdaQueryWrapper<ClassifyAuth> wrapper = Wrappers.<ClassifyAuth>query() .lambda().eq(ClassifyAuth::getClassifyId, classifyId) + .eq(ClassifyAuth::getAuthType,authType) .in(ClassifyAuth::getRoleId, roleIds); List<ClassifyAuth> classifyAuths = this.classifyAuthMapper.selectList(wrapper); //濡傛灉褰撳墠鍒嗙被娌℃湁鎵惧埌鎺堟潈閰嶇疆锛屽氨渚濇浠庡綋鍓嶈妭鐐瑰線涓婂眰鑺傜偣鎵炬巿鏉冮厤缃紝鎵惧埌浜嗗氨鍋滄锛屾病鎵惧埌灏变竴鐩存壘鍒版渶鍚� @@ -139,20 +167,14 @@ Boolean isAdmin = VciBaseUtil.checkAdminTenant(); // 鏈厤缃寜閽潈闄� if(!isAdmin && (classifyAuths.isEmpty() || Func.isBlank(classifyAuths.get(0).getButtonIds()))){ - return new HashMap<>(); + return new ArrayList<>(); } - List<String> condition1 = new ArrayList<>(); + List<String> ids = new ArrayList<>(); // 濡傛灉涓嶆槸瓒呯鐢ㄦ埛 if(!isAdmin){ - condition1.addAll(Arrays.asList(classifyAuths.get(0).getButtonIds().split(","))); + ids.addAll(Arrays.asList(classifyAuths.get(0).getButtonIds().split(","))); } - List<Menu> menuList = menuService.getMenuListById(condition1,"1648879284590858241"); - if(menuList.isEmpty()){ - return new HashMap<>(); - } - Map<String, Boolean> buttonMaps = menuList.stream() - .collect(Collectors.toMap(Menu::getCode, menu -> true)); - return buttonMaps; + return menuService.getMenuListByCode(ids,menuCode,roleIds); } /** 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 50fdfa6..9139a1f 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 @@ -21,18 +21,17 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.vci.ubcs.code.feign.ICodeClassifyClient; import com.vci.ubcs.starter.util.MybatisParameterUtil; import com.vci.ubcs.starter.web.util.VciBaseUtil; import com.vci.ubcs.system.cache.NacosConfigCache; import com.vci.ubcs.system.cache.SysCache; import com.vci.ubcs.system.dto.MenuDTO; import com.vci.ubcs.system.entity.*; +import com.vci.ubcs.system.mapper.ClassifyAuthMapper; +import com.vci.ubcs.system.service.*; import com.vci.ubcs.system.vo.MenuVO; import com.vci.ubcs.system.mapper.MenuMapper; -import com.vci.ubcs.system.service.IMenuService; -import com.vci.ubcs.system.service.IRoleMenuService; -import com.vci.ubcs.system.service.IRoleScopeService; -import com.vci.ubcs.system.service.ITopMenuSettingService; import com.vci.ubcs.system.wrapper.MenuWrapper; import lombok.AllArgsConstructor; import org.springblade.core.log.exception.ServiceException; @@ -70,6 +69,8 @@ private final IRoleScopeService roleScopeService; private final MenuMapper menuMapper; private final ITopMenuSettingService topMenuSettingService; + private final ICodeClassifyClient codeClassifyClient; + private final ClassifyAuthMapper classifyAuthMapper; private final static String PARENT_ID = "parentId"; private final static Integer MENU_CATEGORY = 1; @@ -324,18 +325,63 @@ } /** - * 鑾峰彇鑿滃崟涓嬮潰鐨勬寜閽� + * 鑾峰彇鑿滃崟涓嬮潰鐨勬寜閽紝鍒贡璋冪敤锛岃繖涓柟娉曟槸閽堝涓绘暟鎹鐞嗘寜閽煡璇㈢殑 + * @param classifyId * @param btmType 涓氬姟绫诲瀷 - * @return List<Menu> + * @param authType + * @return */ @Override //@Cacheable(cacheNames = MENU_CACHE, key = "'auth:menuButton:'+ #btmType +':'+ #userId ") - public List<Menu> getMenuButtonByType(String btmType,Long userId) { - List<String> roleIds = null; - if(!VciBaseUtil.checkAdminTenant()){ - roleIds = Arrays.asList(AuthUtil.getUser().getRoleId().split(",")); + public List<Menu> getMenuButtonByType(String classifyId,String btmType,String authType) { + // baseMapper.selectMenuChildByBtnType(btmType,roleIds); + if(Func.isBlank(classifyId)){ + throw new ServiceException("蹇呬紶鍙傛暟鍒嗙被oid涓嶈兘涓虹┖锛�"); } - return baseMapper.selectMenuChildByBtnType(btmType,roleIds); + //鏌ヨ鍒嗙被鑺傜偣鐨勬墍鏈夌埗绾ц妭鐐� + R<List<String>> listR = codeClassifyClient.selectAllParentOid(classifyId); + if (!listR.isSuccess() && !listR.getData().isEmpty()) { + throw new ServiceException("鑾峰彇鍒嗙被淇℃伅澶辫触锛�"); + } + // 杩斿洖鐨勫垎绫籵id鏄綋鍓嶈妭鐐逛负绗竴涓紝鍚庨潰渚濇鏄粬鐨勪笂灞傝妭鐐� + List<String> classifyOidList = listR.getData(); + final String roleIds = AuthUtil.getUser().getRoleId(); + // 鍏堟煡璇㈡寜閽甶d鍒楄〃 + LambdaQueryWrapper<ClassifyAuth> wrapper = Wrappers.<ClassifyAuth>query() + .lambda().eq(ClassifyAuth::getClassifyId, classifyId) + .eq(ClassifyAuth::getAuthType,authType) + .in(ClassifyAuth::getRoleId, roleIds); + List<ClassifyAuth> classifyAuths = classifyAuthMapper.selectList(wrapper); + //濡傛灉褰撳墠鍒嗙被娌℃湁鎵惧埌鎺堟潈閰嶇疆锛屽氨渚濇浠庡綋鍓嶈妭鐐瑰線涓婂眰鑺傜偣鎵炬巿鏉冮厤缃紝鎵惧埌浜嗗氨鍋滄锛屾病鎵惧埌灏变竴鐩存壘鍒版渶鍚� + if(classifyAuths.isEmpty()){ + // 涓嬫爣浠�1寮�濮嬪洜涓哄綋鍓嶈妭鐐�0宸茬粡鏌ヨ杩� + for (int i = 1; i < classifyOidList.size(); i++) { + classifyAuths = classifyAuthMapper.selectList( + Wrappers.<ClassifyAuth>query() + .lambda().eq(ClassifyAuth::getClassifyId, classifyOidList.get(i)) + .in(ClassifyAuth::getRoleId, roleIds) + ); + if(!classifyAuths.isEmpty()){ + break; + } + } + } + //鍑虹幇浜嗛敊璇暟鎹紝鍚屼竴涓鑹插拰鍚屼竴涓垎绫籭d瀛樺湪澶氭潯鎺堟潈璁板綍 + if(classifyAuths.size()>1){ + throw new ServiceException("瑙掕壊鍜屽垎绫婚厤缃瓨鍦ㄥ鏉¤褰曪紝璇疯仈绯荤鐞嗕汉鍛樻竻鐞嗛敊璇厤缃紒"); + } + // 鏄惁涓鸿秴绠� + Boolean isAdmin = VciBaseUtil.checkAdminTenant(); + // 鏈厤缃寜閽潈闄� + if(!isAdmin && (classifyAuths.isEmpty() || Func.isBlank(classifyAuths.get(0).getButtonIds()))){ + return new ArrayList<>(); + } + List<String> ids = new ArrayList<>(); + // 濡傛灉涓嶆槸瓒呯鐢ㄦ埛 + if(!isAdmin){ + ids.addAll(Arrays.asList(classifyAuths.get(0).getButtonIds().split(","))); + } + return this.getMenuListByCode(ids,btmType,roleIds); } /** @@ -381,8 +427,7 @@ */ @Override public List<Menu> getButtonByParentCode(String code) { - List<Menu> buttonList = menuMapper.getButtonByParentCode(code); - return buttonList; + return menuMapper.getButtonsByRoleIdAndCode(null,code); } /** @@ -444,20 +489,31 @@ /** * 鏍规嵁涓婚敭鑾峰彇鑿滃崟淇℃伅 * @param ids + * @param menuCode + * @param roleIds * @return */ @Override - public List<Menu> getMenuListById(List<String> ids,String parentId) { - LambdaQueryWrapper<Menu> wrapper = Wrappers.<Menu>query() - .lambda().eq(Menu::getCategory, "2") - .eq(Menu::getIsDeleted,BladeConstant.DB_NOT_DELETED); + public List<Menu> getMenuListByCode(List<String> ids,String menuCode,String roleIds){ + List<Menu> menuButtonList = null; if(VciBaseUtil.checkAdminTenant()){ - wrapper.eq(Menu::getParentId,parentId); + // 姝e父鎯呭喌涓嬫潵璇磋繖涓笉瀛樺湪涓虹┖鐨勬儏鍐� + // 鏌ヨ璇ヨ彍鍗曚笅鐨勬墍鏈夋寜閽� + menuButtonList = menuMapper.getButtonByIdsOrByParentCode(null, menuCode, null); }else { - wrapper.in(Menu::getId, ids); + menuButtonList = menuMapper.getButtonByIdsOrByParentCode(roleIds,null,ids); } - List<Menu> menuList = this.list(wrapper); - return menuList; + return menuButtonList; + } + + /** + * 鏍规嵁瑙掕壊id鑾峰彇宸叉巿鏉冪殑鎸夐挳淇℃伅 + * @param roleId + * @return + */ + @Override + public List<Menu> getButtonsByRoleId(String roleId, String menuCode) { + return menuMapper.getButtonsByRoleIdAndCode(roleId,menuCode); } } diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/RoleServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/RoleServiceImpl.java index 77a94c9..b145ad3 100644 --- a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/RoleServiceImpl.java +++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/RoleServiceImpl.java @@ -21,6 +21,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.vci.ubcs.system.entity.Menu; import com.vci.ubcs.system.mapper.RoleMapper; import com.vci.ubcs.system.service.IMenuService; import com.vci.ubcs.system.service.IRoleMenuService; diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/MenuMapper.xml b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/MenuMapper.xml index df3421c..8316436 100644 --- a/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/MenuMapper.xml +++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/MenuMapper.xml @@ -219,30 +219,22 @@ ) menu ORDER BY sort </select> - <select id="getButtonByParentCode" resultMap="menuResultMap"> - SELECT - id, - parent_id, - code, - name, - alias, - PATH, - SOURCE, - ACTION, - sort - FROM - PL_SYS_MENU - WHERE - "CATEGORY" = '2' - AND IS_DELETED = 0 - AND PARENT_ID IN ( - SELECT - ID - FROM - PL_SYS_MENU - WHERE - CODE = #{code}) - ORDER BY SORT + <select id="getButtonsByRoleIdAndCode" resultMap="menuResultMap"> + SELECT pm.* + FROM PL_SYS_MENU ps, + PL_SYS_MENU pm, + PL_ORG_ROLE_MENU prom + WHERE ps.ID = prom.MENU_ID + <if test="roleId != null and roleId != ''"> + AND prom.ROLE_ID = #{roleId} + </if> + AND ps."CATEGORY" = 1 + AND pm.IS_DELETED = 0 + <if test="code != null and code != ''"> + AND ps.ID = pm.PARENT_ID + AND ps.CODE = #{code} + </if> + ORDER BY pm.SORT ASC </select> <select id="grantTree" resultMap="treeNodeResultMap"> @@ -513,15 +505,40 @@ and ps.category = 1 and ps.CODE = #{btmType} and ps.ID = pm.PARENT_ID - <if test="roleIds != null and roleIds != ''"> - and ps.ID in ( - SELECT menu_id FROM pl_org_role_menu WHERE role_id IN - <foreach collection="roleIds" index="index" item="item" open="(" separator="," close=")"> - #{item} - </foreach> - ) - </if> + <if test="roleIds != null and roleIds != ''"> + and ps.ID in ( + SELECT menu_id FROM pl_org_role_menu WHERE role_id IN + <foreach collection="roleIds" index="index" item="item" open="(" separator="," close=")"> + #{item} + </foreach> + ) + </if> order by pm.sort asc </select> + <select id="getButtonByIdsOrByParentCode" resultMap="menuResultMap"> + SELECT pm.* + FROM PL_SYS_MENU ps, + PL_SYS_MENU pm, + PL_ORG_ROLE_MENU prom + WHERE ps.ID = prom.MENU_ID + <if test="roleIds != null and roleIds != ''"> + AND prom.ROLE_ID in (#{roleIds}) + </if> + AND ps."CATEGORY" = 1 + AND pm.IS_DELETED = 0 + <if test="code != null and code != ''"> + AND ps.ID = pm.PARENT_ID + AND ps.CODE = #{code} + </if> + <if test="ids != null and ids != ''"> + AND ps.ID IN ( + <foreach collection="ids" index="index" item="item" open="(" separator="," close=")"> + #{item} + </foreach> + ) + </if> + ORDER BY pm.SORT ASC + </select> + </mapper> -- Gitblit v1.9.3