Jelajahi Sumber

fix(menu): 修复菜单"显示"功能不生效 — Layout改用userMenus、el-switch绑定Integer、父链补全检查visible

Sisyphus 14 jam lalu
induk
melakukan
3472fc9f52

+ 12 - 3
cfc-backend/src/main/java/com/etotem/cfc/service/SysMenuService.java

@@ -137,17 +137,26 @@ public class SysMenuService extends ServiceImpl<SysMenuMapper, SysMenu> {
         Set<Long> included = new HashSet<>();
         for (SysMenu m : all) {
             if (authed.contains(m.getId()) && Integer.valueOf(1).equals(m.getVisible())) {
-                // 向上补全父级链
+                // 向上补全父级链,要求路径上所有祖先节点均 visible=1
+                boolean chainVisible = true;
                 Long cur = m.getId();
-                while (cur != null && !included.contains(cur) && idSet.contains(cur)) {
-                    included.add(cur);
+                List<Long> chainNodes = new ArrayList<>();
+                while (cur != null && idSet.contains(cur)) {
                     SysMenu node = byId.get(cur);
+                    if (!Integer.valueOf(1).equals(node.getVisible())) {
+                        chainVisible = false;
+                        break;
+                    }
+                    chainNodes.add(cur);
                     Long pid = node.getParentId() == null ? 0L : node.getParentId();
                     if (pid == 0L || !idSet.contains(pid)) {
                         break;
                     }
                     cur = pid;
                 }
+                if (chainVisible) {
+                    included.addAll(chainNodes);
+                }
             }
         }
 

+ 2 - 2
cfc-web/src/views/Layout.vue

@@ -158,7 +158,7 @@ import { updateAdminInfo } from '@/api/admin'
 import { getMyInviteCode } from '@/api/guide'
 import { getUnreadMessageCount } from '@/api/teacherMessage'
 import { getEffectivePermissions, hasPermission, getRoleLabel } from '@/utils/permissions'
-import axios from 'axios'
+import { getUserMenus } from '@/api/menu'
 
 export default {
   data() {
@@ -508,7 +508,7 @@ export default {
     },
     async fetchMenu() {
       try {
-        var res = await axios.post('/api/admin/menu/tree')
+        var res = await getUserMenus()
         if (res.data && res.data.code === 200 && res.data.data && res.data.data.length > 0) {
           this.menuItems = this.buildMenuItems(res.data.data)
         }

+ 2 - 2
cfc-web/src/views/admin/MenuManage.vue

@@ -49,7 +49,7 @@
           <el-table-column prop="sort" label="排序" width="80" align="center"></el-table-column>
           <el-table-column prop="visible" label="显示" width="80" align="center">
             <template slot-scope="scope">
-              <el-switch v-model="scope.row.visible" size="mini" @change="handleToggleVisible(scope.row)"></el-switch>
+              <el-switch v-model="scope.row.visible" :active-value="1" :inactive-value="0" size="mini" @change="handleToggleVisible(scope.row)"></el-switch>
             </template>
           </el-table-column>
           <el-table-column label="操作" width="320" fixed="right">
@@ -172,7 +172,7 @@
           <el-input-number v-model="menuForm.sort" :min="0" style="width:100%"></el-input-number>
         </el-form-item>
         <el-form-item label="是否显示">
-          <el-switch v-model="menuForm.visible"></el-switch>
+          <el-switch v-model="menuForm.visible" :active-value="1" :inactive-value="0"></el-switch>
         </el-form-item>
       </el-form>
       <div slot="footer">