feat:用户绑定

new-rd20250506
wangxy 2 months ago
parent 99b1fefcd5
commit 055bc7d942

@ -5,11 +5,7 @@ import java.util.stream.Collectors;
import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.RandomUtil;
import cn.hutool.extra.pinyin.PinyinUtil; import cn.hutool.extra.pinyin.PinyinUtil;
import com.ruoyi.common.core.domain.entity.SysDictData;
import com.ruoyi.system.domain.UserCheckDTO;
import com.ruoyi.system.service.*;
import com.ruoyi.web.controller.manager.UserRecordManager; import com.ruoyi.web.controller.manager.UserRecordManager;
import lombok.val;
import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.ArrayUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions; import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -35,6 +31,10 @@ import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.shiro.service.SysPasswordService; import com.ruoyi.framework.shiro.service.SysPasswordService;
import com.ruoyi.framework.shiro.util.AuthorizationUtils; import com.ruoyi.framework.shiro.util.AuthorizationUtils;
import com.ruoyi.system.service.ISysDeptService;
import com.ruoyi.system.service.ISysPostService;
import com.ruoyi.system.service.ISysRoleService;
import com.ruoyi.system.service.ISysUserService;
/** /**
* *
@ -65,9 +65,6 @@ public class SysUserController extends BaseController {
@Autowired @Autowired
private UserRecordManager userRecordManager; private UserRecordManager userRecordManager;
@Autowired
private ISysDictDataService dictDataService;
@RequiresPermissions("system:user:view") @RequiresPermissions("system:user:view")
@GetMapping() @GetMapping()
public String user() { public String user() {
@ -137,15 +134,6 @@ public class SysUserController extends BaseController {
} else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user)) { } else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user)) {
return error("新增用户'" + user.getLoginName() + "'失败,邮箱账号已存在"); return error("新增用户'" + user.getLoginName() + "'失败,邮箱账号已存在");
} }
List<SysDictData> smType = dictDataService.selectDictDataByType("sys_role_key");
UserCheckDTO userCheckDTO = new UserCheckDTO();
userCheckDTO.setDeptId(user.getDeptId());
userCheckDTO.setRoleId(user.getRoleIds()[0]);
userCheckDTO.setRoleKey(smType.get(0).getDictValue());
int total = userService.checkUser(userCheckDTO);
if(total>=1){
return error("新增用户'" + user.getLoginName() + "'在当前部门该角色下账号已存在,不能重复新增");
}
user.setSalt(ShiroUtils.randomSalt()); user.setSalt(ShiroUtils.randomSalt());
user.setPassword(passwordService.encryptPassword(user.getLoginName(), user.getPassword(), user.getSalt())); user.setPassword(passwordService.encryptPassword(user.getLoginName(), user.getPassword(), user.getSalt()));
user.setCreateBy(getLoginName()); user.setCreateBy(getLoginName());
@ -215,6 +203,38 @@ public class SysUserController extends BaseController {
return error(); return error();
} }
/**
* resetUeky
* @param userId
* @param mmap
* @return
*/
//@RequiresPermissions("system:user:resetUeky")
@GetMapping("/resetUeky/{userId}")
public String resetUeky(@PathVariable("userId") Long userId, ModelMap mmap) {
mmap.put("user", userService.selectUserById(userId));
return prefix + "/resetUeky";
}
/**
* resetUeky
* @param user
* @return
*/
//@RequiresPermissions("system:user:resetUeky")
@Log(title = "UKey绑定", businessType = BusinessType.RESET)
@PostMapping("/resetUekySave")
@ResponseBody
public AjaxResult resetUekySave(SysUser user) {
boolean update = userService.lambdaUpdate()
.eq(SysUser::getUserId, user.getUserId())
.set(SysUser::getUkeyId, user.getUkeyId())
.update();
if (update) {
return success();
}
return error();
}
/** /**
* *
*/ */
@ -334,13 +354,13 @@ public class SysUserController extends BaseController {
/** /**
* *
* *
* @param userId * @param userId
* @param mmap * @param mmap
* @return java.lang.String * @return java.lang.String
*/ */
@GetMapping("/getChangeRecord/{userId}") @GetMapping("/getChangeRecord/{userId}")
public String getChangeRecord(@PathVariable("userId") Long userId, ModelMap mmap) { public String getChangeRecord(@PathVariable("userId") Long userId, ModelMap mmap) {
mmap.put("userRecordDTO", userRecordManager.getUserRecordDTO(userId)); mmap.put("userRecordDTO", userRecordManager.getUserRecordDTO(userId));
@ -372,11 +392,4 @@ public class SysUserController extends BaseController {
} }
@PostMapping("/checkUser")
@ResponseBody
public AjaxResult checkUser(UserCheckDTO userCheckDTO) {
return success(userService.checkUser(userCheckDTO));
}
} }

