修改登录
diff --git a/src/main/java/com/supwisdom/dlpay/framework/filter/ValidateCodeFilter.java b/src/main/java/com/supwisdom/dlpay/framework/filter/ValidateCodeFilter.java
index bd8e660..77242b9 100755
--- a/src/main/java/com/supwisdom/dlpay/framework/filter/ValidateCodeFilter.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/filter/ValidateCodeFilter.java
@@ -1,11 +1,14 @@
 package com.supwisdom.dlpay.framework.filter;

 

 

+import com.fasterxml.jackson.databind.ObjectMapper;

+import com.supwisdom.dlpay.api.bean.JsonResult;

 import com.supwisdom.dlpay.exception.ValidateCodeException;

 import com.supwisdom.dlpay.framework.security.validate.ImageCodeUtil;

 import com.supwisdom.dlpay.framework.security.validate.VerifyCode;

 import com.supwisdom.dlpay.framework.util.StringUtil;

 import org.springframework.beans.factory.annotation.Autowired;

+import org.springframework.http.HttpStatus;

 import org.springframework.security.web.authentication.AuthenticationFailureHandler;

 import org.springframework.security.web.authentication.AuthenticationSuccessHandler;

 import org.springframework.stereotype.Component;

@@ -32,6 +35,8 @@
 	 */

 	@Autowired

 	private AuthenticationSuccessHandler myAuthenticationSuccessHandler;

+	@Autowired

+	private ObjectMapper objectMapper;

 

 

 	@Override

@@ -43,7 +48,12 @@
 			try {

 				validate(request);

 			} catch (ValidateCodeException e) {

-				myAuthenticationFailureHandler.onAuthenticationFailure(request, response, e);

+				response.setStatus(HttpStatus.OK.value());

+				response.setContentType("application/json;charset=UTF-8");

+				response.getWriter().write(objectMapper.writeValueAsString(JsonResult.error(400, e.getMessage())));

+				//response.sendError(HttpStatus.UNAUTHORIZED.value(),e.getMessage());

+				//myAuthenticationFailureHandler.onAuthenticationFailure(request, response, e);

+				return;

 			}

 		}

 		filterChain.doFilter(request, response);

@@ -58,7 +68,7 @@
 			throw new ValidateCodeException("获取验证码的值失败");

 		}

 		if (StringUtil.isEmpty(inputCode)) {

-			throw new ValidateCodeException("验证码的值不能为空");

+			throw new ValidateCodeException("验证码不能为空");

 		}

 		if (null == imageCode) {

 			throw new ValidateCodeException("验证码不存在");

diff --git a/src/main/java/com/supwisdom/dlpay/system/controller/OperatorController.java b/src/main/java/com/supwisdom/dlpay/system/controller/OperatorController.java
index 173cc64..dc0ef57 100644
--- a/src/main/java/com/supwisdom/dlpay/system/controller/OperatorController.java
+++ b/src/main/java/com/supwisdom/dlpay/system/controller/OperatorController.java
@@ -1,10 +1,8 @@
 package com.supwisdom.dlpay.system.controller;
 
 import com.supwisdom.dlpay.api.bean.JsonResult;
-import com.supwisdom.dlpay.framework.domain.TFunction;
-import com.supwisdom.dlpay.framework.domain.TOperLog;
-import com.supwisdom.dlpay.framework.domain.TOperRole;
-import com.supwisdom.dlpay.framework.domain.TOperator;
+import com.supwisdom.dlpay.framework.domain.*;
+import com.supwisdom.dlpay.framework.security.OperUtil;
 import com.supwisdom.dlpay.framework.util.PageResult;
 import com.supwisdom.dlpay.framework.util.StringUtil;
 import com.supwisdom.dlpay.framework.util.WebConstant;
@@ -18,6 +16,7 @@
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
+import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
@@ -42,8 +41,7 @@
     public PageResult<TOperator> getDataList(@RequestParam("page") Integer pageNo,
                                              @RequestParam("limit") Integer pageSize,
                                              @RequestParam(value = "searchkey", required = false) String searchKey,
-                                             @RequestParam(value = "searchvalue", required = false) String searchValue,
-                                             Model model) {
+                                             @RequestParam(value = "searchvalue", required = false) String searchValue) {
         try {
 
             if (null == pageNo || pageNo < 1) pageNo = WebConstant.PAGENO_DEFAULT;
@@ -81,12 +79,13 @@
         }
         return JsonResult.ok("success");
     }
+
     @PostMapping("/getoperatorrole")
     @ResponseBody
-    public JsonResult getoperatorrole(  @RequestParam(value = "operid") String operid) {
+    public JsonResult getoperatorrole(@RequestParam(value = "operid") String operid) {
         List<TOperRole> roles = operatorService.getOperRoleByOperId(operid);
         JsonResult ret = JsonResult.ok("success");
-        ret.put("roles",roles);
+        ret.put("roles", roles);
         return ret;
     }
 
@@ -125,16 +124,18 @@
             return JsonResult.error("操作失败");
         }
     }
