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