管理員管理:
新增管理員信息:
前端效果:
前端代碼:
<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: "/admin/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: "/admin/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>
后端代碼:
AdminController:
/*** 新增管理員頁面*/@GetMapping("/addadminpage")public String addadminpage() {return "admin/addadminpage";}/*** 新增管理員,判斷新增管理員登錄名是否重復*/@GetMapping("/checkloginname")@ResponseBodypublic boolean checkaddadminloginname(@RequestParam("loginname") String loginname) {return adminService.checkaddadminloginname(loginname);}/*** 新增管理員信息*/@PostMapping("/addadmin")@ResponseBodypublic boolean addadmin(@RequestParam("loginname") String loginname,@RequestParam("loginpassword") String loginpassword,@RequestParam("confirmloginpassword") String confirmloginpassword) {return adminService.addadmin(loginname,loginpassword);}
AdminService:
/*** 新增管理員,判斷新增管理員登錄名是否重復*/boolean checkaddadminloginname(String loginname);/*** 新增管理員*/boolean addadmin(String loginname, String loginpassword);
AdminServicelpml:
/*** 新增管理員,判斷新增管理員登錄名是否重復*/@Overridepublic boolean checkaddadminloginname(String loginname) {Admin admin = adminMapper.selectaddadminloginname(loginname);return admin==null;}/*** 新增管理員*/@Overridepublic boolean addadmin(String loginname, String loginpassword) {Admin admin=new Admin();admin.setGname(loginname);admin.setGpassword(loginpassword);Admin admin1=adminMapper.selectaddadminloginname(loginname);if(admin1==null)return adminMapper.addadmin(admin);else return false;
AdminMapper:
/*** 新增管理員,判斷新增管理員登錄名是否重復*/Admin selectaddadminloginname(@Param("loginname")String loginname);/*** 新增管理員*/boolean addadmin(Admin admin);
AdminMapper.xml:
<select id="selectaddadminloginname" resultType="com.homestay.pojo.Admin">select gname from adminwhere gname=#{loginname}</select><insert id="addadmin">insert into admin(gname,gpassword)values (#{gname,jdbcType=VARCHAR},#{gpassword,jdbcType=VARCHAR})</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: '/admin/pagequaryadmin',method: 'get',title: '管理員列表',page: true, //開啟分頁height: "full-110", //高度最大化減去差值110,高度將始終鋪滿// toolbar: true, //開啟工具欄limit:10, //每頁顯示的條數limits: [5,10,20,30], //每頁條數的選擇項cols:[[{type: 'checkbox', field: 'gid', fixed: "left"},{field: 'gid', title: '管理員id', align: "center", unresize: "true"},{field: 'gname', title: '管理員名稱', align: 'center', unresize: "true"},{field: 'gpassword',title: '管理員密碼',align: 'center',unresize: true,hide: true // 關鍵設置:隱藏列},{title: '操作', align: "center", unresize: "true", toolbar: "#departmenListBar"}]]});//搜索form.on('submit(search_btn)', function (data) {tableIns.reload({url: '/admin/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("/admin/department/delete",{"gid": data.gid}, function (s) {layer.msg(s.msg);});layer.close(index);tableIns.reload();});break;// case 'edit':// xadmin.open('管理員編輯', '/admin/checkadminpasswordpage?gid=' + data.gid, 450, 300);// break;case 'edit':// 構建傳遞的參數var params = {gid: data.gid,gname: data.gname,gpassword: data.gpassword};// 將參數轉換為查詢字符串var queryString = $.param(params);// 打開彈窗layer.open({type: 2,title: '管理員編輯',area: ['450px', '300px'],content: '/admin/checkadminpasswordpage?' + queryString});break;default:break;}});});function reload() {$.get("/admin/reload", function (data) {if (data) {location.reload();} else {parent.location.reload();}});}
</script>
</body>
后端代碼:
AdminController:
/*** 編輯管理員頁面*/@GetMapping("/updateadminpage")public String updateadminnpage() {return "admin/updateadminpage";}/*** 管理員分頁查詢* @return*/@GetMapping("/pagequaryadmin")@ResponseBodypublic Result pagequaryadmin(@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 adminService.getadminList(start,limit);}
AdminService:
/*** 管理員分頁查詢* @param start* @param limit* @return*/Result getadminList(int start, int limit);
AdminServicelpml:
/*** 管理員分頁查詢* @param start* @param limit* @return*/@Overridepublic Result getadminList(int start, int limit) {int totaladmin=adminMapper.getTotaladmin();//獲取管理員總數List<Admin> adminList=adminMapper.findadminList(start, limit);//獲取管理員數據Result result = new Result();result.setCode(0);result.setMsg("查詢成功");result.setCount(totaladmin);result.setData(adminList);return result;}
AdminMapper:
/*** 獲取管理員總數* @return*/int getTotaladmin();/*** 獲取管理員數據* @param start* @param limit* @return*/List<Admin> findadminList(@Param("start")int start,@Param("limit") int limit);
AdminMappe.xml:
<select id="getTotaladmin" resultType="java.lang.Integer">select count(*) from admin</select><select id="findadminList" resultType="com.homestay.pojo.Admin">select<include refid="Base_Column_List"></include>from adminorder by gidlimit #{start},#{limit}</select>
測試:
選擇5頁:
選擇10頁:
搜索框模糊查詢:
后端代碼:
AdminController:
/*** 模糊查詢* @param map* @return*/@GetMapping("/listbyname")@ResponseBodypublic 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 adminService.listbyname(start,limit,dname);}
AdminService:
/*** 模糊查詢* @param start* @param limit* @param dname* @return*/Result listbyname(int start, int limit, String dname);
AdminServicelpml:
/*** 模糊查詢* @param start* @param limit* @param dname* @return*/@Overridepublic Result listbyname(int start, int limit, String dname) {int totaladmin=adminMapper.getTotaladminbyname(dname);//獲取管理員總數List<Admin> adminList=adminMapper.findadminListbyname(start, limit,dname);//獲取管理員數據Result result = new Result();result.setCode(0);result.setMsg("查詢成功");result.setCount(totaladmin);result.setData(adminList);return result;}
AdminMapper:
/*** 模糊查詢獲取總數* @param dname* @return*/int getTotaladminbyname(@Param("dname") String dname);/*** 模糊查詢* @param start* @param limit* @param dname* @return*/List<Admin> findadminListbyname(@Param("start")int start,@Param("limit") int limit, @Param("dname") String dname);
AdminMapper.xml:
<select id="getTotaladminbyname" resultType="java.lang.Integer">select count(*)from adminwhere gname like concat('%',#{dname},'%')</select><select id="findadminListbyname" resultType="com.homestay.pojo.Admin">select <include refid="Base_Column_List"></include>from adminwhere gname like concat('%',#{dname},'%')order by gidlimit #{start},#{limit}</select>
測試:
編輯、刪除管理員:
需要輸入該管理員密碼才能進行編輯信息,包括刪除該管理員
前端效果:
檢查管理員密碼:
密碼正確后:
前端代碼:
檢查密碼頁面:
<body>
<div class="layui-fluid"><div class="layui-row"><div class="layui-form"><div class="layui-form-item"><label for="gid" class="layui-form-label"><span class="x-red">*</span>管理員id: </label><div class="layui-input-inline"><input type="text" id="gid" name="gid" class="layui-input" readonly="readonly" th:value="${session.gid}"></div></div><div class="layui-form-item"><label for="adminpassword" class="layui-form-label"><span class="x-red">*</span>輸入管理員密碼</label><div class="layui-input-inline"><input type="password" id="adminpassword" name="adminpassword" lay-verify="required" 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', 'jquery'], function () {var form = layui.form,layer = layui.layer,$ = layui.jquery;form.on('submit(submit)', function (data) {var loadingIndex = layer.load(1);$.ajax({url: "/admin/checkadminpassword",type: "POST",data: data.field,dataType: "json",success: function (response) {layer.close(loadingIndex);// 調試輸出console.log('驗證響應:', response);// 兼容兩種響應格式if ((response && response.success) || response === true) {layer.msg("驗證成功", {icon: 1, time: 1000}, function() {// 解決方案1:直接使用top窗口的xadmintop.xadmin.open('修改管理員', '/admin/updateadmin');// 解決方案2:先關閉當前彈窗再打開新窗口var index = parent.layer.getFrameIndex(window.name);parent.layer.close(index);setTimeout(function() {top.xadmin.open('修改管理員', '/admin/updateadmin',300,300);}, 300);});} else {layer.msg(response.message || "密碼錯誤");}},error: function(xhr) {layer.close(loadingIndex);console.error('請求失敗:', xhr.responseText);layer.msg("請求失敗: " + (xhr.responseJSON?.message || xhr.statusText));}});return false;});});
</script></body>
編輯頁面:
<body >
<div class="layui-fluid" style="padding: 65px;"><div class="layui-row"><div class="layui-form"><div class="layui-form-item"><label for="gid" class="layui-form-label"><span class="x-red">*</span>管理員id: </label><div class="layui-input-inline"><input type="text" id="gid" name="gid" class="layui-input" readonly="readonly" th:value="${session.gid}"></div></div><div class="layui-form-item"><label for="newadminname" class="layui-form-label" >新登錄名</label><div class="layui-input-inline"><input type="text" id="newadminname" name="newadminname" class="layui-input" th:value="${session.adminname}"></div></div><div class="layui-form-item"><label for="L_newPwd" class="layui-form-label"><span class="x-red">*</span>新密碼</label><div class="layui-input-inline"><input type="password" id="L_newPwd" name="newgpassword" lay-verify="required|newgpassword" class="layui-input" th:value="${session.adminpassword}"></div><div class="layui-form-mid layui-word-aux">6到16個字符</div></div><div class="layui-form-item"><label for="L_confirmPwd" class="layui-form-label"><span class="x-red">*</span>確認密碼</label><div class="layui-input-inline"><input type="password" id="L_confirmPwd" name="confirmPwd" lay-verify="required|confirmPwd" 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><a class="layui-btn layui-btn-xs layui-btn-danger" lay-event="del">刪除管理員</a></div></div></div>
</div><script>layui.use(['form', 'layer', 'upload'], function () {$ = layui.jquery;var form = layui.form,upload = layui.upload,layer = layui.layer;// 刪除按鈕點擊事件$('.layui-btn-danger').on('click', function() {layer.confirm('確定刪除此管理員?', {icon: 3, title: '提示信息'}, function (index) {$.post("/admin/delete",{"gid": $('#gid').val()},function (success) { // 直接接收布爾值if (success) {layer.msg('刪除成功', {icon: 1});// 刪除成功后刷新父窗口setTimeout(function() {xadmin.father_reload();}, 1000);} else {layer.msg('刪除失敗', {icon: 2});}});layer.close(index);});return false; // 阻止默認行為});//自定義驗證規則form.verify({newgpassword: [/(.+){6,12}$/, '密碼必須6到12位'],confirmPwd: function () {if ($('#L_newPwd').val() != $('#L_confirmPwd').val()) {return '兩次密碼不一致';}}});//監聽提交form.on('submit(submit)', function (data) {console.log(data.field);$.ajax({url: "/admin/updateadmininformation",type: "post",data: data.field,success: function (s) {if (s == true) {layer.alert("修改成功!", {icon: 6}, function () {parent.layer.closeAll();});} else {layer.msg("登錄名重復,修改失敗!", function () {});}},error: function () {layer.msg("接口異常!", function () {});}});});});
</script>
</body>
后端代碼:
AdminController:
/*** 編輯管理員,檢查密碼頁面*/@GetMapping("/checkadminpasswordpage")public String checkadminpasswordpage(@RequestParam("gid") String gid,@RequestParam("gname")String gname,@RequestParam("gpassword")String gpassword, HttpSession session) {session.setAttribute("gid",gid);session.setAttribute("adminname",gname);session.setAttribute("adminpassword",gpassword);return "admin/updatecheckadminpasswordpage";}/*** 檢查密碼*/@PostMapping("/checkadminpassword")@ResponseBodypublic boolean checkadminpassword(@RequestParam("gid") String gid,@RequestParam("adminpassword") String adminpassword) {return adminService.checkadminpassword(gid,adminpassword);}/*** 跳轉修改彈窗* @return*/@GetMapping("/updateadmin")public String updateadmin() {return "admin/updateadmin";}/*** 修改管理員信息* @param gid* @param newgpassword* @param newadminname* @return*/@PostMapping("/updateadmininformation")@ResponseBodypublic boolean updateadmininformation(@RequestParam("gid")String gid,@RequestParam("newgpassword")String newgpassword,@RequestParam("newadminname")String newadminname ) {return adminService.updateadmininformation(gid,newgpassword,newadminname);}/*** 刪除管理員*/@PostMapping("/delete")@ResponseBodypublic boolean delete(@RequestParam("gid")String gid) {return adminService.deleteadmin(gid);}@GetMapping("/reload")@ResponseBodypublic boolean reload() {return true;}
AdminService:
/*** 編輯管理員時,檢查密碼* @param gid* @param adminpassword* @return*/boolean checkadminpassword(String gid, String adminpassword);/*** 修改管理員信息* @param gid* @param newgpassword* @param newadminname* @return*/boolean updateadmininformation(String gid, String newgpassword, String newadminname);/*** 刪除管理員* @param gid* @return*/boolean deleteadmin(String gid);
AdminServicelpml:
/*** 編輯管理員時,檢查密碼* @param gid* @param adminpassword* @return*/@Overridepublic boolean checkadminpassword(String gid, String adminpassword) {String gpassword=adminMapper.selectaddminpassword(gid);if(adminpassword.equals(gpassword))return true;else return false;}/*** 修改管理員信息* @param gid* @param newgpassword* @param newadminname* @return*/@Overridepublic boolean updateadmininformation(String gid, String newgpassword, String newadminname) {//檢查登錄名是否重復try {int count=adminMapper.countadminid(gid,newadminname);if(count>0){throw new RuntimeException("登錄名重復");}}catch (RuntimeException e) {return false;}//沒有重復修改信息adminMapper.updateadmininformation(gid,newadminname,newgpassword);return true;
}/*** 刪除管理員* @param gid* @return*/@Overridepublic boolean deleteadmin(String gid) {return adminMapper.deleteadmin(gid);}
AdminMapper:
/*** 編輯管理員時,檢查密碼是否正確* @param gid* @return*/String selectaddminpassword(String gid);/*** 檢查登錄名是否重復* @param gid* @param newadminname* @return*/int countadminid(@Param("gid") String gid,@Param("newadminname") String newadminname);/*** 修改信息* @param gid* @param newadminname* @param newgpassword*/void updateadmininformation(@Param("gid") String gid,@Param("newadminname") String newadminname,@Param("newgpassword") String newgpassword);/*** 刪除管理員* @param gid* @return*/boolean deleteadmin(String gid);
AdminMapper.xml:
<select id="selectaddminpassword" resultType="java.lang.String">select gpasswordfrom adminwhere gid=#{gid}</select><select id="countadminid" resultType="java.lang.Integer">select count(*)from adminwhere gid!=#{gid} and gname=#{newadminname}</select><update id="updateadmininformation">update adminsetgpassword=#{newgpassword},gname=#{newadminname}where gid=#{gid}</update><delete id="deleteadmin">delete from adminwhere gid = #{gid,jdbcType=INTEGER}</delete>
測試:
檢查密碼錯誤:
正確后:
提示: