普通管理员管理:
新增普通管理员:
前端效果:
前端代码:
<body>
<div class="layui-fluid">
<div class="layui-row">
<div class="layui-form">
<div class="layui-form-item">
<label for="loginname" class="layui-form-label">
<span class="x-red">*</span>登录名</label>
<div class="layui-input-inline">
<input type="text" id="loginname" name="loginname" lay-verify="required|loginname" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label for="L_loginpassword" class="layui-form-label">
<span class="x-red">*</span>设置登录密码</label>
<div class="layui-input-inline">
<input type="password" id="L_loginpassword" name="loginpassword" lay-verify="required|loginpassword" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label for="L_confirmloginpassword" class="layui-form-label">
<span class="x-red">*</span>确认密码</label>
<div class="layui-input-inline">
<input type="password" id="L_confirmloginpassword" name="confirmloginpassword" lay-verify="required|confirmloginpassword" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"></label>
<button class="layui-btn" lay-filter="submit" lay-submit="">保存</button>
</div>
</div>
</div>
</div>
<script>
layui.use(['form', 'layer', 'upload'], function () {
$ = layui.jquery;
var form = layui.form,
upload = layui.upload,
layer = layui.layer;
//自定义验证规则
form.verify({
loginname: function (value) {
var code;
$.ajax({
url: "/smalladmin/checkloginname",
type: "GET",
async: false, //关闭异步,当success返回结果后才执行ajax之后的内容
data: {"loginname": value},
success: function (s) {
code = s;
}
});
if (code != true) {
return '登录名重复,请重新输入!';
}
},
loginpassword: [/(.+){6,12}$/, '密码必须6到12位'],
confirmloginpassword: function () {
if ($('#L_confirmloginpassword').val() != $('#L_loginpassword').val()) {
return '两次密码不一致';
}
}
});
//监听提交
form.on('submit(submit)', function (data) {
console.log(data.field);
$.ajax({
url: "/smalladmin/addadmin",
type: "post",
data: data.field,
success: function (s) {
if (s == true) {
layer.alert("新增普通管理员信息成功!", {
icon: 6
}, function () {
parent.layer.closeAll();
parent.location.href = "/admin/sysindex";
});
} else {
layer.msg("登录名重复!", function () {
});
}
},
error: function () {
layer.msg("接口异常!", function () {
});
}
});
});
});
</script>
</body>
后端代码:
SmalladminController
/**
* 超级管理员,新增普通管理员页面
*/
@GetMapping("/addadminpage")
public String adduserpage() {
return "smalladmin/addadminpage";
}
/**
* 超级管理员新增普通管理员,判断新增普通管理员登录名是否重复
*/
@GetMapping("/checkloginname")
@ResponseBody
public boolean checkaddadminloginname(@RequestParam("loginname") String loginname) {
return smalladminService.checkaddadminloginname(loginname);
}
/**
* 超级管理员新增普通管理员信息
*/
@PostMapping("/addadmin")
@ResponseBody
public boolean addadmin(@RequestParam("loginname") String loginname,@RequestParam("loginpassword") String loginpassword,@RequestParam("confirmloginpassword") String confirmloginpassword) {
return smalladminService.addadmin(loginname,loginpassword);
}
@GetMapping("/updateadminpage")
public String updateadminpage() {
return "smalladmin/updateadminpage";
}
SmalladminService
/**
* 超级管理员新增普通管理员,判断新增普通管理员登录名是否重复
*/
boolean checkaddadminloginname(String loginname);
/**
* 超级管理员新增普通管理员信息
*/
boolean addadmin(String loginname, String loginpassword);
SmalladminServicelpml
/**
* 超级管理员新增普通管理员,判断新增普通管理员登录名是否重复
*/
@Override
public boolean checkaddadminloginname(String loginname) {
Smalladmin smalladmin=smalladminMapper.selectaddadminloginname(loginname);
return smalladmin==null;
}
/**
* 超级管理员新增普通管理员信息
*/
@Override
public boolean addadmin(String loginname, String loginpassword) {
return smalladminMapper.addsmalladmin(loginname,loginpassword);
}
SmalladminMapper
/**
* 超级管理员新增普通管理员时,检查登录名是否重复
* @param loginname
* @return
*/
Smalladmin selectaddadminloginname(String loginname);
/**
* 超级管理员新增普通管理员信息
* @param loginname
* @param loginpassword
* @return
*/
boolean addsmalladmin(@Param("loginname") String loginname,@Param("loginpassword") String loginpassword);
SmalladminMapper.xml
<select id="selectaddadminloginname" resultType="com.homestay.pojo.Smalladmin">
select
<include refid="Base_Column_List"></include>
from smalladmin
where sname=#{loginname}
</select>
<insert id="addsmalladmin">
insert into smalladmin(sname,spassword)
values (#{loginname},#{loginpassword})
</insert>
测试:
登录名重复:
必填项为空:
两次密码不一样:
新增成功:
普通管理员分页查询:
前端效果:
前端代码:
<body>
<div class="layui-fluid">
<div class="layui-row layui-col-space15">
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-body ">
<form class="layui-form layui-col-space5">
<div class="layui-inline layui-show-xs-block">
<input type="text" name="dname" placeholder="管理员名称" autocomplete="off" class="layui-input">
</div>
<div class="layui-inline layui-show-xs-block">
<button class="layui-btn" lay-submit="" lay-filter="search_btn">
<i class="layui-icon"></i>
</button>
</div>
<a class="layui-btn layui-btn-small" style="line-height:1.6em;margin-top:3px;float:right" onclick="reload();" title="刷新">
<i class="layui-icon layui-icon-refresh" style="line-height:30px"></i>
</a>
</form>
</div>
<div class="layui-card-body ">
<table id="departmenList" lay-filter="departmenList"></table>
</div>
</div>
</div>
</div>
</div>
<script type="text/html" id="departmenListBar">
<a class="layui-btn layui-btn-xs" lay-event="edit" >编辑</a>
<a class="layui-btn layui-btn-xs layui-btn-danger" lay-event="del">删除</a>
</script>
<script type="text/javascript" th:inline="javascript">
layui.use(['form', 'layer', 'table'], function () {
var form = layui.form,
layer = layui.layer,
$ = layui.jquery,
table = layui.table;
var tableIns = table.render({
elem: '#departmenList',
url: '/smalladmin/pagequarysmalladmin',
method: 'get',
title: '管理员列表',
page: true, //开启分页
height: "full-110", //高度最大化减去差值110,高度将始终铺满
// toolbar: true, //开启工具栏
limit:10, //每页显示的条数
limits: [5,10,20,30], //每页条数的选择项
cols:
[
[
{type: 'checkbox', field: 'sid', fixed: "left"},
{field: 'sid', title: '普通管理员id', align: "center", unresize: "true"},
{
field: 'sphoto',
title: '普通管理员头像',
align: 'center',
unresize: "true",
templet: function(d) {
// 如果 uphoto 是图片URL,直接渲染为 <img> 标签
return '<img src="' + d.sphoto + '" style="width: 40px; height: 40px; border-radius: 50%;" />';
}
},
{field: 'sname', title: '普通管理员名称', align: 'center', unresize: "true"},
{
field: 'spassword',
title: '普通管理员密码',
align: 'center',
unresize: "true"
},
{title: '操作', align: "center", unresize: "true", toolbar: "#departmenListBar"}
]
]
});
//搜索
form.on('submit(search_btn)', function (data) {
tableIns.reload({
url: '/smalladmin/listbyname',
where: data.field
, page: {
curr: 1 //重新从第 1 页开始
}
});
return false;
});
//监听工具条
table.on('tool(departmenList)', function (obj) {
var data = obj.data, //获得当前行数据
layEvent = obj.event; //获得 lay-event 对应的值(也可以是表头的 event 参数对应的值)
switch (layEvent) {
case 'del':
layer.confirm('确定删除此管理员?', {icon: 3, title: '提示信息'}, function (index) {
$.post("/smalladmin/delete",
{
// "nid": $('#nid').val()
"sid":data.sid
},
function (success) { // 直接接收布尔值
if (success) {
layer.msg('删除管理员成功', {icon: 1});
// 删除成功后刷新父窗口
setTimeout(function() {
xadmin.father_reload();
}, 1000);
} else {
layer.msg('删除管理员失败', {icon: 2});
}
}
);
layer.close(index);
});
return false;// 阻止默认行为
break;
// case 'edit':
// xadmin.open('管理员编辑', '/admin/checkadminpasswordpage?gid=' + data.gid, 450, 300);
// break;
case 'edit':
// 构造完整的编辑URL,包含所有参数
var editUrl = '/smalladmin/updatesmalladminpage?sid=' + data.sid
+ '&sphoto=' + encodeURIComponent(data.sphoto || '')
+ '&sname=' + encodeURIComponent(data.sname || '')
+ '&spassword=' + encodeURIComponent(data.spassword || '');
// 打开编辑窗口(调整弹窗大小以适应内容)
xadmin.open('普通员工编辑', editUrl, 800, 550);
break;
default:
break;
}
});
});
function reload() {
$.get("/smalladmin/reload", function (data) {
if (data) {
location.reload();
} else {
parent.location.reload();
}
});
}
</script>
</body>
后端代码:
SmalladminController:
/**
* 超级管理员编辑普通管理员,分页查询
*/
@GetMapping("/pagequarysmalladmin")
@ResponseBody
public Result pagequarysmalladmin(@RequestParam Map<String,Object> map) {
int page = Integer.parseInt(map.get("page").toString());
int limit = Integer.parseInt(map.get("limit").toString());
int start=(page-1)*limit;
return smalladminService.getsmalladminList(start,limit);
}
SmalladminService
/**
* 分页查询普通管理员
* @param start
* @param limit
* @return
*/
Result getsmalladminList(int start, int limit);
SmalladminServicelpml
/**
* 分页查询普通管理员
* @param start
* @param limit
* @return
*/
@Override
public Result getsmalladminList(int start, int limit) {
int countsmalladmin=smalladminMapper.countsmalladmin();
List<Smalladmin> smalladmins=smalladminMapper.selectsmalladmin(start,limit);
Result result=new Result();
result.setData(smalladmins);
result.setCount(countsmalladmin);
result.setMsg("查询成功");
result.setCode(0);
return result;
}
SmalladminMapper:
/**
* 获取普通管理员总数
* @return
*/
int countsmalladmin();
/**
* 分页查询,获取数据
* @param start
* @param limit
* @return
*/
List<Smalladmin> selectsmalladmin(@Param("start") int start, @Param("limit") int limit);
SmalladminMapper.xml
<select id="countsmalladmin" resultType="java.lang.Integer">
select count(*) from smalladmin
</select>
<select id="selectsmalladmin" resultType="com.homestay.pojo.Smalladmin">
select
<include refid="Base_Column_List"></include>
from smalladmin
order by sid
limit #{start},#{limit}
</select>
测试:
一页5条:
一页10条:
模糊查询:
后端代码:
SmalladminController
/**
* 模糊查询
*/
@GetMapping("/listbyname")
@ResponseBody
public Result listbyname(@RequestParam Map<String,Object> map) {
int page = Integer.parseInt(map.get("page").toString());
int limit = Integer.parseInt(map.get("limit").toString());
int start=(page-1)*limit;
String dname=map.get("dname").toString();
return smalladminService.listbyname(dname,start,limit);
}
SmalladminService
/**
* 模糊查询
* @param dname
* @param start
* @param limit
* @return
*/
Result listbyname(String dname, int start, int limit);
SmalladminServicelpml
/**
* 模糊查询
* @param dname
* @param start
* @param limit
* @return
*/
@Override
public Result listbyname(String dname, int start, int limit) {
int countsmalladmin=smalladminMapper.countsmalladminbyname(dname);
List<Smalladmin> smalladmins=smalladminMapper.selectsmalladminbyname(dname,start,limit);
Result result=new Result();
result.setData(smalladmins);
result.setCount(countsmalladmin);
result.setMsg("查询成功");
result.setCode(0);
return result;
}
SmalladminMapper
/**
* 模糊查询获取名总数
* @param dname
* @return
*/
int countsmalladminbyname(@Param("dname") String dname);
/**
* 模糊查询
* @param dname
* @param start
* @param limit
* @return
*/
List<Smalladmin> selectsmalladminbyname(@Param("dname") String dname, @Param("start") int start, @Param("limit") int limit);
SmalladminMapper.xml
<select id="countsmalladminbyname" resultType="java.lang.Integer">
select count(*)
from smalladmin
where sname like concat('%',#{dname},'%')
</select>
<select id="selectsmalladminbyname" resultType="com.homestay.pojo.Smalladmin">
select
<include refid="Base_Column_List"></include>
from smalladmin
where sname like concat('%',#{dname},'%')
order by sid
limit #{start},#{limit}
</select>
测试:
删除普通管理员
后端代码:
SmalladminController
/**
* 删除普通管理员
* @param sid
* @return
*/
@PostMapping("/delete")
@ResponseBody
public boolean delete(@RequestParam("sid") int sid) {
return smalladminService.deletesmalladmin(sid);
}
SmalladminService
/**
* 删除普通管理员
* @param sid
* @return
*/
boolean deletesmalladmin(int sid);
SmalladminServicelpml
/**
* 删除普通管理员
* @param sid
* @return
*/
@Override
public boolean deletesmalladmin(int sid) {
return smalladminMapper.deletesmalladmin(sid);
}
SmalladminMapper
/**
* 删除普通管理员
* @param sid
* @return
*/
boolean deletesmalladmin(int sid);
SmalladminMapper.xml
<delete id="deletesmalladmin">
delete from smalladmin
where sid = #{sid,jdbcType=INTEGER}
</delete>
测试
编辑普通管理员:
前端效果
前端代码
<body>
<div class="layui-fluid">
<div class="layui-row">
<div class="layui-form">
<div class="layui-form-item">
<label class="layui-form-label">普通管理员头像</label>
<div class="img-upload-area">
<img class="layui-upload-img" id="nphoto" th:src="${session.smallphoto}">
<div class="upload-btn-group">
<button type="button" class="layui-btn layui-btn-primary" id="choiceImg">
<i class="layui-icon"></i>选择图片
</button>
<button type="button" class="layui-btn" id="uploadImg">
<i class="layui-icon"></i>上传图片
</button>
</div>
</div>
<p id="uploadErrorText" style="margin-left: 120px; color: var(--error-color);"></p>
</div>
<div class="layui-form-item">
<label for="sid" class="layui-form-label">
<span class="x-red">*</span>普通管理员id</label>
<div class="layui-input-inline">
<input type="text" id="sid" name="sid" class="layui-input" readonly="readonly" th:value="${session.sid}">
</div>
</div>
<div class="layui-form-item">
<label for="updatesmallname" class="layui-form-label">
<span class="x-red">*</span>修改登录名</label>
<div class="layui-input-inline">
<input type="text" id="updatesmallname" name="updatesmallname" lay-verify="required|loginname" class="layui-input" th:value="${sname}">
</div>
</div>
<div class="layui-form-item">
<label for="updatesmallloginpassword" class="layui-form-label">
<span class="x-red">*</span>修改登录密码</label>
<div class="layui-input-inline">
<input type="password" id="updatesmallloginpassword" name="updatesmallloginpassword" lay-verify="required|updatesmallloginpassword" class="layui-input" th:value="${spassword}">
</div>
</div>
<div class="layui-form-item">
<label for="confirmloginpassword" class="layui-form-label">
<span class="x-red">*</span>确认密码</label>
<div class="layui-input-inline">
<input type="password" id="confirmloginpassword" name="confirmloginpassword" lay-verify="required|confirmloginpassword" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"></label>
<button class="layui-btn" lay-filter="submit" lay-submit="" id="submit">
<i class="layui-icon"></i> 保存修改
</button>
</div>
</div>
</div>
</div>
<script>
layui.use(['form', 'layer', 'upload'], function () {
$ = layui.jquery;
var form = layui.form,
upload = layui.upload,
layer = layui.layer;
// 表单验证
form.verify({
required: function(value) {
if(value.trim() === '') {
return '此项不能为空';
}
}
});
//选完文件后不自动上传
var uploadInst = upload.render({
elem: '#choiceImg',
url: '/smalladmin/upload/updatesmalladminphoto',
auto: false,
bindAction: '#uploadImg',
choose: function (obj) {
obj.preview(function (index, file, result) {
$('#nphoto').attr('src', result);
});
},
before: function() {
layer.load(1, {
shade: [0.1, '#fff']
});
},
done: function (res) {
layer.closeAll('loading');
if (res == true) {
layer.msg('上传成功', {icon: 1});
} else {
layer.msg('上传失败', {icon: 2});
}
},
error: function () {
layer.closeAll('loading');
var uploadErrorText = $('#uploadErrorText');
uploadErrorText.html('<span style="color: var(--error-color);">上传失败,请重试</span>');
}
});
//自定义验证规则
form.verify({
// oldPwd: function (value) {
// var code;
// $.ajax({
// url: "/admin/password",
// type: "GET",
// async: false, //关闭异步,当success返回结果后才执行ajax之后的内容
// data: {"oldPwd": value},
// success: function (s) {
// code = s;
// }
// });
// if (code != true) {
// return '旧密码错误,请重新输入!';
// }
// },
updatesmallloginpassword: [/(.+){6,12}$/, '密码必须6到12位'],
confirmloginpassword: function () {
if ($('#updatesmallloginpassword').val() != $('#confirmloginpassword').val()) {
return '两次密码不一致';
}
}
});
//监听提交
form.on('submit(submit)', function (data) {
var loadIndex = layer.load(2, {shade: [0.1, '#fff']});
$.ajax({
url: "/smalladmin/updatesmalladmininformation",
type: "post",
data: data.field,
success: function (s) {
layer.close(loadIndex);
if (s == true) {
layer.alert("普通管理员信息修改成功!", {
icon: 1,
title: '成功',
skin: 'layui-layer-molv'
}, function () {
parent.layer.closeAll();
parent.location.reload();
});
} else {
layer.msg("登录名重复,普通管理员信息修改失败!", {icon: 2});
}
},
error: function () {
layer.close(loadIndex);
layer.msg("请求失败,请检查网络连接", {icon: 2});
}
});
return false;
});
});
</script>
</body>
后端代码:
SmalladminController
/**
* 修改普通管理员页面
* @return
*/
@GetMapping("/updatesmalladminpage")
public String updatesmalladminpage(@RequestParam("sid")String sid, @RequestParam("sname")String sname,
@RequestParam("spassword")String spassword, HttpSession session,
@RequestParam("sphoto")String sphoto, Model model) {
model.addAttribute("sid", sid);
model.addAttribute("sname", sname);
model.addAttribute("spassword", spassword);
model.addAttribute("sphoto", sphoto);
session.setAttribute("smallphoto",sphoto);
session.setAttribute("sid",sid);
return "smalladmin/updatesmalladminpage";
}
/**
* 修改普通管理员信息
* @param sid
* @param sname
* @return
*/
@PostMapping("/updatesmalladmininformation")
@ResponseBody
public boolean updatesmalladmininformation(@RequestParam("sid")String sid,@RequestParam("updatesmallname")String sname,@RequestParam("updatesmallloginpassword")String spassword,HttpSession session)
{
return smalladminService.updatesmalladmin(sid,sname,spassword);
}
@PostMapping({"/upload/updatesmalladminphoto"})
@ResponseBody
public boolean updatesmalladminphoto(HttpServletRequest request, @RequestParam("file")
MultipartFile file, HttpSession session, Model model) throws IOException, URISyntaxException
{
/*1、给文件起一个新的文件名--------------------*/
String suffixName = UploadFileUtils.getSuffixName(file);
String newFileName = UploadFileUtils.getNewFileName(suffixName);
/*-----------------------------------------*/
/*2.在本机(或服务器)创建一个文件夹-----------*/
String realPath = System.getProperty("user.dir") + "\\upload\\";
//System.getProperty("user.dir")获取该项目在本机上的绝对路径,比如“C:\java\demo”
//realPath:图片在服务器上的物理存储地址,比如“C:\java\demo\\upload”
File fileDirectory = new File(realPath); //在内存中创建文件夹映射对象,比如“C:\java\demo\\upload”
File destFile = new File(realPath + newFileName); //在内存中创建文件映射对象,比如“C:\java\demo\\upload\xxxx.jpg”
if (!fileDirectory.exists() && !fileDirectory.mkdirs()) {
System.out.println("文件夹创建失败!");
return false;
}
/*-----------------------------------------*/
/*3.把file以新文件名形式存入本机(或服务器)文件夹-----*/
file.transferTo(destFile);
/*----------------------------------------------*/
/*4.创建能访问该文件的URL地址(不是电脑的物理地址、不是绝对路径)放入数据库表-----*/
//new URI()生成一个统一资源定位地址,例如URL,如果语法不正确则抛出异常
URI uri = new URI(request.getRequestURL() + "");
//http://localhost:8081/admin/upload/userImg/
uri = UploadFileUtils.getHost(uri); //http://localhost:8081
String sqlImg = uri + "/upload/" + newFileName; //sqlImg:存入数据库表中的图片地址,比如“http://localhost:8081/upload/xxxx.jpg”
if (smalladminService.updatesmalladminphoto(session.getAttribute("sid").toString(), sqlImg)) {
session.setAttribute("smalladminphoto", sqlImg);
return true;
} else {
return false;
}
/*--------------------------------------------------------------------*/
}
SmalladminService
/**
* 修改普通管理员信息
* @param sid
* @param sname
* @param spassword
* @return
*/
boolean updatesmalladmin(String sid, String sname, String spassword);
/**
* 改照片
* @param sid
* @param sqlImg
* @return
*/
boolean updatesmalladminphoto(String sid, String sqlImg);
SmalladminServicelpml
/**
* 修改普通管理员信息
* @param sid
* @param sname
* @param spassword
* @return
*/
@Override
public boolean updatesmalladmin(String sid, String sname, String spassword) {
try {
int countsmalladminname=smalladminMapper.countsmalladminname(sid,sname);//判断登录名是否重复
if(countsmalladminname>0)
{
throw new RuntimeException("登录名重复");
}
} catch (RuntimeException e) {
return false;
}
smalladminMapper.updatesmalladmin(sid,sname,spassword);
return true;
}
/**
* 修改头像
* @param sid
* @param sqlImg
* @return
*/
@Override
public boolean updatesmalladminphoto(String sid, String sqlImg) {
return smalladminMapper.updatesmalladminphoto(sid,sqlImg);
}
SmalladminMapper
/**
* 修改头像
* @param sid
* @param sqlImg
* @return
*/
boolean updatesmalladminphoto(@Param("sid")String sid,@Param("sqlImg") String sqlImg);
/**
* 检查登录名是否重复
* @param sid
* @param sname
* @return
*/
int countsmalladminname(@Param("sid")String sid,@Param("sname") String sname);
/**
* 修改普通管理员信息
* @param sid
* @param sname
* @param spassword
*/
void updatesmalladmin(@Param("sid") String sid,@Param("sname") String sname,@Param("spassword") String spassword);
SmalladminMapper.xml
<update id="updatesmalladminphoto">
update smalladmin
set sphoto=#{sqlImg}
where sid=#{sid}
</update>
<select id="countsmalladminname" resultType="java.lang.Integer">
select count(*)
from smalladmin
where sname=#{sname} and sid!=#{sid}
</select>
<update id="updatesmalladmin">
update smalladmin
set sname=#{sname},spassword=#{spassword}
where sid=#{sid}
</update>