用户管理 新增用户

This commit is contained in:
jjLv 2024-07-26 14:09:55 +08:00
parent 291c86324e
commit 44f298eb50
9 changed files with 496 additions and 1 deletions

View File

@ -86,6 +86,34 @@ public class UserController {
return ServerResponse.createErroe("操作失败"); return ServerResponse.createErroe("操作失败");
} }
@PostMapping(value = "addTemp")
@DecryptAndVerify(decryptedClass = UserDto.class)//加解密统一管理
@LogAnnotation(operModul = "系统管理-用户管理", operation = "新增用户", operDesc = "系统级事件",operType="新增")
@PreAuthorize("@pms.hasPermission('sys:user:add')")
public ServerResponse saveUserTemp(EncryptedReq<UserDto> data) {
try {
SysUser u = userService.getUser(data.getData().getLoginName());
if (u != null) {
return ServerResponse.createErroe("登录名"+data.getData().getLoginName() + "已存在");
}
SysUser u3 = userService.getUserCode(data.getData().getUserCode());
if(u3 != null){
return ServerResponse.createErroe("工号"+data.getData().getUserCode() + "已存在");
}
if(StringHelper.isNotEmpty(data.getData().getPhone())){
SysUser u2 = userService.getPhone(data.getData().getPhone());
if (u2 != null) {
return ServerResponse.createErroe("手机号"+data.getData().getPhone() + "已存在");
}
}
ServerResponse response=userService.saveUser(data.getData());
return response;
}catch (Exception e){
log.error(e.toString(),e);
}
return ServerResponse.createErroe("操作失败");
}
@PostMapping(value = "updateEnableState") @PostMapping(value = "updateEnableState")
@DecryptAndVerify(decryptedClass = UserDto.class) @DecryptAndVerify(decryptedClass = UserDto.class)
@LogAnnotation(operModul = "系统管理-用户管理", operation = "修改启用状态", operDesc = "业务级事件",operType="修改") @LogAnnotation(operModul = "系统管理-用户管理", operation = "修改启用状态", operDesc = "业务级事件",operType="修改")

View File

