From 09b41e8b24dae1d61a19db1af68b4e049dcc27d0 Mon Sep 17 00:00:00 2001 From: RuoYi <yzz_ivy@163.com> Date: Wed, 22 Nov 2023 09:20:42 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=88=97=E8=A1=A8=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E6=8A=BD=E5=B1=89=E6=95=88=E6=9E=9C=E8=AF=A6=E7=BB=86?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/system/SysUserController.java | 14 + .../main/resources/static/ruoyi/css/ry-ui.css | 31 +++ .../main/resources/static/ruoyi/js/ry-ui.js | 26 ++ .../resources/templates/system/user/user.html | 6 +- .../resources/templates/system/user/view.html | 252 ++++++++++++++++++ .../resources/mapper/system/SysUserMapper.xml | 2 +- 6 files changed, 329 insertions(+), 2 deletions(-) create mode 100644 ruoyi-admin/src/main/resources/templates/system/user/view.html diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java index 89f4857c..503bdf9c 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java @@ -162,6 +162,20 @@ public class SysUserController extends BaseController return prefix + "/edit"; } + /** + * 查询用户详细 + */ + @RequiresPermissions("system:user:list") + @GetMapping("/view/{userId}") + public String view(@PathVariable("userId") Long userId, ModelMap mmap) + { + userService.checkUserDataScope(userId); + mmap.put("user", userService.selectUserById(userId)); + mmap.put("roleGroup", userService.selectUserRoleGroup(userId)); + mmap.put("postGroup", userService.selectUserPostGroup(userId)); + return prefix + "/view"; + } + /** * 修改保存用户 */ diff --git a/ruoyi-admin/src/main/resources/static/ruoyi/css/ry-ui.css b/ruoyi-admin/src/main/resources/static/ruoyi/css/ry-ui.css index 15a136df..dc38e8e6 100644 --- a/ruoyi-admin/src/main/resources/static/ruoyi/css/ry-ui.css +++ b/ruoyi-admin/src/main/resources/static/ruoyi/css/ry-ui.css @@ -1008,6 +1008,37 @@ table.rc-table-resizing thead > th > a { padding-bottom:5px } +.form-control-plaintext { + display: block; + width: 100%; + padding-top: .286rem; + padding-bottom: .286rem; + margin-bottom: 0; + line-height: 1.57142857; + color: #212529; + background-color: transparent; + border: solid transparent; + border-width: 1px 0; + font-weight: 500; + border-bottom: 1px dashed #ccd5db; + min-height: 25px +} + +.form-control-plaintext-no-content { + display: block; + width: 100%; + padding-top: .286rem; + padding-bottom: .286rem; + margin-bottom: 0; + line-height: 1.57142857; + color: #ddd !important; + background-color: transparent; + border: solid transparent; + border-width: 1px 0; + border-bottom: 1px dashed #ccd5db; + min-height: 25px +} + .main-content { background-color: #ffffff; color: inherit; diff --git a/ruoyi-admin/src/main/resources/static/ruoyi/js/ry-ui.js b/ruoyi-admin/src/main/resources/static/ruoyi/js/ry-ui.js index fe9f033f..6c45241d 100644 --- a/ruoyi-admin/src/main/resources/static/ruoyi/js/ry-ui.js +++ b/ruoyi-admin/src/main/resources/static/ruoyi/js/ry-ui.js @@ -989,6 +989,26 @@ var table = { createMenuItem(url, title); closeItem(dataId); }, + // 右侧弹出窗口打开 + popupRight: function(title, url){ + var width = 150; + if (top.location !== self.location) { + if ($(top.window).outerWidth() < 400) { + width = 50; + } + } + top.layer.open({ + type: 2, + offset: 'r', + anim: 'slideLeft', + move: false, + title: title, + shade: 0.3, + shadeClose: true, + area: [($(window).outerWidth() - width) + 'px', '100%'], + content: url + }); + }, // 关闭选项卡 closeTab: function (dataId) { closeItem(dataId); @@ -1195,6 +1215,12 @@ var table = { } return url; }, + // 右侧弹出详情 + view: function(id){ + table.set(); + var url = table.options.viewUrl.replace("{id}", id); + $.modal.popupRight(table.options.modalName + "信息详情", url); + }, // 保存信息 刷新表格 save: function(url, data, callback) { var config = { diff --git a/ruoyi-admin/src/main/resources/templates/system/user/user.html b/ruoyi-admin/src/main/resources/templates/system/user/user.html index da6f03e2..a241941b 100644 --- a/ruoyi-admin/src/main/resources/templates/system/user/user.html +++ b/ruoyi-admin/src/main/resources/templates/system/user/user.html @@ -116,6 +116,7 @@ function queryUserList() { var options = { url: prefix + "/list", + viewUrl: prefix + "/view/{id}", createUrl: prefix + "/add", updateUrl: prefix + "/edit/{id}", removeUrl: prefix + "/remove", @@ -135,7 +136,10 @@ { field: 'loginName', title: '登录名称', - sortable: true + sortable: true, + formatter: function (value, row, index) { + return '<a href="javascript:void(0)" onclick="$.operate.view(\'' + row.userId + '\')">' + value + '</a>'; + } }, { field: 'userName', diff --git a/ruoyi-admin/src/main/resources/templates/system/user/view.html b/ruoyi-admin/src/main/resources/templates/system/user/view.html new file mode 100644 index 00000000..10ed6066 --- /dev/null +++ b/ruoyi-admin/src/main/resources/templates/system/user/view.html @@ -0,0 +1,252 @@ +<!DOCTYPE html> +<html lang="zh" xmlns:th="http://www.thymeleaf.org" > +<head> + <th:block th:include="include :: header('修改用户')" /> +</head> +<body> + <div class="main-content"> + <form class="form-horizontal" id="form-user-edit" th:object="${user}"> + <h4 class="form-header h4">基本信息</h4> + <div class="row"> + <div class="col-sm-6"> + <div class="form-group"> + <label class="col-sm-4 control-label">用户名称:</label> + <div class="col-sm-8"> + <p class="form-control-plaintext" th:text="*{userName}"></p> + </div> + </div> + </div> + <div class="col-sm-6"> + <div class="form-group"> + <label class="col-sm-4 control-label">归属部门:</label> + <div class="col-sm-8"> + <p class="form-control-plaintext" th:text="*{dept.deptName}"></p> + </div> + </div> + </div> + </div> + <div class="row"> + <div class="col-sm-6"> + <div class="form-group"> + <label class="col-sm-4 control-label">手机号码:</label> + <div class="col-sm-8"> + <p class="form-control-plaintext" th:text="*{phonenumber}"></p> + </div> + </div> + </div> + <div class="col-sm-6"> + <div class="form-group"> + <label class="col-sm-4 control-label">邮箱:</label> + <div class="col-sm-8"> + <p class="form-control-plaintext" th:text="*{email}"></p> + </div> + </div> + </div> + </div> + <div class="row"> + <div class="col-sm-6"> + <div class="form-group"> + <label class="col-sm-4 control-label">登录账号:</label> + <div class="col-sm-8"> + <p class="form-control-plaintext" th:text="*{loginName}"></p> + </div> + </div> + </div> + <div class="col-sm-6"> + <div class="form-group"> + <label class="col-sm-4 control-label">用户状态:</label> + <div class="col-sm-8"> + <p class="form-control-plaintext" th:text="*{status == '0' ? '正常' : '停用'}"></p> + </div> + </div> + </div> + </div> + <div class="row"> + <div class="col-sm-6"> + <div class="form-group"> + <label class="col-sm-4 control-label">岗位:</label> + <div class="col-sm-8"> + <p class="form-control-plaintext">[[${#strings.defaultString(postGroup, '无岗位')}]]</p> + </div> + </div> + </div> + <div class="col-sm-6"> + <div class="form-group"> + <label class="col-sm-4 control-label">用户性别:</label> + <div class="col-sm-8"> + <p class="form-control-plaintext" th:text="*{@dict.getLabel('sys_user_sex', sex)}"></p> + </div> + </div> + </div> + </div> + <div class="row"> + <div class="col-sm-12"> + <div class="form-group"> + <label class="col-xs-2 control-label">角色:</label> + <div class="col-xs-10"> + <p class="form-control-plaintext">[[${#strings.defaultString(roleGroup, '无角色')}]]</p> + </div> + </div> + </div> + </div> + <h4 class="form-header h4">其他信息</h4> + <div class="row"> + <div class="col-sm-6"> + <div class="form-group"> + <label class="col-sm-4 control-label">创建者:</label> + <div class="col-sm-8"> + <p class="form-control-plaintext" th:text="*{createBy}"></p> + </div> + </div> + </div> + <div class="col-sm-6"> + <div class="form-group"> + <label class="col-sm-4 control-label">创建时间:</label> + <div class="col-sm-8"> + <p class="form-control-plaintext" th:text="*{#dates.format(createTime, 'yyyy-MM-dd HH:mm:ss')}"></p> + </div> + </div> + </div> + </div> + <div class="row"> + <div class="col-sm-6"> + <div class="form-group"> + <label class="col-sm-4 control-label">更新者:</label> + <div class="col-sm-8"> + <p class="form-control-plaintext" th:text="*{updateBy}"></p> + </div> + </div> + </div> + <div class="col-sm-6"> + <div class="form-group"> + <label class="col-sm-4 control-label">更新时间:</label> + <div class="col-sm-8"> + <p class="form-control-plaintext" th:text="*{#dates.format(updateTime, 'yyyy-MM-dd HH:mm:ss')}"></p> + </div> + </div> + </div> + </div> + <div class="row"> + <div class="col-sm-6"> + <div class="form-group"> + <label class="col-sm-4 control-label">最后登录IP:</label> + <div class="col-sm-8"> + <p class="form-control-plaintext" th:text="*{loginIp}"></p> + </div> + </div> + </div> + <div class="col-sm-6"> + <div class="form-group"> + <label class="col-sm-4 control-label">最后登录时间:</label> + <div class="col-sm-8"> + <p class="form-control-plaintext" th:text="*{#dates.format(loginDate, 'yyyy-MM-dd HH:mm:ss')}"></p> + </div> + </div> + </div> + </div> + <div class="row"> + <div class="col-sm-12"> + <div class="form-group"> + <label class="col-xs-2 control-label">备注:</label> + <div class="col-xs-10"> + <p class="form-control-plaintext" th:text="*{remark}"></p> + </div> + </div> + </div> + </div> + </form> + </div> + <th:block th:include="include :: footer" /> + <th:block th:include="include :: select2-js" /> + <script type="text/javascript"> + var prefix = ctx + "system/user"; + + $("#form-user-edit").validate({ + onkeyup: false, + rules:{ + email:{ + email:true, + remote: { + url: prefix + "/checkEmailUnique", + type: "post", + dataType: "json", + data: { + "userId": function() { + return $("#userId").val(); + }, + "email": function() { + return $.common.trim($("#email").val()); + } + } + } + }, + phonenumber:{ + isPhone:true, + remote: { + url: prefix + "/checkPhoneUnique", + type: "post", + dataType: "json", + data: { + "userId": function() { + return $("#userId").val(); + }, + "phonenumber": function() { + return $.common.trim($("#phonenumber").val()); + } + } + } + }, + }, + messages: { + "email": { + remote: "Email已经存在" + }, + "phonenumber":{ + remote: "手机号码已经存在" + } + }, + focusCleanup: true + }); + + function submitHandler() { + if ($.validate.form()) { + var data = $("#form-user-edit").serializeArray(); + var status = $("input[id='status']").is(':checked') == true ? 0 : 1; + var roleIds = $.form.selectCheckeds("role"); + var postIds = $.form.selectSelects("post"); + data.push({"name": "status", "value": status}); + data.push({"name": "roleIds", "value": roleIds}); + data.push({"name": "postIds", "value": postIds}); + $.operate.saveTab(prefix + "/edit", data); + } + } + + /* 用户管理-修改-选择部门树 */ + function selectDeptTree() { + var deptId = $.common.isEmpty($("#treeId").val()) ? "100" : $("#treeId").val(); + var url = ctx + "system/user/selectDeptTree/" + deptId; + var options = { + title: '选择部门', + width: "380", + url: url, + callBack: doSubmit + }; + $.modal.openOptions(options); + } + + function doSubmit(index, layero){ + var body = $.modal.getChildFrame(index); + $("#treeId").val(body.find('#treeId').val()); + $("#treeName").val(body.find('#treeName').val()); + $.modal.close(index); + } + + $(function() { + $('#post').select2({ + placeholder: "请选择岗位", + allowClear: true + }); + }) + </script> +</body> +</html> \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml index 0ae40cce..c7bfaf69 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -50,7 +50,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" </resultMap> <sql id="selectUserVo"> - select u.user_id, u.dept_id, u.login_name, u.user_name, u.user_type, u.email, u.avatar, u.phonenumber, u.sex, u.password, u.salt, u.status, u.del_flag, u.login_ip, u.login_date, u.pwd_update_date, u.create_time, u.remark, + select u.user_id, u.dept_id, u.login_name, u.user_name, u.user_type, u.email, u.avatar, u.phonenumber, u.sex, u.password, u.salt, u.status, u.del_flag, u.login_ip, u.login_date, u.pwd_update_date, u.create_by, u.create_time, u.update_by, u.update_time, u.remark, d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status, r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status from sys_user u