最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot+layuimini實(shí)現(xiàn)左側(cè)菜單動(dòng)態(tài)展示的示例代碼

 更新時(shí)間:2024年04月23日 11:43:48   作者:洛洛不覺  
Layuimini是Layui的升級(jí)版,它是專業(yè)做后臺(tái)頁面的框架,而且是適合PC端和移動(dòng)端,以下地址可以在PC端顯示,也可以在手機(jī)上顯示,只不過會(huì)做自適應(yīng),本文將給大家介紹了SpringBoot+layuimini實(shí)現(xiàn)左側(cè)菜單動(dòng)態(tài)展示的方法,需要的朋友可以參考下

layuimini左側(cè)菜單動(dòng)態(tài)顯示

首先我們看一下layuimini的原有菜單顯示格式

{
  "homeInfo": {
    "title": "首頁",
    "href": "page/welcome-2.html?t=2"
  },
  "logoInfo": {
    "title": "LAYUI MINI",
    "image": "images/logo.png",
    "href": ""
  },
  "menuInfo": [
    {
      "title": "系統(tǒng)管理",
      "icon": "fa fa-address-book",
      "href": "",
      "target": "_self",
      "child": [
        {
          "title": "權(quán)限管理",
          "href": "",
          "icon": "fa fa-home",
          "target": "_self",
          "child": [
            {
              "title": "賬戶信息管理",
              "href": "page/account.html",
              "icon": "fa fa-tachometer",
              "target": "_self"
            },
            {
              "title": "主頁二",
              "href": "page/welcome-2.html",
              "icon": "fa fa-tachometer",
              "target": "_self"
            },
            {
              "title": "三",
              "href": "page/welcome-3.html",
              "icon": "fa fa-tachometer",
              "target": "_self"
            }
          ]
        }
      ]
    }
  ]
}

接下來是HTML顯示頁面

var options = {
            //后端動(dòng)態(tài)生成的接口
            // iniUrl: "/auth/getResources",    // 初始化接口
            //原有的接口鏈接
            iniUrl:"api/init.json",
            clearUrl: "api/clear.json", // 緩存清理接口
            urlHashLocation: true,      // 是否打開hash定位
            bgColorDefault: false,      // 主題默認(rèn)配置
            multiModule: false,          // 是否開啟多模塊
            menuChildOpen: false,       // 是否默認(rèn)展開菜單
            loadingTime: 0,             // 初始化加載時(shí)間
            pageAnim: true,             // iframe窗口動(dòng)畫
            maxTabNum: 20,              // 最大的tab打開數(shù)量
        };
        miniAdmin.render(options);

這是layuimini給出的左側(cè)菜單

在這里插入圖片描述

接下來開始我們的改變,將靜態(tài)菜單改為動(dòng)態(tài)菜單

1.數(shù)據(jù)庫準(zhǔn)備,這里我們需要四張數(shù)據(jù)庫表

在這里插入圖片描述

sys_role_resource

在這里插入圖片描述

在這里插入圖片描述

2.sys_role

在這里插入圖片描述

在這里插入圖片描述

3.sys_user

在這里插入圖片描述

在這里插入圖片描述

4.sys_resource

在這里插入圖片描述

在這里插入圖片描述

后端代碼塊實(shí)現(xiàn)(后端主要需要的實(shí)現(xiàn)類就只要,資源和角色資源兩個(gè)類即可)

1.ResourceEntity

package com.example.erp_project.entity;

import lombok.Data;

import java.util.List;

/**
 * @author Lolo don‘t feel
 */
@Data
public class ResourceEntity {
    //資源id編號(hào)
    private Integer resourceId;
    //資源名稱
    private String title;
    //資源圖標(biāo)
    private String icon;
    //頁面資源跳轉(zhuǎn)鏈接
    private String href;
    //父級(jí)資源
    private Integer parentId;
    //排序
    private Integer  sort;
    //ztree會(huì)檢查返回的數(shù)據(jù)中有沒有 checked 屬性 如果為true就會(huì)把這個(gè)節(jié)點(diǎn)設(shè)為選中狀態(tài)
    private String checked;
    //子菜單,這里可以使用vo類來代替
    private List<ResourceEntity> child;

}