@ -34,6 +34,8 @@ public interface UserDao {
SysUser getUser(String username); SysUser getUser(String username);
SysUser getUserCode(String userCode);
@Update("update sys_user t set t.password = #{password} where t.id = #{id}") @Update("update sys_user t set t.password = #{password} where t.id = #{id}")
int changePassword(@Param("id") Long id, @Param("password") String password); int changePassword(@Param("id") Long id, @Param("password") String password);

View File

@ -27,6 +27,8 @@ public interface UserService {
SysUser getUser(String loginName); SysUser getUser(String loginName);
SysUser getUserCode(String userCode);
ServerResponse changePassword(SysUser user); ServerResponse changePassword(SysUser user);
void password(SysUser user); void password(SysUser user);

View File

@ -71,6 +71,16 @@ public class UserServiceImpl implements UserService {
return null; return null;
} }
@Override
public SysUser getUserCode(String userCode) {
try{
return userDao.getUserCode(userCode);
}catch (Exception e){
log.error(e.toString(),e);
}
return null;
}
@Override @Override
public ServerResponse changePassword(SysUser user) { public ServerResponse changePassword(SysUser user) {
Long userId = UserUtil.getLoginUser().getId(); Long userId = UserUtil.getLoginUser().getId();

View File

@ -66,6 +66,15 @@
where t.login_name = #{username} where t.login_name = #{username}
</select> </select>
<select id="getUserCode" parameterType="String" resultType="com.bonus.aqgqj.model.SysUser">
select t.id,t.user_name as username,t.login_name as loginName,
t.password,t.state,t.role_id as roleId,t.login_type loginType,t.new_user newUser,
sr.role_code AS roleCode,sr.role_name AS roleName,t.team_id AS teamId
from sys_user t
LEFT JOIN sys_role sr ON t.role_id = sr.role_id AND sr.del_flag = 0
where t.user_code = #{userCode} limit 1
</select>
<sql id="where"> <sql id="where">
<where> <where>
<if test="username != null and username != ''"> <if test="username != null and username != ''">

View File

@ -0,0 +1,299 @@
let form, layer, dtree, util, idParam, phoneParam;
let arr = ['background', 'web', 'mobile', 'wx'];
let background, web, mobile, wx;
let data = [], appResList = [];
// 角色下拉选
let roleList;
let orgData;
let teamList;
// showDictSelect("orgId", "org_id");
// showDictSelect("sex", "sex");
// showDictSelect("unit", "unit");
// showDictSelect("dept", "dept");
function setParams(params) {
console.log(params)
idParam = JSON.parse(params).id;
layui.config({
base: "../../../js/layui-v2.6.8/dtree/", //此处路径请自行处理, 可以使用绝对路径
}).extend({
dtree: 'dtree'
}).use(['form', 'layer', 'dtree', 'util'], function () {
layer = layui.layer;
form = layui.form;
util = layui.util;
dtree = layui.dtree;
var $ = layui.jquery;
roleList = getRoleSelected();
teamList = getTeamSelected();
orgData = getOrgTree();
if (idParam) {
getUserById();
}
// form.render();
form.render("checkbox","select");//重新渲染页面checkbox控件
form.on('submit(formData)', function (data) {
data.field.id = $('#id').val();
console.log( data.field.orgId_select_nodeId);
if(!data.field.orgId_select_nodeId){
return layer.alert("请选择组织机构!", {icon: 2})
}
let phone = $('#phone').val();
if(phone){
if (!(/^1[3456789]\d{9}$/.test(phone))) {
return layer.alert("请输入正确的手机号", {icon: 2})
}
}
saveData(data);
});
});
var a = 0;
$(".secreteyesk1").hide();
$(".secreteyesk2").hide();
$('.eyes1').click(function() {
a += 1;
if (a % 2 == 0) {
$('.secreteyesk1').hide();
$('.secreteyes1').show();
$('.secret1').prop('type', 'password');
} else if (a % 2 != 0) {
$('.secreteyes1').hide();
$('.secreteyesk1').show();
$('.secret1').prop('type', 'text');
}
})
}
/**
* 获取角色数据
*/
function getRoleSelected() {
let url = dataUrl + '/roles/all';
ajaxRequest(url, "POST", null, true, function () {
}, function (result) {
if (result.code === 200) {
setSelectValue(result.data, 'roleId');
} else {
layer.alert(result.msg, {icon: 2})
}
}, function (xhr) {
error(xhr)
});
}
/**
* 获取班组数据
*/
function getTeamSelected() {
let url = dataUrl + '/samples/getTeamSelected';
ajaxRequest(url, "POST", null, true, function () {
}, function (result) {
if (result.code === 200) {
setSelectValue(result.data, 'teamId');
} else {
layer.alert(result.msg, {icon: 2})
}
}, function (xhr) {
error(xhr)
});
}
function setOrgTree(data){
orgTree = dtree.renderSelect({
elem: "#orgId",
data: data,
dataFormat: "list",
skin: "laySimple",
line: true, // 显示树线
checkbar: false, //开启复选框
done: function (data, url, first) {
console.log($('#orgId').val())
if(first) {
var params = dtree.dataInit("orgId", $('#orgId').val());
var selectParam = dtree.selectVal("orgId");
console.log(params)
}
}
});
}
function getOrgTree() {
let data = [];
let url = dataUrl + '/users/getOrg';
ajaxRequest(url, "POST", null, true, function () {
}, function (result) {
if (result.code === 200) {
console.log(result,"getOrgTree")
data = result.data;
setOrgTree(data)
} else {
layer.alert(result.msg, {icon: 2})
}
}, function (xhr) {
error(xhr)
});
return data;
}
// 根据id获取用户信息
function getUserById() {
let loadingMsg = layer.msg("数据加载中,请稍候...", {icon: 16, scrollbar: false, time: 0,});
let url = dataUrl + "/users/getById";
let params = {
id: idParam
}
console.log(params)
params={
encryptedData:encryptCBC(JSON.stringify(params))
}
ajaxRequest(url, "POST", params, true, function () {
}, function (result) {
layer.close(loadingMsg); // 关闭提示层
if (result.code === 200) {
console.log(result)
setFormData(result.data);
} else if (result.code === 500) {
layer.alert(result.msg, {icon: 2})
}
}, function (xhr) {
layer.close(loadingMsg); // 关闭提示层
error(xhr)
});
}
// 设置表单内容
function setFormData(data) {
console.log("data:",data)
if (data) {
$("#password").removeAttr("lay-verify");
$("#pwd").css("display","none");
$('#id').val(data.id)
// $('#userCode').val(data.userCode)
$('#username').val(data.username)
$('#loginName').val(data.loginName)
$('#phone').val(data.phone)
// 设置选中状态
if (data.sex === 1) {
document.getElementById('sex_1').checked = true;
} else if (data.sex === 0) {
document.getElementById('sex_0').checked = true;
}
if (data.userType === '1') {
document.getElementById('userType_1').checked = true;
} else if (data.userType === '0') {
document.getElementById('userType_0').checked = true;
}
if (data.state === 1) {
document.getElementById('state_1').checked = true;
} else if (data.state === 0) {
document.getElementById('state_0').checked = true;
}
$('#type_'+data.type).attr('checked', true)
$('#orgId').val(data.orgId)
$('#roleId').val(data.roleId)
$('#roleId option[value=' + data.roleId + ']').attr('selected', true)
$('#teamId').val(data.teamId)
$('#teamId option[value=' + data.teamId + ']').attr('selected', true)
var arrCB = data.loginTypes;
for (var j = 0; j < arrCB.length; j++) {
var cbthis = $("input[name='loginType']");
for (var i = 0; i < cbthis.length; i++) {
if (cbthis[i].value == arrCB[j]) {
cbthis[i].checked = true;
}
}
}
phoneParam = data.phone;
layui.form.render();
}
}
function saveData2() {
$('#formSubmit').trigger('click')
}
// 保存数据
function saveData(data) {
let loadingMsg = layer.msg('数据上传中,请稍候...', {icon: 16, scrollbar: false, time: 0});
let url = dataUrl + "/users/addTemp";
let params = data.field;
var arr_box = [];//固定复选框
$('#cbGuDing input[type=checkbox]:checked').each(function () {
arr_box.push($(this).val());
});
console.log(arr_box)
params.loginType = arr_box.join()
params.orgId = params.orgId_select_nodeId;
if(params.id !=""){
url = dataUrl + "/users/update";
}
console.log(params)
params={
encryptedData:encryptCBC(JSON.stringify(params))
}
ajaxRequest(url, "POST", params, true, function () {
$('.save').addClass("layui-btn-disabled").attr("disabled", true);
$('.cancel').addClass("layui-btn-disabled").attr("disabled", true);
}, function (result) {
layer.close(loadingMsg); // 关闭提示层
if (result.code === 200) {
closePage(1);
parent.layer.msg(result.msg, {icon: 1});
} else {
layer.alert(result.msg, {icon: 2})
$('.save').removeClass("layui-btn-disabled").attr("disabled", false);
$('.cancel').removeClass("layui-btn-disabled").attr("disabled", false);
}
}, function (xhr) {
layer.close(loadingMsg); // 关闭提示层
$('.save').removeClass("layui-btn-disabled").attr("disabled", false);
$('.cancel').removeClass("layui-btn-disabled").attr("disabled", false);
error(xhr)
});
}
// 手机号名称是否重复
function isRepeat(paramName, phone) {
let data = {};
let url = dataUrl + "/sys/user/isRepeat";
let params = {
'value': phone,
'paramName': paramName
}
ajaxRequest(url, "POST", params, false, function () {
}, function (result) {
if (result.code === 200) {
data = result
} else if (result.code === 500) {
}
}, function (xhr) {
error(xhr)
});
return data;
}
function getPasswordConfig(callback) {
let url = dataUrl + "/users/getPasswordConfig"
ajaxRequest(url, "POST", null, true, function () {}, function (result) {
// layer.close(loadingMsg); // 关闭提示层
if (result.status === 200) {
callback(result.data);
} else if (result.status === 500) {
layer.alert(result.msg, {icon: 2})
}
}, function (xhr) {
error(xhr)
});
}
// 关闭页面
function closePage(type) {
let index = parent.layer.getFrameIndex(window.name); //先得到当前 iframe层的索引
parent.layer.close(index); //再执行关闭
if (type === 1) {
parent.reloadData()
}
}

View File

@ -211,6 +211,14 @@ function addData(id) {
openIframe2("addOrEditUser", title, "child/userForm.html", '1000px', '625px', param); openIframe2("addOrEditUser", title, "child/userForm.html", '1000px', '625px', param);
} }
function addDataTemp(id) {
let title = '新增用户'
let param = {
'id': id
}
openIframe2("addOrEditUserTemp", title, "child/userFormTemp.html", '1000px', '625px', param);
}
/*删除用户*/ /*删除用户*/
function delData(id) { function delData(id) {
layer.confirm("确定删除吗?", { layer.confirm("确定删除吗?", {

View File

@ -0,0 +1,137 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="../../../js/layui-v2.6.8/css/layui.css" media="all">
<link rel="stylesheet" href="../../../js/layui-v2.6.8/dtree/dtree.css">
<link rel="stylesheet" href="../../../js/layui-v2.6.8/dtree/font/dtreefont.css">
<link rel="stylesheet" href="../../../css/dataForm.css">
<script src="../../../js/libs/jquery-2.1.1.min.js" charset="UTF-8" type="text/javascript"></script>
<script src="../../../js/layui-v2.6.8/layui.js" charset="UTF-8" type="text/javascript"></script>
<script src="../../../js/publicJs.js"></script>
<script src="../../../js/select.js"></script>
<script src="../../../js/dict.js"></script>
<script src="../../../js/ajaxRequest.js"></script>
<script src="../../../js/my/aes.js"></script>
<title>用户-新增/修改</title>
</head>
<body>
<div id="main-box">
<form class="layui-form" onsubmit="return false;">
<input hidden id="id">
<div class="layui-form-item" style="margin-top: 2%;">
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>登录名</label>
<div class="layui-input-inline">
<input class="layui-input" id="loginName" name="loginName" autocomplete="off"
lay-verify="required" maxlength="20">
</div>
</div>
<div class="layui-form-item" style="margin-top: 2%;">
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>用户名</label>
<div class="layui-input-inline">
<input class="layui-input" id="username" name="username" autocomplete="off"
lay-verify="required" maxlength="10">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"> <i style="padding: 0 10px;">*</i> 性别</label>
<div class="layui-input-block" >
<input type="radio" id="sex_1" name="sex" value="1" title="男" checked>
<input type="radio" id="sex_0" name="sex" value="0" title="女">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>单位部门</label>
<div class="layui-input-inline">
<ul id="orgId" class="dtree" data-id="0"></ul>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>角色</label>
<div class="layui-input-inline">
<select id="roleId" lay-verify="required" name="roleId" class="form-control input-sm">
</select>
</div>
</div>
<div class="layui-form-item" style="margin-top: 2%;">
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>工号</label>
<div class="layui-input-inline">
<input class="layui-input" id="UserCode" name="UserCode" autocomplete="off"
lay-verify="required" maxlength="20">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">班组</label>
<div class="layui-input-inline">
<select id="teamId" name="teamId" class="form-control input-sm">
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>联系电话</label>
<div class="layui-input-inline">
<input class="layui-input" autocomplete="off"
lay-verify="isRepeat |required" maxlength="11" id="phone" name="phone">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"> <i style="padding: 0 10px;">*</i> 用户类型:</label>
<div class="layui-input-block" >
<input type="radio" id="userType_1" name="userType" value="1" title="外部用户" checked>
<input type="radio" id="userType_0" name="userType" value="0" title="内部用户">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"> <i style="padding: 0 10px;">*</i> 是否启用:</label>
<div class="layui-input-block" >
<input type="radio" id="state_1" name="state" value="1" title="启用" checked>
<input type="radio" id="state_0" name="state" value="0" title="关闭">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>登录权限</label>
<div class="layui-input-inline" id="cbGuDing" >
<input type="checkbox" name="loginType" value="1" title="后台" lay-skin="primary" checked>
<input type="checkbox" name="loginType" value="2" title="大屏" lay-skin="primary">
<input type="checkbox" name="loginType" value="3" title="app" lay-skin="primary">
<input type="hidden" id="loginType" />
</div>
</div>
<div class="layui-form-item" style="margin-top: 2%;" id="pwd">
<label class="layui-form-label"><i style="padding: 0 10px;">*</i>密码</label>
<div class="layui-input-inline password" >
<input class="layui-input secret1" type="password" id="password" name="password" autocomplete="off"
lay-verify="required" maxlength="50">
<span class="eyes1">
<img class="secreteyes1 fa" src="../../../img/by.gif"> <!-- 闭眼 -->
<img class="secreteyesk1 none fa" src="../../../img/ky.gif">
</span>
</div>
</div>
<button type="submit" id="formSubmit" class="layui-btn" lay-submit="" lay-filter="formData"
style="display: none;"></button>
</form>
</div>
<div class="btn-box">
<button class="layui-btn layui-btn-norma save" onclick="saveData2()">确定</button>
<button class="layui-btn layui-btn-primary cancel" onclick="closePage()">取消</button>
</div>
</body>
<script src="../../../js/system/child/userFormTemp.js" charset="UTF-8" type="text/javascript"></script>
</html>

View File

@ -53,7 +53,7 @@
<!-- <button type="button" class="layui-btn layui-btn-normal layui-btn-sm btn-1" onclick="reset()">重置--> <!-- <button type="button" class="layui-btn layui-btn-normal layui-btn-sm btn-1" onclick="reset()">重置-->
<!-- </button>--> <!-- </button>-->
<button type="button" class="layui-btn layui-btn-primary layui-btn-sm btn-2" <button type="button" class="layui-btn layui-btn-primary layui-btn-sm btn-2"
onclick="addData(null)"> onclick="addDataTemp(null)">
<div class="layout" style="justify-content: space-around;"><img <div class="layout" style="justify-content: space-around;"><img
src="../../img/form/add_icon3.png"> src="../../img/form/add_icon3.png">
<p>新增</p></div> <p>新增</p></div>