SpringBoot打造企业级进销存储系统 第五讲

package com.java1234.repository;import com.java1234.entity.Menu;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;import java.util.List;/*** 菜单=Repository接口*/
public interface MenuRepository extends JpaRepository<Menu,Integer> {/*** 根据父节点以及用户角色id查询子节点* @param parentId* @param roleId* @return*/@Query(value = "SELECT * FROM t_menu WHERE p_id=?1 AND id IN (SELECT menu_id FROM t_role_menu WHERE role_id=?2)",nativeQuery = true)public List<Menu> findByParentIdAndRoleId(int parentId,int roleId);
}
package com.java1234.service;import com.java1234.entity.Menu;import java.util.List;/*** 权限菜单Service接口*/
public interface MenuService {/*** 根据父节点以及用户角色id查询子节点* @param parentId* @param roleId* @return*/public List<Menu> findByParentIdAndRoleId(int parentId, int roleId);
}
package com.java1234.service.impl;import com.java1234.entity.Menu;
import com.java1234.repository.MenuRepository;
import com.java1234.service.MenuService;
import org.springframework.stereotype.Service;import javax.annotation.Resource;
import java.util.List;/*** 权限菜单Service实现类*/
@Service("menuService")
public class MenuServiceImpl implements MenuService {@Resourceprivate MenuRepository menuRepository;@Overridepublic List<Menu> findByParentIdAndRoleId(int parentId, int roleId) {return menuRepository.findByParentIdAndRoleId(parentId,roleId);}
}
package com.java1234.controller;import java.util.HashMap;
import java.util.List;
import java.util.Map;import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import javax.validation.Valid;import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.java1234.entity.Menu;
import com.java1234.service.MenuService;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import com.java1234.entity.Role;
import com.java1234.entity.User;
import com.java1234.service.RoleService;
import com.java1234.service.UserService;
import com.java1234.util.StringUtil;/*** 用户Controller* @author Administrator**/
@Controller
@RequestMapping("/user")
public class UserController {@Resourceprivate UserService userService;@Resourceprivate RoleService roleService;@Resourceprivate MenuService menuService;/*** 用户登录判断* @param imageCode* @param user* @param bindingResult* @param session* @return*/@ResponseBody@RequestMapping("/login")public Map<String,Object> login(String imageCode,@Valid User user,BindingResult bindingResult,HttpSession session){Map<String,Object> map=new HashMap<String,Object>();if(StringUtil.isEmpty(imageCode)){map.put("success", false);map.put("errorInfo", "请输入验证码!");return map;}if(!session.getAttribute("checkcode").equals(imageCode)){map.put("success", false);map.put("errorInfo", "验证码输入错误!");return map;}if(bindingResult.hasErrors()){map.put("success", false);map.put("errorInfo", bindingResult.getFieldError().getDefaultMessage());return map;}Subject subject=SecurityUtils.getSubject();UsernamePasswordToken token=new UsernamePasswordToken(user.getUserName(), user.getPassword());try{subject.login(token);String userName=(String) SecurityUtils.getSubject().getPrincipal();User currentUser=userService.findByUserName(userName);session.setAttribute("currentUser", currentUser);List<Role> roleList=roleService.findByUserId(currentUser.getId());map.put("roleList", roleList);map.put("roleSize", roleList.size());map.put("success", true);return map;}catch(Exception e){e.printStackTrace();map.put("success", false);map.put("errorInfo", "用户名或者密码错误!");return map;}}/*** 保存角色信息* @param roleId* @param session* @return* @throws Exception*/@ResponseBody@RequestMapping("/saveRole")public Map<String,Object> saveRole(Integer roleId,HttpSession session)throws Exception{Map<String,Object> map=new HashMap<String,Object>();Role currentRole=roleService.findById(roleId);session.setAttribute("currentRole", currentRole);map.put("success", true);return map;}/*** 加载当前用户信息* @param session* @return* @throws Exception*/@ResponseBody@GetMapping("/loadUserInfo")public String loadUserInfo(HttpSession session)throws Exception{User currentUser=(User) session.getAttribute("currentUser");Role currentRole=(Role) session.getAttribute("currentRole");return "欢迎您:"+currentUser.getTrueName()+"&nbsp;[&nbsp;"+currentRole.getName()+"&nbsp;]";}/*** 加载权限菜单* @param session* @param parentId* @return* @throws Exception*/@ResponseBody@PostMapping("/loadMenuInfo")public String loadMenuInfo(HttpSession session,Integer parentId)throws Exception{Role currentRole=(Role) session.getAttribute("currentRole");return getAllMenuByParentId(parentId,currentRole.getId()).toString();}/*** 获取所有菜单信息* @param parentId* @param roleId* @return*/public JsonArray getAllMenuByParentId(Integer parentId,Integer roleId){JsonArray jsonArray=this.getMenuByParentId(parentId, roleId);for(int i=0;i<jsonArray.size();i++){JsonObject jsonObject=(JsonObject) jsonArray.get(i);if("open".equals(jsonObject.get("state").getAsString())){continue;}else{jsonObject.add("children", getAllMenuByParentId(jsonObject.get("id").getAsInt(), roleId));}}return jsonArray;}/*** 根据父节点和用户角色Id查询菜单* @param parentId* @param roleId* @return*/public JsonArray getMenuByParentId(Integer parentId,Integer roleId){List<Menu> menuList=menuService.findByParentIdAndRoleId(parentId, roleId);JsonArray jsonArray=new JsonArray();for(Menu menu:menuList){JsonObject jsonObject=new JsonObject();jsonObject.addProperty("id", menu.getId()); // 节点IdjsonObject.addProperty("text", menu.getName()); // 节点名称if(menu.getState()==1){jsonObject.addProperty("state", "closed"); // 根节点}else{jsonObject.addProperty("state", "open"); // 叶子节点}jsonObject.addProperty("iconCls", menu.getIcon()); // 节点图标JsonObject attributeObject=new JsonObject(); // 扩展属性attributeObject.addProperty("url", menu.getUrl()); // 菜单请求地址jsonObject.add("attributes", attributeObject);jsonArray.add(jsonObject);}return jsonArray;}
}

在这里插入图片描述

$("#tree").tree({lines:true,url:'/user/loadMenuInfo?parentId=-1',onLoadSuccess:function(){$("#tree").tree("expandAll");}});
    <ul id="tree" class="easyui-tree" style="padding: 10px"></ul>
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>后台管理-进销存管理系统</title><link rel="stylesheet" type="text/css" href="/static/jquery-easyui-1.3.3/themes/default/easyui.css"></link><link rel="stylesheet" type="text/css" href="/static/jquery-easyui-1.3.3/themes/icon.css"></link><style type="text/css">.clock {float:right;width: 300px;height: 30px;padding-left: 20px;color: rgb(0, 76, 126);background: url(/static/images/clock.gif) no-repeat;font-size: 14px;}.userInfo{float:left;padding-left: 20px;padding-top: 30px;}</style><script type="text/javascript" src="/static/jquery-easyui-1.3.3/jquery.min.js"></script><script type="text/javascript" src="/static/jquery-easyui-1.3.3/jquery.easyui.min.js"></script><script type="text/javascript" src="/static/jquery-easyui-1.3.3/locale/easyui-lang-zh_CN.js"></script><script type="text/javascript">function showTime(){var date = new Date();this.year = date.getFullYear();this.month = date.getMonth() + 1;this.date = date.getDate();this.day = new Array("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六")[date.getDay()];this.hour = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();this.minute = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();this.second = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();$("#clock").text("现在是:" + this.year + "年" + this.month + "月" + this.date + "日 " + this.hour + ":" + this.minute + ":" + this.second + " " + this.day);}$(document).ready(function() {window.setInterval("showTime()",1000);$("#userInfo").load("/user/loadUserInfo"); // 加载用户信息$("#tree").tree({lines:true,url:'/user/loadMenuInfo?parentId=-1',onLoadSuccess:function(){$("#tree").tree("expandAll");}});});</script>
</head>
<body class="easyui-layout">
<div region="north" style="height: 72px;"><table width="100%" height="100%" border="0" cellspacing="0" cellpadding="0"><tr><td width="381px" style="background:url(/static/images/top_left.jpg)"></td><td style="background:url(/static/images/top_center.jpg)"><div id="userInfo" class="userInfo"></div></td><td valign="bottom" width="544px" style="background:url(/static/images/top_right.jpg)"><div id="clock" class="clock"></div></td></tr></table>
</div><div region="center">
</div><div region="west" style="width: 200px" title="导航菜单" split="true" iconCls="icon-navigation"><ul id="tree" class="easyui-tree" style="padding: 10px"></ul></div><div region="south" style="height: 30px;padding: 5px" align="center">Copyright © 2012-2017 南通小锋网络科技有限公司  版权所有
</div></body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/544166.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Arduino IDE配置ESP8266开发环境

一、配置步骤 在Arduino IDE中配置ESP8266开发环境的详细步骤如下&#xff1a; 1.打开Arduino IDE&#xff0c;依次点击“文件”->“首选项”&#xff0c;在“附加开发板管理器网址”一栏添加ESP8266开发板的网址。常用的网址是&#xff1a; http://arduino.esp8266.com/s…

python3GUI--qt仿暴风影音视频播放器By:PyQt5(附下载地址)

文章目录 一&#xff0e;前言二&#xff0e;环境1.开发环境2.打包环境3.运行环境 三&#xff0e;软件截图1.启动页2.视频播放3.音频播放4.其他1.托盘2.对话框 四&#xff0e;功能总览五&#xff0e;代码展示&心得1.UI设计2.如何防止卡顿3.如何自定义组件 五&#xff0e;思考…

劲仔食品三年倍增,抢先打响鹌鹑蛋“健康”属性品牌之争?

如果说&#xff0c;进入2024年后&#xff0c;在股价继续陷入回调状态的食品板块中有个股走势表现相对亮眼&#xff0c;那么劲仔食品必是其中之一。 从去年发布2023年三季度业绩公告以来&#xff0c;其强劲的业绩表现就带动了股价走出小趋势。2023年10月23日至今2024年3月13日收…

「❤️万文总结 时光回忆录❤️」那年,我在北京邮电大学计算机学院求学的日子

文章目录 关于我 | About Me梦绕西土城&#xff0c;邮情涌流 | Dreams and Connections in Haidian 北邮求学记 | My Days at BUPT岁月如歌&#xff0c;追忆往昔 | Reminiscing the Fleeting Years新篇章&#xff1a;班级与环境 | New Class, New Surroundings高压与挑战&#…

2024年新算法:基于苦鱼优化算法BFO的城市三维无人机路径规划(复杂地形三维航迹路径规划)

摘要&#xff1a;本文提出了一种利用苦鱼优化算法&#xff08;Bitterling fish optimization&#xff0c;BFO&#xff09;来解决城市环境下无人机三维路径规划问题的方法。这种方法将复杂的无人机航迹规划任务转化为一个优化问题&#xff0c;然后运用苦鱼优化算法BFO来解决这个…

mydoor

目录 提交与回退 关键文件的区别 提交与回退 在新版本提交 之前&#xff0c;进行了各个版本的自己的备份 &#xff1b; 且进行了将new -> real web目录的更新&#xff08;及数据库的更新&#xff09;&#xff1b; 当进行回退时&#xff0c;进行了 real -> real web目录…

如何在IDEA 中设置背景颜色

在 IntelliJ IDEA 中设置背景颜色&#xff0c;你可以按照以下步骤操作&#xff1a; 1、打开 IDEA 软件&#xff0c;点击左上角的【File】选项。 2、在下拉菜单中&#xff0c;点击【Settings】&#xff08;或【Preferences】如果你使用的是 macOS&#xff09;。 3、在打开的…

短视频矩阵系统/短视频矩阵系统技术saas研发

短视频矩阵系统SaaS研发是一个复杂且需要技术专业知识的工作。以下是一些关键步骤和建议&#xff0c;帮助你开发一个成功的短视频矩阵系统SaaS&#xff1a; 1. 明确需求&#xff1a;首先&#xff0c;你需要明确你的短视频矩阵系统的具体需求&#xff0c;例如用户规模、视频内容…

Arthas使用案例(二)

说明&#xff1a;记录一次使用Arthas排查测试环境正在运行的项目BUG&#xff1b; 场景 有一个定时任务&#xff0c;该定时任务是定时去拉取某FTP服务器上的文件&#xff0c;进行备份、读取、解析等一系列操作。 而现在&#xff0c;因为开发环境是Windows&#xff0c; 线上项…

2024批量导出公众号所有文章生成目录,这下方便找文章了

公众号历史文章太多&#xff0c;手机上翻起来太费劲&#xff0c;怎么快速找到某一天的文章呢&#xff1f;比如深圳卫健委这个号从2014到2024发布近万篇文章。 公众号历史文章太多&#xff0c;手机上翻起来太费劲&#xff0c;怎么快速找到某一天的文章&#xff1f; 如果要找2020…

腾讯云2核4g服务器能支持多少人访问?没搞错吧

腾讯云轻量2核4G5M带宽服务器支持多少人在线访问&#xff1f;5M带宽下载速度峰值可达640KB/秒&#xff0c;阿腾云以搭建网站为例&#xff0c;假设优化后平均大小为60KB&#xff0c;则5M带宽可支撑10个用户同时在1秒内打开网站&#xff0c;并发数为10&#xff0c;经阿腾云测试&a…

vue学习笔记26-插槽Slots

插槽Slots 组件接收模板内容&#xff08;html结构&#xff09;&#xff0c;在某些场景中我们想要为子组件传递一些模板片段。让子组件在它们的组件中渲染这些片段 将子组件在父组件引用后&#xff0c;比以往更改一下,将<子组件名/>➡️<子组件名></子组件名&g…