+
     @PostMapping("/updatestate")
     @PreAuthorize("hasPermission('/operator/updatestate','')")
     @ResponseBody
-    public JsonResult updatestate(@RequestParam("operid") String operid,@RequestParam("state") String state) {
-        if (operatorService.updateState(operid,state)) {
+    public JsonResult updatestate(@RequestParam("operid") String operid, @RequestParam("state") String state) {
+        if (operatorService.updateState(operid, state)) {
             return JsonResult.ok("操作成功");
         } else {
             return JsonResult.error("操作失败");
         }
     }
+
     @GetMapping("/logs")
     public String logs() {
         return "system/operator/logs";
@@ -159,4 +160,62 @@
             return new PageResult<>(99, "系统查询错误");
         }
     }
+
+    @GetMapping("/userinfor")
+    public String userinfor(ModelMap map) {
+        TOperator operator = OperUtil.getCurrentOper();
+        if(operator!=null){
+            operator = operatorService.getOperatorByCode(operator.getOpercode());
+        }
+        map.put("user", operator);
+        return "system/operator/userinfor";
+    }
+
+    @PostMapping("/updateinfor")
+    @ResponseBody
+    public JsonResult updateinfor(@RequestBody TOperator oper) {
+        TOperator operator = OperUtil.getCurrentOper();
+        if (oper != null) {
+            operator.setSex(oper.getSex());
+            operator.setOpername(oper.getOpername());
+            operator.setEmail(oper.getEmail());
+            operator.setMobile(oper.getMobile());
+            operatorService.saveOperator(operator);
+        }
+        return JsonResult.ok("操作成功");
+    }
+
+    @GetMapping("/setpwd")
+    public String setpwd(ModelMap map) {
+        return "system/operator/setpwd";
+    }
+
+    @PostMapping("/dosetpwd")
+    @ResponseBody
+    public JsonResult dosetpwd(@RequestParam String curpwd,
+                               @RequestParam String newpwd, @RequestParam String renewpwd) {
+        if (StringUtil.isEmpty(curpwd)
+                || StringUtil.isEmpty(newpwd)
+                || StringUtil.isEmpty(renewpwd)) {
+            return JsonResult.error("参数粗错误");
+        }
+        BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
+        String encpwd = encoder.encode(curpwd);
+        TOperator operator = OperUtil.getCurrentOper();
+        if (operator == null) {
+            return JsonResult.error(401, "登录已过期,请重新登录");
+        }
+        if (!encoder.matches(curpwd,operator.getPassword())) {
+            return JsonResult.error("当前密码错误");
+        }
+        if (!newpwd.equals(renewpwd)) {
+            return JsonResult.error("两次密码不一致");
+        }
+        if(newpwd.length()<6||newpwd.length()>20){
+            return JsonResult.error("密码6~20个字符");
+        }
+        operator.setOperpwd(encoder.encode(newpwd));
+        operatorService.saveOperator(operator);
+        return JsonResult.ok("密码修改成功,请重新登录");
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/OperatorService.java b/src/main/java/com/supwisdom/dlpay/system/service/OperatorService.java
index a975eb2..3954045 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/OperatorService.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/OperatorService.java
@@ -38,4 +38,7 @@
 
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
     PageResult<TOperLog> getOperLogs(LogBean param);
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+    boolean saveOperator(TOperator operator);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/impl/OperatorServiceImpl.java b/src/main/java/com/supwisdom/dlpay/system/service/impl/OperatorServiceImpl.java
index 5990930..e58032e 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/impl/OperatorServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/impl/OperatorServiceImpl.java
@@ -160,4 +160,14 @@
         }
         return new PageResult<>(operLogDao.findAll(pageable));
     }