2.RoleResourceEntity

package com.example.erp_project.entity;

import lombok.Data;

import java.util.List;

/**
 * @author Lolo don‘t feel
 */
@Data
public class RoleResourceEntity {
    //id編號(hào)
    private Integer roleResourceId;
    //權(quán)限id
    private Integer roleId;
    //資源id
    private Integer resourceId;

}

3.loginConreoller

在這里插入圖片描述

  /*
    * 根據(jù)角色id獲取對(duì)應(yīng)的權(quán)限
    * */
    @GetMapping("/getResources")
    // 定義一個(gè)方法,用于獲取資源信息
    public Map<String, Object> getResources(HttpSession session) {
        // 創(chuàng)建一個(gè)map對(duì)象,用于存儲(chǔ)資源信息
        Map<String, Object> map = new HashMap<>();
        // 創(chuàng)建一個(gè)homeInfo對(duì)象,用于存儲(chǔ)首頁信息
        Map<String, Object> homeInfo = new HashMap<>();
        homeInfo.put("title", "首頁");
        homeInfo.put("icon", "fa fa-home");
        homeInfo.put("href", "welcome");
        // 將homeInfo對(duì)象添加到map中
        map.put("homeInfo", homeInfo);
        // 創(chuàng)建一個(gè)logoInfo對(duì)象,用于存儲(chǔ)logo信息
        Map<String, Object> logoInfo = new HashMap<>();
        logoInfo.put("title", "暖意ERP");
        logoInfo.put("image", "images/logo.png");
        logoInfo.put("href", "");
        // 將logoInfo對(duì)象添加到map中
        map.put("logoInfo", logoInfo);
        // 創(chuàng)建一個(gè)menuInfo列表,用于存儲(chǔ)菜單信息
        List<Object> menuInfo = new ArrayList<>();
        // 獲取當(dāng)前登錄人保存的getRoleId信息
        Integer roleId = (Integer) session.getAttribute("roleId");
        // 打印測試當(dāng)前登陸的角色id是多少是否與數(shù)據(jù)庫中id相對(duì)應(yīng)。
        System.out.println(roleId);
        // 根據(jù)roleId查詢后面對(duì)應(yīng)的資源菜單
        List<ResourceEntity> resource = roleResourceService.getAllResourcesByRoleId(roleId);
        // 測試查詢到的菜單
        System.out.println(resource);
        // 遍歷資源列表,將資源添加到menuInfo中
        resource.forEach(t -> {
            menuInfo.add(t);
            System.out.println(t);
        });
        // 將menuInfo添加到map中
        map.put("menuInfo", menuInfo);
        // 返回map對(duì)象
        return map;
    }

4.建立service接口

//根據(jù)角色id查詢資源數(shù)據(jù)
  List<ResourceEntity> getAllResourcesByRoleId(Integer roleId);

5.service實(shí)現(xiàn)類

import com.example.erp_project.entity.RoleResourceEntity;
import com.example.erp_project.mapper.RoleResourceMapper;
import com.example.erp_project.service.RoleResourceService;
import org.springframework.stereotype.Service;

import java.util.*;

/**
 * @author Lolo don‘t feel
 */
@Service
public class RoleResourceServiceImpl implements RoleResourceService {

    // 定義一個(gè)私有的RoleResourceMapper對(duì)象,用于操作角色資源映射表
    private final RoleResourceMapper roleResourceMapper;

    // 構(gòu)造函數(shù),接收一個(gè)RoleResourceMapper對(duì)象作為參數(shù),并將其賦值給當(dāng)前對(duì)象的roleResourceMapper屬性
    public RoleResourceServiceImpl(RoleResourceMapper roleResourceMapper) {
        this.roleResourceMapper = roleResourceMapper;
    }


