package com.ruoyi.web.system; import java.util.Date; import java.util.List; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.ruoyi.common.config.RuoYiConfig; import com.ruoyi.common.constant.ShiroConstants; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.entity.SysMenu; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.text.Convert; import com.ruoyi.common.utils.CookieUtils; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.ServletUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.framework.shiro.service.SysPasswordService; import com.ruoyi.web.server.system.ISysConfigService; import com.ruoyi.web.server.system.ISysMenuService; /** * 首页 业务处理 * * @author ruoyi */ @Controller public class SysIndexController extends BaseController { @Autowired private ISysMenuService menuService; @Autowired private ISysConfigService configService; @Autowired private SysPasswordService passwordService; // 系统首页 @GetMapping("/index") public String index(ModelMap mmap) { // 取身份信息 SysUser user = getSysUser(); // 根据用户id取出菜单 List menus = menuService.selectMenusByUser(user); mmap.put("menus", menus); mmap.put("user", user); mmap.put("sideTheme", configService.selectConfigByKey("sys.index.sideTheme")); mmap.put("skinName", configService.selectConfigByKey("sys.index.skinName")); Boolean footer = Convert.toBool(configService.selectConfigByKey("sys.index.footer"), true); Boolean tagsView = Convert.toBool(configService.selectConfigByKey("sys.index.tagsView"), true); mmap.put("footer", footer); mmap.put("tagsView", tagsView); mmap.put("mainClass", contentMainClass(footer, tagsView)); mmap.put("copyrightYear", RuoYiConfig.getCopyrightYear()); mmap.put("demoEnabled", RuoYiConfig.isDemoEnabled()); mmap.put("isDefaultModifyPwd", initPasswordIsModify(user.getPwdUpdateDate())); mmap.put("isPasswordExpired", passwordIsExpiration(user.getPwdUpdateDate())); mmap.put("isMobile", ServletUtils.checkAgentIsMobile(ServletUtils.getRequest().getHeader("User-Agent"))); // 菜单导航显示风格 String menuStyle = configService.selectConfigByKey("sys.index.menuStyle"); // 移动端,默认使左侧导航菜单,否则取默认配置 String indexStyle = ServletUtils.checkAgentIsMobile(ServletUtils.getRequest().getHeader("User-Agent")) ? "index" : menuStyle; // 优先Cookie配置导航菜单 Cookie[] cookies = ServletUtils.getRequest().getCookies(); for (Cookie cookie : cookies) { if (StringUtils.isNotEmpty(cookie.getName()) && "nav-style".equalsIgnoreCase(cookie.getName())) { indexStyle = cookie.getValue(); break; } } String webIndex = "topnav".equalsIgnoreCase(indexStyle) ? "index-topnav" : "index"; return webIndex; } // 锁定屏幕 @GetMapping("/lockscreen") public String lockscreen(ModelMap mmap) { mmap.put("user", getSysUser()); ServletUtils.getSession().setAttribute(ShiroConstants.LOCK_SCREEN, true); return "lock"; } // 解锁屏幕 @PostMapping("/unlockscreen") @ResponseBody public AjaxResult unlockscreen(String password) { SysUser user = getSysUser(); if (StringUtils.isNull(user)) { return AjaxResult.error("服务器超时,请重新登录"); } if (passwordService.matches(user, password)) { ServletUtils.getSession().removeAttribute(ShiroConstants.LOCK_SCREEN); return AjaxResult.success(); } return AjaxResult.error("密码不正确,请重新输入。"); } // 切换主题 @GetMapping("/system/switchSkin") public String switchSkin() { return "skin"; } // 切换菜单 @GetMapping("/system/menuStyle/{style}") public void menuStyle(@PathVariable String style, HttpServletResponse response) { CookieUtils.setCookie(response, "nav-style", style); } // 系统介绍 @GetMapping("/system/main") public String main(ModelMap mmap) { mmap.put("version", RuoYiConfig.getVersion()); return "main"; } // content-main class public String contentMainClass(Boolean footer, Boolean tagsView) { if (!footer && !tagsView) { return "tagsview-footer-hide"; } else if (!footer) { return "footer-hide"; } else if (!tagsView) { return "tagsview-hide"; } return StringUtils.EMPTY; } // 检查初始密码是否提醒修改 public boolean initPasswordIsModify(Date pwdUpdateDate) { Integer initPasswordModify = Convert.toInt(configService.selectConfigByKey("sys.account.initPasswordModify")); return initPasswordModify != null && initPasswordModify == 1 && pwdUpdateDate == null; } // 检查密码是否过期 public boolean passwordIsExpiration(Date pwdUpdateDate) { Integer passwordValidateDays = Convert.toInt(configService.selectConfigByKey("sys.account.passwordValidateDays")); if (passwordValidateDays != null && passwordValidateDays > 0) { if (StringUtils.isNull(pwdUpdateDate)) { // 如果从未修改过初始密码,直接提醒过期 return true; } Date nowDate = DateUtils.getNowDate(); return DateUtils.differentDaysByMillisecond(nowDate, pwdUpdateDate) > passwordValidateDays; } return false; } }