+
+    @Override
+    public boolean saveOperator(TOperator operator) {
+        Optional<TOperator> temp = operatorDao.findById(operator.getOperid());
+        if (!temp.isPresent()) {
+            return false;
+        }
+        operatorDao.save(operator);
+        return true;
+    }
 }
diff --git a/src/main/resources/static/custom/module/index.js b/src/main/resources/static/custom/module/index.js
index 1217d02..6b49296 100755
--- a/src/main/resources/static/custom/module/index.js
+++ b/src/main/resources/static/custom/module/index.js
@@ -8,9 +8,10 @@
         // 路由注册
         initRouter: function () {
             // 自动扫描side菜单注册
-            $('.layui-layout-admin .layui-side .layui-nav a[lay-href]').each(function () {
+            $('.layui-layout-admin  .layui-nav a[lay-href]').each(function () {
                 var menuName = $(this).text();
                 var menuPath = $(this).attr('lay-href');
+                console.log(menuPath,menuName);
                 if ('javascript:;' != menuPath && '' != menuPath) {
                     var key = menuPath.replace(/[?:=&/]/g, '_');
                     $(this).attr('href', '#!' + key);
@@ -25,6 +26,7 @@
                     $(this).attr('href', 'javascript:;');
                 }
             });
+
             // 主页
             Q.init({
                 index: 'home_console'
@@ -136,21 +138,6 @@
                     location.replace('logout');
                 });
             });
-
-            // 修改密码点击事件
-            $('#setPsw').click(function () {
-                admin.popupRight('home/password');
-            });
-
-            // 个人信息点击事件
-            $('#setInfo').click(function () {
-
-            });
-
-            // 消息点击事件
-            $('#btnMessage').click(function () {
-                admin.popupRight('home/message');
-            });
         }
     };
 
diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html
index 7dec8c5..a959451 100755
--- a/src/main/resources/templates/index.html
+++ b/src/main/resources/templates/index.html
@@ -39,21 +39,15 @@
                 <a ew-event="fullScreen" title="全屏"><i class="layui-icon layui-icon-screen-full"></i></a>

             </li>

             <li class="layui-nav-item" lay-unselect>

-                <a>

+                <a href="javascript:;">

                     <img th:src="@{/static/custom/images/head.png}" class="layui-nav-img">

                     <cite>[[${loginOper.opername}]]</cite>

                 </a>

                 <dl class="layui-nav-child">

-                    <dd lay-unselect>

-                        <a id="setInfo">个人信息</a>

-                    </dd>

-                    <dd lay-unselect>

-                        <a id="setPsw">修改密码</a>

-                    </dd>

+                    <dd ay-unselect><a lay-href="/operator/userinfor">基本资料</a></dd>

+                    <dd ay-unselect><a lay-href="/operator/setpwd">修改密码</a></dd>

                     <hr>

-                    <dd lay-unselect>

-                        <a id="btnLogout">退出</a>

-                    </dd>

+                    <dd layadmin-event="logout" style="text-align: center;" ><a href="/logout">退出</a></dd>

                 </dl>

             </li>

             <li class="layui-nav-item" lay-unselect>

@@ -153,6 +147,7 @@
         index.checkPageTabs(true);  // 检查多标签是否开启

         index.initRouter();  // 导航栏和tab联动

         index.bindEvent();  // 绑定事件

+

     });

 </script>

 </body>

diff --git a/src/main/resources/templates/login.html b/src/main/resources/templates/login.html
index 81e8471..0cef69e 100644
--- a/src/main/resources/templates/login.html
+++ b/src/main/resources/templates/login.html
@@ -97,6 +97,7 @@
                 data: field,
                 type: 'POST',
                 success: function (data) {
+                    console.log(data);
                     if (200 == data.code) {
                         layer.msg('登录成功', {icon: 1, time: 1500}, function () {
                             location.replace('./');
@@ -108,10 +109,9 @@
                     }
                 },
                 error: function (xhr) {
-                    console.log('error');
                     console.log(xhr);
                     layer.closeAll('loading');
-                    layer.msg('登录失败,请按f12查看console错误信息', {icon: 5});
+                    layer.msg('登录失败', {icon: 5});
                 }
             });
         });