@ -1,81 +1,81 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org"> <html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="renderer" content="webkit"> <meta name="renderer" content="webkit">
<title>保密业务综合管理系统</title> <title>保密业务综合管理系统</title>
<!-- 避免IE使用兼容模式 --> <!-- 避免IE使用兼容模式 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<link th:href="@{favicon.ico}" rel="shortcut icon"/> <link th:href="@{favicon.ico}" rel="shortcut icon"/>
<link th:href="@{/css/bootstrap.min.css}" rel="stylesheet"/> <link th:href="@{/css/bootstrap.min.css}" rel="stylesheet"/>
<link th:href="@{/css/jquery.contextMenu.min.css}" rel="stylesheet"/> <link th:href="@{/css/jquery.contextMenu.min.css}" rel="stylesheet"/>
<link th:href="@{/css/font-awesome.min.css}" rel="stylesheet"/> <link th:href="@{/css/font-awesome.min.css}" rel="stylesheet"/>
<link th:href="@{/css/animate.min.css}" rel="stylesheet"/> <link th:href="@{/css/animate.min.css}" rel="stylesheet"/>
<link th:href="@{/css/style.min.css}" rel="stylesheet"/> <link th:href="@{/css/style.min.css}" rel="stylesheet"/>
<link th:href="@{/css/skins.css}" rel="stylesheet"/> <link th:href="@{/css/skins.css}" rel="stylesheet"/>
<link th:href="@{/ruoyi/css/ry-ui.css?v=4.7.7}" rel="stylesheet"/> <link th:href="@{/ruoyi/css/ry-ui.css?v=4.7.7}" rel="stylesheet"/>
</head> </head>
<body class="fixed-sidebar full-height-layout gray-bg" th:classappend="${isMobile} ? 'canvas-menu'" style="overflow: hidden"> <body class="fixed-sidebar full-height-layout gray-bg" th:classappend="${isMobile} ? 'canvas-menu'" style="overflow: hidden">
<div id="wrapper"> <div id="wrapper">
<!--左侧导航开始--> <!--左侧导航开始-->
<nav class="navbar-default navbar-static-side" role="navigation"> <nav class="navbar-default navbar-static-side" role="navigation">
<div class="nav-close"> <div class="nav-close">
<i class="fa fa-times-circle"></i> <i class="fa fa-times-circle"></i>
</div> </div>
<a th:href="@{/index}"> <a th:href="@{/index}">
<li class="logo hidden-xs"> <li class="logo hidden-xs">
<span class="logo-lg">保密业务综合管理系统</span> <span class="logo-lg">保密业务综合管理系统</span>
</li> </li>
</a> </a>
<div class="sidebar-collapse"> <div class="sidebar-collapse">
<ul class="nav" id="side-menu"> <ul class="nav" id="side-menu">
<li> <li>
<div class="user-panel"> <div class="user-panel">
<a class="menuItem noactive" title="个人中心" th:href="@{/system/user/profile}"> <a class="menuItem noactive" title="个人中心" th:href="@{/system/user/profile}">
<div class="hide" th:text="个人中心"></div> <div class="hide" th:text="个人中心"></div>
<div class="pull-left image"> <div class="pull-left image">
<img th:src="(${#strings.isEmpty(user.avatar)}) ? @{/img/profile.jpg} : @{${user.avatar}}" th:onerror="this.src='img/profile.jpg'" class="img-circle" alt="User Image"> <img th:src="(${#strings.isEmpty(user.avatar)}) ? @{/img/profile.jpg} : @{${user.avatar}}" th:onerror="this.src='img/profile.jpg'" class="img-circle" alt="User Image">
</div> </div>
</a> </a>
<div class="pull-left info"> <div class="pull-left info">
<p>[[${user.loginName}]]</p> <p>[[${user.loginName}]]</p>
<a href="#"><i class="fa fa-circle text-success"></i> 在线</a> <a href="#"><i class="fa fa-circle text-success"></i> 在线</a>
<a th:href="@{logout}" style="padding-left:5px;"><i class="fa fa-sign-out text-danger"></i> 注销</a> <a th:href="@{logout}" style="padding-left:5px;"><i class="fa fa-sign-out text-danger"></i> 注销</a>
</div> </div>
</div> </div>
</li> </li>
<li> <li>
<a class="menuItem" th:href="@{/system/main}"><i class="fa fa-home"></i> <span class="nav-label">首页</span> </a> <a class="menuItem" th:href="@{/system/main}"><i class="fa fa-home"></i> <span class="nav-label">首页</span> </a>
</li> </li>
<li th:each="menu : ${menus}"> <li th:each="menu : ${menus}">
<a th:class="@{${!#strings.isEmpty(menu.url) && menu.url != '#'} ? ${menu.target}}" th:href="@{${#strings.isEmpty(menu.url)} ? |#| : ${menu.url}}" th:data-refresh="${menu.isRefresh == '0'}"> <a th:class="@{${!#strings.isEmpty(menu.url) && menu.url != '#'} ? ${menu.target}}" th:href="@{${#strings.isEmpty(menu.url)} ? |#| : ${menu.url}}" th:data-refresh="${menu.isRefresh == '0'}">
<i class="fa fa-bar-chart-o" th:class="${menu.icon}"></i> <i class="fa fa-bar-chart-o" th:class="${menu.icon}"></i>
<span class="nav-label" th:text="${menu.menuName}">一级菜单</span> <span class="nav-label" th:text="${menu.menuName}">一级菜单</span>
<span th:class="${#strings.isEmpty(menu.url) || menu.url == '#'} ? |fa arrow|"></span> <span th:class="${#strings.isEmpty(menu.url) || menu.url == '#'} ? |fa arrow|"></span>
</a> </a>
<ul class="nav nav-second-level collapse"> <ul class="nav nav-second-level collapse">
<li th:each="cmenu : ${menu.children}"> <li th:each="cmenu : ${menu.children}">
<a th:if="${#lists.isEmpty(cmenu.children)}" th:class="${#strings.isEmpty(cmenu.target)} ? |menuItem| : ${cmenu.target}" th:utext="${cmenu.menuName}" th:href="@{${cmenu.url}}" th:data-refresh="${cmenu.isRefresh == '0'}">二级菜单</a> <a th:if="${#lists.isEmpty(cmenu.children)}" th:class="${#strings.isEmpty(cmenu.target)} ? |menuItem| : ${cmenu.target}" th:utext="${cmenu.menuName}" th:href="@{${cmenu.url}}" th:data-refresh="${cmenu.isRefresh == '0'}">二级菜单</a>
<a th:if="${not #lists.isEmpty(cmenu.children)}" href="#">[[${cmenu.menuName}]]<span class="fa arrow"></span></a> <a th:if="${not #lists.isEmpty(cmenu.children)}" href="#">[[${cmenu.menuName}]]<span class="fa arrow"></span></a>
<ul th:if="${not #lists.isEmpty(cmenu.children)}" class="nav nav-third-level"> <ul th:if="${not #lists.isEmpty(cmenu.children)}" class="nav nav-third-level">
<li th:each="emenu : ${cmenu.children}"> <li th:each="emenu : ${cmenu.children}">
<a th:if="${#lists.isEmpty(emenu.children)}" th:class="${#strings.isEmpty(emenu.target)} ? |menuItem| : ${emenu.target}" th:text="${emenu.menuName}" th:href="@{${emenu.url}}" th:data-refresh="${emenu.isRefresh == '0'}">三级菜单</a> <a th:if="${#lists.isEmpty(emenu.children)}" th:class="${#strings.isEmpty(emenu.target)} ? |menuItem| : ${emenu.target}" th:text="${emenu.menuName}" th:href="@{${emenu.url}}" th:data-refresh="${emenu.isRefresh == '0'}">三级菜单</a>
<a th:if="${not #lists.isEmpty(emenu.children)}" href="#">[[${emenu.menuName}]]<span class="fa arrow"></span></a> <a th:if="${not #lists.isEmpty(emenu.children)}" href="#">[[${emenu.menuName}]]<span class="fa arrow"></span></a>
<ul th:if="${not #lists.isEmpty(emenu.children)}" class="nav nav-four-level"> <ul th:if="${not #lists.isEmpty(emenu.children)}" class="nav nav-four-level">
<li th:each="fmenu : ${emenu.children}"><a th:if="${#lists.isEmpty(fmenu.children)}" th:class="${#strings.isEmpty(fmenu.target)} ? |menuItem| : ${fmenu.target}" th:text="${fmenu.menuName}" th:href="@{${fmenu.url}}" th:data-refresh="${fmenu.isRefresh == '0'}">四级菜单</a></li> <li th:each="fmenu : ${emenu.children}"><a th:if="${#lists.isEmpty(fmenu.children)}" th:class="${#strings.isEmpty(fmenu.target)} ? |menuItem| : ${fmenu.target}" th:text="${fmenu.menuName}" th:href="@{${fmenu.url}}" th:data-refresh="${fmenu.isRefresh == '0'}">四级菜单</a></li>
</ul> </ul>
</li> </li>
</ul> </ul>
</li> </li>
</ul> </ul>
</li> </li>
<li th:if="${demoEnabled}"> <li th:if="${demoEnabled}">
<!-- <a href="#"><i class="fa fa-desktop"></i><span class="nav-label">实例演示</span><span class="fa arrow"></span></a>--> <!-- <a href="#"><i class="fa fa-desktop"></i><span class="nav-label">实例演示</span><span class="fa arrow"></span></a>-->
<ul class="nav nav-second-level collapse"> <ul class="nav nav-second-level collapse">
<li> <a>表单<span class="fa arrow"></span></a> <li> <a>表单<span class="fa arrow"></span></a>
<ul class="nav nav-third-level"> <ul class="nav nav-third-level">
<li><a class="menuItem" th:href="@{/demo/form/button}">按钮</a></li> <li><a class="menuItem" th:href="@{/demo/form/button}">按钮</a></li>
<li><a class="menuItem" th:href="@{/demo/form/grid}">栅格</a></li> <li><a class="menuItem" th:href="@{/demo/form/grid}">栅格</a></li>
<li><a class="menuItem" th:href="@{/demo/form/select}">下拉框</a></li> <li><a class="menuItem" th:href="@{/demo/form/select}">下拉框</a></li>
@ -98,9 +98,9 @@
<li><a class="menuItem" th:href="@{/demo/form/cxselect}">多级联动下拉</a></li> <li><a class="menuItem" th:href="@{/demo/form/cxselect}">多级联动下拉</a></li>
<li><a class="menuItem" th:href="@{/demo/form/localrefresh}">Ajax局部刷新</a></li> <li><a class="menuItem" th:href="@{/demo/form/localrefresh}">Ajax局部刷新</a></li>
</ul> </ul>
</li> </li>
<li> <a>表格<span class="fa arrow"></span></a> <li> <a>表格<span class="fa arrow"></span></a>
<ul class="nav nav-third-level"> <ul class="nav nav-third-level">
<li><a class="menuItem" th:href="@{/demo/table/search}">查询条件</a></li> <li><a class="menuItem" th:href="@{/demo/table/search}">查询条件</a></li>
<li><a class="menuItem" th:href="@{/demo/table/footer}">数据汇总</a></li> <li><a class="menuItem" th:href="@{/demo/table/footer}">数据汇总</a></li>
<li><a class="menuItem" th:href="@{/demo/table/groupHeader}">组合表头</a></li> <li><a class="menuItem" th:href="@{/demo/table/groupHeader}">组合表头</a></li>
@ -131,72 +131,72 @@
<li><a class="menuItem" th:href="@{/demo/table/asynTree}">异步加载表格树</a></li> <li><a class="menuItem" th:href="@{/demo/table/asynTree}">异步加载表格树</a></li>
<li><a class="menuItem" th:href="@{/demo/table/other}">表格其他操作</a></li> <li><a class="menuItem" th:href="@{/demo/table/other}">表格其他操作</a></li>
</ul> </ul>
</li> </li>
<li> <a>弹框<span class="fa arrow"></span></a> <li> <a>弹框<span class="fa arrow"></span></a>
<ul class="nav nav-third-level"> <ul class="nav nav-third-level">
<li><a class="menuItem" th:href="@{/demo/modal/dialog}">模态窗口</a></li> <li><a class="menuItem" th:href="@{/demo/modal/dialog}">模态窗口</a></li>
<li><a class="menuItem" th:href="@{/demo/modal/layer}">弹层组件</a></li> <li><a class="menuItem" th:href="@{/demo/modal/layer}">弹层组件</a></li>
<li><a class="menuItem" th:href="@{/demo/modal/table}">弹层表格</a></li> <li><a class="menuItem" th:href="@{/demo/modal/table}">弹层表格</a></li>
</ul> </ul>
</li> </li>
<li> <a>操作<span class="fa arrow"></span></a> <li> <a>操作<span class="fa arrow"></span></a>
<ul class="nav nav-third-level"> <ul class="nav nav-third-level">
<li><a class="menuItem" th:href="@{/demo/operate/table}">表格</a></li> <li><a class="menuItem" th:href="@{/demo/operate/table}">表格</a></li>
<li><a class="menuItem" th:href="@{/demo/operate/other}">其他</a></li> <li><a class="menuItem" th:href="@{/demo/operate/other}">其他</a></li>
</ul> </ul>
</li> </li>
<li> <a>报表<span class="fa arrow"></span></a> <li> <a>报表<span class="fa arrow"></span></a>
<ul class="nav nav-third-level"> <ul class="nav nav-third-level">
<li><a class="menuItem" th:href="@{/demo/report/echarts}">百度ECharts</a></li> <li><a class="menuItem" th:href="@{/demo/report/echarts}">百度ECharts</a></li>
<li><a class="menuItem" th:href="@{/demo/report/peity}">peity</a></li> <li><a class="menuItem" th:href="@{/demo/report/peity}">peity</a></li>
<li><a class="menuItem" th:href="@{/demo/report/sparkline}">sparkline</a></li> <li><a class="menuItem" th:href="@{/demo/report/sparkline}">sparkline</a></li>
<li><a class="menuItem" th:href="@{/demo/report/metrics}">图表组合</a></li> <li><a class="menuItem" th:href="@{/demo/report/metrics}">图表组合</a></li>
</ul> </ul>
</li> </li>
<li> <a>图标<span class="fa arrow"></span></a> <li> <a>图标<span class="fa arrow"></span></a>
<ul class="nav nav-third-level"> <ul class="nav nav-third-level">
<li><a class="menuItem" th:href="@{/demo/icon/fontawesome}">Font Awesome</a></li> <li><a class="menuItem" th:href="@{/demo/icon/fontawesome}">Font Awesome</a></li>
<li><a class="menuItem" th:href="@{/demo/icon/glyphicons}">Glyphicons</a></li> <li><a class="menuItem" th:href="@{/demo/icon/glyphicons}">Glyphicons</a></li>
</ul> </ul>
</li> </li>
<li> <li>
<a href="#"><i class="fa fa-sitemap"></i>四层菜单<span class="fa arrow"></span></a> <a href="#"><i class="fa fa-sitemap"></i>四层菜单<span class="fa arrow"></span></a>
<ul class="nav nav-third-level collapse"> <ul class="nav nav-third-level collapse">
<li> <li>
<a href="#" id="damian">三级菜单1<span class="fa arrow"></span></a> <a href="#" id="damian">三级菜单1<span class="fa arrow"></span></a>
<ul class="nav nav-third-level"> <ul class="nav nav-third-level">
<li> <li>
<a href="#">四级菜单1</a> <a href="#">四级菜单1</a>
</li> </li>
<li> <li>
<a href="#">四级菜单2</a> <a href="#">四级菜单2</a>
</li> </li>
</ul> </ul>
</li> </li>
<li><a href="#">三级菜单2</a></li> <li><a href="#">三级菜单2</a></li>
</ul> </ul>
</li> </li>
</ul> </ul>
</li> </li>
</ul> </ul>
</div> </div>
</nav> </nav>
<!--左侧导航结束--> <!--左侧导航结束-->
<!--右侧部分开始--> <!--右侧部分开始-->
<div id="page-wrapper" class="gray-bg dashbard-1"> <div id="page-wrapper" class="gray-bg dashbard-1">
<div class="row border-bottom"> <div class="row border-bottom">
<nav class="navbar navbar-static-top" role="navigation" style="margin-bottom: 0"> <nav class="navbar navbar-static-top" role="navigation" style="margin-bottom: 0">
<div class="navbar-header"> <div class="navbar-header">
<a class="navbar-minimalize minimalize-styl-2" style="color:#FFF;" href="#" title="收起菜单"> <a class="navbar-minimalize minimalize-styl-2" style="color:#FFF;" href="#" title="收起菜单">
<i class="fa fa-bars"></i> <i class="fa fa-bars"></i>
</a> </a>
</div> </div>
<ul class="nav navbar-top-links navbar-right welcome-message"> <ul class="nav navbar-top-links navbar-right welcome-message">
<!-- <li><a data-toggle="tooltip" data-trigger="hover" data-placement="bottom" title="开发文档" href="http://doc.ruoyi.vip/ruoyi" target="_blank"><i class="fa fa-question-circle"></i> 文档</a></li>--> <!-- <li><a data-toggle="tooltip" data-trigger="hover" data-placement="bottom" title="开发文档" href="http://doc.ruoyi.vip/ruoyi" target="_blank"><i class="fa fa-question-circle"></i> 文档</a></li>-->
<li><a data-toggle="tooltip" data-trigger="hover" data-placement="bottom" title="锁定屏幕" href="#" id="lockScreen"><i class="fa fa-lock"></i> 锁屏</a></li> <li><a data-toggle="tooltip" data-trigger="hover" data-placement="bottom" title="锁定屏幕" href="#" id="lockScreen"><i class="fa fa-lock"></i> 锁屏</a></li>
<li><a data-toggle="tooltip" data-trigger="hover" data-placement="bottom" title="全屏显示" href="#" id="fullScreen"><i class="fa fa-arrows-alt"></i> 全屏</a></li> <li><a data-toggle="tooltip" data-trigger="hover" data-placement="bottom" title="全屏显示" href="#" id="fullScreen"><i class="fa fa-arrows-alt"></i> 全屏</a></li>
<li class="dropdown user-menu"> <li class="dropdown user-menu">
<a href="javascript:void(0)" class="dropdown-toggle" data-hover="dropdown"> <a href="javascript:void(0)" class="dropdown-toggle" data-hover="dropdown">
<img th:src="(${#strings.isEmpty(user.avatar)}) ? @{/img/profile.jpg} : @{${user.avatar}}" th:onerror="this.src='img/profile.jpg'" class="user-image"> <img th:src="(${#strings.isEmpty(user.avatar)}) ? @{/img/profile.jpg} : @{${user.avatar}}" th:onerror="this.src='img/profile.jpg'" class="user-image">
<span class="hidden-xs">[[${#strings.defaultString(user.userName, '-')}]]</span> <span class="hidden-xs">[[${#strings.defaultString(user.userName, '-')}]]</span>
@ -204,57 +204,61 @@
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li class="mt5"> <li class="mt5">
<a th:href="@{/system/user/profile}" class="menuItem noactive"> <a th:href="@{/system/user/profile}" class="menuItem noactive">
<i class="fa fa-user"></i> 个人中心</a> <i class="fa fa-user"></i> 个人中心</a>
</li> </li>
<li> <li>
<a onclick="resetPwd()"> <a onclick="resetPwd()">
<i class="fa fa-key"></i> 修改密码</a> <i class="fa fa-key"></i> 修改密码</a>
</li>
<li>
<a onclick="resetUeky()">
<i class="fa fa-key"></i> UKey绑定</a>
</li> </li>
<li> <li>
<a onclick="switchSkin()"> <a onclick="switchSkin()">
<i class="fa fa-dashboard"></i> 切换主题</a> <i class="fa fa-dashboard"></i> 切换主题</a>
</li> </li>
<li> <li>
<a onclick="toggleMenu()"> <a onclick="toggleMenu()">
<i class="fa fa-toggle-off"></i> 横向菜单</a> <i class="fa fa-toggle-off"></i> 横向菜单</a>
</li> </li>
<li class="divider"></li> <li class="divider"></li>
<li> <li>
<a th:href="@{logout}"> <a th:href="@{logout}">
<i class="fa fa-sign-out"></i> 退出登录</a> <i class="fa fa-sign-out"></i> 退出登录</a>
</li> </li>
</ul> </ul>
</li> </li>
</ul> </ul>
</nav> </nav>
</div> </div>
<div class="row content-tabs" th:classappend="${#bools.isFalse(tagsView)} ? |hide|"> <div class="row content-tabs" th:classappend="${#bools.isFalse(tagsView)} ? |hide|">
<button class="roll-nav roll-left tabLeft"> <button class="roll-nav roll-left tabLeft">
<i class="fa fa-backward"></i> <i class="fa fa-backward"></i>
</button> </button>
<nav class="page-tabs menuTabs"> <nav class="page-tabs menuTabs">
<div class="page-tabs-content"> <div class="page-tabs-content">
<a href="javascript:;" class="active menuTab" th:data-id="@{/system/main}">首页</a> <a href="javascript:;" class="active menuTab" th:data-id="@{/system/main}">首页</a>
</div> </div>
</nav> </nav>
<button class="roll-nav roll-right tabRight"> <button class="roll-nav roll-right tabRight">
<i class="fa fa-forward"></i> <i class="fa fa-forward"></i>
</button> </button>
<a href="javascript:void(0);" class="roll-nav roll-right tabReload"><i class="fa fa-refresh"></i> 刷新</a> <a href="javascript:void(0);" class="roll-nav roll-right tabReload"><i class="fa fa-refresh"></i> 刷新</a>
</div> </div>
<a id="ax_close_max" class="ax_close_max" href="#" title="关闭全屏"> <i class="fa fa-times-circle-o"></i> </a> <a id="ax_close_max" class="ax_close_max" href="#" title="关闭全屏"> <i class="fa fa-times-circle-o"></i> </a>
<div class="row mainContent" id="content-main" th:classappend="${mainClass}"> <div class="row mainContent" id="content-main" th:classappend="${mainClass}">
<iframe class="RuoYi_iframe" name="iframe0" width="100%" height="100%" th:data-id="@{/system/main}" <iframe class="RuoYi_iframe" name="iframe0" width="100%" height="100%" th:data-id="@{/system/main}"
th:src="@{/system/main}" frameborder="0" seamless></iframe> th:src="@{/system/main}" frameborder="0" seamless></iframe>
</div> </div>
<div th:if="${footer}" class="footer"> <div th:if="${footer}" class="footer">
<div class="pull-right">© [[${copyrightYear}]] ZHKY Copyright </div> <div class="pull-right">© [[${copyrightYear}]] ZHKY Copyright </div>
</div> </div>
</div> </div>
<!--右侧部分结束--> <!--右侧部分结束-->
</div> </div>
<!-- 全局js --> <!-- 全局js -->
<script th:src="@{/js/jquery.min.js}"></script> <script th:src="@{/js/jquery.min.js}"></script>
@ -269,111 +273,119 @@
<script th:src="@{/ruoyi/index.js?v=20201208}"></script> <script th:src="@{/ruoyi/index.js?v=20201208}"></script>
<script th:src="@{/ajax/libs/fullscreen/jquery.fullscreen.js}"></script> <script th:src="@{/ajax/libs/fullscreen/jquery.fullscreen.js}"></script>
<script th:inline="javascript"> <script th:inline="javascript">
window.history.forward(1); window.history.forward(1);
var ctx = [[@{/}]]; var ctx = [[@{/}]];
var lockscreen = [[${session.lockscreen}]]; var lockscreen = [[${session.lockscreen}]];
if(lockscreen){window.top.location=ctx+"lockscreen";} if(lockscreen){window.top.location=ctx+"lockscreen";}
// 皮肤缓存 // 皮肤缓存
var skin = storage.get("skin"); var skin = storage.get("skin");
// history表示去掉地址的#)否则地址以"#"形式展示 // history表示去掉地址的#)否则地址以"#"形式展示
var mode = "history"; var mode = "history";
// 历史访问路径缓存 // 历史访问路径缓存
var historyPath = storage.get("historyPath"); var historyPath = storage.get("historyPath");
// 是否页签与菜单联动 // 是否页签与菜单联动
var isLinkage = true; var isLinkage = true;
// 本地主题优先,未设置取系统配置
if($.common.isNotEmpty(skin)){
$("body").addClass(skin.split('|')[0]);
$("body").addClass(skin.split('|')[1]);
} else {
$("body").addClass([[${sideTheme}]]);
$("body").addClass([[${skinName}]]);
}
/* 用户管理-重置密码 */ // 本地主题优先,未设置取系统配置
function resetPwd() { if($.common.isNotEmpty(skin)){
var url = ctx + 'system/user/profile/resetPwd'; $("body").addClass(skin.split('|')[0]);
$.modal.open("重置密码", url, '770', '380'); $("body").addClass(skin.split('|')[1]);
} } else {
$("body").addClass([[${sideTheme}]]);
/* 切换主题 */ $("body").addClass([[${skinName}]]);
function switchSkin() { }
layer.open({
type : 2,
shadeClose : true,
title : "切换主题",
area : ["530px", "386px"],
content : [ctx + "system/switchSkin", 'no']
})
}
/* 切换菜单 */ /* 用户管理-重置密码 */
function toggleMenu() { function resetPwd() {
$.modal.confirm("确认要切换成横向菜单吗?", function() { var url = ctx + 'system/user/profile/resetPwd';
$.get(ctx + 'system/menuStyle/topnav', function(result) { $.modal.open("重置密码", url, '770', '380');
window.location.reload(); }
});
})
}
/** 刷新时访问路径页签 */ /* 用户管理-UKey绑定 */
function applyPath(url) { function resetUeky() {
$('a[href$="' + decodeURI(url) + '"]').click(); var prefix = ctx + "system/user";
if (!$('a[href$="' + url + '"]').hasClass("noactive")) { var userId = [[${user.userId}]];
$('a[href$="' + url + '"]').parent("li").addClass("selected").parents("li").addClass("active").end().parents("ul").addClass("in"); var url = prefix + '/resetUeky/' + userId;
$.modal.open("UKey绑定", url, '770', '380');
} }
}
$(function() { /* 切换主题 */
var lockPath = storage.get('lockPath'); function switchSkin() {
if($.common.equals("history", mode) && window.performance.navigation.type == 1) { layer.open({
var url = storage.get('publicPath'); type : 2,
if ($.common.isNotEmpty(url)) { shadeClose : true,
applyPath(url); title : "切换主题",
} area : ["530px", "386px"],
} else if($.common.isNotEmpty(lockPath)) { content : [ctx + "system/switchSkin", 'no']
applyPath(lockPath); })
storage.remove('lockPath');
} else {
var hash = location.hash;
if ($.common.isNotEmpty(hash)) {
var url = hash.substring(1, hash.length);
applyPath(url);
} else {
if($.common.equals("history", mode)) {
storage.set('publicPath', "");
}
}
} }
/* 初始密码提示 */ /* 切换菜单 */
if([[${isDefaultModifyPwd}]]) { function toggleMenu() {
layer.confirm("您的密码还是初始密码,请修改密码!", { $.modal.confirm("确认要切换成横向菜单吗?", function() {
icon: 0, $.get(ctx + 'system/menuStyle/topnav', function(result) {
title: "安全提示", window.location.reload();
btn: ['确认' , '取消'], });
offset: ['30%'] })
}, function (index) {
resetPwd();
layer.close(index);
});
} }
/* 过期密码提示 */ /** 刷新时访问路径页签 */
if([[${isPasswordExpired}]]) { function applyPath(url) {
layer.confirm("您的密码已过期,请尽快修改密码!", { $('a[href$="' + decodeURI(url) + '"]').click();
icon: 0, if (!$('a[href$="' + url + '"]').hasClass("noactive")) {
title: "安全提示", $('a[href$="' + url + '"]').parent("li").addClass("selected").parents("li").addClass("active").end().parents("ul").addClass("in");
btn: ['确认' , '取消'], }
offset: ['30%']
}, function (index) {
resetPwd();
layer.close(index);
});
} }
$("[data-toggle='tooltip']").tooltip();
}); $(function() {
var lockPath = storage.get('lockPath');
if($.common.equals("history", mode) && window.performance.navigation.type == 1) {
var url = storage.get('publicPath');
if ($.common.isNotEmpty(url)) {
applyPath(url);
}
} else if($.common.isNotEmpty(lockPath)) {
applyPath(lockPath);
storage.remove('lockPath');
} else {
var hash = location.hash;
if ($.common.isNotEmpty(hash)) {
var url = hash.substring(1, hash.length);
applyPath(url);
} else {
if($.common.equals("history", mode)) {
storage.set('publicPath', "");
}
}
}
/* 初始密码提示 */
if([[${isDefaultModifyPwd}]]) {
layer.confirm("您的密码还是初始密码,请修改密码!", {
icon: 0,
title: "安全提示",
btn: ['确认' , '取消'],
offset: ['30%']
}, function (index) {
resetPwd();
layer.close(index);
});
}
/* 过期密码提示 */
if([[${isPasswordExpired}]]) {
layer.confirm("您的密码已过期,请尽快修改密码!", {
icon: 0,
title: "安全提示",
btn: ['确认' , '取消'],
offset: ['30%']
}, function (index) {
resetPwd();
layer.close(index);
});
}
$("[data-toggle='tooltip']").tooltip();
});
</script> </script>
</body> </body>
</html> </html>

@ -0,0 +1,98 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
<th:block th:include="include :: header('UKey绑定')" />
</head>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-user-ukey">
<input name="userId" type="hidden" th:value="${user.userId}" />
<div class="form-group">
<label class="col-sm-3 control-label is-required">请选择证书:</label>
<div class="col-sm-8">
<select class="form-control" id="id_cert_list" required onchange="select_cert(this.value)">
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label is-required">选择设备序列号:</label>
<div class="col-sm-8">
<select class="form-control" id="id_device_list" required onchange="select_device(this.value)">
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label is-required">设备序列号:</label>
<div class="col-sm-8">
<input class="form-control" type="text" required readonly id="id_selected_device_sn">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label is-required">选择的证书ID</label>
<div class="col-sm-8">
<input class="form-control" type="text" required readonly id="id_selected_cert_id" name="ukeyId" th:value="${user.ukeyId}">
</div>
</div>
</form>
</div>
<th:block th:include="include :: footer" />
<script th:src="@{/ruoyi/xtxasyn.js}"></script>
<script type="text/javascript">
function customFireEvent(objId, eventName) {
var obj = document.getElementById(objId);
if (obj == undefined) {
return;
}
if (obj.fireEvent) {
obj.fireEvent("on" + eventName);
} else if (obj.dispatchEvent) {
var e = document.createEvent('HTMLEvents');
e.initEvent(eventName, false, false);
obj.dispatchEvent(e);
}
}
function FillDeviceList() {
GetAllDeviceSN(function (retObj) {
var obj = document.getElementById("id_device_list");
if (obj == undefined) {
return;
}
var i, n = obj.length;
for (i = 0; i < n; i++) {
obj.remove(0);
}
var strDeviceList = retObj.retVal;
while (true) {
var pos = strDeviceList.indexOf(";");
if (pos <= 0) {
break;
}
var strOneDevice = strDeviceList.substring(0, pos);
var objItem = new Option(strOneDevice, strOneDevice);
obj.options.add(objItem);
var len = strDeviceList.length;
strDeviceList = strDeviceList.substring(pos + 1, len);
}
customFireEvent('id_cert_list', 'change');
customFireEvent('id_device_list', 'change');
});
}
function select_cert(value) {
$("#id_selected_cert_id").val(value);
}
function select_device(value) {
$("#id_selected_device_sn").val(value);
}
SetUserCertList("id_cert_list");
FillDeviceList();
SetOnUsbKeyChangeCallBack(FillDeviceList);
function submitHandler() {
if ($.validate.form()) {
$.operate.save(ctx + "system/user/resetUekySave", $('#form-user-ukey').serialize());
}
}
</script>
</body>
</html>
Loading…
Cancel
Save