提交 3ab7fd04 编写于 作者: X xiongchun

(1)完善了直接访问静态html页面时的权限控制逻辑。

(2)在LayUI前端框架下实现了根据权限数据动态生成主页左侧导航菜单。
上级 5a6af60e
......@@ -30,6 +30,12 @@ public class TreeNodeVO implements Serializable {
// 节点复选框选中状态
private Boolean checked;
//节点图标样式类
private String icon;
//URL链接
private String url;
// 子孙节点集合
private List<TreeNodeVO> children;
......
......@@ -8,7 +8,7 @@ import reactor.core.publisher.Mono;
/**
* 限流KEY字段生成
* <p> 返回的字符串将作为限流器在Redis中键名的一部分
* <p> 返回的字符串将作为限流器在Redis中键名的一部分
*
* @author xiongchun
*
......
package com.gitee.myclouds.system.common.vo;
import java.io.Serializable;
import java.util.List;
import lombok.Data;
import lombok.ToString;
import lombok.experimental.Accessors;
/**
* 功能菜单简单值对象(配合前端使用的数据结构)
*
* @author xiongchun
*
*/
@Data
@ToString
@Accessors(chain = true)
public class MenuVO implements Serializable{
private static final long serialVersionUID = 1L;
//菜单ID
private Integer id;
//父节点ID
private Integer parent_id;
//菜单名称
private String name;
//菜单访问路径
private String url;
//菜单图标
private String icon;
//子菜单
private List<MenuVO> subMenus;
}
package com.gitee.myclouds.system.module.home;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.gitee.myclouds.base.vo.OutVO;
import com.gitee.myclouds.common.wrapper.Dtos;
import com.gitee.myclouds.system.common.vo.MenuVO;
import cn.hutool.core.map.MapUtil;
/**
* 首页 服务发布
......@@ -28,14 +29,14 @@ public class HomeController {
private HomeService homeService;
/**
* 查询用户功能菜单列表
* 初始化首页框架
*
* @param inMap
* @return
*/
@PostMapping(value = "listMenus", produces = "application/json")
public List<MenuVO> listMenus(@RequestParam Map<String,Object> inMap){
return homeService.listMenus(Dtos.newDto(inMap));
@PostMapping(value = "init", produces = "application/json")
public OutVO init(@RequestBody Map<String,Object> inMap){
return homeService.init(MapUtil.getInt(inMap, "userId"));
}
/**
......
......@@ -5,15 +5,15 @@
<!-- 首页模块SQL映射 -->
<mapper namespace="sql.home">
<!-- 查询导航用的模块实体对象 -->
<select id="listMenus" parameterType="Dto" resultType="MenuVO">
SELECT id, parent_id, name, url, icon FROM my_module t1
<!-- 查询导航菜单 -->
<select id="listMenus" parameterType="Integer" resultType="TreeNodeVO">
SELECT id, parent_id AS pId, name AS label, url, icon FROM my_module t1
WHERE t1.is_enable = '1' AND t1.type = '1'
AND t1.id IN (
SELECT DISTINCT module_id FROM my_role_module WHERE role_id IN (
SELECT role_id FROM my_user_role WHERE user_id = #{user_id}
) )
ORDER BY t1.sort_no
ORDER BY t1.sort_no, t1.id
</select>
</mapper>
\ No newline at end of file
......@@ -8,13 +8,13 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.gitee.myclouds.base.exception.BizException;
import com.gitee.myclouds.base.helper.treebuiler.TreeBuilder;
import com.gitee.myclouds.base.helper.treebuiler.TreeNodeVO;
import com.gitee.myclouds.base.vo.OutVO;
import com.gitee.myclouds.common.util.MyCons;
import com.gitee.myclouds.common.util.MyListUtil;
import com.gitee.myclouds.common.util.MyUtil;
import com.gitee.myclouds.common.wrapper.Dto;
import com.gitee.myclouds.common.wrapper.Dtos;
import com.gitee.myclouds.system.common.vo.MenuVO;
import com.gitee.myclouds.system.domain.myuser.MyUserEntity;
import com.gitee.myclouds.system.domain.myuser.MyUserMapper;
......@@ -31,32 +31,22 @@ public class HomeService {
private SqlSession sqlSession;
@Autowired
private MyUserMapper myUserMapper;
/**
* 查询用户功能菜单列表
* 首页框架初始化数据
*
* @param inDto
* @return
*/
public List<MenuVO> listMenus(Dto inDto) {
List<MenuVO> menuVOs = sqlSession.selectList("sql.home.listMenus", inDto);
String ctxPath = inDto.getString("ctxPath");
for (MenuVO menuVO : menuVOs) {
String url = menuVO.getUrl();
if (MyUtil.isNotEmpty(url)) {
menuVO.setUrl(ctxPath + (StringUtils.startsWith(url, "/") ? url : "/" + url));
}
}
String jql = "SELECT * FROM :MyList WHERE parent_id = :parent_id";
List<MenuVO> level1Menus = MyListUtil.list(menuVOs, MenuVO.class, jql, Dtos.newDto("parent_id", 1));
for (MenuVO menuVO : level1Menus) {
List<MenuVO> level2Menus = MyListUtil.list(menuVOs, MenuVO.class, jql,
Dtos.newDto("parent_id", menuVO.getId()));
if (MyUtil.isNotEmpty(level2Menus)) {
menuVO.setSubMenus(level2Menus);
}
}
return level1Menus;
public OutVO init(Integer userId) {
OutVO outVO = new OutVO(0);
Dto dataDto = Dtos.newDto();
List<TreeNodeVO> leftNavMenus = sqlSession.selectList("sql.home.listMenus", userId);
leftNavMenus = new TreeBuilder(leftNavMenus).buildTree();
dataDto.put("leftNavMenus", leftNavMenus);
//dataDto.put(); maybe other data else
outVO.setData(dataDto);
return outVO;
}
/**
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册