diff --git a/src/main/java/com/supwisdom/dlpay/api/domain/TPointsTransdtl.java b/src/main/java/com/supwisdom/dlpay/api/domain/TPointsTransdtl.java
index f56a53a..dba4514 100644
--- a/src/main/java/com/supwisdom/dlpay/api/domain/TPointsTransdtl.java
+++ b/src/main/java/com/supwisdom/dlpay/api/domain/TPointsTransdtl.java
@@ -25,7 +25,7 @@
   @Column(name="BEFPOINTS", length = 15)
   private Long befpoints;
 
-  @Column(name="BEFPOINTS", length = 15)
+  @Column(name="AFTPOINTS", length = 15)
   private Long aftpoints;
 
   @Column(name="STATUS", length = 15)
diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/OperLogDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/OperLogDao.java
new file mode 100644
index 0000000..e8fa58e
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/OperLogDao.java
@@ -0,0 +1,10 @@
+package com.supwisdom.dlpay.framework.dao;
+
+import com.supwisdom.dlpay.framework.domain.TOperLog;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface OperLogDao extends JpaRepository<TOperLog, String> {
+    Page<TOperLog> findAllByOpernameContaining(String opername, Pageable pageable);
+}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/OperRoleDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/OperRoleDao.java
index c3fe0d1..fa3dd5a 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/OperRoleDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/OperRoleDao.java
@@ -14,4 +14,8 @@
   List<String> getRolecodeByOperid(String operid);
 
   void deleteByRoleId(String roleId);
