Merge remote-tracking branch 'origin/master' into group2

# Conflicts:
#	src/main/java/cn/stylefeng/guns/modular/login/PositionViewController.java
pull/65/head
chenjinlong 2020-12-30 17:01:49 +08:00
commit 680c697d4b
17 changed files with 218 additions and 107 deletions

View File

@ -1,7 +1,7 @@
package cn.stylefeng.guns.core.listener; package cn.stylefeng.guns.core.listener;
import cn.stylefeng.guns.core.consts.ProjectConstants; import cn.stylefeng.guns.core.consts.ProjectConstants;
import cn.stylefeng.guns.modular.service.InitAdminService; import cn.stylefeng.guns.modular.index.service.InitAdminService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.ApplicationListener; import org.springframework.context.ApplicationListener;

View File

@ -0,0 +1,41 @@
package cn.stylefeng.guns.modular.blackboard;
import cn.stylefeng.roses.kernel.resource.api.annotation.ApiResource;
import cn.stylefeng.roses.kernel.resource.api.annotation.GetResource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
/**
*
*
* @author fengshuonan
* @date 2020/12/29 21:29
*/
@Controller
@Slf4j
@ApiResource(name = "工作台和分析页面")
public class BlackboardViewController {
/**
*
*
* @author fengshuonan
* @date 2018/12/24 22:43
*/
@GetResource(name = "工作台", path = "/blackboard/platform", requiredPermission = false)
public String platform() {
return "/modular/blackboard/board_platform.html";
}
/**
*
*
* @author fengshuonan
* @date 2020/12/29 21:27
*/
@GetResource(name = "分析页面", path = "/blackboard/analyse", requiredPermission = false)
public String analyse() {
return "/modular/blackboard/board_analyse.html";
}
}

View File

@ -1,68 +0,0 @@
package cn.stylefeng.guns.modular.controller;
import cn.stylefeng.roses.kernel.auth.api.context.LoginContext;
import cn.stylefeng.roses.kernel.auth.api.pojo.login.LoginUser;
import cn.stylefeng.roses.kernel.auth.api.pojo.login.basic.SimpleUserInfo;
import cn.stylefeng.roses.kernel.file.FileOperatorApi;
import cn.stylefeng.roses.kernel.menu.modular.service.SysMenuService;
import cn.stylefeng.roses.kernel.resource.api.annotation.ApiResource;
import cn.stylefeng.roses.kernel.resource.api.annotation.GetResource;
import cn.stylefeng.roses.kernel.system.modular.user.service.SysUserService;
import cn.stylefeng.roses.kernel.system.pojo.menu.layui.LayuiAppIndexMenus;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import javax.annotation.Resource;
import java.util.List;
/**
*
*
* @author fengshuonan
* @date 2020/12/27 16:23
*/
@Controller
@Slf4j
@ApiResource(name = "首页相关的界面渲染")
public class IndexViewController {
@Resource
private SysMenuService sysMenuService;
@Resource
private SysUserService sysUserService;
/**
*
*
* @author fengshuonan
* @date 2020/12/13 17:19
*/
@GetResource(name = "首页界面", path = "/", requiredPermission = false, requiredLogin = false)
public String indexView(Model model) {
// 当前用户已经登录,跳转到首页
if (LoginContext.me().hasLogin()) {
LoginUser loginUser = LoginContext.me().getLoginUser();
SimpleUserInfo simpleUserInfo = loginUser.getSimpleUserInfo();
// 渲染首页的菜单
List<LayuiAppIndexMenus> layuiAppIndexMenus = sysMenuService.getLayuiIndexMenus();
model.addAttribute("layuiAppIndexMenus", layuiAppIndexMenus);
// 获取首页的头像
model.addAttribute("avatar", sysUserService.getUserAvatarUrl(simpleUserInfo.getAvatar()));
// 获取人员姓名
model.addAttribute("name", simpleUserInfo.getRealName());
return "/index.html";
}
// 当前用户没有登录,跳转到登录页面
return "/login.html";
}
}

View File

