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>