+
+  List<TOperRole> findAllByOperid(String operid);
+
+  void deleteByOperid(String operid);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/domain/TOperLog.java b/src/main/java/com/supwisdom/dlpay/framework/domain/TOperLog.java
new file mode 100644
index 0000000..1243efd
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/framework/domain/TOperLog.java
@@ -0,0 +1,99 @@
+package com.supwisdom.dlpay.framework.domain;
+
+import org.hibernate.annotations.GenericGenerator;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "TB_OPER_LOG")
+public class TOperLog {
+    @Id
+    @GenericGenerator(name = "idGenerator", strategy = "uuid")
+    @GeneratedValue(generator = "idGenerator")
+    @Column(name = "ID", nullable = false, length = 32)
+    private String id;
+
+    @Column(name = "OPERID", nullable = false, length = 32)
+    private String operid;
+    @Column(name = "OPERNAME")
+    private String opername;
+
+    @Column(name = "RESNAME")
+    private String resname;
+
+    @Column(name = "RESPATH")
+    private String respath;
+
+    @Column(name = "LOGDATE")
+    private String logdate;
+
+    @Column(name = "FUNCTIONID")
+    private Integer functionid;
+
+    @Column(name = "FUNCTIONNAME")
+    private String functionname;
+
+    public Integer getFunctionid() {
+        return functionid;
+    }
+
+    public void setFunctionid(Integer functionid) {
+        this.functionid = functionid;
+    }
+
+    public String getFunctionname() {
+        return functionname;
+    }
+
+    public void setFunctionname(String functionname) {
+        this.functionname = functionname;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getOperid() {
+        return operid;
+    }
+
+    public void setOperid(String operid) {
+        this.operid = operid;
+    }
+
+    public String getOpername() {
+        return opername;
+    }
+
+    public void setOpername(String opername) {
+        this.opername = opername;
+    }
+
+    public String getResname() {
+        return resname;
+    }
+
+    public void setResname(String resname) {
+        this.resname = resname;
+    }
+
+    public String getRespath() {
+        return respath;
+    }
+
+    public void setRespath(String respath) {
+        this.respath = respath;
+    }
+
+    public String getLogdate() {
+        return logdate;
+    }
+
+    public void setLogdate(String logdate) {
+        this.logdate = logdate;
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/domain/TOperator.java b/src/main/java/com/supwisdom/dlpay/framework/domain/TOperator.java
index 62ae6b5..cfcbeea 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/domain/TOperator.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/domain/TOperator.java
@@ -48,6 +48,8 @@
 
   @Column(name = "CLOSEDATE", length = 8)
   private String closedate;
+  @Transient
+  private String roleids;
 
   @Transient
   private Collection<? extends GrantedAuthority> authorities;  //权限
@@ -200,4 +202,12 @@
   public boolean isEnabled() {
     return !TradeDict.STATUS_CLOSED.equals(this.status);  //注销操作员不启用
   }
+
+  public String getRoleids() {
+    return roleids;
+  }
+
+  public void setRoleids(String roleids) {
+    this.roleids = roleids;
+  }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/security/MyPermissionEvaluator.java b/src/main/java/com/supwisdom/dlpay/framework/security/MyPermissionEvaluator.java
index db6a4f1..02dbce4 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/security/MyPermissionEvaluator.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/security/MyPermissionEvaluator.java
@@ -1,10 +1,10 @@
 package com.supwisdom.dlpay.framework.security;
 
-import com.supwisdom.dlpay.framework.domain.TPermission;
-import com.supwisdom.dlpay.framework.domain.TResource;
-import com.supwisdom.dlpay.framework.domain.TRole;
-import com.supwisdom.dlpay.framework.domain.TRoleFunction;
+import com.supwisdom.dlpay.framework.domain.*;
+import com.supwisdom.dlpay.framework.util.DateUtil;
 import com.supwisdom.dlpay.framework.util.StringUtil;
+import com.supwisdom.dlpay.system.service.FunctionService;
+import com.supwisdom.dlpay.system.service.OperatorService;
 import com.supwisdom.dlpay.system.service.RoleService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.PermissionEvaluator;
@@ -15,28 +15,46 @@
 
 import java.io.Serializable;
 import java.util.Collection;
+import java.util.List;
 
 @Component
 public class MyPermissionEvaluator implements PermissionEvaluator {
     @Autowired
     private RoleService roleService;
-
+    @Autowired
+    private OperatorService operatorService;
+    @Autowired
+    private FunctionService functionService;
     @Override
     public boolean hasPermission(Authentication authentication, Object targetUri, Object permission) {
         //TODO save logger
         if (targetUri != null) {
             UserDetails userDetails = (UserDetails) authentication.getPrincipal();
             if (userDetails != null) {
-                Collection<GrantedAuthority> authorities = (Collection<GrantedAuthority>) userDetails.getAuthorities();
-                for (GrantedAuthority authority : authorities) {
-                    String roleName = authority.getAuthority();
-                    TRole role = roleService.findRoleByRolecode(roleName);
-                    if (role != null) {
-                        TResource resource = roleService.findResourceByURI(String.valueOf(targetUri));
-                        if (resource != null) {
-                            TPermission permission1 = roleService.findByRoleIdAndResid(role.getRoleId(),resource.getId());
-                            if (permission1 != null) {
-                                return true;
+                TOperator operator = operatorService.getOperatorByCode(userDetails.getUsername());
+                if (operator != null) {
+                    List<TOperRole> operRoles = operatorService.getOperRoleByOperId(operator.getOperid());
+                    for (TOperRole operRole : operRoles) {
+                        TRole role = roleService.findRoleByRoleid(operRole.getRoleId());
+                        if (role != null) {
+                            TResource resource = roleService.findResourceByURI(String.valueOf(targetUri));
+                            if (resource != null) {
+                                TPermission permission1 = roleService.findByRoleIdAndResid(role.getRoleId(), resource.getId());
+                                if (permission1 != null) {
+                                    TOperLog log = new TOperLog();
+                                    log.setLogdate(DateUtil.getNow());
+                                    log.setOperid(operator.getOperid());
+                                    log.setOpername(operator.getOpercode());
+                                    log.setResname(resource.getName());
+                                    log.setRespath(resource.getUri());
+                                    TFunction function  =functionService.getFunctionById(resource.getFunctionId());
+                                    if(function!=null){
+                                        log.setFunctionid(function.getId());
+                                        log.setFunctionname(function.getName());
+                                    }
+                                    operatorService.saveOperLog(log);
+                                    return true;
+                                }
                             }
                         }
                     }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/WebConstant.java b/src/main/java/com/supwisdom/dlpay/framework/util/WebConstant.java
index 4896a74..c6237a9 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/WebConstant.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/WebConstant.java
@@ -4,4 +4,5 @@
   public static final int PAGENO_DEFAULT = 1;
   public static final int PAGESIZE_DEFAULT = 10;
   public static final String OPERPWD_DEFAULT = "123456";
+  public static final String OPERTYPE_DEFAULT = "oper";
 }
diff --git a/src/main/java/com/supwisdom/dlpay/system/bean/LogBean.java b/src/main/java/com/supwisdom/dlpay/system/bean/LogBean.java
new file mode 100644
index 0000000..2ffbf62
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/system/bean/LogBean.java
@@ -0,0 +1,13 @@
+package com.supwisdom.dlpay.system.bean;
+
+public class LogBean extends PageBean{
+    private String opername;
+
+    public String getOpername() {
+        return opername;
+    }
+
+    public void setOpername(String opername) {
+        this.opername = opername;
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/system/controller/FunctionController.java b/src/main/java/com/supwisdom/dlpay/system/controller/FunctionController.java
index fbe505d..bbd7a5c 100644
--- a/src/main/java/com/supwisdom/dlpay/system/controller/FunctionController.java
+++ b/src/main/java/com/supwisdom/dlpay/system/controller/FunctionController.java
@@ -9,6 +9,7 @@
 import com.supwisdom.dlpay.system.bean.FunctionSearchBean;
 import com.supwisdom.dlpay.system.service.FunctionService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.*;
@@ -27,6 +28,7 @@
     }
 
     @GetMapping("/function/list")
+    @PreAuthorize("hasPermission('/function/index','')")
     @ResponseBody
     public PageResult<TFunction> getDataList(@RequestParam("page") Integer pageNo,
                                              @RequestParam("limit") Integer pageSize,
@@ -46,11 +48,13 @@
     }
 
     @GetMapping("/function/loadadd")
+    @PreAuthorize("hasPermission('/function/loadadd','')")
     public String loadadd() {
         return "system/function/form";
     }
 
     @PostMapping("/function/add")
+    @PreAuthorize("hasPermission('/function/add','')")
     @ResponseBody
     public JsonResult add(@RequestBody TFunction function) {
         if (function != null) {
@@ -60,6 +64,7 @@
         }
     }
     @PostMapping("/function/delfunc")
+    @PreAuthorize("hasPermission('/function/delfunc','')")
     @ResponseBody
     public JsonResult delfunc(@RequestParam Integer funcid) {
         return functionService.deleteFunction(funcid);
@@ -78,6 +83,7 @@
     }
 
     @GetMapping("/function/loadsubadd")
+    @PreAuthorize("hasPermission('/function/loadsubadd','')")
     public String loadsubadd(Model model) {
         List<TFunction> functionList = functionService.getParentFunction();
         model.addAttribute("list", functionList);
@@ -85,6 +91,7 @@
     }
 
     @GetMapping("/function/loadres")
+    @PreAuthorize("hasPermission('/function/loadres','')")
     public String loadres(@RequestParam Integer functionid, Model model) {
         TFunction function = functionService.getFunctionById(functionid);
         List<TResource> resources = functionService.getResources(functionid);
@@ -93,6 +100,7 @@
         return "system/function/reslist";
     }
     @GetMapping("/function/reslist")
+    @PreAuthorize("hasPermission('/function/loadres','')")
     @ResponseBody
     public PageResult<TResource> reslist(@RequestParam Integer functionid, Model model) {
         List<TResource> resources = functionService.getResources(functionid);
@@ -106,6 +114,7 @@
     }
 
     @PostMapping("/function/addres")
+    @PreAuthorize("hasPermission('/function/addres','')")
     @ResponseBody
     public JsonResult addres(@RequestBody TResource resource) {
         if (resource != null) {
@@ -121,6 +130,7 @@
         return "system/function/resform";
     }
     @PostMapping("/function/delres")
+    @PreAuthorize("hasPermission('/function/delres','')")
     @ResponseBody
     public JsonResult delres(@RequestParam Integer resid) {
         return functionService.deleteResource(resid);
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 85acf8b..173cc64 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,15 @@
 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.util.PageResult;
 import com.supwisdom.dlpay.framework.util.StringUtil;
 import com.supwisdom.dlpay.framework.util.WebConstant;
+import com.supwisdom.dlpay.system.bean.FunctionSearchBean;
+import com.supwisdom.dlpay.system.bean.LogBean;
 import com.supwisdom.dlpay.system.bean.OperatorSearchBean;
 import com.supwisdom.dlpay.system.service.OperatorService;
 import com.supwisdom.dlpay.system.service.RoleService;
@@ -15,98 +20,143 @@
 import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
+
 
 @Controller
 @RequestMapping("/operator")
 public class OperatorController {
-  @Autowired
-  private OperatorService operatorService;
-  @Autowired
-  private RoleService roleService;
+    @Autowired
+    private OperatorService operatorService;
+    @Autowired
+    private RoleService roleService;
 
-  @GetMapping("/index")
-  @PreAuthorize("hasPermission('/operator/index','')")
-  public String indexView(Model model) {
-    return "system/operator/index";
-  }
+    @GetMapping("/index")
+    @PreAuthorize("hasPermission('/operator/index','')")
+    public String indexView(Model model) {
+        return "system/operator/index";
+    }
 
-  @GetMapping("/list")
-  @ResponseBody
-  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) {
-    try {
+    @GetMapping("/list")
+    @ResponseBody
+    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) {
+        try {
 
-      if (null == pageNo || pageNo < 1) pageNo = WebConstant.PAGENO_DEFAULT;
-      if (null == pageSize || pageSize < 1) pageSize = WebConstant.PAGESIZE_DEFAULT;
-      OperatorSearchBean searchBean = new OperatorSearchBean();
-      if (!StringUtil.isEmpty(searchValue)) {
-        if ("opercode".equals(searchKey)) {
-          searchBean.setOpercode(searchValue.trim());
-        } else if ("opername".equals(searchKey)) {
-          searchBean.setOpername(searchValue.trim());
-        } else if ("mobile".equals(searchValue.trim())) {
-          searchBean.setMobile(searchValue.trim());
+            if (null == pageNo || pageNo < 1) pageNo = WebConstant.PAGENO_DEFAULT;
+            if (null == pageSize || pageSize < 1) pageSize = WebConstant.PAGESIZE_DEFAULT;
+            OperatorSearchBean searchBean = new OperatorSearchBean();
+            if (!StringUtil.isEmpty(searchValue)) {
+                if ("opercode".equals(searchKey)) {
+                    searchBean.setOpercode(searchValue.trim());
+                } else if ("opername".equals(searchKey)) {
+                    searchBean.setOpername(searchValue.trim());
+                } else if ("mobile".equals(searchValue.trim())) {
+                    searchBean.setMobile(searchValue.trim());
+                }
+            }
+            return operatorService.getOperatorsByPage(pageNo, pageSize, searchBean);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new PageResult<>(99, "系统查询错误");
         }
-      }
-      return operatorService.getOperatorsByPage(pageNo, pageSize, searchBean);
-    } catch (Exception e) {
-      e.printStackTrace();
-      return new PageResult<>(99, "系统查询错误");
     }
-  }
 
-  @GetMapping("/load4add")
-  @PreAuthorize("hasPermission('/operator/load4add','')")
-  public String load4addOperator(Model model) {
-    model.addAttribute("roles", roleService.findAllRoles());
-    return "system/operator/operator";
-  }
-
-  @GetMapping("/checkopercode")
-  @ResponseBody
-  public JsonResult checkOpercode(@RequestParam("opercode") String opercode,
-                                  @RequestParam(value = "operid", required = false) String operid) {
-    if (operatorService.checkOpercodeExists(opercode, operid)) {
-      return JsonResult.error("账号重复");
+    @GetMapping("/load4add")
+    @PreAuthorize("hasPermission('/operator/load4add','')")
+    public String load4addOperator(Model model) {
+        model.addAttribute("roles", roleService.findAllRoles());
+        return "system/operator/operator";
     }
-    return JsonResult.ok("success");
-  }
 
-  @PostMapping("/add")
-  @ResponseBody
-  public JsonResult add(@RequestParam("operid") String operid, @RequestParam("opercode") String opercode,
-                        @RequestParam("opername") String opername, @RequestParam("sex") String sex,
-                        @RequestParam("mobile") String mobile, @RequestParam("email") String email,
-                        @RequestParam("roleId") String roleId, Model map) {
-    if (operatorService.checkOpercodeExists(opercode, operid)) {
-      return JsonResult.error("账号重复");
+    @GetMapping("/checkopercode")
+    @ResponseBody
+    public JsonResult checkOpercode(@RequestParam("opercode") String opercode,
+                                    @RequestParam(value = "operid", required = false) String operid) {
+        if (operatorService.checkOpercodeExists(opercode, operid)) {
+            return JsonResult.error("账号重复");
+        }
+        return JsonResult.ok("success");
     }
-    TOperator operator = new TOperator();
-    operator.setOpername(opername);
-    operator.setOpercode(opercode);
-    operator.setOperid(operid);
-    operator.setMobile(mobile);
-    operator.setEmail(email);
-    operator.setSex(sex);
-    BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
-    operator.setOperpwd(encoder.encode("123456"));
-    operatorService.saveOperator(operator,roleId);
-    return JsonResult.ok("添加成功");
-  }
-
-  @PostMapping("/update")
-  @ResponseBody
-  public JsonResult update(TOperator oper, String roleId) {
-    oper.setOperpwd(WebConstant.OPERPWD_DEFAULT);
-    if (true) {
-      return JsonResult.ok("添加成功");
-    } else {
-      return JsonResult.error("添加失败");
+    @PostMapping("/getoperatorrole")
+    @ResponseBody
+    public JsonResult getoperatorrole(  @RequestParam(value = "operid") String operid) {
+        List<TOperRole> roles = operatorService.getOperRoleByOperId(operid);
+        JsonResult ret = JsonResult.ok("success");
+        ret.put("roles",roles);
+        return ret;
     }
-  }
 
+    @PostMapping("/add")
+    @PreAuthorize("hasPermission('/operator/add','')")
+    @ResponseBody
+    public JsonResult add(@RequestParam("operid") String operid, @RequestParam("opercode") String opercode,
+                          @RequestParam("opername") String opername, @RequestParam("sex") String sex,
+                          @RequestParam("mobile") String mobile, @RequestParam("email") String email,
+                          @RequestParam("roleId") String roleId, Model map) {
+        if (operatorService.checkOpercodeExists(opercode, operid)) {
+            return JsonResult.error("账号重复");
+        }
+        TOperator operator = new TOperator();
+        operator.setOpername(opername);
+        operator.setOpercode(opercode);
+        operator.setOperid(operid);
+        operator.setMobile(mobile);
+        operator.setEmail(email);
+        operator.setSex(sex);
+        boolean ret = operatorService.saveOperator(operator, roleId);
+        if (ret) {
+            return JsonResult.ok("操作成功");
+        } else {
+            return JsonResult.error("操作失败");
+        }
+    }
 
+    @PostMapping("/resetpwd")
+    @PreAuthorize("hasPermission('/operator/resetpwd','')")
+    @ResponseBody
+    public JsonResult resetpwd(@RequestParam("operid") String operid) {
+        if (operatorService.resetPwd(operid)) {
+            return JsonResult.ok("操作成功，密码重置为123456");
+        } else {
+            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)) {
+            return JsonResult.ok("操作成功");
+        } else {
+            return JsonResult.error("操作失败");
+        }
+    }
+    @GetMapping("/logs")
+    public String logs() {
+        return "system/operator/logs";
+    }
+
+    @GetMapping("/logslist")
+    @PreAuthorize("hasPermission('/operator/logslist','')")
+    @ResponseBody
+    public PageResult<TOperLog> logslist(@RequestParam("page") Integer pageNo,
+                                         @RequestParam("limit") Integer pageSize,
+                                         @RequestParam(value = "searchkey", required = false) String searchKey) {
+        try {
+            if (null == pageNo || pageNo < 1) pageNo = WebConstant.PAGENO_DEFAULT;
+            if (null == pageSize || pageSize < 1) pageSize = WebConstant.PAGESIZE_DEFAULT;
+            LogBean searchBean = new LogBean();
+            searchBean.setPageNo(pageNo);
+            searchBean.setOpername(searchKey);
+            searchBean.setPageSize(pageSize);
+            return operatorService.getOperLogs(searchBean);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new PageResult<>(99, "系统查询错误");
+        }
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/system/controller/RoleController.java b/src/main/java/com/supwisdom/dlpay/system/controller/RoleController.java
index bfe0127..e8e4eb7 100644
--- a/src/main/java/com/supwisdom/dlpay/system/controller/RoleController.java
+++ b/src/main/java/com/supwisdom/dlpay/system/controller/RoleController.java
@@ -1,35 +1,30 @@
 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.TRole;
-import com.supwisdom.dlpay.framework.domain.TRoleFunction;
 import com.supwisdom.dlpay.framework.util.PageResult;
 import com.supwisdom.dlpay.framework.util.WebConstant;
 import com.supwisdom.dlpay.system.bean.FunctionSearchBean;
 import com.supwisdom.dlpay.system.bean.ZTreeNode;
-import com.supwisdom.dlpay.system.service.FunctionService;
 import com.supwisdom.dlpay.system.service.RoleService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.Arrays;
 import java.util.List;
 
 @Controller
 public class RoleController {
     @Autowired
     private RoleService roleService;
-    @Autowired
-    private FunctionService functionService;
-
     @GetMapping("/role/index")
     public String indexView() {
         return "system/role/index";
     }
 
     @GetMapping("/role/list")
+    @PreAuthorize("hasPermission('/role/index','')")
     @ResponseBody
     public PageResult<TRole> getDataList(@RequestParam("page") Integer pageNo,
                                          @RequestParam("limit") Integer pageSize,
@@ -49,11 +44,13 @@
     }
 
     @GetMapping("/role/loadadd")
+    @PreAuthorize("hasPermission('/role/loadadd','')")
     public String loadadd() {
         return "system/role/form";
     }
 
     @PostMapping("/role/add")
+    @PreAuthorize("hasPermission('/role/add','')")
     @ResponseBody
     public JsonResult add(@RequestBody TRole role) {
         if (role != null) {
@@ -64,11 +61,13 @@
     }
 
     @GetMapping("/role/loadfunc")
+    @PreAuthorize("hasPermission('/role/loadfunc','')")
     public String loadfunc() {
         return "system/role/func";
     }
 
     @PostMapping("/role/addfunc")
+    @PreAuthorize("hasPermission('/role/addfunc','')")
     @ResponseBody
     public JsonResult addfunc(@RequestParam String roleId,
                               @RequestParam String funcs) {
@@ -84,6 +83,7 @@
         return result;
     }
     @PostMapping("/role/del")
+    @PreAuthorize("hasPermission('/role/del','')")
     @ResponseBody
     public JsonResult del(@RequestParam String  roleid) {
         return roleService.deleteRole(roleid);
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 bbaff0a..a975eb2 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/OperatorService.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/OperatorService.java
@@ -1,11 +1,16 @@
 package com.supwisdom.dlpay.system.service;
 
+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.util.PageResult;
+import com.supwisdom.dlpay.system.bean.LogBean;
 import com.supwisdom.dlpay.system.bean.OperatorSearchBean;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.List;
+
 public interface OperatorService {
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
     PageResult<TOperator> getOperatorsByPage(int pageNo, int pageSize, OperatorSearchBean searchBean);
@@ -15,4 +20,22 @@
 
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     boolean saveOperator(TOperator operator,String roles);
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
+    TOperator getOperatorByCode(String opercode);
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
+    List<TOperRole> getOperRoleByOperId(String operid);
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+    boolean resetPwd(String operid);
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+    boolean updateState(String operid,String state);
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+    boolean saveOperLog(TOperLog log);
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
+    PageResult<TOperLog> getOperLogs(LogBean param);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/RoleService.java b/src/main/java/com/supwisdom/dlpay/system/service/RoleService.java
index 222dd8d..6acfe7d 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/RoleService.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/RoleService.java
@@ -18,7 +18,7 @@
     List<TRole> findAllRoles();
 
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
-    TRole findRoleByRolecode(String rolecode);
+    TRole findRoleByRoleid(String roleid);
 
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
     TResource findResourceByURI(String uri);
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 167e955..5990930 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
@@ -1,13 +1,13 @@
 package com.supwisdom.dlpay.system.service.impl;
 
+import com.supwisdom.dlpay.framework.dao.OperLogDao;
 import com.supwisdom.dlpay.framework.dao.OperRoleDao;
 import com.supwisdom.dlpay.framework.dao.OperatorDao;
+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.util.DateUtil;
-import com.supwisdom.dlpay.framework.util.PageResult;
-import com.supwisdom.dlpay.framework.util.StringUtil;
-import com.supwisdom.dlpay.framework.util.TradeDict;
+import com.supwisdom.dlpay.framework.util.*;
+import com.supwisdom.dlpay.system.bean.LogBean;
 import com.supwisdom.dlpay.system.bean.OperatorSearchBean;
 import com.supwisdom.dlpay.system.service.OperatorService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -16,6 +16,7 @@
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Sort;
 import org.springframework.data.jpa.domain.Specification;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.stereotype.Service;
 
 import javax.persistence.criteria.CriteriaBuilder;
@@ -24,6 +25,7 @@
 import javax.persistence.criteria.Root;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Optional;
 
 @Service
 public class OperatorServiceImpl implements OperatorService {
@@ -31,6 +33,8 @@
     private OperatorDao operatorDao;
     @Autowired
     private OperRoleDao operRoleDao;
+    @Autowired
+    private OperLogDao operLogDao;
 
     @Override
     public PageResult<TOperator> getOperatorsByPage(int pageNo, int pageSize, OperatorSearchBean searchBean) {
@@ -67,17 +71,93 @@
     }
 
     @Override
-    public boolean saveOperator(TOperator operator,String roles) {
-        String[] roleids= roles.split(",");
-        operator.setOpendate(DateUtil.getNow());
-        operator.setStatus(TradeDict.STATUS_NORMAL);
-        operatorDao.save(operator);
-        for(String role:roleids){
-            TOperRole operRole = new TOperRole();
-            operRole.setOperid(operator.getOperid());
-            operRole.setRoleId(role);
-            operRoleDao.save(operRole);
+    public boolean saveOperator(TOperator operator, String roles) {
+        if (StringUtil.isEmpty(operator.getOperid())) {
+            String[] roleids = roles.split(",");
+            operator.setOpendate(DateUtil.getNow("yyyyMMdd"));
+            operator.setStatus(TradeDict.STATUS_NORMAL);
+            operator.setOpertype(WebConstant.OPERTYPE_DEFAULT);
+            BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
+            operator.setOperpwd(encoder.encode(WebConstant.OPERPWD_DEFAULT));
+            operator = operatorDao.save(operator);
+            for (String role : roleids) {
+                TOperRole operRole = new TOperRole();
+                operRole.setOperid(operator.getOperid());
+                operRole.setRoleId(role);
+                operRoleDao.save(operRole);
+            }
+        } else {
+            Optional<TOperator> temp = operatorDao.findById(operator.getOperid());
+            if (!temp.isPresent()) {
+                return false;
+            }
+            TOperator op = temp.get();
+            op.setSex(operator.getSex());
+            op.setEmail(operator.getEmail());
+            op.setMobile(operator.getMobile());
+            op.setOpername(operator.getOpername());
+            op.setOpercode(operator.getOpercode());
+            operatorDao.save(op);
+            operRoleDao.deleteByOperid(op.getOperid());
+            String[] roleids = roles.split(",");
+            for (String role : roleids) {
+                TOperRole operRole = new TOperRole();
+                operRole.setOperid(op.getOperid());
+                operRole.setRoleId(role);
+                operRoleDao.save(operRole);
+            }
         }
         return true;
     }
+
+    @Override
+    public TOperator getOperatorByCode(String opercode) {
+        return operatorDao.findByOpercode(opercode);
+    }
+
+    @Override
+    public List<TOperRole> getOperRoleByOperId(String operid) {
+        return operRoleDao.findAllByOperid(operid);
+    }
+
+    @Override
+    public boolean resetPwd(String operid) {
+        Optional<TOperator> temp = operatorDao.findById(operid);
+        if (!temp.isPresent()) {
+            return false;
+        }
+        TOperator op = temp.get();
+        BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
+        op.setOperpwd(encoder.encode(WebConstant.OPERPWD_DEFAULT));
+        operatorDao.save(op);
+        return true;
+    }
+
+    @Override
+    public boolean updateState(String operid, String state) {
+        Optional<TOperator> temp = operatorDao.findById(operid);
+        if (!temp.isPresent()) {
+            return false;
+        }
+        TOperator op = temp.get();
+        op.setStatus(state);
+        operatorDao.save(op);
+        return true;
+    }
+
+    @Override
+    public boolean saveOperLog(TOperLog log) {
+        operLogDao.save(log);
+        return true;
+    }
+
+    @Override
+    public PageResult<TOperLog> getOperLogs(LogBean param) {
+        Pageable pageable = PageRequest.of(param.getPageNo() - 1, param.getPageSize()
+                , Sort.by(Sort.Direction.DESC,"logdate"));
+        if (!StringUtil.isEmpty(param.getOpername())) {
+            return new PageResult<>(operLogDao.findAllByOpernameContaining(param.getOpername(), pageable));
+        }
+        return new PageResult<>(operLogDao.findAll(pageable));
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/impl/RoleServiceImpl.java b/src/main/java/com/supwisdom/dlpay/system/service/impl/RoleServiceImpl.java
index 0e30b2a..ea049e3 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/impl/RoleServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/impl/RoleServiceImpl.java
@@ -48,8 +48,12 @@
     }
 
     @Override
-    public TRole findRoleByRolecode(String rolecode) {
-        return roleDao.findByRoleCode(rolecode);
+    public TRole findRoleByRoleid(String roleid) {
+        Optional<TRole> role = roleDao.findById(roleid);
+        if(role.isPresent()){
+            return role.get();
+        }
+        return null;
     }
 
     @Override
@@ -79,10 +83,6 @@
             if (temp != null) {
                 return JsonResult.error("角色名称已存在");
             }
-            temp = roleDao.findByRoleCodeAndRoleIdNot(role.getRoleCode(), role.getRoleId());
-            if (temp != null) {
-                return JsonResult.error("角色代码已存在");
-            }
             Optional<TRole> opt = roleDao.findById(role.getRoleId());
             if (opt == null || !opt.isPresent()) {
                 return JsonResult.error("角色已被删除");
@@ -98,13 +98,10 @@
             if (temp != null) {
                 return JsonResult.error("角色名称已存在");
             }
-            temp = roleDao.findByRoleCode(role.getRoleCode());
-            if (temp != null) {
-                return JsonResult.error("角色代码已存在");
-            }
+
             role.setCreatetime(DateUtil.getNow());
             role.setEditflag(1);
-            role.setRoleCode(role.getRoleCode());
+            role.setRoleCode("ROLE_ADMIN");
             roleDao.save(role);
         }
         return JsonResult.ok("成功");
diff --git a/src/main/resources/static/custom/module/admin.js b/src/main/resources/static/custom/module/admin.js
index 334e29e..e9b34ef 100755
--- a/src/main/resources/static/custom/module/admin.js
+++ b/src/main/resources/static/custom/module/admin.js
@@ -208,6 +208,26 @@
                 } catch (e) {
                 }
             }
+        },
+        formatDate:function (str) {
+            if (str == null || str == "") {
+                return;
+            }
+            switch (str.length) {
+                case 8:
+                    str = str.substring(0, 4) + "-" + str.substring(4, 6) + "-" + str.substring(6, 8);
+                    return str;
+                case 12:
+                    str = str.substring(0, 4) + "-" + str.substring(4, 6) + "-" + str.substring(6, 8) + " " + str.substring(8, 10)
+                        + ":" + str.substring(10, 12);
+                    return str;
+                case 14:
+                    str = str.substring(0, 4) + "-" + str.substring(4, 6) + "-" + str.substring(6, 8) + " " + str.substring(8, 10)
+                        + ":" + str.substring(10, 12) + ":" + str.substring(12, 14);
+                    return str;
+                default:
+                    return str;
+            }
         }
     };
 
diff --git a/src/main/resources/templates/system/operator/index.html b/src/main/resources/templates/system/operator/index.html
index 14861c7..09b5f2e 100644
--- a/src/main/resources/templates/system/operator/index.html
+++ b/src/main/resources/templates/system/operator/index.html
@@ -18,30 +18,30 @@
             <input id="oper-search-value" class="layui-input search-input" type="text" placeholder="输入关键字"/>&emsp;
             <button id="oper-btn-search" class="layui-btn icon-btn"><i class="layui-icon">&#xe615;</i>搜索</button>
             <button id="oper-btn-add" class="layui-btn icon-btn" lay-tips="新用户密码为123456"
-                    sec:authorize="hasPermission('/operator/load4add','query')" ><i
+                    sec:authorize="hasPermission('/operator/load4add','')" ><i
                     class="layui-icon">&#xe654;</i>添加
             </button>
         </div>
 
-        <table class="layui-table" id="oper-table"></table>
+        <table class="layui-table" id="oper-table" lay-filter="oper-table"></table>
     </div>
 </div>
 
 <!-- 表格状态列 -->
 <script type="text/html" id="oper-tpl-state">
     {{# if(d.opercode == 'system') { }}
-    <input type="checkbox" lay-filter="oper-tpl-state" value="{{d.operid}}" lay-skin="switch" lay-text="正常|锁定"
+    <input type="checkbox" lay-filter="oper-tpl-state" value="{{d.operid}}" lay-skin="switch" lay-text="正常|注销"
            {{d.status=='normal'?'checked':''}} disabled/>
     {{# }else{ }}
-    <input type="checkbox" lay-filter="oper-tpl-state" value="{{d.operid}}" lay-skin="switch" lay-text="正常|锁定"
+    <input type="checkbox" lay-filter="oper-tpl-state" value="{{d.operid}}" lay-skin="switch" lay-text="正常|注销"
            {{d.status=='normal'?'checked':''}} />
     {{# } }}
 </script>
 
 <!-- 表格操作列 -->
 <script type="text/html" id="oper-table-bar">
-    <a class="layui-btn layui-btn-primary layui-btn-xs">修改</a>
-    <a class="layui-btn layui-btn-xs">重置密码</a>
+    <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="edit">修改</a>
+    <a class="layui-btn layui-btn-xs" lay-event="resetpwd">重置密码</a>
 </script>
 
 <script>
@@ -111,45 +111,74 @@
         };
 
         // 工具条点击事件
-        table.on('tool(user-table)', function (obj) {
+        table.on('tool(oper-table)', function (obj) {
             console.log(obj);
             var data = obj.data;
             var layEvent = obj.event;
 
             if (layEvent === 'edit') { // 修改
-                showEditModel(data);
-            } else if (layEvent === 'reset') { // 重置密码
+                layer.load(2);
+                let token = $("meta[name='_csrf_token']").attr("value");
+                admin.go('/operator/getoperatorrole', {
+                    operid: data.operid,
+                    _csrf: token
+                }, function (ret) {
+                    console.log(ret.code);
+                    layer.closeAll('loading');
+                    if (ret.code == 200) {
+                        data['roles'] = ret.roles;
+                        showEditModel(data);
+                    } else if (ret.code == 401) {
+                        layer.msg(ret.msg, {icon: 2, time: 1500}, function () {
+                            location.replace('/login');
+                        }, 1000);
+                        return;
+                    }
+                    else {
+                        layer.msg(ret.msg, {icon: 2});
+                    }
+                },function(){
+                    layer.closeAll('loading');
+                    layer.msg('请求失败了，请稍后再试', {icon: 2});
+                });
+            } else if (layEvent === 'resetpwd') { // 重置密码
                 layer.confirm('确定重置此用户的密码吗？', function (i) {
                     layer.close(i);
                     layer.load(2);
-                    admin.go('/system/user/restPsw', {
-                        userId: obj.data.userId
-                    }, function (data) {
-                        console.log(data.code);
+                    let token = $("meta[name='_csrf_token']").attr("value");
+                    admin.go('/operator/resetpwd', {
+                        operid: data.operid,
+                        _csrf: token
+                    }, function (ret) {
+                        console.log(ret.code);
                         layer.closeAll('loading');
-                        if (data.code == 200) {
-                            layer.msg(data.msg, {icon: 1});
-                        } else if (data.code == 401) {
-                            layer.msg(data.msg, {icon: 2, time: 1500}, function () {
+                        if (ret.code == 200) {
+                            layer.msg(ret.msg, {icon: 1});
+                        } else if (ret.code == 401) {
+                            layer.msg(ret.msg, {icon: 2, time: 1500}, function () {
                                 location.replace('/login');
                             }, 1000);
                             return;
                         }
                         else {
-                            layer.msg(data.msg, {icon: 2});
+                            layer.msg(ret.msg, {icon: 2});
                         }
+                    },function(){
+                        layer.closeAll('loading');
+                        layer.msg('请求失败了，请稍后再试', {icon: 2});
                     });
                 });
             }
         });
 
-
         // 修改user状态
-        form.on('switch(user-tpl-state)', function (obj) {
+        form.on('switch(oper-tpl-state)', function (obj) {
             layer.load(2);
-            admin.go('/system/user/updateState', {
-                userId: obj.elem.value,
-                state: obj.elem.checked ? 0 : 1
+            let token = $("meta[name='_csrf_token']").attr("value");
+            admin.go('/operator/updatestate', {
+                operid: obj.elem.value,
+                _csrf: token,
+                state: obj.elem.checked ? 'normal' : 'closed'
             }, function (data) {
                 layer.closeAll('loading');
                 if (data.code == 200) {
@@ -165,6 +194,9 @@
                     $(obj.elem).prop('checked', !obj.elem.checked);
                     form.render('checkbox');
                 }
+            },function () {
+                layer.closeAll('loading');
+                layer.msg('请求失败了，请稍后再试', {icon: 2});
             });
         });
 
diff --git a/src/main/resources/templates/system/operator/logs.html b/src/main/resources/templates/system/operator/logs.html
new file mode 100644
index 0000000..4213ac0
--- /dev/null
+++ b/src/main/resources/templates/system/operator/logs.html
@@ -0,0 +1,50 @@
+<div class="layui-card">
+    <div class="layui-card-header">
+        <h2 class="header-title">操作日志</h2>
+        <span class="layui-breadcrumb pull-right">
+          <a href="#!_operator_index">系统中心</a>
+          <a><cite>操作日志</cite></a>
+        </span>
+    </div>
+    <div class="layui-card-body">
+        <div class="layui-form toolbar">
+            搜索：
+            <input id="search-value" class="layui-input search-input" type="text" placeholder="输入管理员账号"/>&emsp;
+            <button id="btn-search" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
+            </button>
+        </div>
+        <table class="layui-table" id="logtable" lay-filter="logtable"></table>
+    </div>
+</div>
+<script>
+    layui.use(['form', 'table', 'layer', 'admin', 'element'], function () {
+        let form = layui.form;
+        let table = layui.table;
+        let admin = layui.admin;
+        form.render('select');
+        // 渲染表格
+        table.render({
+            elem: '#logtable',
+            url: '/operator/logslist',
+            page: true,
+            cols: [
+                [
+                    {field: 'opername', title: '管理员账号', width: 160,fixed: 'left', sort: true},
+                    {field: 'functionname', title: '所属功能', width: 160,fixed: 'left', sort: true},
+                    {field: 'resname', title: '操作内容', width: 160,fixed: 'left', sort: true},
+                    {field: 'respath', title: '操作路径', width: 200,},
+                    {
+                        field: 'logdate', align: 'center', title: '操作时间', fixed: 'right', templet: function (item) {
+                            return admin.formatDate(item.logdate);
+                        }
+                    }
+                ]
+            ]
+        });
+        // 搜索按钮点击事件
+        $('#btn-search').click(function () {
+            let key = $('#search-value').val();
+            table.reload('logtable', {where: {searchkey: key}, page: {curr: 1}});
+        });
+    });
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/system/operator/operator.html b/src/main/resources/templates/system/operator/operator.html
index 6676bf4..a048c1a 100644
--- a/src/main/resources/templates/system/operator/operator.html
+++ b/src/main/resources/templates/system/operator/operator.html
@@ -25,13 +25,13 @@
     <div class="layui-form-item">
         <label class="layui-form-label">手机号</label>
         <div class="layui-input-block">
-            <input name="mobile" placeholder="请输入手机号" type="text" class="layui-input" lay-verify="mobile" required/>
+            <input name="mobile" placeholder="请输入手机号" type="text" class="layui-input" lay-verify="mobile" />
         </div>
     </div>
     <div class="layui-form-item">
         <label class="layui-form-label">邮箱</label>
         <div class="layui-input-block">
-            <input name="email" placeholder="请输入邮箱" type="text" class="layui-input" lay-verify="swEmail" required/>
+            <input name="email" placeholder="请输入邮箱" type="text" class="layui-input" lay-verify="swEmail" />
         </div>
     </div>
 
@@ -104,7 +104,6 @@
         var user = admin.getTempData('t_user');
         if (user) {
             $('input[name="opercode"]').attr('readonly', 'readonly');
-            url = '/operator/update';
             form.val('oper-form', user);
             var rds = new Array();
             for (var i = 0; i < user.roles.length; i++) {
@@ -125,17 +124,17 @@
                 data : data.field,
                 success : function(result) {
                     layer.closeAll('loading');
-                    if (data.code == 200) {
-                        layer.msg(data.msg, {icon: 1});
+                    if (result.code == 200) {
+                        layer.msg(result.msg, {icon: 1});
                         admin.finishPopupCenter();
                     } else if (data.code == 401) {
-                        layer.msg(data.msg, {icon: 2, time: 1500}, function () {
+                        layer.msg(result.msg, {icon: 2, time: 1500}, function () {
                             location.replace('/login');
                         }, 1000);
                         return;
                     } else {
-                        console.log('err:' + data.code);
-                        layer.msg(data.msg, {icon: 2});
+                        console.log('err:' + result.code);
+                        layer.msg(result.msg, {icon: 2});
                     }
                 },
                 error : function(data) {
diff --git a/src/main/resources/templates/system/role/form.html b/src/main/resources/templates/system/role/form.html
index f8714f3..fcfcbf3 100755
--- a/src/main/resources/templates/system/role/form.html
+++ b/src/main/resources/templates/system/role/form.html
@@ -9,13 +9,6 @@
         </div>
     </div>
     <div class="layui-form-item">
-        <label class="layui-form-label">角色代码</label>
-        <div class="layui-input-block">
-            <input name="roleCode" placeholder="请输入角色代码" type="text" class="layui-input" maxlength="20"
-                   lay-verify="required|roleCode" required/>
-        </div>
-    </div>
-    <div class="layui-form-item">
         <label class="layui-form-label">角色描述</label>
         <div class="layui-input-block">
             <textarea name="roleDesc" placeholder="请输入描述" class="layui-textarea"></textarea>