diff --git a/src/main/resources/templates/system/function/index.html b/src/main/resources/templates/system/function/index.html
index 245090c..3696dc7 100755
--- a/src/main/resources/templates/system/function/index.html
+++ b/src/main/resources/templates/system/function/index.html
@@ -2,7 +2,7 @@
     <div class="layui-card-header">

         <h2 class="header-title">功能维护</h2>

         <span class="layui-breadcrumb pull-right">

-          <a href="#!_operator_index">系统中心</a>

+          <a href="#">系统中心</a>

           <a><cite>功能维护</cite></a>

         </span>

     </div>

diff --git a/src/main/resources/templates/system/operator/logs.html b/src/main/resources/templates/system/operator/logs.html
index 4213ac0..125ce8d 100644
--- a/src/main/resources/templates/system/operator/logs.html
+++ b/src/main/resources/templates/system/operator/logs.html
@@ -2,7 +2,7 @@
     <div class="layui-card-header">
         <h2 class="header-title">操作日志</h2>
         <span class="layui-breadcrumb pull-right">
-          <a href="#!_operator_index">系统中心</a>
+          <a href="#">系统中心</a>
           <a><cite>操作日志</cite></a>
         </span>
     </div>
diff --git a/src/main/resources/templates/system/operator/setpwd.html b/src/main/resources/templates/system/operator/setpwd.html
new file mode 100644
index 0000000..d549946
--- /dev/null
+++ b/src/main/resources/templates/system/operator/setpwd.html
@@ -0,0 +1,81 @@
+<div class="layui-card">
+    <div class="layui-card-header">修改密码</div>
+    <div class="layui-card-body" pad15>
+        <form lay-filter="setpwd-form" class="layui-form model-form">
+            <div class="layui-form" lay-filter="">
+                <div class="layui-form-item">
+                    <label class="layui-form-label">当前密码</label>
+                    <div class="layui-input-inline">
+                        <input type="password" name="curpwd" lay-verify="required" lay-verType="tips" required
+                               class="layui-input">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">新密码</label>
+                    <div class="layui-input-inline">
+                        <input type="password" name="newpwd" lay-verify="pass" lay-verType="tips" autocomplete="off" required
+                               id="LAY_password" class="layui-input">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">确认新密码</label>
+                    <div class="layui-input-inline">
+                        <input type="password" name="renewpwd" lay-verify="repass" lay-verType="tips" required
+                               autocomplete="off" class="layui-input">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <div class="layui-input-block">
+                        <button class="layui-btn" lay-submit lay-filter="setmypass">确认修改</button>
+                        <button  class="layui-btn layui-btn-primary" type="button" ew-event="closeThisTabs">取消</button>
+                    </div>
+                </div>
+            </div>
+        </form>
+    </div>
+</div>
+<script>
+    layui.use(['form', 'table', 'layer', 'admin', 'element'], function () {
+        let form = layui.form;
+        let admin = layui.admin;
+        $('#cancelBtn').click(function () {
+            admin.closeThisTabs()
+        });
+        form.render('select');
+        let url = '/operator/dosetpwd';
+        // 表单提交事件
+        form.on('submit(setmypass)', function (data) {
+            layer.load(2);
+            var token_name = $("meta[name='_csrf_token']").attr("content");
+            var token = $("meta[name='_csrf_token']").attr("value");
+            data.field[token_name] = token;
+            $.ajax({
+                type: "POST",
+                dataType: "json",
+                url: url,
+                data: data.field,
+                success: function (result) {
+                    layer.closeAll('loading');
+                    if (result.code == 200) {
+                        layer.msg(result.msg, {icon: 1, time: 1500}, function () {
+                            location.replace('/login');
+                        }, 1000);
+                    } else if (data.code == 401) {
+                        layer.msg(result.msg, {icon: 2, time: 1500}, function () {
+                            location.replace('/login');
+                        }, 1000);
+                        return;
+                    } else {
+                        console.log('err:' + result.code);
+                        layer.msg(result.msg, {icon: 2});
+                    }
+                },
+                error: function (data) {
+                    layer.closeAll('loading');
+                    layer.msg("请求服务器失败!", {icon: 2});
+                }
+            });
+            return false;
+        });
+    });
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/system/operator/userinfor.html b/src/main/resources/templates/system/operator/userinfor.html
new file mode 100644
index 0000000..8ca3c10
--- /dev/null
+++ b/src/main/resources/templates/system/operator/userinfor.html
@@ -0,0 +1,97 @@
+<div class="layui-card">
+    <div class="layui-card-header">设置我的资料</div>
+    <div class="layui-card-body" pad15>
+        <form lay-filter="userinfor-form" class="layui-form model-form">
+            <div class="layui-form">
+                <div class="layui-form-item">
+                    <label class="layui-form-label">登录名</label>
+                    <div class="layui-input-inline">
+                        <input type="text" name="opercode" th:value="${user.opercode}" readonly class="layui-input">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">名称</label>
+                    <div class="layui-input-inline">
+                        <input type="text" name="opername" th:value="${user.opername}" lay-verify="nickname"
+                               autocomplete="off"
+                               placeholder="请输入名称" class="layui-input">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">性别</label>
+                    <div class="layui-input-block">
+                        <input type="radio" name="sex" value="male" title="男" th:checked="${user.sex}=='male'">
+                        <input type="radio" name="sex" value="female" title="女" th:checked="${user.sex}=='female'">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">手机</label>
+                    <div class="layui-input-inline">
+                        <input type="text" name="mobile" th:value="${user.mobile}" autocomplete="off"
+                               class="layui-input">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">邮箱</label>
+                    <div class="layui-input-inline">
+                        <input type="text" name="email" th:value="${user.mobile}" autocomplete="off"
+                               class="layui-input">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <div class="layui-input-block">
+                        <button class="layui-btn" lay-filter="infor-form-submit" lay-submit>确认修改</button>
+                        <button class="layui-btn layui-btn-primary" type="button" ew-event="closeThisTabs">取消</button>
+                    </div>
+                </div>
+            </div>
+        </form>
+    </div>
+</div>
+<script>
+    layui.use(['form', 'table', 'layer', 'admin', 'element'], function () {
+        let form = layui.form;
+        let admin = layui.admin;
+        $('#cancelBtn').click(function () {
+            admin.closeThisTabs()
+        });
+        form.render('select');
+        let url = '/operator/updateinfor';
+        // 表单提交事件
+        form.on('submit(infor-form-submit)', function (data) {
+            layer.load(2);
+            var token_name = $("meta[name='_csrf_token']").attr("content");
+            var token = $("meta[name='_csrf_token']").attr("value");
+            data.field[token_name] = token;
+            $.ajax({
+                type: "POST",
+                dataType: "json",
+                url: url,
+                headers: {
+                    'Accept': 'application/json',
+                    'Content-Type': 'application/json',
+                    'X-CSRF-TOKEN': token,
+                },
+                data: JSON.stringify(data.field),
+                success: function (result) {
+                    layer.closeAll('loading');
+                    if (result.code == 200) {
+                        layer.msg(result.msg, {icon: 1});
+                    } else if (data.code == 401) {
+                        layer.msg(result.msg, {icon: 2, time: 1500}, function () {
+                            location.replace('/login');
+                        }, 1000);
+                        return;
+                    } else {
+                        layer.msg(result.msg, {icon: 2});
+                    }
+                },
+                error: function (data) {
+                    layer.closeAll('loading');
+                    layer.msg("请求服务器失败!", {icon: 2});
+                }
+            });
+            return false;
+        });
+    });
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/system/role/index.html b/src/main/resources/templates/system/role/index.html
index 2d3f167..93c755d 100644
--- a/src/main/resources/templates/system/role/index.html
+++ b/src/main/resources/templates/system/role/index.html
@@ -2,7 +2,7 @@
     <div class="layui-card-header">
         <h2 class="header-title">角色管理</h2>
         <span class="layui-breadcrumb pull-right">
-          <a href="#!_operator_index">系统中心</a>
+          <a href="#">系统中心</a>
           <a><cite>角色管理</cite></a>
         </span>
     </div>