@ -0,0 +1,142 @@
package cn.stylefeng.guns.modular.index.controller;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.stylefeng.roses.kernel.auth.api.context.LoginContext;
import cn.stylefeng.roses.kernel.auth.api.pojo.login.LoginUser;
import cn.stylefeng.roses.kernel.auth.api.pojo.login.basic.SimpleRoleInfo;
import cn.stylefeng.roses.kernel.auth.api.pojo.login.basic.SimpleUserInfo;
import cn.stylefeng.roses.kernel.menu.modular.service.SysMenuService;
import cn.stylefeng.roses.kernel.resource.api.annotation.ApiResource;
import cn.stylefeng.roses.kernel.resource.api.annotation.GetResource;
import cn.stylefeng.roses.kernel.system.modular.organization.entity.HrOrganization;
import cn.stylefeng.roses.kernel.system.modular.organization.service.HrOrganizationService;
import cn.stylefeng.roses.kernel.system.modular.user.service.SysUserService;
import cn.stylefeng.roses.kernel.system.pojo.menu.layui.LayuiAppIndexMenus;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import javax.annotation.Resource;
import java.util.List;
/**
*
*
* @author fengshuonan
* @date 2020/12/27 16:23
*/
@Controller
@Slf4j
@ApiResource(name = "首页相关的界面渲染")
public class IndexViewController {
@Resource
private SysMenuService sysMenuService;
@Resource
private SysUserService sysUserService;
@Resource
private HrOrganizationService hrOrganizationService;
/**
*
*
* @author fengshuonan
* @date 2020/12/13 17:19
*/
@GetResource(name = "首页界面", path = "/", requiredLogin = false, requiredPermission = false)
public String indexView(Model model) {
// 当前用户已经登录,跳转到首页
if (LoginContext.me().hasLogin()) {
LoginUser loginUser = LoginContext.me().getLoginUser();
SimpleUserInfo simpleUserInfo = loginUser.getSimpleUserInfo();
// 渲染首页的菜单
List<LayuiAppIndexMenus> layuiAppIndexMenus = sysMenuService.getLayuiIndexMenus();
model.addAttribute("layuiAppIndexMenus", layuiAppIndexMenus);
// 获取首页的头像
model.addAttribute("avatar", sysUserService.getUserAvatarUrl(simpleUserInfo.getAvatar()));
// 获取人员姓名
model.addAttribute("name", simpleUserInfo.getRealName());
return "/index.html";
}
// 当前用户没有登录,跳转到登录页面
return "/login.html";
}
/**
*
*
* @author fengshuonan
* @date 2020/12/29 21:53
*/
@GetResource(name = "个人中心界面", path = "/personal", requiredLogin = false)
public String personal(Model model) {
LoginUser loginUser = LoginContext.me().getLoginUser();
// 用户基本信息
SimpleUserInfo simpleUserInfo = loginUser.getSimpleUserInfo();
model.addAllAttributes(BeanUtil.beanToMap(simpleUserInfo));
// 角色名称
List<SimpleRoleInfo> simpleRoleInfoList = loginUser.getSimpleRoleInfoList();
if (ObjectUtil.isNotEmpty(simpleRoleInfoList)) {
String roleName = simpleRoleInfoList.get(0).getRoleName();
model.addAttribute("roleName", roleName);
}
// 组织机构名称
Long organizationId = loginUser.getOrganizationId();
HrOrganization hrOrganization = hrOrganizationService.getById(organizationId);
if (hrOrganization != null) {
model.addAttribute("orgName", hrOrganization.getOrgName());
}
// 渲染头像的url
model.addAttribute("avatar", sysUserService.getUserAvatarUrl(simpleUserInfo.getAvatar()));
return "/modular/index/personal_info.html";
}
/**
*
*
* @author fengshuonan
* @date 2020/12/29 21:34
*/
@GetResource(name = "锁屏界面", path = "/lock", requiredPermission = false)
public String lock() {
return "/modular/index/lock_screen.html";
}
/**
*
*
* @author fengshuonan
* @date 2020/12/29 21:42
*/
@GetResource(name = "主题切换界面", path = "/theme", requiredPermission = false)
public String theme() {
return "/modular/index/theme.html";
}
/**
*
*
* @author fengshuonan
* @date 2020/12/29 21:42
*/
@GetResource(name = "修改密码界面", path = "/changePassword", requiredPermission = false)
public String changePassword() {
return "/modular/index/change_password.html";
}
}

