diff --git a/src/main/java/com/supwisdom/dlpay/doorlist/bean/TNcCardlistDeleteInfo.java b/src/main/java/com/supwisdom/dlpay/doorlist/bean/TNcCardlistDeleteInfo.java
index e68222e..7506fec 100644
--- a/src/main/java/com/supwisdom/dlpay/doorlist/bean/TNcCardlistDeleteInfo.java
+++ b/src/main/java/com/supwisdom/dlpay/doorlist/bean/TNcCardlistDeleteInfo.java
@@ -12,7 +12,7 @@
     private String cardno;
     private String bankcardno;
     private String opername;
-    private String syncstatus;
+    private String syncflag;
     private String operflag;
     private String rectime;
     private String synctime;
@@ -65,12 +65,12 @@
         this.opername = opername;
     }
 
-    public String getSyncstatus() {
-        return syncstatus;
+    public String getSyncflag() {
+        return syncflag;
     }
 
-    public void setSyncstatus(String syncstatus) {
-        this.syncstatus = syncstatus;
+    public void setSyncflag(String syncflag) {
+        this.syncflag = syncflag;
     }
 
     public String getOperflag() {
diff --git a/src/main/java/com/supwisdom/dlpay/doorlist/controller/DoorlistMgrController.java b/src/main/java/com/supwisdom/dlpay/doorlist/controller/DoorlistMgrController.java
index 9950ab9..a0ae378 100644
--- a/src/main/java/com/supwisdom/dlpay/doorlist/controller/DoorlistMgrController.java
+++ b/src/main/java/com/supwisdom/dlpay/doorlist/controller/DoorlistMgrController.java
@@ -445,8 +445,8 @@
   @ResponseBody
   @RequestMapping(value = "/getAllTCustomerList",method = RequestMethod.POST)
   public Map getAllTCustomerList(@RequestParam(value = "perName", required = false, defaultValue = "") String perName,
-                                 @RequestParam(value = "stuempNo", required = false, defaultValue = "") String cardno,
-                                 @RequestParam(value = "className", required = false, defaultValue = "") String bankcardno) {
+                                 @RequestParam(value = "cardno", required = false, defaultValue = "") String cardno,
+                                 @RequestParam(value = "bankcardno", required = false, defaultValue = "") String bankcardno) {
         Map map = new HashMap();
         try {
             List<TCustomerInfo> pNotInResult = webInterfaceService.getAllTCustomerList(perName, cardno, bankcardno);
@@ -518,11 +518,11 @@
             String opertype = operUser.getOpertype();
             List<TDoordevInfo> pResult = null;
             if (!StringUtil.isEmpty(opertype) &&(opertype.equals("S")||opertype.equals("P"))){
-                pResult = ncService.getSystemDevList();
+                pResult = ncService.getSystemDevList(deviceName,regionid,buildingid);
             }else if (opertype.equals("H") && !StringUtil.isEmpty(operUser.getRegionid())){
-                pResult = ncService.getOperatorDevList(operUser.getRegionid());
+                pResult = ncService.getOperatorDevList(deviceName,regionid,buildingid,operUser.getRegionid());
             }else if (opertype.equals("L")){
-                pResult = ncService.getBuildingOperDevList(operUser.getOperid());
+                pResult = ncService.getBuildingOperDevList(deviceName,regionid,buildingid,operUser.getOperid());
             }
             map.put("pResult", pResult);
         }catch (Exception e){
@@ -730,7 +730,7 @@
      * @param devname
      * @param custname
      * @param cardno
-     * @param syncstatus
+     * @param syncflag
      * @param regionid
      * @param allocatStartDate
      * @param allocatEndDate
@@ -747,11 +747,11 @@
                                          @RequestParam(value = "devname", required = false, defaultValue = "") String devname,
                                          @RequestParam(value = "custname", required = false, defaultValue = "") String custname,
                                          @RequestParam(value = "cardno", required = false, defaultValue = "") String cardno,
-                                         @RequestParam(value = "syncstatus", required = false, defaultValue = "all") String syncstatus,
+                                         @RequestParam(value = "syncflag", required = false, defaultValue = "") String syncflag,
                                          @RequestParam(value = "regionid",required = false,defaultValue = "") String regionid,
                                          @RequestParam(value = "allocatStartDate", required = false, defaultValue = "") String allocatStartDate,
                                          @RequestParam(value = "allocatEndDate", required = false, defaultValue = "") String allocatEndDate,
-                                         @RequestParam(value = "operflag", required = false, defaultValue = "all") String operflag,
+                                         @RequestParam(value = "operflag", required = false, defaultValue = "") String operflag,
                                          @RequestParam(value = "pageNo", required = false, defaultValue = "1") int pageNo,
                                          @RequestParam(value = "pageSize", required = false, defaultValue = "15") int pageSize,
                                          @RequestParam(value = "usetype", required = false, defaultValue = "MJ") String usetype,
@@ -772,11 +772,11 @@
 
             String opertype = operUser.getOpertype();
             if (!StringUtil.isEmpty(opertype) &&(opertype.equals("S")||opertype.equals("P"))){
-                pResult = doorlistMgrService.getSystemCardList(devname, custname, cardno, syncstatus, regionid, allocatStartDate, allocatEndDate, operflag, pageNo, pageSize);
+                pResult = doorlistMgrService.getSystemCardList(devname, custname, cardno, syncflag, regionid, allocatStartDate, allocatEndDate, operflag, pageNo, pageSize);
             }else if (opertype.equals("H") && !StringUtil.isEmpty(operUser.getRegionid())){
-                pResult = doorlistMgrService.getOperatorCardList(devname, custname, cardno, syncstatus, regionid, allocatStartDate, allocatEndDate, operflag, pageNo, pageSize, operUser.getRegionid());
+                pResult = doorlistMgrService.getOperatorCardList(devname, custname, cardno, syncflag, regionid, allocatStartDate, allocatEndDate, operflag, pageNo, pageSize, operUser.getRegionid());
             }else if (opertype.equals("L")){
-                pResult = doorlistMgrService.getBuildingOperCardList(devname, custname, cardno, syncstatus, allocatStartDate, allocatEndDate, operflag, pageNo, pageSize, operUser.getOperid());
+                pResult = doorlistMgrService.getBuildingOperCardList(devname, custname, cardno, syncflag, allocatStartDate, allocatEndDate, operflag, pageNo, pageSize, operUser.getOperid());
             }
         }catch (Exception e){
             e.printStackTrace();
@@ -849,6 +849,7 @@
                     RedisUtil.incr("zcard_max_version");
                 }
             }
+            map.put("result", "删除名单成功！");
         } catch (Exception e) {
             e.printStackTrace();
             map.put("result", "删除设备名单失败！");
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 21f1977..ceacf68 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/RoleDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/RoleDao.java
@@ -14,6 +14,8 @@
     @Query("from TRole order by createtime asc ")
     List<TRole> getAllRoles();
 
+    List<TRole> getAllByOperid(String operid);
+
     TRole findByRoleCode(String roleCode);
 
     Page<TRole> findAllByRoleNameContaining(String roleName, Pageable pageable);
@@ -24,11 +26,7 @@
 
     TRole findByRoleName(String roleName);
 
-    Page<TRole> findAllByGradeNotAndRoleNameContaining(int grade,String roleName,Pageable pageable);
+    Page<TRole> findAllByOperidAndRoleNameContaining(String operid,String roleName, Pageable pageable);
 
-    Page<TRole> findAllByGradeAndRoleNameContaining(int grade,String roleName,Pageable pageable);
-
-    Page<TRole> findAllByGradeNot(int grade,Pageable pageable);
-
-    Page<TRole> findAllByGrade(int grade,Pageable pageable);
+    Page<TRole> findAllByOperid(String operid, Pageable pageable);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/domain/TRole.java b/src/main/java/com/supwisdom/dlpay/framework/domain/TRole.java
index 0db1f5a..201d512 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/domain/TRole.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/domain/TRole.java
@@ -31,8 +31,8 @@
   @Column(name="LASTSAVED", length = 14)
   private String lastsaved;
 
-  @Column(name = "GRADE",length = 3)
-  private Integer grade;
+  @Column(name = "OPERID",length = 32)
+  private String operid;
 
   public String getRoleId() {
     return roleId;
@@ -90,11 +90,11 @@
     this.lastsaved = lastsaved;
   }
 
-  public Integer getGrade() {
-    return grade;
+  public String getOperid() {
+    return operid;
   }
 
-  public void setGrade(Integer grade) {
-    this.grade = grade;
+  public void setOperid(String operid) {
+    this.operid = operid;
   }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/mainservice/dao/impl/CustomerDaoImpl.java b/src/main/java/com/supwisdom/dlpay/mainservice/dao/impl/CustomerDaoImpl.java
index 11555c2..c505a89 100644
--- a/src/main/java/com/supwisdom/dlpay/mainservice/dao/impl/CustomerDaoImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/mainservice/dao/impl/CustomerDaoImpl.java
@@ -59,7 +59,7 @@
             sql +=" and b.cardno like :cardno ";
         }
         if (!StringUtil.isEmpty(bankcardno)){
-            sql +=" and b.bankcardno like bankcardno ";
+            sql +=" and b.bankcardno like :bankcardno ";
         }
         sql +=" order by b.cardno desc ";
         Query query = entityManager.createNativeQuery(sql, TCustomerInfo.class);
diff --git a/src/main/java/com/supwisdom/dlpay/ncmgr/controller/NcMgrController.java b/src/main/java/com/supwisdom/dlpay/ncmgr/controller/NcMgrController.java
index 7bf505f..63f2aee 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/controller/NcMgrController.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/controller/NcMgrController.java
@@ -391,7 +391,7 @@
             if (cleanList==null) {
                 //如果该设备没有清空专用名单则添加一个(直接添加到同步表里)
                 TNcCardlist tNcCardlist = new TNcCardlist();
-                long listid = RedisUtil.incr("seq_door");
+                long listid = RedisUtil.incr("seq_cardlist");
                 tNcCardlist.setListid(listid + "");
                 tNcCardlist.setCustid("");
                 tNcCardlist.setCustname(devid + "设备清除名单");
@@ -401,7 +401,7 @@
                 tNcCardlist.setOperid(operUser.getOperid());
                 tNcCardlist.setDeviceid(devid);
                 //清除名单专用标志
-                tNcCardlist.setOperflag("C");
+                tNcCardlist.setOperflag("Q");
                 tNcCardlist.setRectime(DateUtil.getNow());
                 tNcCardlist.setSynctime("");
                 tNcCardlist.setSyncflag("N");
diff --git a/src/main/java/com/supwisdom/dlpay/ncmgr/dao/NcDeviceDao.java b/src/main/java/com/supwisdom/dlpay/ncmgr/dao/NcDeviceDao.java
index a7b5fd1..2b3d7f1 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/dao/NcDeviceDao.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/dao/NcDeviceDao.java
@@ -45,7 +45,7 @@
 
     public List<TNcDevice> getDevListByfDevid(int devid);
 
-    public boolean delDevById(int devid);
+    public boolean updateTodelDevById(int devid);
 
     public List<TNcDevice> findAllNcDevices();
 
@@ -54,9 +54,9 @@
     public List<TNcDevice> findOperatorDevices(String operRegionid);
 
 
-    public List<TDoordevInfo> getSystemDevList();
+    public List<TDoordevInfo> getSystemDevList(String devname,String regionid,String buildingid);
 
-    public List<TDoordevInfo> getOperatorDevList(String regionid);
+    public List<TDoordevInfo> getOperatorDevList(String devname,String regionid,String buildingid,String operRegionid);
 
-    public List<TDoordevInfo> getBuildingOperDevList(String operid);
+    public List<TDoordevInfo> getBuildingOperDevList(String devname,String regionid,String buildingid,String operid);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/ncmgr/dao/impl/NcCardListDaoImpl.java b/src/main/java/com/supwisdom/dlpay/ncmgr/dao/impl/NcCardListDaoImpl.java
index 6e6db9a..f9ed72d 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/dao/impl/NcCardListDaoImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/dao/impl/NcCardListDaoImpl.java
@@ -23,7 +23,7 @@
     @Transactional
     @Override
     public TNcCardlist getCleanList(int devid) {
-        String sql = "select t from TNcCardlist t where t.deviceid=:devid and t.operflag = 'C'";
+        String sql = "select t from TNcCardlist t where t.deviceid=:devid and t.operflag = 'Q'";
         TypedQuery<TNcCardlist> query = entityManager.createQuery(sql, TNcCardlist.class);
         query.setParameter("devid", devid);
         List<TNcCardlist> list = query.getResultList();
@@ -74,12 +74,12 @@
 
     @Transactional
     @Override
-    public Pagination getSystemCardList(String devname, String custname, String cardno, String syncstatus, String regionid, String allocatStartDate, String allocatEndDate, String operflag, int pageNo, int pageSize) {
-        String sql = "select a.listid,a.devname,a.custname,a.cardno,a.bankcardno,b.opername,a.syncstatus,a.operflag,a.rectime,a.synctime " +
-                " from t_nc_cardlist a left join tn_operator b on a.operid=b.operid left join t_nc_device c on a.deviceid = c.deviceid " +
-                " where a.rectime>=:allocatStartDate and a.rectime<=:allocatEndDate and c.operflag='A' ";
+    public Pagination getSystemCardList(String devname, String custname, String cardno, String syncflag, String regionid, String allocatStartDate, String allocatEndDate, String operflag, int pageNo, int pageSize) {
+        String sql = "select a.listid,c.devname,a.custname,a.cardno,a.bankcardno,b.opername,a.syncflag,a.operflag,a.rectime,a.synctime " +
+                " from t_nc_cardlist a left join tb_operator b on a.operid=b.operid left join t_nc_device c on a.deviceid = c.deviceid " +
+                " where substr(a.rectime,0,9)>=:allocatStartDate and substr(a.rectime,0,9)<=:allocatEndDate and c.operflag='A' ";
         if (!StringUtil.isEmpty(devname)){
-            sql += " and a.devname like :devname ";
+            sql += " and c.devname like :devname ";
         }
         if (!StringUtil.isEmpty(custname)){
             sql += " and a.custname like :custname ";
@@ -87,8 +87,8 @@
         if (!StringUtil.isEmpty(cardno)){
             sql += " and a.cardno like :cardno ";
         }
-        if (!StringUtil.isEmpty(syncstatus)){
-            sql += " and a.syncstatus = :syncstatus ";
+        if (!StringUtil.isEmpty(syncflag)){
+            sql += " and a.syncflag = :syncflag ";
         }
         if (!StringUtil.isEmpty(operflag)){
             sql += " and a.operflag = :operflag ";
@@ -107,11 +107,11 @@
         if (!StringUtil.isEmpty(custname)){
             query.setParameter("custname", "%"+custname+"%");
         }
-        if (!StringUtil.isEmpty(devname)){
+        if (!StringUtil.isEmpty(cardno)){
             query.setParameter("cardno", cardno);
         }
-        if (!StringUtil.isEmpty(syncstatus)){
-            query.setParameter("syncstatus", syncstatus);
+        if (!StringUtil.isEmpty(syncflag)){
+            query.setParameter("syncflag", syncflag);
         }
         if (!StringUtil.isEmpty(operflag)){
             query.setParameter("operflag", operflag);
@@ -129,17 +129,17 @@
         page.setPageSize(pageSize);
         List<TNcCardlistDeleteInfo> list = query.getResultList();
         page.setList(list);
-        int totalCount = getSystemCardListCount(devname,custname,cardno,syncstatus,operflag,regionid,allocatStartDate, allocatEndDate);
+        int totalCount = getSystemCardListCount(devname,custname,cardno,syncflag,operflag,regionid,allocatStartDate, allocatEndDate);
         page.setTotalCount(totalCount);
         return page;
     }
 
-    private int getSystemCardListCount(String devname, String custname, String cardno, String syncstatus,String operflag, String regionid, String allocatStartDate, String allocatEndDate){
+    private int getSystemCardListCount(String devname, String custname, String cardno, String syncflag,String operflag, String regionid, String allocatStartDate, String allocatEndDate){
         String sql = " select count(*) from t_nc_cardlist a "+
                 " left join t_nc_device c on a.deviceid = c.deviceid " +
-                " where a.rectime>=:allocatStartDate and a.rectime<=:allocatEndDate and c.operflag='A' ";
+                " where substr(a.rectime,0,9)>=:allocatStartDate and substr(a.rectime,0,9)<=:allocatEndDate and c.operflag='A' ";
         if (!StringUtil.isEmpty(devname)){
-            sql += " and a.devname like :devname ";
+            sql += " and c.devname like :devname ";
         }
         if (!StringUtil.isEmpty(custname)){
             sql += " and a.custname like :custname ";
@@ -147,8 +147,8 @@
         if (!StringUtil.isEmpty(cardno)){
             sql += " and a.cardno like :cardno ";
         }
-        if (!StringUtil.isEmpty(syncstatus)){
-            sql += " and a.syncstatus = :syncstatus ";
+        if (!StringUtil.isEmpty(syncflag)){
+            sql += " and a.syncflag = :syncflag ";
         }
         if (!StringUtil.isEmpty(operflag)){
             sql += " and a.operflag = :operflag ";
@@ -166,11 +166,11 @@
         if (!StringUtil.isEmpty(custname)){
             query.setParameter("custname", "%"+custname+"%");
         }
-        if (!StringUtil.isEmpty(devname)){
+        if (!StringUtil.isEmpty(cardno)){
             query.setParameter("cardno", cardno);
         }
-        if (!StringUtil.isEmpty(syncstatus)){
-            query.setParameter("syncstatus", syncstatus);
+        if (!StringUtil.isEmpty(syncflag)){
+            query.setParameter("syncflag", syncflag);
         }
         if (!StringUtil.isEmpty(operflag)){
             query.setParameter("operflag", operflag);
@@ -190,12 +190,12 @@
 
     @Transactional
     @Override
-    public Pagination getOperatorCardList(String devname, String custname, String cardno, String syncstatus, String regionid, String allocatStartDate, String allocatEndDate, String operflag, int pageNo, int pageSize, String operRegionid) {
-        String sql = "select a.listid,a.devname,a.custname,a.cardno,a.bankcardno,b.opername,a.syncstatus,a.operflag,a.rectime,a.synctime " +
-                " from t_nc_cardlist a left join tn_operator b on a.operid=b.operid left join t_nc_device c on a.deviceid = c.deviceid " +
-                " where a.rectime>=:allocatStartDate and a.rectime<=:allocatEndDate and c.operflag='A' ";
+    public Pagination getOperatorCardList(String devname, String custname, String cardno, String syncflag, String regionid, String allocatStartDate, String allocatEndDate, String operflag, int pageNo, int pageSize, String operRegionid) {
+        String sql = "select a.listid,c.devname,a.custname,a.cardno,a.bankcardno,b.opername,a.syncflag,a.operflag,a.rectime,a.synctime " +
+                " from t_nc_cardlist a left join tb_operator b on a.operid=b.operid left join t_nc_device c on a.deviceid = c.deviceid " +
+                " where substr(a.rectime,0,9)>=:allocatStartDate and substr(a.rectime,0,9)<=:allocatEndDate and c.operflag='A' ";
         if (!StringUtil.isEmpty(devname)){
-            sql += " and a.devname like :devname ";
+            sql += " and c.devname like :devname ";
         }
         if (!StringUtil.isEmpty(custname)){
             sql += " and a.custname like :custname ";
@@ -203,31 +203,22 @@
         if (!StringUtil.isEmpty(cardno)){
             sql += " and a.cardno like :cardno ";
         }
-        if (!StringUtil.isEmpty(syncstatus)){
-            sql += " and a.syncstatus = :syncstatus ";
+        if (!StringUtil.isEmpty(syncflag)){
+            sql += " and a.syncflag = :syncflag ";
         }
         if (!StringUtil.isEmpty(operflag)){
             sql += " and a.operflag = :operflag ";
         }
-        if (!StringUtil.isEmpty(regionid)){
+
             sql += "and c.regionid in  "
                     +"("
                     + "with recursive tmp as  "
                     + "("
-                    + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionid =:operRegionid  "
-                    + "union all  "
-                    + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr inner join tmp t on t.regionid=tbr.parentid  "
-                    + ") select regionid from tmp  where tmp.regionid=:regionid)";
-        }else {
-            sql += "and c.regionid in  "
-                    +"("
-                    + "with recursive tmp as  "
-                    + "("
-                    + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionid =:operRegionid  "
+                    + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionid =:regionid  "
                     + "union all  "
                     + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr inner join tmp t on t.regionid=tbr.parentid  "
                     + ") select regionid from tmp  )";
-        }
+
         sql +=" order by a.listid desc " ;
         Query query = entityManager.createNativeQuery(sql, TNcCardlistDeleteInfo.class);
         if (!StringUtil.isEmpty(devname)){
@@ -239,15 +230,16 @@
         if (!StringUtil.isEmpty(devname)){
             query.setParameter("cardno", cardno);
         }
-        if (!StringUtil.isEmpty(syncstatus)){
-            query.setParameter("syncstatus", syncstatus);
+        if (!StringUtil.isEmpty(syncflag)){
+            query.setParameter("syncflag", syncflag);
         }
         if (!StringUtil.isEmpty(operflag)){
             query.setParameter("operflag", operflag);
         }
-        query.setParameter("operRegionid", operRegionid);
         if (!StringUtil.isEmpty(regionid)){
             query.setParameter("regionid", regionid);
+        }else {
+            query.setParameter("regionid", operRegionid);
         }
         query.setParameter("allocatStartDate", allocatStartDate);
         query.setParameter("allocatEndDate", allocatEndDate);
@@ -259,17 +251,17 @@
         page.setPageSize(pageSize);
         List<TNcCardlistDeleteInfo> list = query.getResultList();
         page.setList(list);
-        int totalCount = getOperatorCardListCount(devname,custname,cardno,syncstatus,operflag,regionid,allocatStartDate, allocatEndDate,operRegionid);
+        int totalCount = getOperatorCardListCount(devname,custname,cardno,syncflag,operflag,regionid,allocatStartDate, allocatEndDate,operRegionid);
         page.setTotalCount(totalCount);
         return page;
     }
 
-    private int getOperatorCardListCount(String devname, String custname, String cardno, String syncstatus,String operflag, String regionid, String allocatStartDate, String allocatEndDate,String operRegionid){
+    private int getOperatorCardListCount(String devname, String custname, String cardno, String syncflag,String operflag, String regionid, String allocatStartDate, String allocatEndDate,String operRegionid){
         String sql = "select count(*) from t_nc_cardlist a " +
                 " left join t_nc_device c on a.deviceid = c.deviceid " +
-                " where a.rectime>=:allocatStartDate and a.rectime<=:allocatEndDate and c.operflag='A' ";
+                " where substr(a.rectime,0,9)>=:allocatStartDate and substr(a.rectime,0,9)<=:allocatEndDate and c.operflag='A' ";
         if (!StringUtil.isEmpty(devname)){
-            sql += " and a.devname like :devname ";
+            sql += " and c.devname like :devname ";
         }
         if (!StringUtil.isEmpty(custname)){
             sql += " and a.custname like :custname ";
@@ -277,31 +269,21 @@
         if (!StringUtil.isEmpty(cardno)){
             sql += " and a.cardno like :cardno ";
         }
-        if (!StringUtil.isEmpty(syncstatus)){
-            sql += " and a.syncstatus = :syncstatus ";
+        if (!StringUtil.isEmpty(syncflag)){
+            sql += " and a.syncflag = :syncflag ";
         }
         if (!StringUtil.isEmpty(operflag)){
             sql += " and a.operflag = :operflag ";
         }
-        if (!StringUtil.isEmpty(regionid)){
+
             sql += "and c.regionid in  "
                     +"("
                     + "with recursive tmp as  "
                     + "("
-                    + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionid =:operRegionid  "
+                    + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionid =:regionid  "
                     + "union all  "
-                    + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr inner join tmp t on t.regionid=tbr.parentid  "
-                    + ") select regionid from tmp  where tmp.regionid=:regionid)";
-        }else {
-            sql += "and c.regionid in  "
-                    +"("
-                    + "with recursive tmp as  "
-                    + "("
-                    + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionid =:operRegionid  "
-                    + "union all  "
-                    + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr inner join tmp t on t.regionid=tbr.parentid  "
-                    + ") select regionid from tmp  )";
-        }
+                    + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr inner join tmp t on t.regionid=tbr.parentid  " + ") select regionid from tmp  )";
+
         Query query = entityManager.createNativeQuery(sql);
         if (!StringUtil.isEmpty(devname)){
             query.setParameter("devname", "%"+devname+"%");
@@ -312,15 +294,16 @@
         if (!StringUtil.isEmpty(devname)){
             query.setParameter("cardno", cardno);
         }
-        if (!StringUtil.isEmpty(syncstatus)){
-            query.setParameter("syncstatus", syncstatus);
+        if (!StringUtil.isEmpty(syncflag)){
+            query.setParameter("syncflag", syncflag);
         }
         if (!StringUtil.isEmpty(operflag)){
             query.setParameter("operflag", operflag);
         }
-        query.setParameter("operRegionid", operRegionid);
         if (!StringUtil.isEmpty(regionid)){
             query.setParameter("regionid", regionid);
+        }else {
+            query.setParameter("regionid", operRegionid);
         }
         query.setParameter("allocatStartDate", allocatStartDate);
         query.setParameter("allocatEndDate", allocatEndDate);
@@ -335,13 +318,13 @@
 
     @Transactional
     @Override
-    public Pagination getBuildingOperCardList(String devname, String custname, String cardno, String syncstatus, String allocatStartDate, String allocatEndDate, String operflag, int pageNo, int pageSize, String operid) {
-        String sql = "select a.listid,a.devname,a.custname,a.cardno,a.bankcardno,b.opername,a.syncstatus,a.operflag,a.rectime,a.synctime " +
-                " from t_nc_cardlist a left join tn_operator b on a.operid=b.operid left join t_nc_device c on a.deviceid = c.deviceid " +
+    public Pagination getBuildingOperCardList(String devname, String custname, String cardno, String syncflag, String allocatStartDate, String allocatEndDate, String operflag, int pageNo, int pageSize, String operid) {
+        String sql = "select a.listid,c.devname,a.custname,a.cardno,a.bankcardno,b.opername,a.syncflag,a.operflag,a.rectime,a.synctime " +
+                " from t_nc_cardlist a left join tb_operator b on a.operid=b.operid left join t_nc_device c on a.deviceid = c.deviceid " +
                 " left join t_operbuilding d on d.buildingid = c.buildingid "+
-                " where a.rectime>=:allocatStartDate and a.rectime<=:allocatEndDate and c.operflag='A' and d.operid = :operid ";
+                " where substr(a.rectime,0,9)>=:allocatStartDate and substr(a.rectime,0,9)<=:allocatEndDate and c.operflag='A' and d.operid = :operid ";
         if (!StringUtil.isEmpty(devname)){
-            sql += " and a.devname like :devname ";
+            sql += " and c.devname like :devname ";
         }
         if (!StringUtil.isEmpty(custname)){
             sql += " and a.custname like :custname ";
@@ -349,8 +332,8 @@
         if (!StringUtil.isEmpty(cardno)){
             sql += " and a.cardno like :cardno ";
         }
-        if (!StringUtil.isEmpty(syncstatus)){
-            sql += " and a.syncstatus = :syncstatus ";
+        if (!StringUtil.isEmpty(syncflag)){
+            sql += " and a.syncflag = :syncflag ";
         }
         if (!StringUtil.isEmpty(operflag)){
             sql += " and a.operflag = :operflag ";
@@ -366,8 +349,8 @@
         if (!StringUtil.isEmpty(devname)){
             query.setParameter("cardno", cardno);
         }
-        if (!StringUtil.isEmpty(syncstatus)){
-            query.setParameter("syncstatus", syncstatus);
+        if (!StringUtil.isEmpty(syncflag)){
+            query.setParameter("syncflag", syncflag);
         }
         if (!StringUtil.isEmpty(operflag)){
             query.setParameter("operflag", operflag);
@@ -383,18 +366,18 @@
         page.setPageSize(pageSize);
         List<TNcCardlistDeleteInfo> list = query.getResultList();
         page.setList(list);
-        int totalCount = getBuildingOperCardListCount(devname,custname,cardno,syncstatus,operflag,operid,allocatStartDate, allocatEndDate);
+        int totalCount = getBuildingOperCardListCount(devname,custname,cardno,syncflag,operflag,operid,allocatStartDate, allocatEndDate);
         page.setTotalCount(totalCount);
         return page;
     }
 
-    private int getBuildingOperCardListCount(String devname, String custname, String cardno, String syncstatus,String operflag, String operid, String allocatStartDate, String allocatEndDate){
+    private int getBuildingOperCardListCount(String devname, String custname, String cardno, String syncflag,String operflag, String operid, String allocatStartDate, String allocatEndDate){
         String sql = "select count(*) from t_nc_cardlist a " +
                 " left join t_nc_device c on a.deviceid = c.deviceid " +
                 " left join t_operbuilding d on d.buildingid = c.buildingid "+
-                " where a.rectime>=:allocatStartDate and a.rectime<=:allocatEndDate and c.operflag='A' and d.operid = :operid ";
+                " where substr(a.rectime,0,9)>=:allocatStartDate and substr(a.rectime,0,9)<=:allocatEndDate and c.operflag='A' and d.operid = :operid ";
         if (!StringUtil.isEmpty(devname)){
-            sql += " and a.devname like :devname ";
+            sql += " and c.devname like :devname ";
         }
         if (!StringUtil.isEmpty(custname)){
             sql += " and a.custname like :custname ";
@@ -402,13 +385,13 @@
         if (!StringUtil.isEmpty(cardno)){
             sql += " and a.cardno like :cardno ";
         }
-        if (!StringUtil.isEmpty(syncstatus)){
-            sql += " and a.syncstatus = :syncstatus ";
+        if (!StringUtil.isEmpty(syncflag)){
+            sql += " and a.syncflag = :syncflag ";
         }
         if (!StringUtil.isEmpty(operflag)){
             sql += " and a.operflag = :operflag ";
         }
-        Query query = entityManager.createNativeQuery(sql, TNcCardlistDeleteInfo.class);
+        Query query = entityManager.createNativeQuery(sql);
         if (!StringUtil.isEmpty(devname)){
             query.setParameter("devname", "%"+devname+"%");
         }
@@ -418,8 +401,8 @@
         if (!StringUtil.isEmpty(devname)){
             query.setParameter("cardno", cardno);
         }
-        if (!StringUtil.isEmpty(syncstatus)){
-            query.setParameter("syncstatus", syncstatus);
+        if (!StringUtil.isEmpty(syncflag)){
+            query.setParameter("syncflag", syncflag);
         }
         if (!StringUtil.isEmpty(operflag)){
             query.setParameter("operflag", operflag);
diff --git a/src/main/java/com/supwisdom/dlpay/ncmgr/dao/impl/NcDeviceDaoImpl.java b/src/main/java/com/supwisdom/dlpay/ncmgr/dao/impl/NcDeviceDaoImpl.java
index a3623f0..b7b8a4c 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/dao/impl/NcDeviceDaoImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/dao/impl/NcDeviceDaoImpl.java
@@ -1,6 +1,7 @@
 package com.supwisdom.dlpay.ncmgr.dao.impl;
 
 import com.supwisdom.dlpay.doorlist.bean.TDoordevInfo;
+import com.supwisdom.dlpay.framework.util.StringUtil;
 import com.supwisdom.dlpay.ncmgr.dao.NcDeviceDao;
 import com.supwisdom.dlpay.ncmgr.domain.TBuilding;
 import com.supwisdom.dlpay.ncmgr.domain.TNcDevice;
@@ -27,7 +28,7 @@
         String sql ="select * from T_Nc_Device bean "
                 +" left join t_building tb on bean.buildingid=tb.buildingid"
                 +" left join tb_region tr on tr.regionid=tb.regionid"
-                +" where 1>0 and operflag='A'";
+                +" where 1>0 ";
         if(!devname.equals("")){
             sql+=" and devname like :devname ";
         }
@@ -80,7 +81,7 @@
         String sql ="select count(bean.deviceid) from T_Nc_Device bean "
                 +" left join t_building tb on bean.buildingid=tb.buildingid"
                 +" left join tb_region tr on tr.regionid=tb.regionid"
-                +" where 1>0 and operflag='A' ";
+                +" where 1>0 ";
         if(!devname.equals("")){
             sql+=" and bean.devname like :devname ";
         }
@@ -127,7 +128,7 @@
         String sql ="select * from T_Nc_Device bean "
                 +" left join t_building tb on bean.buildingid=tb.buildingid"
                 +" left join tb_region tr on tr.regionid=tb.regionid "
-                +" where 1>0 and operflag='A' ";
+                +" where 1>0 ";
         if(!devname.equals("")){
             sql+=" and devname like :devname ";
         }
@@ -181,7 +182,7 @@
         String sql ="select count(bean.deviceid) from T_Nc_Device bean "
                 +" left join t_building tb on bean.buildingid=tb.buildingid"
                 +" left join tb_region tr on tr.regionid=tb.regionid"
-                +" where 1>0 and operflag='A' ";
+                +" where 1>0 ";
         if(!devname.equals("")){
             sql+=" and bean.devname like :devname ";
         }
@@ -231,7 +232,7 @@
                 +" left join t_building tb on bean.buildingid=tb.buildingid"
                 +" left join tb_region tr on tr.regionid=tb.regionid"
                 +" left join t_operbuilding tob on tob.buildingid=bean.buildingid "
-                +" where 1>0 and bean.operflag='A' and tob.operid = :operid ";
+                +" where 1>0  and tob.operid = :operid ";
         if(!devname.equals("")){
             sql+=" and bean.devname like :devname ";
         }
@@ -272,7 +273,7 @@
                 +" left join t_building tb on bean.buildingid=tb.buildingid"
                 +" left join tb_region tr on tr.regionid=tb.regionid"
                 +" left join t_operbuilding tob on tob.buildingid=bean.buildingid "
-                +" where 1>0 and operflag='A' and tob.operid = :operid ";
+                +" where 1>0  and tob.operid = :operid ";
         if(!devname.equals("")){
             sql+=" and bean.devname like :devname ";
         }
@@ -520,10 +521,10 @@
 
     @Transactional
     @Override
-    public boolean delDevById(int devid) {
-        boolean flag=false;
+    public boolean updateTodelDevById(int devid) {
+        boolean flag = false;
         try {
-            String sql = "delete from T_Nc_Device where deviceid=?1";
+            String sql = "update t_nc_device set operflag = 'D' where deviceid = ?1";
             Query query = entityManager.createNativeQuery(sql);
             query.setParameter(1, devid);
             query.executeUpdate();
@@ -574,35 +575,112 @@
 
     @Transactional
     @Override
-    public List<TDoordevInfo> getSystemDevList() {
+    public List<TDoordevInfo> getSystemDevList(String devname,String regionid,String buildingid) {
         String sql = "select a.deviceid,a.devname,b.regionname,a.buildingname from T_NC_device a left join tb_region b on a.regionid = b.regionid  " +
-                " where a.operflag = 'A' and a.devtype='R'";
+                " where a.operflag = 'A' and a.devtype='R' ";
+        if (!StringUtil.isEmpty(devname)){
+            sql += " and a.devname like :devname ";
+        }
+        if (!StringUtil.isEmpty(regionid)){
+            sql += " and a.regionid in  "
+                    +"("
+                    + "with recursive tmp as  "
+                    + "("
+                    + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionid = :regionid  "
+                    + "union all  "
+                    + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr inner join tmp t on t.regionid=tbr.parentid  "
+                    + ") select regionid from tmp  ) ";
+        }
+        if (!StringUtil.isEmpty(buildingid)){
+            sql += " and a.buildingid = :buildingid ";
+        }
+        sql += " order by a.devname ";
         Query query = entityManager.createNativeQuery(sql, TDoordevInfo.class);
+        if (!StringUtil.isEmpty(devname)){
+            query.setParameter("devname", "%"+devname+"%");
+        }
+        if (!StringUtil.isEmpty(regionid)){
+            query.setParameter("regionid", regionid);
+        }
+        if (!StringUtil.isEmpty(buildingid)){
+            query.setParameter("buildingid", buildingid);
+        }
         List<TDoordevInfo> list = query.getResultList();
         return list;
     }
 
     @Transactional
     @Override
-    public List<TDoordevInfo> getOperatorDevList(String regionid) {
+    public List<TDoordevInfo> getOperatorDevList(String devname,String regionid,String buildingid,String operRegionid) {
         String sql = "select a.deviceid,a.devname,b.regionname,a.buildingname from T_NC_device a left join tb_region b on a.regionid = b.regionid  " +
-                " where a.operflag = 'A' and a.devtype='R' and a.regionid in(with recursive tmp as  (select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr " +
-                "   where regionid= :operRegionid union all  select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr inner join tmp t on t.regionid=tbr.parentid  " +
-                "   ) select regionid from tmp  )";
+                " where a.operflag = 'A' and a.devtype='R' ";
+        if (!StringUtil.isEmpty(devname)){
+            sql += " and a.devname like :devname ";
+        }
+
+            sql += " and a.regionid in  "
+                    +"("
+                    + "with recursive tmp as  "
+                    + "("
+                    + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionid = :regionid  "
+                    + "union all  "
+                    + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr inner join tmp t on t.regionid=tbr.parentid  "
+                    + ") select regionid from tmp  ) ";
+
+        if (!StringUtil.isEmpty(buildingid)){
+            sql += " and a.buildingid = :buildingid ";
+        }
+        sql += " order by a.devname ";
         Query query = entityManager.createNativeQuery(sql, TDoordevInfo.class);
-        query.setParameter("operRegionid", regionid);
+        if (!StringUtil.isEmpty(devname)){
+            query.setParameter("devname", "%"+devname+"%");
+        }
+        if (!StringUtil.isEmpty(regionid)){
+            query.setParameter("regionid", regionid);
+        }else {
+            query.setParameter("regionid", operRegionid);
+        }
+        if (!StringUtil.isEmpty(buildingid)){
+            query.setParameter("buildingid", buildingid);
+        }
         List<TDoordevInfo> list = query.getResultList();
         return list;
     }
 
     @Transactional
     @Override
-    public List<TDoordevInfo> getBuildingOperDevList(String operid) {
+    public List<TDoordevInfo> getBuildingOperDevList(String devname,String regionid,String buildingid,String operid) {
         String sql = "select a.deviceid,a.devname,b.regionname,a.buildingname from T_NC_device a left join tb_region b on a.regionid = b.regionid  " +
                 "left join  t_operbuilding c on a.buildingid=c.buildingid " +
-                "where a.operflag = 'A' and a.devtype='R' and c.operid=?1";
+                "where a.operflag = 'A' and a.devtype='R' and c.operid=:operid";
+        if (!StringUtil.isEmpty(devname)){
+            sql += " and a.devname like :devname ";
+        }
+        if (!StringUtil.isEmpty(regionid)){
+            sql += " and a.regionid in  "
+                    +"("
+                    + "with recursive tmp as  "
+                    + "("
+                    + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionid = :regionid  "
+                    + "union all  "
+                    + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr inner join tmp t on t.regionid=tbr.parentid  "
+                    + ") select regionid from tmp  ) ";
+        }
+        if (!StringUtil.isEmpty(buildingid)){
+            sql += " and a.buildingid = :buildingid ";
+        }
+        sql += " order by a.devname ";
         Query query = entityManager.createNativeQuery(sql, TDoordevInfo.class);
-        query.setParameter(1, operid);
+        query.setParameter("operid", operid);
+        if (!StringUtil.isEmpty(devname)){
+            query.setParameter("devname", "%"+devname+"%");
+        }
+        if (!StringUtil.isEmpty(regionid)){
+            query.setParameter("regionid", regionid);
+        }
+        if (!StringUtil.isEmpty(buildingid)){
+            query.setParameter("buildingid", buildingid);
+        }
         List<TDoordevInfo> list = query.getResultList();
         return list;
     }
diff --git a/src/main/java/com/supwisdom/dlpay/ncmgr/service/NcService.java b/src/main/java/com/supwisdom/dlpay/ncmgr/service/NcService.java
index 017c47c..f07ecdc 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/service/NcService.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/service/NcService.java
@@ -82,13 +82,13 @@
     public TNcDevice getDevByBuildingid(String buildingid);
 
     //获取系统管理员权限下所有可以分配的设备
-    public List<TDoordevInfo> getSystemDevList();
+    public List<TDoordevInfo> getSystemDevList(String devname,String regionid,String buildingid);
 
     //获取区域管理员权限下所有可以分配的设备
-    public List<TDoordevInfo> getOperatorDevList(String regionid);
+    public List<TDoordevInfo> getOperatorDevList(String devname,String regionid,String buildingid,String operRegionid);
 
     //获取楼栋管理员权限下所有可以分配的设备
-    public List<TDoordevInfo> getBuildingOperDevList(String operid);
+    public List<TDoordevInfo> getBuildingOperDevList(String devname,String regionid,String buildingid,String operid);
 
     //根据查询条件分页获取所有时间段信息
     public Pagination getNcTimeWithPage(String time,int pageNo, int pageSize,Map map);
diff --git a/src/main/java/com/supwisdom/dlpay/ncmgr/service/impl/NcServiceImpl.java b/src/main/java/com/supwisdom/dlpay/ncmgr/service/impl/NcServiceImpl.java
index 02029ac..1f76fa1 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/service/impl/NcServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/service/impl/NcServiceImpl.java
@@ -122,7 +122,7 @@
 
     @Override
     public void delDevById(int devid) {
-        ncDeviceDao.delDevById(devid);
+        ncDeviceDao.updateTodelDevById(devid);
     }
 
     @Override
@@ -151,18 +151,18 @@
     }
 
     @Override
-    public List<TDoordevInfo> getSystemDevList() {
-        return ncDeviceDao.getSystemDevList();
+    public List<TDoordevInfo> getSystemDevList(String devname,String regionid,String buildingid) {
+        return ncDeviceDao.getSystemDevList(devname,regionid,buildingid);
     }
 
     @Override
-    public List<TDoordevInfo> getOperatorDevList(String regionid) {
-        return ncDeviceDao.getOperatorDevList(regionid);
+    public List<TDoordevInfo> getOperatorDevList(String devname,String regionid,String buildingid,String operRegionid) {
+        return ncDeviceDao.getOperatorDevList(devname,regionid,buildingid,operRegionid);
     }
 
     @Override
-    public List<TDoordevInfo> getBuildingOperDevList(String operid) {
-        return ncDeviceDao.getBuildingOperDevList(operid);
+    public List<TDoordevInfo> getBuildingOperDevList(String devname,String regionid,String buildingid,String operid) {
+        return ncDeviceDao.getBuildingOperDevList(devname,regionid,buildingid,operid);
     }
 
     @Override
diff --git a/src/main/java/com/supwisdom/dlpay/system/bean/OperatorListBean.java b/src/main/java/com/supwisdom/dlpay/system/bean/OperatorListBean.java
index 5d61342..de276ce 100644
--- a/src/main/java/com/supwisdom/dlpay/system/bean/OperatorListBean.java
+++ b/src/main/java/com/supwisdom/dlpay/system/bean/OperatorListBean.java
@@ -13,6 +13,7 @@
     private String opertype;
     private String roleid;
     private String rolename;
+    private String status;
     private String regionid;
     private String regionname;
     private String mobile;
@@ -74,6 +75,14 @@
         this.rolename = rolename;
     }
 
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
     public String getRegionid() {
         return regionid;
     }
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 7c77c92..4c2df29 100644
--- a/src/main/java/com/supwisdom/dlpay/system/controller/OperatorController.java
+++ b/src/main/java/com/supwisdom/dlpay/system/controller/OperatorController.java
@@ -323,8 +323,12 @@
             }
             List<TDictionaryId> opertypes = systemService.findOpertypes(operUser.getOpertype());
             map.put("opertypes", opertypes);
-
-            List<TRole> roles = roleService.findAllRoles();
+            List<TRole> roles = null;
+            if (!StringUtil.isEmpty(operUser.getOpertype()) && (operUser.getOpertype().equals("P") || operUser.getOpertype().equals("S"))) {
+                 roles = roleService.findAllRoles();
+            }else {
+                roles = roleService.findAllRolesByOperid(operUser.getOperid());
+            }
             map.put("roles", roles);
 
             List<TRegion> regions = null;
@@ -357,6 +361,12 @@
                 map.put("errStr", "操作员编号已经存在，请修改！");
                 return map;
             }
+            TOperator operatorByOpercode = managerService.getOperatorByOpercode(postData.getOpercode());
+            if (operatorByOpercode!=null){
+                map.put("errStr", "登录名已经存在，请修改！");
+                return map;
+            }
+
             TOperator operator = new TOperator();
             operator.setOperid(postData.getOperid());
             operator.setOpername(postData.getOpername());
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 fc0ee59..5ecc6f3 100644
--- a/src/main/java/com/supwisdom/dlpay/system/controller/RoleController.java
+++ b/src/main/java/com/supwisdom/dlpay/system/controller/RoleController.java
@@ -46,7 +46,7 @@
             searchBean.setPageNo(pageNo);
             searchBean.setFunctioname(searchKey);
             searchBean.setPageSize(pageSize);
-            return roleService.getRolesByKey(searchBean,operUser.getOpertype());
+            return roleService.getRolesByKey(searchBean,operUser.getOpertype(),operUser.getOperid());
         } catch (Exception e) {
             e.printStackTrace();
             return new PageResult<>(99, "系统查询错误");
@@ -54,16 +54,17 @@
     }
 
     @GetMapping("/role/loadadd")
-    public String loadadd() {
+    public String loadadd(@AuthenticationPrincipal TOperator operUser) {
+
         return "system/role/form";
     }
 
     @PostMapping("/role/add")
     //@PreAuthorize("hasPermission('/role/add','')")
     @ResponseBody
-    public JsonResult add(@RequestBody TRole role) {
+    public JsonResult add(@RequestBody TRole role,@AuthenticationPrincipal TOperator operUser) {
         if (role != null) {
-            return roleService.saveRole(role);
+            return roleService.saveRole(role,operUser.getOperid());
         } else {
             return JsonResult.error("添加失败");
         }
diff --git a/src/main/java/com/supwisdom/dlpay/system/controller/SystemController.java b/src/main/java/com/supwisdom/dlpay/system/controller/SystemController.java
index 000a4b8..c5409c5 100644
--- a/src/main/java/com/supwisdom/dlpay/system/controller/SystemController.java
+++ b/src/main/java/com/supwisdom/dlpay/system/controller/SystemController.java
@@ -250,8 +250,8 @@
         String message="";
         try{
             List<TBuilding> building = systemService.getBuildingByRegionId(regionid);
-            List<TRegion> regionByParentId = systemService.getRegionListById(regionid);
-            if (building!=null || regionByParentId!=null){
+            List<TRegion> lowRegionByParentId = systemService.getLowRegionListById(regionid);
+            if (building!=null || lowRegionByParentId.size()>0){
                 message="此区域已被绑定!";
                 map.put("message", message);
                 return map;
@@ -330,24 +330,22 @@
     public Map addRegion (@RequestBody RegionBean postData){
         Map map = new HashMap();
         try{
-            TRegion regionById = systemService.getRegionAllFlagById(postData.getRegionid());
-            if (regionById!=null){
-                map.put("errStr", "区域编号已经存在，请修改！");
-                return map;
-            }
             TRegion regionByName = systemService.getRegionByName(postData.getRegionname());
             if (regionByName!=null){
                 map.put("errStr", "区域名称已经存在，请修改！");
                 return map;
             }
             TRegion region= new TRegion();
-            region.setRegionid(postData.getRegionid());
+            long regionid = RedisUtil.incr("seq_region");
+            region.setRegionid(regionid+"");
             region.setAddress(postData.getAddress());
-            region.setLevel(postData.getLevel());
+
+            TRegion tRegion = systemService.getRegionById(postData.getParentid());
+
+            region.setLevel(tRegion.getLevel()+1);
             region.setParentid(postData.getParentid());
             region.setRegionname(postData.getRegionname());
             region.setRemarks(postData.getRemarks());
-            TRegion tRegion = systemService.getRegionById(postData.getParentid());
             region.setParentname(tRegion.getRegionname());
             region.setFlag(1);
 
@@ -380,12 +378,12 @@
                 return map;
             }
             TRegion region = systemService.getRegionById(postData.getRegionid());
+            TRegion tRegion = systemService.getRegionById(postData.getParentid());
             region.setAddress(postData.getAddress());
-            region.setLevel(postData.getLevel());
+            region.setLevel(tRegion.getLevel()+1);
             region.setParentid(postData.getParentid());
             region.setRegionname(postData.getRegionname());
             region.setRemarks(postData.getRemarks());
-            TRegion tRegion = systemService.getRegionById(postData.getParentid());
             region.setParentname(tRegion.getRegionname());
             region.setFlag(1);
 
diff --git a/src/main/java/com/supwisdom/dlpay/system/dao/ManagerDao.java b/src/main/java/com/supwisdom/dlpay/system/dao/ManagerDao.java
index 5f8798a..2e5ddda 100644
--- a/src/main/java/com/supwisdom/dlpay/system/dao/ManagerDao.java
+++ b/src/main/java/com/supwisdom/dlpay/system/dao/ManagerDao.java
@@ -16,6 +16,8 @@
 
     TOperator getOperatorById(String operid);
 
+    TOperator getOperatorByOpercode(String opercode);
+
     TRole getOperRoleById(String operid);
 
     boolean saveOperator(TOperator bean);
diff --git a/src/main/java/com/supwisdom/dlpay/system/dao/RegionDao.java b/src/main/java/com/supwisdom/dlpay/system/dao/RegionDao.java
index da117c5..780d39f 100644
--- a/src/main/java/com/supwisdom/dlpay/system/dao/RegionDao.java
+++ b/src/main/java/com/supwisdom/dlpay/system/dao/RegionDao.java
@@ -19,6 +19,8 @@
 
     public List<TRegion> getRegionListById(String regionid);
 
+    public List<TRegion> getLowRegionListById(String regionid);
+
     public List<TRegion> getRegionListByLevel(int level);
 
     public List<TRegion> getOperRegionListByLevel(int level,String regionid);
diff --git a/src/main/java/com/supwisdom/dlpay/system/dao/impl/ManagerDaoImpl.java b/src/main/java/com/supwisdom/dlpay/system/dao/impl/ManagerDaoImpl.java
index e47d5dc..991111f 100644
--- a/src/main/java/com/supwisdom/dlpay/system/dao/impl/ManagerDaoImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/dao/impl/ManagerDaoImpl.java
@@ -25,12 +25,12 @@
     @Transactional
     @Override
     public Pagination getOperatorList(String operid, String realname, int pageNo, int pageSize) {
-        String sql = "select a.operid,a.opername,a.opercode,a.opertype,a.realname,a.regionid,a.mobile,a.foperid,c.roleid,c.rolename,d.regionname " +
+        String sql = "select a.operid,a.opername,a.opercode,a.opertype,a.realname,case when a.status='normal' then '有效' else '注销' end status,a.regionid,a.mobile,a.foperid,c.roleid,c.rolename,d.regionname " +
                 " from Tb_Operator a " +
                 " left join tb_oper_role b on a.operid = b.operid " +
                 " left join tb_role c on b.roleid = c.roleid " +
                 " left join tb_region d on a.regionid = d.regionid " +
-                " where 1>0 and a.status='normal' ";
+                " where 1>0  ";
         if (!StringUtil.isEmpty(operid)){
             sql += " and a.operid = :operid ";
         }
@@ -68,7 +68,7 @@
                 " left join tb_oper_role b on a.operid = b.operid " +
                 " left join tb_role c on b.roleid = c.roleid " +
                 " left join tb_region d on a.regionid = d.regionid " +
-                "where a.status='normal' ";
+                "where 1>0 ";
 
         if (!StringUtil.isEmpty(operid)){
             sql += " and a.operid = :operid ";
@@ -97,12 +97,12 @@
     @Transactional
     @Override
     public Pagination getOperOperatorList(String operatorOperid, String operid, String realname, int pageNo, int pageSize) {
-        String sql = "select a.operid,a.opername,a.opertype,a.realname,a.regionid,a.mobile,a.foperid,c.roleid,c.rolename,d.regionname " +
+        String sql = "select a.operid,a.opername,a.opercode,a.opertype,a.realname,case when a.status='normal' then '有效' else '注销' end status,a.regionid,a.mobile,a.foperid,c.roleid,c.rolename,d.regionname " +
                 " from Tb_Operator a " +
                 " left join tb_oper_role b on a.operid = b.operid " +
                 " left join tb_role c on b.roleid = c.roleid " +
                 " left join tb_region d on a.regionid = d.regionid " +
-                " where 1>0 and a.status='normal' and (a.operid=:operatorOperid or a.foperid=:operatorOperid) ";
+                " where 1>0 and   a.foperid=:operatorOperid ";
         if (!StringUtil.isEmpty(operid)){
             sql += " and a.operid = :operid ";
         }
@@ -139,7 +139,7 @@
                 " left join tb_oper_role b on a.operid = b.operid " +
                 " left join tb_role c on b.roleid = c.roleid " +
                 " left join tb_region d on a.regionid = d.regionid " +
-                "where a.status='normal' and (a.operid=:operatorOperid or a.foperid=:operatorOperid) ";
+                "where   a.foperid=:operatorOperid ";
 
         if (!StringUtil.isEmpty(operid)){
             sql += " and a.operid = :operid ";
@@ -199,8 +199,21 @@
 
     @Transactional
     @Override
+    public TOperator getOperatorByOpercode(String opercode) {
+        String sql = "select bean from TOperator bean where  bean.opercode=:opercode ";
+        TypedQuery<TOperator> query = entityManager.createQuery(sql, TOperator.class);
+        query.setParameter("opercode", opercode);
+        List<TOperator> list = query.getResultList();
+        if (list!=null && list.size()>0){
+            return list.get(0);
+        }
+        return null;
+    }
+
+    @Transactional
+    @Override
     public TRole getOperRoleById(String operid) {
-        String sql = "select a.roleid,a.createtime,a.editflag,a.lastsaved,a.rolecode,a.roledesc,a.rolename,a.grade  " +
+        String sql = "select a.roleid,a.createtime,a.editflag,a.lastsaved,a.rolecode,a.roledesc,a.rolename,a.operid  " +
                 " from Tb_Role a left join tb_oper_role b on a.roleid = b.roleid where b.operid=?1 ";
         Query query = entityManager.createNativeQuery(sql, TRole.class);
         query.setParameter(1, operid);
diff --git a/src/main/java/com/supwisdom/dlpay/system/dao/impl/RegionDaoImpl.java b/src/main/java/com/supwisdom/dlpay/system/dao/impl/RegionDaoImpl.java
index 82c252a..231b934 100644
--- a/src/main/java/com/supwisdom/dlpay/system/dao/impl/RegionDaoImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/dao/impl/RegionDaoImpl.java
@@ -182,6 +182,22 @@
 
     @Transactional
     @Override
+    public List<TRegion> getLowRegionListById(String regionid) {
+        String sql = "select bean.regionid,bean.address,bean.level,bean.parentid,bean.regionname,bean.remarks,bean.parentname,bean.flag " +
+                "from TB_REGION bean where flag=1 "+
+                "and bean.regionid <>:regionid and bean.regionid in  " +
+                "(with recursive tmp as  (select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr " +
+                " where regionid= :regionid union all  select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr inner join tmp t on t.regionid=tbr.parentid  " +
+                " ) select regionid from tmp  )";
+        Query query = entityManager.createNativeQuery(sql, TRegion.class);
+        query.setParameter("regionid", regionid);
+        List list = query.getResultList();
+
+        return list;
+    }
+
+    @Transactional
+    @Override
     public List<TRegion> getRegionListByLevel(int level) {
         String sql = "select bean from TRegion bean where bean.flag=1 and bean.level=:level";
         TypedQuery<TRegion> query = entityManager.createQuery(sql, TRegion.class);
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/ManagerService.java b/src/main/java/com/supwisdom/dlpay/system/service/ManagerService.java
index e4a5f06..e6fcab7 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/ManagerService.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/ManagerService.java
@@ -20,6 +20,9 @@
     //根据id获取对应管理员
     TOperator getOperatorById(String operid);
 
+    //根据登陆名获取对应管理员
+    TOperator getOperatorByOpercode(String opercode);
+
     //根据管理员id获取其对应角色
     TRole getOperRoleById(String operid);
 
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 ef1a3d1..98411cf 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/RoleService.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/RoleService.java
@@ -18,6 +18,9 @@
     List<TRole> findAllRoles();
 
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
+    List<TRole> findAllRolesByOperid(String operid);
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
     TRole findRoleByRoleid(String roleid);
 
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
@@ -27,10 +30,10 @@
     TRoleFunction findRoleFunctionByRoleIdAndFunctionId(String roleid, Integer functionid);
 
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
-    PageResult<TRole> getRolesByKey(FunctionSearchBean param,String operType);
+    PageResult<TRole> getRolesByKey(FunctionSearchBean param,String operType,String operid);
 
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
-    JsonResult saveRole(TRole role);
+    JsonResult saveRole(TRole role,String operid);
 
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
     List<TRoleFunction> getRoleFuncByRoleid(String roleId);
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/SystemService.java b/src/main/java/com/supwisdom/dlpay/system/service/SystemService.java
index 6dca35c..d9402a6 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/SystemService.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/SystemService.java
@@ -56,6 +56,9 @@
     //根据区域id获取其权限下所有区域
     public List<TRegion> getRegionListById(String regionid);
 
+    //根据区域id获取其下级所有区域
+    public List<TRegion> getLowRegionListById(String regionid);
+
     //根据区域级别获取其上一级级别的所有区域
     public List<TRegion> getRegionListByLevel(int level);
 
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/impl/ManagerServiceImpl.java b/src/main/java/com/supwisdom/dlpay/system/service/impl/ManagerServiceImpl.java
index 5410b55..dd48a05 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/impl/ManagerServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/impl/ManagerServiceImpl.java
@@ -36,6 +36,11 @@
     }
 
     @Override
+    public TOperator getOperatorByOpercode(String opercode) {
+        return managerDao.getOperatorByOpercode(opercode);
+    }
+
+    @Override
     public TRole getOperRoleById(String operid) {
         return managerDao.getOperRoleById(operid);
     }
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 740da25..a02ee7c 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,6 +48,13 @@
     }
 
     @Override
+    public List<TRole> findAllRolesByOperid(String operid) {
+        List<TRole> list = roleDao.getAllByOperid(operid);
+        if (!StringUtil.isEmpty(list)) return list;
+        return new ArrayList<>(0);
+    }
+
+    @Override
     public TRole findRoleByRoleid(String roleid) {
         Optional<TRole> role = roleDao.findById(roleid);
         if(role.isPresent()){
@@ -67,7 +74,7 @@
     }
 
     @Override
-    public PageResult<TRole> getRolesByKey(FunctionSearchBean param,String operType) {
+    public PageResult<TRole> getRolesByKey(FunctionSearchBean param,String operType,String operid) {
         Pageable pageable = PageRequest.of(param.getPageNo() - 1, param.getPageSize()
                 , Sort.by("createtime"));
         if (operType.equals("P") || operType.equals("S")) {
@@ -75,21 +82,16 @@
                 return new PageResult<>(roleDao.findAllByRoleNameContaining(param.getFunctioname(), pageable));
             }
             return new PageResult<>(roleDao.findAll(pageable));
-        }else if (operType.equals("H")){
-            if (!StringUtil.isEmpty(param.getFunctioname())) {
-                return new PageResult<>(roleDao.findAllByGradeNotAndRoleNameContaining(1,param.getFunctioname(), pageable));
-            }
-            return new PageResult<>(roleDao.findAllByGradeNot(1,pageable));
         }else {
             if (!StringUtil.isEmpty(param.getFunctioname())) {
-                return new PageResult<>(roleDao.findAllByGradeAndRoleNameContaining(3,param.getFunctioname(), pageable));
+                return new PageResult<>(roleDao.findAllByOperidAndRoleNameContaining(operid,param.getFunctioname(), pageable));
             }
-            return new PageResult<>(roleDao.findAllByGrade(3,pageable));
+            return new PageResult<>(roleDao.findAllByOperid(operid,pageable));
         }
     }
 
     @Override
-    public JsonResult saveRole(TRole role) {
+    public JsonResult saveRole(TRole role,String operid) {
         if (!StringUtil.isEmpty(role.getRoleId())) {
             TRole temp = roleDao.findByRoleNameAndRoleIdNot(role.getRoleName(), role.getRoleId());
             if (temp != null) {
@@ -103,7 +105,6 @@
             temp.setRoleName(role.getRoleName());
             temp.setRoleDesc(role.getRoleDesc());
             temp.setRoleCode("ROLE_ADMIN");
-            temp.setGrade(role.getGrade());
             temp.setLastsaved(DateUtil.getNow());
             roleDao.save(temp);
         } else {
@@ -115,6 +116,7 @@
             role.setCreatetime(DateUtil.getNow());
             role.setEditflag(1);
             role.setRoleCode("ROLE_ADMIN");
+            role.setOperid(operid);
             roleDao.save(role);
         }
         return JsonResult.ok("成功");
@@ -164,9 +166,9 @@
         if (operType.equals("P") || operType.equals("S")) {
             nodeData  = roleFunctionDao.findByRoleIdNative(roleId);
         }else if (operType.equals("H")){
-            nodeData = roleFunctionDao.findByRoleIdAndGradeNative(roleId, 1);//区域管理员取等级大于1的
+            nodeData = roleFunctionDao.findByRoleIdAndGradeNative(roleId, 2);//区域管理员取等级大于2的
         }else if (operType.equals("L")){
-            nodeData = roleFunctionDao.findByRoleIdAndGradeNative(roleId, 2);//楼栋管理员取等级大于2的
+            nodeData = roleFunctionDao.findByRoleIdAndGradeNative(roleId, 3);//楼栋管理员取等级大于3的---null
         }
         List<ZTreeNode> ret = new ArrayList<>();
         boolean allChecked = true;
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/impl/SystemServiceImpl.java b/src/main/java/com/supwisdom/dlpay/system/service/impl/SystemServiceImpl.java
index ca4f176..9205dda 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/impl/SystemServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/impl/SystemServiceImpl.java
@@ -110,6 +110,11 @@
     }
 
     @Override
+    public List<TRegion> getLowRegionListById(String regionid) {
+        return regionDao.getLowRegionListById(regionid);
+    }
+
+    @Override
     public List<TRegion> getRegionListByLevel(int level) {
         return regionDao.getRegionListByLevel(level);
     }
diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql
index 4d0024e..2268ef1 100644
--- a/src/main/resources/data.sql
+++ b/src/main/resources/data.sql
@@ -30,7 +30,7 @@
 INSERT INTO t_dictionary(dicttype,dicttypename,dictval,dictcaption) VALUES (6, '区域级别', '1', '一级');
 INSERT INTO t_dictionary(dicttype,dicttypename,dictval,dictcaption) VALUES (6, '区域级别', '2', '二级');
 INSERT INTO t_dictionary(dicttype,dicttypename,dictval,dictcaption) VALUES (6, '区域级别', '3', '三级');
-INSERT INTO t_dictionary(dicttype,dicttypename,dictval,dictcaption) VALUES (1, 'operator', 'L', '物业管理员');
+INSERT INTO t_dictionary(dicttype,dicttypename,dictval,dictcaption) VALUES (1, 'operator', 'L', '楼栋管理员');
 INSERT INTO t_dictionary(dicttype,dicttypename,dictval,dictcaption) VALUES (13, '抓拍服务地址', 'http://172.28.43.158:8088/door', '抓拍服务地址');
 
 -- ----------------------------
@@ -70,12 +70,12 @@
 -- ----------------------------
 INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid,grade) VALUES (1, NULL, 0, NULL, 'layui-icon-home', '#', '主页', 1, -1,3);
 INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid,grade) VALUES (2, NULL, 1, NULL, 'layui-icon-home', '/home/console', '控制台', 2, 1,3);
-INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid,grade) VALUES (3, NULL, 0, NULL, 'layui-icon-set', '#', '系统中心', 10, -1,3);
-INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid,grade) VALUES (4, NULL, 1, NULL, 'layui-icon-set', '/role/index', '角色管理', 11, 3,3);
+INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid,grade) VALUES (3, NULL, 0, NULL, 'layui-icon-set', '#', '系统中心', 10, -1,2);
+INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid,grade) VALUES (4, NULL, 1, NULL, 'layui-icon-set', '/role/index', '角色管理', 11, 3,2);
 INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid,grade) VALUES (5, NULL, 1, NULL, 'layui-icon-set', '/operator/operatorindex', '操作员管理', 12, 3,2);
 /*INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid,grade) VALUES (6, NULL, 1, NULL, 'layui-icon-username', '/function/index', '功能管理', 13, 3,1);*/
 INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid,grade) VALUES (7, NULL, 1, NULL, 'layui-icon-app', '/system/regionindex', '区域管理', 14, 3,2);
-INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid,grade) VALUES (8, NULL, 1, NULL, 'layui-icon-app', '/system/buildingindex', '楼栋管理', 15, 3,3);
+INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid,grade) VALUES (8, NULL, 1, NULL, 'layui-icon-app', '/system/buildingindex', '楼栋管理', 15, 3,2);
 INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid,grade) VALUES (9, NULL, 0, NULL, 'layui-icon-engine', '#', '门控中心', 20, -1,3);
 INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid,grade) VALUES (10, NULL, 1, NULL, 'layui-icon-engine', '/ncmgr/devindex', '设备管理', 21, 9,3);
 INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid,grade) VALUES (11, NULL, 1, NULL, 'layui-icon-engine', '/ncmgr/timeindex', '时间段管理', 22, 9,3);
@@ -86,8 +86,9 @@
 INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid,grade) VALUES (16, NULL, 1, NULL, 'layui-icon-app', '/system/dictionary', '数据字典管理', 31, 15,1);*/
 /*INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid,grade) VALUES (17, NULL, 1, NULL, 'layui-icon-app', '/system/queue', '任务调度管理', 32, 15,1);*/
 INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid,grade) VALUES (18, NULL, 0, NULL, 'layui-icon-username', '#', '人员中心', 40, -1,3);
-/*INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid,grade) VALUES (20, NULL, 1, NULL, 'layui-icon-username', '/doorlistMgr/downDoorList', '下发门禁名单', 41, 18,3);
-INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid,grade) VALUES (21, NULL, 1, NULL, 'layui-icon-username', '/doorlistMgr/deleteDoorList', '删除门禁名单', 42, 18,3);*/
+INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid,grade) VALUES (19, NULL, 1, NULL, 'layui-icon-username', '/doorlistMgr/impCustomerlistindex', '导入人员名单', 41, 18,3);
+INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid,grade) VALUES (20, NULL, 1, NULL, 'layui-icon-username', '/doorlistMgr/downDoorList', '下发门禁名单', 42, 18,3);
+INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid,grade) VALUES (21, NULL, 1, NULL, 'layui-icon-username', '/doorlistMgr/deleteDoorList', '删除门禁名单', 43, 18,3);
 INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid,grade) VALUES (22, NULL, 0, NULL, 'layui-icon-chart-screen', '#', '数据中心', 50, -1,3);
 INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid,grade) VALUES (23, NULL, 1, NULL, 'layui-icon-chart-screen', '/doorlistMgr/searchDoorlist', '设备名单查询', 51, 22,3);
 INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid,grade) VALUES (24, NULL, 1, NULL, 'layui-icon-chart-screen', '/query/tdoorstream', '流水信息查询', 52, 22,3);
@@ -109,7 +110,8 @@
 -- ----------------------------
 -- Records of tb_role
 -- ----------------------------
-INSERT INTO tb_role(roleid,createtime,editflag,lastsaved,rolecode,roledesc,rolename) VALUES ('abcdefghijklmnopqrstuvwxyz012345', '20190101000000', 0, NULL, 'ROLE_ADMIN', '超级管理员', '超级管理员');
+INSERT INTO tb_role(roleid,createtime,editflag,lastsaved,rolecode,roledesc,rolename,operid) VALUES ('abcdefghijklmnopqrstuvwxyz012345', '20190101000000', 0, NULL, 'ROLE_ADMIN', '超级管理员', '超级管理角色','0000');
+INSERT INTO tb_role(roleid,createtime,editflag,lastsaved,rolecode,roledesc,rolename,operid) VALUES ('abcdefghijklmnopqrstuvwxyz012346', '20190101000000', 0, NULL, 'ROLE_ADMIN', '推荐区域管理角色', '区域管理角色','0000');
 
 -- ----------------------------
 -- Records of tb_role_function
@@ -129,6 +131,29 @@
 INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23880010', 13, NULL, 'abcdefghijklmnopqrstuvwxyz012345');
 INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23880011', 14, NULL, 'abcdefghijklmnopqrstuvwxyz012345');
 INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23880012', 18, NULL, 'abcdefghijklmnopqrstuvwxyz012345');
-INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23880015', 22, NULL, 'abcdefghijklmnopqrstuvwxyz012345');
-INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23890016', 23, NULL, 'abcdefghijklmnopqrstuvwxyz012345');
-INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23890017', 24, NULL, 'abcdefghijklmnopqrstuvwxyz012345');
\ No newline at end of file
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23880013', 19, NULL, 'abcdefghijklmnopqrstuvwxyz012345');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23880014', 20, NULL, 'abcdefghijklmnopqrstuvwxyz012345');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23880015', 21, NULL, 'abcdefghijklmnopqrstuvwxyz012345');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23880016', 22, NULL, 'abcdefghijklmnopqrstuvwxyz012345');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23890017', 23, NULL, 'abcdefghijklmnopqrstuvwxyz012345');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23890018', 24, NULL, 'abcdefghijklmnopqrstuvwxyz012345');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23890019', 1, NULL, 'abcdefghijklmnopqrstuvwxyz012346');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23890020', 2, NULL, 'abcdefghijklmnopqrstuvwxyz012346');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23890021', 3, NULL, 'abcdefghijklmnopqrstuvwxyz012346');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23890022', 4, NULL, 'abcdefghijklmnopqrstuvwxyz012346');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23890023', 5, NULL, 'abcdefghijklmnopqrstuvwxyz012346');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23890024', 7, NULL, 'abcdefghijklmnopqrstuvwxyz012346');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23890025', 8, NULL, 'abcdefghijklmnopqrstuvwxyz012346');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23890026', 9, NULL, 'abcdefghijklmnopqrstuvwxyz012346');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23890027', 10, NULL, 'abcdefghijklmnopqrstuvwxyz012346');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23890028', 11, NULL, 'abcdefghijklmnopqrstuvwxyz012346');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23890029', 12, NULL, 'abcdefghijklmnopqrstuvwxyz012346');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23890030', 13, NULL, 'abcdefghijklmnopqrstuvwxyz012346');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23890031', 14, NULL, 'abcdefghijklmnopqrstuvwxyz012346');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23890032', 18, NULL, 'abcdefghijklmnopqrstuvwxyz012346');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23890033', 19, NULL, 'abcdefghijklmnopqrstuvwxyz012346');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23890034', 20, NULL, 'abcdefghijklmnopqrstuvwxyz012346');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23890035', 21, NULL, 'abcdefghijklmnopqrstuvwxyz012346');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23890036', 22, NULL, 'abcdefghijklmnopqrstuvwxyz012346');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23890037', 23, NULL, 'abcdefghijklmnopqrstuvwxyz012346');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23890038', 24, NULL, 'abcdefghijklmnopqrstuvwxyz012346');
\ No newline at end of file
diff --git a/src/main/resources/templates/doorlist/addDoorlist.html b/src/main/resources/templates/doorlist/addDoorlist.html
index df3b592..c667fea 100644
--- a/src/main/resources/templates/doorlist/addDoorlist.html
+++ b/src/main/resources/templates/doorlist/addDoorlist.html
@@ -19,10 +19,10 @@
 
             <!--人员选择-->
             <div id="addDoorlist_personSelect">
-                <div class="x_panel" style="margin-left: 1%;width: 98%;float: left;">
+                <!--<div class="x_panel" style="margin-left: 1%;width: 98%;float: left;">-->
                     <div style="height: 60px;border-left: 1px solid #dfe6ec;border-right: 1px solid #dfe6ec;">
                         <el-col :span="22" :offset="1" >
-                            <el-row :span="24">
+                            <el-row :span="24" style="padding-bottom: 10px">
                                 <el-col :span="12">
                                     <el-col :span="3"><lable>姓名：</lable></el-col>
                                     <el-col :span="20"><el-input placeholder="请输入内容" size="mini" v-model="person_person.custname"></el-input></el-col>
@@ -45,13 +45,18 @@
                             </el-row>
                         </el-col>
                     </div>
-                </div>
+                <!--</div>-->
+
                 <div id="addDoorlist_personSel">
-                    <div class="x_panel" style="margin-left: 1%;width: 45%;float: left">
-                        <div class="x_title" style="margin-bottom: 10px">
-                            <!--未分配人员({{person_lefttable.length}}人)-->
+                    <div class="layui-row layui-col-space15">
+                    <div class="layui-col-md5" style="width: 45%">
+                        <div class="layui-card">
+                    <!--<div class="x_panel" style="margin-left: 1%;width: 45%;float: left">-->
+                        <!--<div class="x_title" style="margin-bottom: 10px" v-if="person_lefttable">-->
+                            <div class="layui-card-header" style="margin-bottom: 10px" v-if="person_lefttable">
+                            总分配人员({{person_lefttable.length}}人)
                         </div>
-                        <div id="addDoorlist_pensonS-tb">
+                        <div id="addDoorlist_pensonS-tb" class="layui-card-body">
 
                             <template>
                                 <el-table
@@ -72,7 +77,7 @@
                                             sortable
                                             prop="cardno"
                                             label="卡号"
-                                            width="100">
+                                            width="110">
                                     </el-table-column>
                                     <el-table-column
                                             sortable
@@ -83,26 +88,33 @@
                                     <el-table-column
                                             prop="bankcardno"
                                             label="银行卡号"
-                                            width="190">
+                                            width="200">
                                     </el-table-column>
                                 </el-table>
                             </template>
                         </div>
+                        </div>
                     </div>
 
+                        <div class="layui-col-md1" style="width: 10%">
                     <div style="width:5%;height:400px;display:inline-block;padding:0;margin-left: 5px; float:left">
-                        <div style="position: absolute;top:540px;width:5%;padding:0;margin: 0;text-align: center">
+                        <div style="position: absolute;top:55%;width:5%;padding:0;margin: 0;text-align: center;left: 28%">
                             <el-button class="el-icon-d-arrow-right" :disabled="per_addBtn_dis" @click="person_addBtn"></el-button>
                         </div>
-                        <div style="position: absolute;top:440px;width:5%;padding:0;margin: 0;text-align: center">
+                        <div style="position: absolute;top:80%;width:5%;padding:0;margin: 0;text-align: center;left: 28%">
                             <el-button class="el-icon-d-arrow-left" :disabled="per_delBtn_dis" @click="person_delBtn"></el-button>
                         </div>
                     </div>
-
-                    <div class="x_panel" style="margin-right: 1%;width: 47%;float: right">
-                        <div class="x_title" style="margin-bottom: 10px">
-                            <!--已分配人员({{person_righttable.length}}人)-->
                         </div>
+
+                        <div class="layui-col-md5" style="width: 45%">
+                            <div class="layui-card">
+                    <!--<div class="x_panel" style="margin-right: 1%;width: 47%;float: right">
+                        <div class="x_title" style="margin-bottom: 10px" v-if="person_righttable">-->
+                                <div class="layui-card-header" style="margin-bottom: 10px" v-if="person_lefttable">
+                            已分配人员({{person_righttable.length}}人)
+                        </div>
+                                <div  class="layui-card-body">
                         <template>
                             <el-table
                                     height="480"
@@ -122,7 +134,7 @@
                                         sortable
                                         prop="cardno"
                                         label="卡号"
-                                        width="100">
+                                        width="110">
                                 </el-table-column>
                                 <el-table-column
                                         sortable
@@ -133,11 +145,14 @@
                                 <el-table-column
                                         prop="bankcardno"
                                         label="银行卡号"
-                                        width="190">
+                                        width="200">
                                 </el-table-column>
                             </el-table>
                         </template>
+                                </div>
                     </div>
+                        </div>
+                </div>
                 </div>
 
                 <div id="addDoorlist_excelTable" style="display:none;padding: 10px 0 0 0;width: 100%;float: left;">
@@ -167,8 +182,10 @@
                     </template>
                 </div>
 
-                <div style="width:80%;float: left;margin-top: auto;margin-right: 50%;">
-                    备注&nbsp;：<el-input size="small" v-model="person_reason" style="width: 40%" placeholder="输入下发设备名单的原因等备注信息"></el-input>
+                <div class="layui-row layui-col-space15">
+                    <div style="width:80%;float: left;margin-top: auto;margin-right: 50%;">
+                        备注&nbsp;：<el-input size="small" v-model="person_reason" style="width: 40%" placeholder="输入下发设备名单的原因等备注信息"></el-input>
+                    </div>
                 </div>
                 <!--<div style="float:left;border-top:solid 1px #e0e0e0; width:100%; height:30px; margin-top:10px;padding-top:10px;  font-size: 14px!important;">
                     <form action="${pageContext.request.contextPath}/doorlistMgr/addexcel" method="post" style="width: 60%;float:left;" id="addDoorlist_uploadExcelId" name="formUpload" enctype="multipart/form-data" target="_top">
@@ -182,8 +199,9 @@
                     <el-button size="small" type="primary" @click="downloadExcel">导入模板下载</el-button>
                 </div>-->
 
-                <div style="float:left;margin:10px 0 0 40%;"><el-button style="margin-top: 12px;" @click="per_nextStep">下一步</el-button></div>
-
+                <div class="layui-row layui-col-space15">
+                <div style="float:left;margin:0px 0 0 47%;"><el-button style="margin-top: 12px;" @click="per_nextStep">下一步</el-button></div>
+                </div>
             </div>
 
             <!--选择设备组-->
@@ -251,16 +269,19 @@
 
             <!--选择设备-->
             <div id="addDoorlist_deviceSelect"  style="display: none">
-                <div class="x_panel" style="margin-left: 1%;width: 98%;float: left;">
+                <!--<div class="x_panel" style="margin-left: 1%;width: 98%;float: left;">-->
                     <div style="height: 20px;border-left: 1px solid #dfe6ec;border-right: 1px solid #dfe6ec;">
                         <el-col>
                             <el-row :span="24">
+                                <el-col :span="1">
+                                    &nbsp;
+                                </el-col>
                                 <el-col :span="6" >
                                     区域：
-                                    <el-select v-model="device.regionid" size="mini" clearable placeholder="请选择">
+                                    <el-select v-model="device.regionid" size="mini" @Change="regionChange" clearable placeholder="请选择">
                                         <el-option
                                                 v-for="regionid in regions"
-                                                :key="regionidid.value"
+                                                :key="regionid.value"
                                                 :label="regionid.label"
                                                 :value="regionid.value">
                                         </el-option>
@@ -278,20 +299,25 @@
                                     </el-select>
                                 </el-col>
                                 <el-col :span="6">
-                                    <el-col :span="5"><lable>设备名称：</lable></el-col>
+                                    <el-col :span="7"><lable>设备名称：</lable></el-col>
                                     <el-col :span="14"><el-input placeholder="请输入内容" size="mini" v-model="device.deviceName" ></el-input></el-col>
                                 </el-col>
-                                <el-col :span="3">
+                                <el-col :span="2">
                                     <el-button size="mini" type="primary" @click="seachDevice">&nbsp;&nbsp;搜索&nbsp;&nbsp;</el-button>
                                 </el-col>
                             </el-row>
                         </el-col>
                     </div>
-                </div>
-                <div class="x_panel" style="margin-left: 1%;width: 45%;float: left">
-                    <div class="x_title">
-                        <!--未分配设备({{device_lefttable.length}}台)-->
+                <!--</div>-->
+                <div class="layui-row layui-col-space15">
+                    <div class="layui-col-md5" style="width: 45%">
+                        <div class="layui-card">
+                <!--<div class="x_panel" style="margin-left: 1%;width: 45%;float: left">-->
+                    <!--<div class="x_title" v-if="device_lefttable">-->
+                            <div class="layui-card-header" v-if="device_lefttable">
+                        总分配设备({{device_lefttable.length}}台)
                     </div>
+                            <div  class="layui-card-body">
                     <template>
                         <el-table
                                 height="480"
@@ -308,42 +334,51 @@
                                     width="55">
                             </el-table-column>
                             <el-table-column
-                                    sortable
                                     prop="devname"
                                     label="设备名称"
                                     width="150">
                             </el-table-column>
                             <el-table-column
                                     prop="deviceid"
-                                    label="设备编号">
+                                    label="设备编号"
+                                    width="100">
                             </el-table-column>
                             <el-table-column
+                                    sortable
                                     prop="regionname"
                                     label="区域"
                                     width="150">
                             </el-table-column>
                             <el-table-column
+                                    sortable
                                 prop="buildingname"
                                 label="楼栋"
                                 width="150">
                         </el-table-column>
                         </el-table>
                     </template>
+                            </div>
                 </div>
+                    </div>
 
+                    <div class="layui-col-md1" style="width: 10%">
                 <div style="width:5%;height:400px;display:inline-block;padding:0;margin-left: 5px; float:left">
-                    <div style="position: absolute;top:44%;width:5%;padding:0;margin: 0;text-align: center">
+                    <div style="position: absolute;top:55%;width:5%;padding:0;margin: 0;text-align: center; left: 28%">
                         <el-button class="el-icon-d-arrow-right" :disabled="dev_addBtn_dis" @click="dev_addToright"></el-button>
                     </div>
-                    <div style="position: absolute;top:53%;width:5%;padding:0;margin: 0;text-align: center">
+                    <div style="position: absolute;top:80%;width:5%;padding:0;margin: 0;text-align: center; left: 28%">
                         <el-button class="el-icon-d-arrow-left" :disabled="dev_delBtn_dis" @click="dev_removeRight"></el-button>
                     </div>
                 </div>
-
-                <div class="x_panel" style="margin-right: 1%;width: 47%;float: right">
-                    <div class="x_title">
-                        <!--已分配设备({{device_righttable.length}}台)-->
                     </div>
+
+                <!--<div class="x_panel" style="margin-right: 1%;width: 47%;float: right">-->
+                    <div class="layui-col-md5" style="width: 45%">
+                        <div class="layui-card">
+                    <div class="layui-card-header" v-if="device_righttable">
+                        已分配设备({{device_righttable.length}}台)
+                    </div>
+                            <div  class="layui-card-body">
                     <template>
                         <el-table
                                 height="480"
@@ -360,21 +395,23 @@
                                     width="55">
                             </el-table-column>
                             <el-table-column
-                                    sortable
                                     prop="devname"
                                     label="设备名称"
                                     width="150">
                             </el-table-column>
                             <el-table-column
                                     prop="deviceid"
-                                    label="设备编号">
+                                    label="设备编号"
+                                    width="100">
                             </el-table-column>
                             <el-table-column
+                                    sortable
                                     prop="regionname"
                                     label="区域"
                                     width="150">
                             </el-table-column>
                             <el-table-column
+                                    sortable
                                     prop="buildingname"
                                     label="楼栋"
                                     width="150">
@@ -382,24 +419,29 @@
                         </el-table>
                     </template>
                 </div>
+                        </div>
+                    </div>
+                </div>
+                <div class="layui-row layui-col-space15">
                 <div style="float:left;margin:10px 0 0 40%;">
                     <el-button style="margin-top: 12px;" @click="devToUpStep">上一步</el-button>&nbsp;&nbsp;&nbsp;
                     <el-button style="margin-top: 12px;" @click="devNextStep">下一步</el-button>
                 </div>
+                </div>
             </div>
 
-            <!--时间段选择-->
+            <!--时间周选择-->
             <dev id="addDoorlist_timeSelect" style="margin-top:15px ;width:100%; font-size: 14px!important;display:none; ">
                 <div style="padding:12px 13px;font-size: 14px!important;"  id="addDoorlist_selectTime-tb" >
                     <div style="width:100%">
                         <el-row>
-                            时间段名称：<el-input size="small" v-model="timeName" style="width: 30%;"></el-input>
+                            时间周名称：<el-input size="small" v-model="timeName" style="width: 30%;"></el-input>
                             &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                             <el-button size="small" type="primary" @click="searchTime">搜索</el-button>
                         </el-row>
                     </div>
                     <div style="width:100%;margin-top:15px">
-                        已选时间段：<el-tag
+                        已选时间周：<el-tag
                             :key="tag"
                             v-for="tag in timeTags"
                             closable
@@ -410,7 +452,7 @@
                     </el-tag>
                     </div>
                     <div style="width:100%;color:#ff9900; margin-top:10px" id="addDoorlist_timeSelect_remark">
-                        注：时间段为必选项，不选择不能下发设备名单。
+                        注：时间周为必选项，不选择不能下发设备名单。
                     </div>
                 </div>
                 <template>
@@ -425,13 +467,13 @@
                             max-height="2000">
                         <el-table-column
                                 prop="weekid"
-                                label="时间段id"
-                                width="150">
+                                label="时间周id"
+                                width="450">
                         </el-table-column>
                         <el-table-column
                                 prop="weekname"
-                                label="时间段名称"
-                                width="300">
+                                label="时间周名称"
+                                width="618">
                         </el-table-column>
 
                         </el-table-column>
@@ -531,11 +573,11 @@
                         <div style="color:#f60;width:167px;height:28px; font-size:20px;float: left;">您已成功下发名单!</div>&nbsp;&nbsp;&nbsp;&nbsp;
                         <el-button size="small" style="line-height:10px;overflow:hidden;height: 23px;margin-top: 3px;" type="primary" @click="rePush">继续下发设备名单</el-button>
                     </div>
-                    <!--<div style="margin:10px 0 0 200px; ">
-                        该设备名单的部分明细内容：人员 <span style="color:#f60" id="postSuc_perNum">{{addDoorlist_vue.person_righttable.length + parseInt(addDoorlist_vue.personSel_excelNum)}}</span>个，
-                        设备<span style="color:#f60" id="postSuc_devNum">{{addDoorlist_vue.devSel_allocated.length}}</span>个，
-                        时间段<span style="color:#f60" id="postSuc_timeNum">{{addDoorlist_vue.timeTags.length}}</span>个。
-                    </div>-->
+                    <div style="margin:10px 0 0 200px; ">
+                        该设备名单的部分明细内容：人员 <span style="color:#f60" id="postSuc_perNum" v-if="addDoorlist_vue">{{addDoorlist_vue.person_righttable.length}}</span>个， <!--+ parseInt(addDoorlist_vue.personSel_excelNum)}}</span>个，-->
+                        设备<span style="color:#f60" id="postSuc_devNum" v-if="addDoorlist_vue">{{addDoorlist_vue.devSel_allocated.length}}</span>个，
+                        时间周<span style="color:#f60" id="postSuc_timeNum" v-if="addDoorlist_vue">{{addDoorlist_vue.timeTags.length}}</span>个。
+                    </div>
                     <el-card class="box-card">
                         <el-collapse v-model="postCollapse">
                             <el-collapse-item :title="devTitle" name="2">
@@ -543,8 +585,9 @@
                                         :key="tag"
                                         v-for="tag in devSel_allocated"
                                         type="primary"
-                                        size="medium">
-                                    <!--{{tag.doorname}}-->
+                                        size="medium"
+                                        v-if="tag">
+                                    {{tag.devname}}
                                 </el-tag>
                             </el-collapse-item>
                             <el-collapse-item :title="timeTitle" name="3">
@@ -553,7 +596,7 @@
                                         v-for="tag in timeTags"
                                         type="primary"
                                         size="medium">
-                                    <!--{{tag}}-->
+                                    {{tag}}
                                 </el-tag>
                             </el-collapse-item>
                         </el-collapse>
@@ -912,7 +955,12 @@
                 $("#addDoorlist_postSucess").hide();
                 addDoorlist_initData();
                 $("#addDoorlist_personSelect").show();
-            }
+            },
+            regionChange:function(value){
+                this.buildings=[];
+                this.device.buildingid='';
+                addDoorlist_getRegionBuilding(this,value);
+            },
 
         },
         created:function(){
@@ -1086,7 +1134,6 @@
             "&timeName="+timeName;
 //        url = encodeURI(url);
         $.get(url).success(function(data,status){
-            alert(data.pResult)
             if(data.pResult == undefined){
                 layer.msg('用户认证已过期，请重新登录',{icon:2,time:1000});
                 window.location="login";
@@ -1099,7 +1146,7 @@
     }
 
     function addDoorlist_fillDeviceDiv(){
-        $.get("[[@{/doorlistMgr/getRegionAndBuildingList}]]").success(function (data, status) {
+        $.get("[[@{/doorlistMgr/getRegionAndBuildingList}]]").success(function (ret, status) {
             var regionlist=[];
             var regiondata = ret.regions;
             if (regiondata!=null) {
@@ -1130,7 +1177,6 @@
     function addDoorlist_fillDevice_lefttable(url){
         url = encodeURI(url);
         $.get(url).success(function(data,status){
-            alert(data.pResult)
             if(data.pResult == undefined){
                 layer.msg('用户认证已过期，请重新登录',{icon:2,time:1000});
                 window.location="login";
@@ -1185,6 +1231,32 @@
             }
         });
     }
+
+    function addDoorlist_getRegionBuilding(_self,value){
+        $.ajax({
+            type: "get",
+            dataType: "json",
+            url: encodeURI("[[@{/ncmgr/getRegionBuilding?regionid=}]]" + value),
+            success: function (ret) {
+                var bList = [];
+                bList.push({
+                    value:'',
+                    label:'全部'
+                });
+                var rB = ret.reBuilding;
+                if (rB!=null) {
+                    for (var j = 0; j < rB.length; j++) {
+                        bList.push({
+                            value: rB[j]["buildingid"],
+                            label: rB[j]["buildingname"]
+                        });
+                    }
+                }
+
+                _self.buildings = bList;
+            }
+        })
+    }
 </script>
 
 <style>
diff --git a/src/main/resources/templates/doorlist/deleteDoorlist.html b/src/main/resources/templates/doorlist/deleteDoorlist.html
index 6d59be6..eb3aa73 100644
--- a/src/main/resources/templates/doorlist/deleteDoorlist.html
+++ b/src/main/resources/templates/doorlist/deleteDoorlist.html
@@ -78,12 +78,12 @@
                     </el-col>
                     <el-col :span="8">
                         <el-form-item label="名单状态">
-                            <el-select v-model="deleteDoorForm.syncstatu" placeholder="请选择">
+                            <el-select v-model="deleteDoorForm.syncflag" placeholder="请选择">
                                 <el-option
-                                        v-for="status in syncStatus"
-                                        :key="status.value"
-                                        :label="status.label"
-                                        :value="status.value">
+                                        v-for="flag in syncflags"
+                                        :key="flag.value"
+                                        :label="flag.label"
+                                        :value="flag.value">
                                 </el-option>
                             </el-select>
                         </el-form-item>
@@ -130,21 +130,18 @@
                     <el-table-column
                             prop="bankcardno"
                             label="银行卡号"
-                            width="180">
+                            width="200">
                     </el-table-column>
                     <el-table-column
-                            prop="opername"
-                            label="分配操作员"
-                            width="140">
-                    </el-table-column>
-                    <el-table-column
-                            prop="syncstatus"
+                            prop="syncflag"
                             label="名单状态"
+                            :formatter="syncform"
                             width="110">
                     </el-table-column>
                     <el-table-column
                             prop="operflag"
                             label="操作标记"
+                            :formatter="operform"
                             width="110">
                     </el-table-column>
                     <el-table-column
@@ -157,6 +154,11 @@
                             label="同步时间"
                             width="200">
                     </el-table-column>
+                    <el-table-column
+                            prop="opername"
+                            label="分配操作员"
+                            width="140">
+                    </el-table-column>
 
                 </el-table>
                 <div class="clearfix"></div>
@@ -190,11 +192,11 @@
                 devname: '',
                 allocatEndDate: '',
                 cardno: '',
-                syncstatu: '',
+                syncflag: '',
                 operflag: '',
             },
             regions: [],
-            syncStatus: [],
+            syncflags: [],
             operFlags: [],
             dialogFormVisible: false,
             dlgAllotDevVisible: false,
@@ -232,6 +234,29 @@
             del: function () {
                 deleteDoorlist_deletedata();
             },
+            syncform:function (row) {
+                if (row.syncflag == 'N') {
+                    return '未同步';
+                }
+                else if (row.syncflag == 'Y') {
+                    return '已同步';
+                } else {
+                    return row.syncflag;
+                }
+            },
+            operform:function (row) {
+                if (row.operflag == 'A') {
+                    return '增加';
+                }
+                else if (row.operflag == 'D') {
+                    return '删除';
+                }else if (row.operflag == 'C') {
+                    return '注销';
+                }
+                else {
+                    return row.operflag;
+                }
+            },
             handleSelect: function (val) {
                 this.selectList = val;
             }
@@ -300,10 +325,10 @@
             var endStr = deleteDoor.allocatEndDate.Format('yyyyMMdd');
 
         }
-        var url = "[[@{/doorlistMgr/getAllCardListFrDelete}]]" + "allocatStartDate=" + startStr + "&allocatEndDate=" + endStr +
+        var url = "[[@{/doorlistMgr/getAllCardListFrDelete?}]]" + "allocatStartDate=" + startStr + "&allocatEndDate=" + endStr +
             "&devname=" + deleteDoor.devname + "&custname=" + deleteDoor.custname
             + "&cardno=" + deleteDoor.cardno + "&regionid=" + deleteDoor.regionid
-            + "&syncstatus=" + deleteDoor.syncstatus + "&usetype=MJ" +
+            + "&syncflag=" + deleteDoor.syncflag + "&usetype=MJ" +
             "&pageNo=" + pageno + "&pageSize=" + pagesize + "&operflag=" + deleteDoor.operflag;
         var token=$("meta[name='_csrf_token']").attr("value");
         $.ajax({
@@ -346,7 +371,8 @@
                     },
                     data: JSON.stringify(delList),
                     success: function (data) {
-                        layer.closeAll('dialog');
+                        layer.msg(data.result);
+                        //layer.closeAll('dialog');
                         deleteDoorlist_refreshThisTable();
                     }
                 });
@@ -368,7 +394,7 @@
                 var syncDicts = [];
                 var syncDict = data.syncDicts;
                 syncDicts.push({
-                    value: "all",
+                    value: "",
                     label: "全部"
                 })
                 for (var i = 0; i < syncDict.length; i++) {
@@ -396,7 +422,7 @@
                 var operDicts = [];
                 var operDict = data.operDicts;
                 operDicts.push({
-                    value: "all",
+                    value: "",
                     label: "全部"
                 })
                 for (var i = 0; i < operDict.length; i++) {
@@ -406,12 +432,12 @@
                     })
                 }
                 deleteDoorlist_vue.regions = regionList;
-                deleteDoorlist_vue.syncStatus = syncDicts;
-                deleteDoorlist_vue.operFlag = operDicts;
+                deleteDoorlist_vue.syncflags = syncDicts;
+                deleteDoorlist_vue.operFlags = operDicts;
 
                 deleteDoorlist_vue.deleteDoorForm.regionid = '';
-                deleteDoorlist_vue.deleteDoorForm.syncStatus = 'all';
-                deleteDoorlist_vue.deleteDoorForm.operFlag = 'all';
+                deleteDoorlist_vue.deleteDoorForm.syncflag = '';
+                deleteDoorlist_vue.deleteDoorForm.operFlag = '';
             }
         })
     }
diff --git a/src/main/resources/templates/doorlist/searchDoorlist.html b/src/main/resources/templates/doorlist/searchDoorlist.html
index 6f4d31c..c1a0db4 100644
--- a/src/main/resources/templates/doorlist/searchDoorlist.html
+++ b/src/main/resources/templates/doorlist/searchDoorlist.html
@@ -346,6 +346,8 @@
                 }
                 else if (row.operflag == 'D') {
                     return '删除';
+                } else if (row.operflag == 'C') {
+                    return '注销';
                 } else {
                     return row.operflag;
                 }
diff --git a/src/main/resources/templates/home/theme.html b/src/main/resources/templates/home/theme.html
index 67cb12a..42c84f9 100755
--- a/src/main/resources/templates/home/theme.html
+++ b/src/main/resources/templates/home/theme.html
@@ -7,8 +7,8 @@
 
 <div class="layui-card-header"><h2 class="header-title">设置主题：</h2></div>
 <div class="layui-card-body layui-text">
-    <a href="/home/setTheme" class="layui-btn" style="background-color: #009688;">默认主题</a>
-    <a href="/home/setTheme?themeName=blue" class="layui-btn layui-btn-normal">蓝色主题</a>
+    <a href="/door/home/setTheme" class="layui-btn" style="background-color: #009688;">默认主题</a>
+    <a href="/door/home/setTheme?themeName=blue" class="layui-btn layui-btn-normal">蓝色主题</a>
     <br><br><br>
   
 </div>
diff --git a/src/main/resources/templates/ncmgr/nc_dev.html b/src/main/resources/templates/ncmgr/nc_dev.html
index 6cf2647..c1a1308 100644
--- a/src/main/resources/templates/ncmgr/nc_dev.html
+++ b/src/main/resources/templates/ncmgr/nc_dev.html
@@ -150,6 +150,17 @@
                             :formatter="flagform">
                     </el-table-column>
                     <el-table-column
+                            prop="operflag"
+                            label="状态"
+                            width="90"
+                            :formatter="operform">
+                        <!--<template scope="scope">
+                            <el-tag :type="scope.row.operflag === '有效' ? 'success' : 'danger'" close-transition>
+                                {{scope.row.operflag}}
+                            </el-tag>
+                        </template>-->
+                    </el-table-column>
+                    <el-table-column
                             prop="synctime"
                             label="同步时间"
                             width="200"
@@ -250,7 +261,8 @@
                     </el-form-item>
                     <el-form-item label="物理编号:" prop="devphyid">
                         <el-col :span="18">
-                            <el-input v-model="devUpform.devphyid" style="width: 187px;" maxlength="14">
+                            <el-input v-model="devUpform.devphyid"
+                                      placeholder="请输入12位物理编号" style="width: 187px;" maxlength="14">
 
                             </el-input>
                         </el-col>
@@ -536,6 +548,15 @@
                     return '未同步';
                 }
             },
+            operform: function (row, column, cellValue) {
+                if (row.operflag == 'A') {
+                    return '有效';
+                } else if(row.operflag == 'D'){
+                    return '注销';
+                }else {
+                    return row.operflag
+                }
+            },
             usetypeform: function (row, column, cellValue) {
                 var i = this.usetypeVals.indexOf(row.usetype);
                 return this.usetypeNames[i];
diff --git a/src/main/resources/templates/query/tdoorstream.html b/src/main/resources/templates/query/tdoorstream.html
index 58ff021..4929723 100644
--- a/src/main/resources/templates/query/tdoorstream.html
+++ b/src/main/resources/templates/query/tdoorstream.html
@@ -110,6 +110,9 @@
                           max-height="2000"
                           stripe border style="width: 100%">
                     <el-table-column
+                            prop="status" label="流水状态" width="125">
+                    </el-table-column>
+                    <el-table-column
                             prop="deviceid" label="设备编号"  width="130" sortable v-show="false">
                     </el-table-column>
                     <el-table-column
@@ -135,9 +138,6 @@
                             prop="dtldesc" label="描述" width="125">
                     </el-table-column>
                     <el-table-column
-                            prop="status" label="流水状态" width="125">
-                    </el-table-column>
-                    <el-table-column
                             prop="coldate" label="采集时间" width="210":formatter="dateFormat">
                     </el-table-column>
                 </el-table>
diff --git a/src/main/resources/templates/system/operator.html b/src/main/resources/templates/system/operator.html
index 7159d09..96bac81 100644
--- a/src/main/resources/templates/system/operator.html
+++ b/src/main/resources/templates/system/operator.html
@@ -79,6 +79,17 @@
                             width="140">
                     </el-table-column>
                     <el-table-column
+                            prop="status"
+                            sortable
+                            label="状态"
+                            width="90">
+                        <template scope="scope">
+                            <el-tag :type="scope.row.status === '有效' ? 'success' : 'danger'" close-transition>
+                                {{scope.row.status}}
+                            </el-tag>
+                        </template>
+                    </el-table-column>
+                    <el-table-column
                             prop="mobile"
                             label="联系电话"
                             width="180">
@@ -95,7 +106,7 @@
                         <template scope="scope">
                             <button type="button" class="btn btn-info btn-xs" title="编辑操作员" @click="editOperator(scope.row.operid)">编辑</button>
                             <button type="button" class="btn btn-success btn-xs" title="重置密码" @click="resetPwd(scope.row.operid)">重置</button>
-                            <button type="button" class="btn btn-danger btn-xs" title="删除操作员" @click="delOperator(scope.row.operid)">删除</button>
+                            <button type="button" class="btn btn-danger btn-xs" title="删除操作员" @click="delOperator(scope.row.operid)" v-if="scope.row.opertype!='S' ">删除</button>
                             <button type="button" class="btn btn-info btn-xs" title="分配楼栋"
                                     @click="allotBuilding(scope.row.operid,scope.row.opername)" v-if="scope.row.opertype=='L'">分配楼栋
                             </button>
@@ -330,7 +341,7 @@
                 ],
                 roleid: [
                     {required: true, message: '请选择角色', trigger: 'blur'}
-                ],
+                ]
 
             },
             operatortitile:'添加操作员(默认密码为123456)',
@@ -585,6 +596,10 @@
 
 
     function oper_saveData(_that,formdata,formName){
+        if (formdata.opertype=='H' && formdata.regionid==''){
+            layer.msg('区域管理员请选择管辖区域!', {icon: 2, time: 1000});
+            return;
+        }
         var url = null;
         if(oper_vue.operatortitile == "添加操作员(默认密码为123456)"){
             url = encodeURI("[[@{/operator/addOperator}]]");
diff --git a/src/main/resources/templates/system/region.html b/src/main/resources/templates/system/region.html
index 32212a3..bdcb65d 100644
--- a/src/main/resources/templates/system/region.html
+++ b/src/main/resources/templates/system/region.html
@@ -49,6 +49,11 @@
                             width="170">
                     </el-table-column>
                     <el-table-column
+                            prop="parentname"
+                            label="父区域"
+                            width="170">
+                    </el-table-column>
+                    <el-table-column
                             prop="level"
                             label="区域级别"
                             sortable
@@ -56,11 +61,6 @@
                             width="120">
                     </el-table-column>
                     <el-table-column
-                            prop="parentname"
-                            label="父区域"
-                            width="170">
-                    </el-table-column>
-                    <el-table-column
                             prop="address"
                             label="详细地址"
                             width="200">
@@ -93,15 +93,6 @@
 
             <el-dialog :title="regiontitile" :visible.sync="dialogFormVisible"  :modal-append-to-body='false' @close="closeDialog('regionDiaForm')">
                 <el-form ref="regionDiaForm" :model="regionDiaForm" :rules="rules" label-width="36%" >
-                    <el-form-item label="区域编号:" prop="regionid">
-                        <div class="el-col el-col-15">
-                            <div class="el-input" style="width: 187px;">
-                                <el-input v-model="regionDiaForm.regionid" :disabled="regionidDis">
-                                    <i class="el-icon-edit el-input__icon" slot="icon" ></i>
-                                </el-input>
-                            </div>
-                        </div>
-                    </el-form-item>
 
                     <el-form-item label="区域名称:" prop="regionname">
                         <div class="el-col el-col-18">
@@ -113,22 +104,6 @@
                         </div>
                     </el-form-item>
 
-                    <el-form-item label="区域级别:" prop="level">
-                        <el-col :span="18">
-                            <el-select v-model="regionDiaForm.level" style="width: 187px;"
-                                       filterable
-                                       @Change="levelChange"
-                                       placeholder="请选择">
-                                <el-option
-                                        v-for="level in levels"
-                                        :key="level.value"
-                                        :label="level.label"
-                                        :value="level.value">
-                                </el-option>
-                            </el-select>
-                        </el-col>
-                    </el-form-item>
-
                     <el-form-item label="父区域:" prop="parentid">
                         <el-col :span="18">
                             <el-select v-model="regionDiaForm.parentid"
@@ -193,23 +168,15 @@
             regionDiaForm:{
                 regionid:'',
                 regionname:'',
-                level:'',
                 parentid:'',
                 address:'',
                 remarks:''
             },
             rules:{
-                regionid:[
-                    {required:true,message:'请输入区域编号',trigger:'blur'},
-                    {min: 1, max: 32, message: '长度在 1 到 32 个字符', trigger: 'blur'}
-                ],
                 regionname:[
                     {required:true,message:'请输入区域名称',trigger:'blur'},
                     {min: 1, max: 20, message: '长度在 1 到 20 个字符', trigger: 'blur'}
                 ],
-                level: [
-                    {required: true, message: '请选择区域级别', trigger: 'blur'}
-                ],
                 parentid: [
                     {required: true, message: '请选择父区域', trigger: 'blur'}
                 ],
@@ -248,21 +215,20 @@
                 region_deletedata(regionid);
             },
             editRegion:function(regionid){
-                this.parentRegionDis=false;
+                this.parentRegionDis=true;
                 region_getFillData(this,regionid);
                 this.dialogFormVisible = true;
-                this.regionidDis = true;
                 this.regiontitile="修改区域"
             },
             resetForm: function (formName) {
                 this.$refs[formName].resetFields();
                 this.dialogFormVisible = false;
-                this.regionidDis = false;
+                this.parentRegionDis = false;
             },
             closeDialog: function (formName) {
                 this.$refs[formName].resetFields();
                 this.dialogFormVisible = false;
-                this.regionidDis = false;
+                this.parentRegionDis = false;
             },
             saveRegion:function (formName) {
                 var _that=this;
@@ -279,15 +245,6 @@
                     region_saveData(_that,_that.regionDiaForm,formName);
                 }
             },
-            levelChange: function (value) {
-                if (value == 0) {
-                    this.parentRegionDis = true;
-                } else  {
-                    this.parentRegionDis = false;
-                    this.parentRegions = [];
-                    region_getFregion(this,value);
-                }
-            },
             levelform: function (row, column, cellValue) {
                 return row.level+"级";
             }
@@ -383,7 +340,6 @@
                 if (ret.region != null) {
                     _self.regionDiaForm.regionid = ret.region.regionid;
                     _self.regionDiaForm.regionname = ret.region.regionname;
-                    _self.regionDiaForm.level = ret.region.level+"";
                     _self.regionDiaForm.parentid = ret.region.parentid;
                     _self.regionDiaForm.address = ret.region.address;
                     if (ret.region.level == 0) {
@@ -439,24 +395,4 @@
     }
 
 
-    function region_getFregion(_self,value){
-        $.ajax({
-            type: "get",
-            dataType: "json",
-            url: encodeURI("[[@{/system/getFregion?level=}]]" + value),
-            success: function (ret) {
-                var fList = [];
-                var parentRegion = ret.parentRegion;
-                for (var j=0;j<parentRegion.length;j++){
-                    fList.push({
-                        value:parentRegion[j]["regionid"],
-                        label:parentRegion[j]["regionname"]
-                    });
-                }
-
-                _self.parentRegions = fList;
-            }
-        })
-    }
-
 </script>
\ No newline at end of file
diff --git a/src/main/resources/templates/system/role/form.html b/src/main/resources/templates/system/role/form.html
index ab3466c..4515a0f 100755
--- a/src/main/resources/templates/system/role/form.html
+++ b/src/main/resources/templates/system/role/form.html
@@ -15,17 +15,6 @@
         </div>
     </div>
 
-    <div class="layui-form-item">
-        <label class="layui-form-label">角色等级</label>
-        <div class="layui-input-block">
-            <select name="grade" lay-verify="required|grade">
-                <option value="">请选择一个等级</option>
-                <option value="1">一级</option>
-                <option value="2">二级</option>
-                <option value="3">三级</option>
-            </select>
-        </div>
-    </div>
 
     <div class="layui-form-item model-form-footer">
         <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>
