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 292a999..c3fe0d1 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/OperRoleDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/OperRoleDao.java
@@ -12,4 +12,6 @@
 
   @Query(value = "select distinct rolecode from TB_OPER_ROLE a,TB_ROLE b where a.roleid=b.roleid and a.operid=?1", nativeQuery = true)
   List<String> getRolecodeByOperid(String operid);
+
+  void deleteByRoleId(String roleId);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/PermissionDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/PermissionDao.java
index 767df41..af782a8 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/PermissionDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/PermissionDao.java
@@ -3,14 +3,9 @@
 import com.supwisdom.dlpay.framework.domain.TPermission;
 import org.springframework.data.jpa.repository.JpaRepository;
 
-import java.util.List;
-
 public interface PermissionDao extends JpaRepository<TPermission, String> {
-    List<TPermission> findByRoleFuncId(String roleFuncId);
 
-    TPermission findByRoleFuncIdAndResid(String roleFuncId, Integer resid);
-
-    void deleteByRoleFuncId(String roleFuncId);
+    TPermission findByRoleIdAndResid(String roleId, Integer resid);
 
     void deleteByRoleId(String roleId);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/RoleDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/RoleDao.java
index 0baed2e..9ccc7c9 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/RoleDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/RoleDao.java
@@ -14,11 +14,13 @@
     @Query("from TRole order by createtime asc ")
     List<TRole> getAllRoles();
 
-    TRole findByRoleCode(String rolecode);
+    TRole findByRoleCode(String roleCode);
 
     Page<TRole> findAllByRoleNameContaining(String roleName, Pageable pageable);
 
     TRole findByRoleNameAndRoleIdNot(String roleName, String roleId);
 
+    TRole findByRoleCodeAndRoleIdNot(String roleCode, String roleId);
+
     TRole findByRoleName(String roleName);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/domain/TPermission.java b/src/main/java/com/supwisdom/dlpay/framework/domain/TPermission.java
index 0d22f35..f9a2368 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/domain/TPermission.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/domain/TPermission.java
@@ -19,7 +19,7 @@
     @Column(name = "RESID")
     private Integer resid;
 
-    @Column(name = "ROLEID")
+    @Column(name = "ROLEID",length = 32)
     private String roleId;
 
     public String getRoleId() {
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 dfa30c6..db6a4f1 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/security/MyPermissionEvaluator.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/security/MyPermissionEvaluator.java
@@ -1,5 +1,6 @@
 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;
@@ -22,7 +23,8 @@
 
     @Override
     public boolean hasPermission(Authentication authentication, Object targetUri, Object permission) {
-        if (targetUri != null && permission != null) {
+        //TODO save logger
+        if (targetUri != null) {
             UserDetails userDetails = (UserDetails) authentication.getPrincipal();
             if (userDetails != null) {
                 Collection<GrantedAuthority> authorities = (Collection<GrantedAuthority>) userDetails.getAuthorities();
@@ -32,9 +34,8 @@
                     if (role != null) {
                         TResource resource = roleService.findResourceByURI(String.valueOf(targetUri));
                         if (resource != null) {
-                            TRoleFunction roleFunction = roleService.findRoleFunctionByRoleIdAndFunctionId(role.getRoleId(), resource.getFunctionId());
-                            if (roleFunction != null && !StringUtil.isEmpty(roleFunction.getPermissions())
-                                    && roleFunction.getPermissions().contains(String.valueOf(permission))) {
+                            TPermission permission1 = roleService.findByRoleIdAndResid(role.getRoleId(),resource.getId());
+                            if (permission1 != null) {
                                 return true;
                             }
                         }
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 fa1318e..85acf8b 100644
--- a/src/main/java/com/supwisdom/dlpay/system/controller/OperatorController.java
+++ b/src/main/java/com/supwisdom/dlpay/system/controller/OperatorController.java
@@ -10,6 +10,7 @@
 import com.supwisdom.dlpay.system.service.RoleService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.*;
@@ -24,7 +25,7 @@
   private RoleService roleService;
 
   @GetMapping("/index")
-  @PreAuthorize("hasPermission('/operator/index','query')")
+  @PreAuthorize("hasPermission('/operator/index','')")
   public String indexView(Model model) {
     return "system/operator/index";
   }
@@ -37,6 +38,7 @@
                                            @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();
@@ -57,7 +59,7 @@
   }
 
   @GetMapping("/load4add")
-  @PreAuthorize("hasPermission('/operator/load4add','query')")
+  @PreAuthorize("hasPermission('/operator/load4add','')")
   public String load4addOperator(Model model) {
     model.addAttribute("roles", roleService.findAllRoles());
     return "system/operator/operator";
@@ -79,11 +81,20 @@
                         @RequestParam("opername") String opername, @RequestParam("sex") String sex,
                         @RequestParam("mobile") String mobile, @RequestParam("email") String email,
                         @RequestParam("roleId") String roleId, Model map) {
-    if (true) {
-      return JsonResult.ok("添加成功");
-    } else {
-      return JsonResult.error("添加失败");
+    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);
+    BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
+    operator.setOperpwd(encoder.encode("123456"));
+    operatorService.saveOperator(operator,roleId);
+    return JsonResult.ok("添加成功");
   }
 
   @PostMapping("/update")
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 8e82136..bfe0127 100644
--- a/src/main/java/com/supwisdom/dlpay/system/controller/RoleController.java
+++ b/src/main/java/com/supwisdom/dlpay/system/controller/RoleController.java
@@ -83,4 +83,9 @@
         result.put("node", nodes);
         return result;
     }
+    @PostMapping("/role/del")
+    @ResponseBody
+    public JsonResult del(@RequestParam String  roleid) {
+        return roleService.deleteRole(roleid);
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/FunctionService.java b/src/main/java/com/supwisdom/dlpay/system/service/FunctionService.java
index 0c6aa92..8884b21 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/FunctionService.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/FunctionService.java
@@ -5,32 +5,46 @@
 import com.supwisdom.dlpay.framework.domain.TResource;
 import com.supwisdom.dlpay.framework.util.PageResult;
 import com.supwisdom.dlpay.system.bean.FunctionSearchBean;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 import java.util.Map;
 
 public interface FunctionService {
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
   List<TFunction> getFunctionsByOperid(String operid);
 
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
   List<Map<String, Object>> getMenuTree(List<TFunction> funcList, Integer parentId);
 
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
   PageResult<TFunction> getFunctionsByKey(FunctionSearchBean param);
 
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
   TFunction getFunctionByNameAndId(String name,Integer id);
 
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
   JsonResult saveFunction(TFunction function);
 
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
   TFunction getFunctionById(Integer id);
 
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
   JsonResult deleteFunction(Integer funcid);
 
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
   List<TFunction> getParentFunction();
 
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
   List<TResource> getResources(Integer function);
 
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
   List<TFunction> getLeafFunction();
 
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
   JsonResult saveRes(TResource resource);
 
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
   JsonResult deleteResource(Integer resid);
 }
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 09ab1d4..bbaff0a 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/OperatorService.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/OperatorService.java
@@ -3,9 +3,16 @@
 import com.supwisdom.dlpay.framework.domain.TOperator;
 import com.supwisdom.dlpay.framework.util.PageResult;
 import com.supwisdom.dlpay.system.bean.OperatorSearchBean;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
 
 public interface OperatorService {
-  PageResult<TOperator> getOperatorsByPage(int pageNo, int pageSize, OperatorSearchBean searchBean);
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
+    PageResult<TOperator> getOperatorsByPage(int pageNo, int pageSize, OperatorSearchBean searchBean);
 
-  boolean checkOpercodeExists(String opercode, String operid);
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
+    boolean checkOpercodeExists(String opercode, String operid);
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+    boolean saveOperator(TOperator operator,String roles);
 }
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 2306dd0..222dd8d 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/RoleService.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/RoleService.java
@@ -8,29 +8,42 @@
 import com.supwisdom.dlpay.framework.util.PageResult;
 import com.supwisdom.dlpay.system.bean.FunctionSearchBean;
 import com.supwisdom.dlpay.system.bean.ZTreeNode;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 
 public interface RoleService {
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
     List<TRole> findAllRoles();
 
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
     TRole findRoleByRolecode(String rolecode);
 
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
     TResource findResourceByURI(String uri);
 
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
     TRoleFunction findRoleFunctionByRoleIdAndFunctionId(String roleid, Integer functionid);
 
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
     PageResult<TRole> getRolesByKey(FunctionSearchBean param);
 
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     JsonResult saveRole(TRole role);
 
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
     List<TRoleFunction> getRoleFuncByRoleid(String roleId);
 
-    List<TPermission> findByRoleFuncId(String roleFuncId);
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
+    TPermission findByRoleIdAndResid(String roleFuncId, Integer resid);
 
-    TPermission findByRoleFuncIdAndResid(String roleFuncId, Integer resid);
-
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     JsonResult saveRoleFuncId(String roleId, String funcs);
 
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
     List<ZTreeNode> findByRoleIdNative(String roleId);
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+    JsonResult deleteRole(String roleid);
 }
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 7babb62..167e955 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,7 +1,10 @@
 package com.supwisdom.dlpay.system.service.impl;
 
+import com.supwisdom.dlpay.framework.dao.OperRoleDao;
 import com.supwisdom.dlpay.framework.dao.OperatorDao;
+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;
@@ -24,40 +27,57 @@
 
 @Service
 public class OperatorServiceImpl implements OperatorService {
-  @Autowired
-  private OperatorDao operatorDao;
+    @Autowired
+    private OperatorDao operatorDao;
+    @Autowired
+    private OperRoleDao operRoleDao;
 
-  @Override
-  public PageResult<TOperator> getOperatorsByPage(int pageNo, int pageSize, OperatorSearchBean searchBean) {
-    Pageable pageable = PageRequest.of(pageNo - 1, pageSize, Sort.Direction.DESC, "opendate");
-    Page<TOperator> page = operatorDao.findAll(new Specification<TOperator>() {
-      @Override
-      public Predicate toPredicate(Root<TOperator> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
-        List<Predicate> predicates = new ArrayList<>();
-        if (!StringUtil.isEmpty(searchBean.getOpercode())) {
-          predicates.add(criteriaBuilder.equal(root.get("opercode").as(String.class), searchBean.getOpercode().trim()));
-        }
-        if (!StringUtil.isEmpty(searchBean.getOpername())) {
-          predicates.add(criteriaBuilder.like(root.get("opername").as(String.class), "%" + searchBean.getOpername().trim() + "%"));
-        }
-        if (!StringUtil.isEmpty(searchBean.getMobile())) {
-          predicates.add(criteriaBuilder.like(root.get("mobile").as(String.class), "%" + searchBean.getMobile().trim() + "%"));
-        }
-        if (null != searchBean.getDeleteShow() && !searchBean.getDeleteShow()) {
-          predicates.add(criteriaBuilder.equal(root.get("status").as(String.class), TradeDict.STATUS_NORMAL)); //仅显示正常
-        }
-        return criteriaBuilder.and(predicates.toArray(new Predicate[0]));
-      }
-    }, pageable);
+    @Override
+    public PageResult<TOperator> getOperatorsByPage(int pageNo, int pageSize, OperatorSearchBean searchBean) {
+        Pageable pageable = PageRequest.of(pageNo - 1, pageSize, Sort.Direction.DESC, "opendate");
+        Page<TOperator> page = operatorDao.findAll(new Specification<TOperator>() {
+            @Override
+            public Predicate toPredicate(Root<TOperator> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
+                List<Predicate> predicates = new ArrayList<>();
+                if (!StringUtil.isEmpty(searchBean.getOpercode())) {
+                    predicates.add(criteriaBuilder.equal(root.get("opercode").as(String.class), searchBean.getOpercode().trim()));
+                }
+                if (!StringUtil.isEmpty(searchBean.getOpername())) {
+                    predicates.add(criteriaBuilder.like(root.get("opername").as(String.class), "%" + searchBean.getOpername().trim() + "%"));
+                }
+                if (!StringUtil.isEmpty(searchBean.getMobile())) {
+                    predicates.add(criteriaBuilder.like(root.get("mobile").as(String.class), "%" + searchBean.getMobile().trim() + "%"));
+                }
+                if (null != searchBean.getDeleteShow() && !searchBean.getDeleteShow()) {
+                    predicates.add(criteriaBuilder.equal(root.get("status").as(String.class), TradeDict.STATUS_NORMAL)); //仅显示正常
+                }
+                return criteriaBuilder.and(predicates.toArray(new Predicate[0]));
+            }
+        }, pageable);
 
-    return new PageResult<>(page);
-  }
+        return new PageResult<>(page);
+    }
 
-  @Override
-  public boolean checkOpercodeExists(String opercode, String operid) {
-    TOperator oper = operatorDao.findByOpercode(opercode.trim());
-    if (null != oper && StringUtil.isEmpty(operid)) return true;
-    if (null != oper && !StringUtil.isEmpty(operid) && !operid.trim().equals(oper.getOperid())) return true;
-    return false;
-  }
+    @Override
+    public boolean checkOpercodeExists(String opercode, String operid) {
+        TOperator oper = operatorDao.findByOpercode(opercode.trim());
+        if (null != oper && StringUtil.isEmpty(operid)) return true;
+        if (null != oper && !StringUtil.isEmpty(operid) && !operid.trim().equals(oper.getOperid())) return true;
+        return false;
+    }
+
+    @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);
+        }
+        return true;
+    }
 }
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 7b42236..0e30b2a 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
@@ -1,10 +1,7 @@
 package com.supwisdom.dlpay.system.service.impl;
 
 import com.supwisdom.dlpay.api.bean.JsonResult;
-import com.supwisdom.dlpay.framework.dao.PermissionDao;
-import com.supwisdom.dlpay.framework.dao.ResourceDao;
-import com.supwisdom.dlpay.framework.dao.RoleDao;
-import com.supwisdom.dlpay.framework.dao.RoleFunctionDao;
+import com.supwisdom.dlpay.framework.dao.*;
 import com.supwisdom.dlpay.framework.data.NodeData;
 import com.supwisdom.dlpay.framework.domain.TPermission;
 import com.supwisdom.dlpay.framework.domain.TResource;
@@ -39,6 +36,9 @@
 
     @Autowired
     private PermissionDao permissionDao;
+    @Autowired
+    private OperRoleDao operRoleDao;
+
 
     @Override
     public List<TRole> findAllRoles() {
@@ -79,6 +79,10 @@
             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("角色已被删除");
@@ -86,6 +90,7 @@
             temp = opt.get();
             temp.setRoleName(role.getRoleName());
             temp.setRoleDesc(role.getRoleDesc());
+            temp.setRoleCode(role.getRoleCode());
             temp.setLastsaved(DateUtil.getNow());
             roleDao.save(temp);
         } else {
@@ -93,9 +98,13 @@
             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_ADMIN");
+            role.setRoleCode(role.getRoleCode());
             roleDao.save(role);
         }
         return JsonResult.ok("成功");
@@ -108,13 +117,8 @@
 
 
     @Override
-    public List<TPermission> findByRoleFuncId(String roleFuncId) {
-        return permissionDao.findByRoleFuncId(roleFuncId);
-    }
-
-    @Override
-    public TPermission findByRoleFuncIdAndResid(String roleFuncId, Integer resid) {
-        return permissionDao.findByRoleFuncIdAndResid(roleFuncId, resid);
+    public TPermission findByRoleIdAndResid(String roleFuncId, Integer resid) {
+        return permissionDao.findByRoleIdAndResid(roleFuncId, resid);
     }
 
     @Override
@@ -158,4 +162,20 @@
         }
         return ret;
     }
+
+    @Override
+    public JsonResult deleteRole(String roleid) {
+        Optional<TRole> ret = roleDao.findById(roleid);
+        if (ret == null || !ret.isPresent()) {
+            return JsonResult.error("角色不存在");
+        }
+        if(ret.get().getEditflag()!=1){
+            return JsonResult.error("该角色不能删除");
+        }
+        permissionDao.deleteByRoleId(roleid);
+        roleFunctionDao.deleteByRoleId(roleid);
+        operRoleDao.deleteByRoleId(roleid);
+        roleDao.deleteById(roleid);
+        return JsonResult.ok("成功");
+    }
 }
diff --git a/src/main/resources/templates/system/operator/operator.html b/src/main/resources/templates/system/operator/operator.html
index c43995c..6676bf4 100644
--- a/src/main/resources/templates/system/operator/operator.html
+++ b/src/main/resources/templates/system/operator/operator.html
@@ -118,8 +118,6 @@
             var token_name = $("meta[name='_csrf_token']").attr("content");
             var token = $("meta[name='_csrf_token']").attr("value");
             data.field[token_name] = token;
-            console.log(data);
-            debugger
             $.ajax({
                 type : "POST",
                 dataType : "json",
diff --git a/src/main/resources/templates/system/role/form.html b/src/main/resources/templates/system/role/form.html
index 0769c8c..f8714f3 100755
--- a/src/main/resources/templates/system/role/form.html
+++ b/src/main/resources/templates/system/role/form.html
@@ -9,6 +9,13 @@
         </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>
@@ -37,7 +44,6 @@
         form.on('submit(form-submit)', function (data) {
             layer.load(2);
             let token = $("meta[name='_csrf_token']").attr("value");
-            debugger
             $.ajax({
                 type : "POST",
                 dataType : "json",
diff --git a/src/main/resources/templates/system/role/index.html b/src/main/resources/templates/system/role/index.html
index c96d529..2d3f167 100644
--- a/src/main/resources/templates/system/role/index.html
+++ b/src/main/resources/templates/system/role/index.html
@@ -32,13 +32,17 @@
             page: true,
             cols: [
                 [
-                    {field: 'roleName', title: '角色名称', fixed: 'left', sort: true},
+                    {field: 'roleName', title: '角色名称', width: 160,fixed: 'left', sort: true},
+                    {field: 'roleCode', title: '角色代码', width: 160,fixed: 'left', sort: true},
                     {field: 'roleDesc', title: '描述'},
                     {
                         field: 'roleId', align: 'center', title: '操作', fixed: 'right', templet: function (item) {
-                            return ' <a class="layui-btn  layui-btn-xs" lay-event="edit"><i class="layui-icon layui-icon-edit"></i>编辑</a> ' +
-                                ' <a class="layui-btn layui-btn-warm layui-btn-xs" lay-event="addfunc"><i class="layui-icon layui-icon-set-sm"></i>分配功能</a> ' +
-                                ' <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-delete"></i>删除</a>'
+                            let html =  ' <a class="layui-btn  layui-btn-xs" lay-event="edit"><i class="layui-icon layui-icon-edit"></i>编辑</a> ' +
+                                ' <a class="layui-btn layui-btn-warm layui-btn-xs" lay-event="addfunc"><i class="layui-icon layui-icon-set-sm"></i>分配功能</a> ';
+                            if(item.editflag===1){
+                                html +='<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-delete"></i>删除</a>';
+                            }
+                            return html;
                         }
                     }
                 ]
@@ -85,12 +89,12 @@
             }
         });
         let showDelete = function (data) {
-            layer.confirm('确定删除吗，该功能下的子功能、资源、角色分配的该功能都将被删除？', function (i) {
+            layer.confirm('用户分配的该角色都将被删除,确定删除吗？', function (i) {
                 layer.close(i);
                 layer.load(2);
                 let token = $("meta[name='_csrf_token']").attr("value");
                 admin.go('/role/del', {
-                    funcid: data.id,
+                    roleid: data.roleId,
                     _csrf: token
                 }, function (data) {
                     console.log(data.code);
@@ -105,7 +109,7 @@
                     } else {
                         layer.msg(data.msg, {icon: 2});
                     }
-                    table.reload('table', {});
+                    table.reload('roletable', {});
                 }, function (ret) {
                     console.log(ret);
                     layer.closeAll('loading');