    @Override
    // 獲取指定角色I(xiàn)D的所有資源列表
    public List<ResourceEntity> getAllResourcesByRoleId(Integer roleId) {
        // 這里返回的resourceEntityList 沒有實(shí)現(xiàn)排序
        // 以后 可以考慮下 返回 resourceEntityList之前 根據(jù)resource對(duì)象的sort進(jìn)行排序
        // 那么左側(cè)顯示的菜單就可以排序了
        List<ResourceEntity> resourceEntityList = new ArrayList<>();
        // roleResourceEntity里面就是一個(gè)中間表 兩個(gè)字段 roleId resourceId 關(guān)聯(lián)起來
        List<RoleResourceEntity> roleResourceEntities = roleResourceMapper.selectRoleResourceByRoleId(roleId);
        System.out.println("impl輸出測試目錄"+roleResourceEntities);
        // 新建一個(gè)對(duì)象數(shù)組繼續(xù)寧條件判斷資源
        // 用for循環(huán)遍歷,如果i=0且小于資源則菜單資源進(jìn)行想相加在循環(huán)
        if (roleResourceEntities != null && roleResourceEntities.size() > 0) {
            List<ResourceEntity> noChildrenResourceEntities = new ArrayList<>();
            // 進(jìn)行資源判斷是否為空或者大于0
            for (int i = 0; i < roleResourceEntities.size(); i++) {
                // 獲取roleResource(資源中間表)中的resourceId(資源id)
                ResourceEntity resourceEntity = roleResourceMapper.getResourceById(roleResourceEntities.get(i).getResourceId());
                // 就是根據(jù)這個(gè)登陸者的roleId 所擁有的資源取出來
                noChildrenResourceEntities.add(resourceEntity);
            }
            for (int i = 0; i < noChildrenResourceEntities.size(); i++) {
                if (noChildrenResourceEntities.get(i).getParentId() == 0) {
                    // 說明這個(gè)菜單是一級(jí)菜單 沒有上一級(jí)菜單
                    // 如果這里不為0 表示這個(gè)菜單是二級(jí)菜單 或者三級(jí)菜單 ParentId對(duì)應(yīng)了屬于哪個(gè)上級(jí)菜
                    ResourceEntity resourceEntity = new ResourceEntity();
                    // 把這個(gè)一級(jí)菜單取出來
                    resourceEntity = noChildrenResourceEntities.get(i);
                    List<ResourceEntity> resourceEntities = new ArrayList<>();
                    // for把所有菜單過一遍
                    for (int j = 0; j < noChildrenResourceEntities.size(); j++)
                    {
                        // 如果有菜單屬于這個(gè)一級(jí)菜單
                        if (Objects.equals(noChildrenResourceEntities.get(j).getParentId(), noChildrenResourceEntities.get(i).getResourceId())) {
                            ResourceEntity resourceEntity2 = new ResourceEntity();
                            // 取出這個(gè)二級(jí)菜單
                            resourceEntity2 = noChildrenResourceEntities.get(j);
                            resourceEntities.add(resourceEntity2);
                        }
                    }
                    resourceEntity.setChild(resourceEntities);
                    resourceEntityList.add(resourceEntity);
                }
            }
        }
        // 下面是根據(jù)資源的sort進(jìn)行排序 升序排列 這樣左側(cè)菜單就會(huì)按照升序排列
        Collections.sort(resourceEntityList, new Comparator<ResourceEntity>() {
            @Override
            public int compare(ResourceEntity o1, ResourceEntity o2) {
                return o1.getSort().compareTo(o2.getSort());
            }
        });
        return resourceEntityList;
    }


}

6.mapper接口

public interface RoleResourceMapper {
    List<RoleResourceEntity> selectRoleResourceByRoleId(Integer roleId);
    }

7.mybatis

 <select id="selectRoleResourceByRoleId" resultType="com.example.erp_project.entity.RoleResourceEntity">
        select *
        from sys_role_resource
        where roleId = #{roleId}
    </select>

8.前端頁面代碼修改

在這里插入圖片描述

9.效果圖

在這里插入圖片描述