View File

@ -1,4 +1,4 @@
package cn.stylefeng.guns.modular.service; package cn.stylefeng.guns.modular.index.service;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;

View File

@ -1,4 +1,4 @@
package cn.stylefeng.guns.modular.service; package cn.stylefeng.guns.modular.index.service;
import cn.stylefeng.guns.core.consts.ProjectConstants; import cn.stylefeng.guns.core.consts.ProjectConstants;
import cn.stylefeng.roses.kernel.resource.modular.entity.SysResource; import cn.stylefeng.roses.kernel.resource.modular.entity.SysResource;

View File

@ -1,4 +1,4 @@
package cn.stylefeng.guns.modular.controller; package cn.stylefeng.guns.modular.login;
import cn.stylefeng.roses.kernel.auth.api.AuthServiceApi; import cn.stylefeng.roses.kernel.auth.api.AuthServiceApi;
import cn.stylefeng.roses.kernel.auth.api.context.LoginContext; import cn.stylefeng.roses.kernel.auth.api.context.LoginContext;
@ -11,7 +11,6 @@ import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData;
import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData; import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
@ -19,7 +18,7 @@ import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource; import javax.annotation.Resource;
/** /**
* *
* *
* @author fengshuonan * @author fengshuonan
* @date 2020/12/27 16:23 * @date 2020/12/27 16:23
@ -67,7 +66,7 @@ public class LoginViewController {
* @author majianguo * @author majianguo
* @date 2020/12/4 9:05 * @date 2020/12/4 9:05
*/ */
@GetResource(name = "登出接口", path = "/logout", requiredPermission = false) @PostResource(name = "登出接口", path = "/logout", requiredPermission = false)
@ResponseBody @ResponseBody
public ResponseData logoutPage() { public ResponseData logoutPage() {
authServiceApi.logout(); authServiceApi.logout();

View File

@ -95,15 +95,12 @@
// 修改密码点击事件 // 修改密码点击事件
$('#setPsw').click(function () { $('#setPsw').click(function () {
//获取多语言
var langs = layui.data('system').lang;
admin.open({ admin.open({
id: 'pswForm', id: 'pswForm',
type: 2, type: 2,
title: langs.MENU_CHANGE_PASSWORD, title: "修改密码",
shade: 0, shade: 0,
content: '${ctxPath}/system/user_chpwd' content: '${ctxPath}/changePassword'
}); });
}); });

View File

@ -29,16 +29,16 @@
<a ew-event="fullScreen" title="全屏"><i class="layui-icon layui-icon-screen-full"></i></a> <a ew-event="fullScreen" title="全屏"><i class="layui-icon layui-icon-screen-full"></i></a>
</li> </li>
<li class="layui-nav-item layui-hide-xs" lay-unselect> <li class="layui-nav-item layui-hide-xs" lay-unselect>
<a ew-event="lockScreen" title="锁屏" data-url="${ctxPath}/system/lock"><i class="layui-icon layui-icon-password"></i></a> <a ew-event="lockScreen" title="锁屏" data-url="${ctxPath}/lock"><i class="layui-icon layui-icon-password"></i></a>
</li> </li>
<li class="layui-nav-item" lay-unselect> <li class="layui-nav-item" lay-unselect>
<a> <a>
<img src="${avatar!}" class="layui-nav-img"> <img src="${avatar!}" class="layui-nav-img">
<cite>写死的用户</cite> <cite>${name!"用户"}</cite>
</a> </a>
<dl class="layui-nav-child"> <dl class="layui-nav-child">
<dd lay-unselect> <dd lay-unselect>
<a ew-href="${ctxPath}/system/user_info">个人中心</a> <a ew-href="${ctxPath}/personal">个人中心</a>
</dd> </dd>
<dd lay-unselect> <dd lay-unselect>
<a id="setPsw">修改密码</a> <a id="setPsw">修改密码</a>
@ -52,7 +52,7 @@
</dl> </dl>
</li> </li>
<li class="layui-nav-item" lay-unselect> <li class="layui-nav-item" lay-unselect>
<a ew-event="theme" title="主题" data-url="${ctxPath}/system/theme"><i class="layui-icon layui-icon-more-vertical"></i></a> <a ew-event="theme" title="主题" data-url="${ctxPath}/theme"><i class="layui-icon layui-icon-more-vertical"></i></a>
</li> </li>
</ul> </ul>
</div> </div>

View File

@ -1,21 +1,21 @@
@layout("/layout/_container.html",{title:"修改密码",bg:"bg-white",js:["/assets/modular/frame/password.js"]}){ @layout("/layout/_container.html", {title:"修改密码", bg:"bg-white", js:["/assets/modular/frame/password.js"]}){
<div class="layui-form model-form" id="form-psw"> <div class="layui-form model-form" id="form-psw">
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">${lang.get("FIELD_OLD_PASSWORD","旧密码")}:</label> <label class="layui-form-label">旧密码:</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="password" name="oldPassword" placeholder="请输入原始密码" class="layui-input" <input type="password" name="oldPassword" placeholder="请输入原始密码" class="layui-input"
lay-verType="tips" lay-verify="required" required/> lay-verType="tips" lay-verify="required" required/>
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">${lang.get("FIELD_NEW_PASSWORD","新密码")}:</label> <label class="layui-form-label">新密码:</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="password" name="newPassword" placeholder="请输入新密码" class="layui-input" <input type="password" name="newPassword" placeholder="请输入新密码" class="layui-input"
lay-verType="tips" lay-verify="required|psw" required/> lay-verType="tips" lay-verify="required|psw" required/>
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">${lang.get("FIELD_RE_PASSWORD","确认密码")}:</label> <label class="layui-form-label">确认密码:</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="password" name="repeatPassword" placeholder="请再次输入新密码" class="layui-input" <input type="password" name="repeatPassword" placeholder="请再次输入新密码" class="layui-input"
lay-verType="tips" lay-verify="required|repsw" required/> lay-verType="tips" lay-verify="required|repsw" required/>
@ -23,8 +23,8 @@
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<div class="layui-input-block text-right"> <div class="layui-input-block text-right">
<button class="layui-btn" lay-filter="submit-psw" lay-submit>${lang.get("BTN_SAVE","保存")}</button> <button class="layui-btn" lay-filter="submit-psw" lay-submit>保存</button>
<button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">${lang.get("BTN_CANCEL","取消")}</button> <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>
</div> </div>
</div> </div>
</div> </div>

View File

@ -1,9 +1,9 @@
@layout("/layout/_container.html",{title:"个人中心",css:["/assets/modular/frame/user_info.css"],js:["/assets/modular/frame/user_info.js"]}){ @layout("/layout/_container.html", {title:"个人中心", css:["/assets/modular/frame/user_info.css"], js:["/assets/modular/frame/user_info.js"]}){
<div class="layui-body-header"> <div class="layui-body-header">
<span class="layui-body-header-title">${lang.get("MENU_PERSONAL_INFO","个人信息")}</span> <span class="layui-body-header-title">个人信息</span>
<span class="layui-breadcrumb pull-right"> <span class="layui-breadcrumb pull-right">
<a href="${ctxPath}/system/console">${lang.get("MENU_INDEX","首页")}</a> <a href="${ctxPath}/system/console">首页</a>
<a><cite>${lang.get("MENU_PERSONAL_INFO","个人中心")}</cite></a> <a><cite>个人中心</cite></a>
</span> </span>
</div> </div>
@ -18,18 +18,18 @@
<div class="user-info-head" id="imgHead"> <div class="user-info-head" id="imgHead">
<img id="avatarPreview" src="${avatar}"/> <img id="avatarPreview" src="${avatar}"/>
</div> </div>
<h2 style="padding-top: 20px;">${name}</h2> <h2 style="padding-top: 20px;">${realName!靓仔}</h2>
<p style="padding-top: 8px;">${roleName!} ${deptName!}</p> <p style="padding-top: 8px;">${roleName!角色空} ${orgName!组织机构空}</p>
</div> </div>
<div class="layui-text" style="padding-top: 30px;"> <div class="layui-text" style="padding-top: 30px;">
<div class="info-list-item"> <div class="info-list-item">
<i class="layui-icon layui-icon-notice"></i> <i class="layui-icon layui-icon-notice"></i>
<p>${email!}</p> <p>${email!'sn93@qq.com'}</p>
</div> </div>
<div class="info-list-item"> <div class="info-list-item">
<i class="layui-icon layui-icon-cellphone"></i> <i class="layui-icon layui-icon-cellphone"></i>
<p>${phone!}</p> <p>${phone!18200000000}</p>
</div> </div>
<div class="info-list-item"> <div class="info-list-item">
<i class="layui-icon layui-icon-location"></i> <i class="layui-icon layui-icon-location"></i>
@ -52,46 +52,46 @@
<div class="layui-tab layui-tab-brief" lay-filter="userInfoTab"> <div class="layui-tab layui-tab-brief" lay-filter="userInfoTab">
<ul class="layui-tab-title"> <ul class="layui-tab-title">
<li class="layui-this">${lang.get("MENU_BASE_INFO","基本信息")}</li> <li class="layui-this">基本信息</li>
<li>${lang.get("MENU_OTHER","其他")}</li> <li>其他</li>
</ul> </ul>
<div class="layui-tab-content"> <div class="layui-tab-content">
<div class="layui-form layui-tab-item layui-show" lay-filter="userInfoForm"> <div class="layui-form layui-tab-item layui-show" lay-filter="userInfoForm">
<input type="hidden" name="userId"/> <input type="hidden" name="userId"/>
<div class="layui-form user-info-form" style="max-width: 400px;padding-top: 25px;"> <div class="layui-form user-info-form" style="max-width: 400px;padding-top: 25px;">
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">${lang.get("FIELD_ACCOUNT","账号")}:</label> <label class="layui-form-label">账号:</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" name="account" class="layui-input layui-disabled" lay-verify="required" disabled/> <input type="text" name="account" class="layui-input layui-disabled" lay-verify="required" disabled/>
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">${lang.get("FIELD_SEX","性别")}:</label> <label class="layui-form-label">性别:</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="radio" name="sex" value="M" title="男"> <input type="radio" name="sex" value="M" title="男">
<input type="radio" name="sex" value="F" title="女"> <input type="radio" name="sex" value="F" title="女">
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">${lang.get("FIELD_EMAIL","邮箱")}:<span style="color: red;">*</span></label> <label class="layui-form-label">邮箱:<span style="color: red;">*</span></label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="email" name="email" class="layui-input" lay-verify="required|email" required/> <input type="email" name="email" class="layui-input" lay-verify="required|email" required/>
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">${lang.get("FIELD_NAME","姓名")}:<span style="color: red;">*</span></label> <label class="layui-form-label">姓名:<span style="color: red;">*</span></label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" name="name" class="layui-input" lay-verify="required" required/> <input type="text" name="name" class="layui-input" lay-verify="required" required/>
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">${lang.get("FIELD_BIRTHDAY","生日")}:</label> <label class="layui-form-label">生日:</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" id="birthday" name="birthday" class="layui-input"/> <input type="text" id="birthday" name="birthday" class="layui-input"/>
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">${lang.get("FIELD_PHONE","电话")}:</label> <label class="layui-form-label">电话:</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" name="phone" class="layui-input"/> <input type="text" name="phone" class="layui-input"/>
</div> </div>
@ -99,7 +99,7 @@
<div class="layui-form-item"> <div class="layui-form-item">
<div class="layui-input-block"> <div class="layui-input-block">
<button class="layui-btn" lay-filter="userInfoSubmit" lay-submit> <button class="layui-btn" lay-filter="userInfoSubmit" lay-submit>
${lang.get("BTN_UPDATE_INFO","更新基本信息")} 更新基本信息
</button> </button>
</div> </div>
</div> </div>