以上就是SpringBoot+layuimini實(shí)現(xiàn)左側(cè)菜單動(dòng)態(tài)展示的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot layuimini菜單動(dòng)態(tài)展示的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 解決ApplicationContext獲取不到Bean的問題

    解決ApplicationContext獲取不到Bean的問題

    這篇文章主要介紹了解決ApplicationContext獲取不到Bean的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • 老生常談比較排序之歸并排序(遞歸)

    老生常談比較排序之歸并排序(遞歸)

    下面小編就為大家?guī)硪黄仙U劚容^排序之歸并排序(遞歸)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06
  • 在Java生產(chǎn)環(huán)境下進(jìn)行性能監(jiān)控與調(diào)優(yōu)的詳細(xì)過程

    在Java生產(chǎn)環(huán)境下進(jìn)行性能監(jiān)控與調(diào)優(yōu)的詳細(xì)過程

    在Java生產(chǎn)環(huán)境下進(jìn)行性能監(jiān)控與調(diào)優(yōu)是一個(gè)復(fù)雜但重要的過程,它涉及到多個(gè)方面,包括代碼分析、JVM監(jiān)控、線程管理、垃圾收集優(yōu)化、內(nèi)存管理、數(shù)據(jù)庫交互等,下面我將提供一個(gè)詳細(xì)的概述和示例代碼,需要的朋友可以參考下
    2025-02-02
  • 詳解java爬蟲jsoup解析多空格class數(shù)據(jù)

    詳解java爬蟲jsoup解析多空格class數(shù)據(jù)

    在本篇內(nèi)容中小編給大家分享了java爬蟲jsoup怎么解析多空格class數(shù)據(jù)的方法和技巧,需要的朋友們跟著學(xué)習(xí)下。
    2018-12-12
  • java 中同步、異步、阻塞和非阻塞區(qū)別詳解

    java 中同步、異步、阻塞和非阻塞區(qū)別詳解

    這篇文章主要介紹了java 中同步、異步、阻塞和非阻塞區(qū)別詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • JVM Client和Server端有什么區(qū)別

    JVM Client和Server端有什么區(qū)別

    這篇文章主要介紹了JVM Client和Server端有什么區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 快速搭建SSM框架(Maven)五步曲的方法步驟

    快速搭建SSM框架(Maven)五步曲的方法步驟

    這篇文章主要介紹了快速搭建SSM框架(Maven)五步曲的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Spring的三級(jí)緩存解決循環(huán)依賴問題

    Spring的三級(jí)緩存解決循環(huán)依賴問題

    這篇文章主要介紹了Spring的三級(jí)緩存解決循環(huán)依賴問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • SpringBoot 裝飾器@TableField原理解析

    SpringBoot 裝飾器@TableField原理解析

    本文解析了MyBatis-Plus的@TableField注解,用于非主鍵字段與數(shù)據(jù)庫列的映射及行為控制,涵蓋自動(dòng)填充、樂觀鎖、多租戶等企業(yè)級(jí)功能,提供使用技巧、常見問題及示例代碼,感興趣的朋友跟隨小編一起看看吧
    2025-09-09
  • SpringMVC結(jié)合模板模式實(shí)現(xiàn)MyBatisPlus傳遞嵌套JSON數(shù)據(jù)

    SpringMVC結(jié)合模板模式實(shí)現(xiàn)MyBatisPlus傳遞嵌套JSON數(shù)據(jù)

    我們經(jīng)常會(huì)遇到需要傳遞對(duì)象的場景,有時(shí)候,我們需要將一個(gè)對(duì)象的數(shù)據(jù)傳遞給另一個(gè)對(duì)象進(jìn)行處理,但是又不希望直接暴露對(duì)象的內(nèi)部結(jié)構(gòu)和實(shí)現(xiàn)細(xì)節(jié),所以本文給大家介紹了SpringMVC結(jié)合模板模式實(shí)現(xiàn)MyBatisPlus傳遞嵌套JSON數(shù)據(jù),需要的朋友可以參考下
    2024-03-03

最新評(píng)論

卢湾区| 和静县| 辉南县| 共和县| 聊城市| 石渠县| 吴旗县| 中江县| 宁武县| 锡林郭勒盟| 宁波市| 桂东县| 鹿邑县| 芜湖市| 化德县| 西贡区| 镇原县| 浏阳市| 绥芬河市| 巴林左旗| 新密市| 南阳市| 耒阳市| 韶山市| 岳普湖县| 邵武市| 尼玛县| 左云县| 抚州市| 汝城县| 永平县| 龙山县| 河西区| 巴东县| 博罗县| 九龙县| 子长县| 澄江县| 大足县| 罗平县| 沁阳市|