diff --git a/build.gradle b/build.gradle
index 2fe4ee1..5df2cf7 100644
--- a/build.gradle
+++ b/build.gradle
@@ -73,6 +73,7 @@
     implementation 'io.github.microutils:kotlin-logging:1.6.26'
     implementation 'org.slf4j:slf4j-parent:1.7.26'
     implementation 'redis.clients:jedis:2.9.3'
+    implementation 'net.sourceforge.jexcelapi:jxl:2.6.12'
     implementation group: 'commons-lang', name:'commons-lang',version: '2.5'
     implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.5'
     implementation group: 'com.sun.jersey', name: 'jersey-client', version: '1.19'
diff --git a/src/main/java/com/supwisdom/dlpay/doorlist/bean/TCustomerNoExistInfo.java b/src/main/java/com/supwisdom/dlpay/doorlist/bean/TCustomerNoExistInfo.java
new file mode 100644
index 0000000..4bdb061
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/doorlist/bean/TCustomerNoExistInfo.java
@@ -0,0 +1,31 @@
+package com.supwisdom.dlpay.doorlist.bean;
+
+public class TCustomerNoExistInfo {
+    private String cardno;
+    private String bankcardno;
+    private String custname;
+
+    public String getCardno() {
+        return cardno;
+    }
+
+    public void setCardno(String cardno) {
+        this.cardno = cardno;
+    }
+
+    public String getBankcardno() {
+        return bankcardno;
+    }
+
+    public void setBankcardno(String bankcardno) {
+        this.bankcardno = bankcardno;
+    }
+
+    public String getCustname() {
+        return custname;
+    }
+
+    public void setCustname(String custname) {
+        this.custname = custname;
+    }
+}
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 a0ae378..28af857 100644
--- a/src/main/java/com/supwisdom/dlpay/doorlist/controller/DoorlistMgrController.java
+++ b/src/main/java/com/supwisdom/dlpay/doorlist/controller/DoorlistMgrController.java
@@ -28,6 +28,7 @@
 import com.supwisdom.dlpay.system.page.Pagination;
 import com.supwisdom.dlpay.system.service.SystemService;
 import com.supwisdom.dlpay.util.RedisUtil;
+import com.supwisdom.dlpay.util.UploadExcelCardno;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -464,6 +465,165 @@
     }
 
     /**
+     * 下发名单导入查询模板下载
+     * @param request
+     * @param response
+     * @return
+     */
+    @ResponseBody
+    @RequestMapping(value = "/exportExcelTemplet")
+    public Map exportExcelTemplet(HttpServletRequest request, HttpServletResponse response) {
+      Map map = new HashMap();
+        try {
+            List<ExcelExportEntity> entity = new ArrayList<ExcelExportEntity>();
+            /**
+             * 1. 设置列信息：name：列标题   key：	列属性
+             */
+            entity.add(new ExcelExportEntity("卡号(必须项)", "cardno"));
+            entity.add(new ExcelExportEntity("银行卡号(可选项)","bankcardno"));
+            entity.add(new ExcelExportEntity("姓名", "custname"));
+            List<Map> personList = new ArrayList<Map>();
+
+            /**
+             * 3.设置表格属性: title:标题  sheetName:工作簿名 type:表格类型
+             */
+            ExportParams params = new ExportParams(null, "sheet1", ExcelType.HSSF);
+//		params.setFreezeCol(2);
+            map.put(MapExcelConstants.MAP_LIST, personList);
+            map.put(MapExcelConstants.ENTITY_LIST, entity);
+            map.put(MapExcelConstants.PARAMS, params);
+            map.put(MapExcelConstants.FILE_NAME, "查询模板");//文件名
+            map.put("result", "导出excel文件完成");
+            PoiBaseView.render(map, request, response, MapExcelConstants.EASYPOI_MAP_EXCEL_VIEW);
+        } catch (Exception e) {
+            e.printStackTrace();
+            map.put("result", "导出excel文件失败");
+        }
+        return map;
+    }
+
+    /**
+     * 导入查询人员名单
+     * @param file
+     * @param request
+     * @return
+     */
+    @ResponseBody
+    @RequestMapping(value = "/addexcel", method = {RequestMethod.POST})
+    public Map addExcel(@RequestParam(value = "file", required = false, defaultValue = "") MultipartFile file,
+                           HttpServletRequest request) {
+        // 保存
+        Map map = new HashMap();
+        try {
+
+            String sheetName = request.getParameter("sheetname");
+            String path = request.getSession().getServletContext()
+                    .getRealPath("upload");
+
+            String fileName = file.getOriginalFilename();
+            //impTest(path+"\\"+fileName);
+            File targetFile = new File(path, fileName);
+            if (!targetFile.exists()) {
+                targetFile.mkdirs();
+            }
+            file.transferTo(targetFile);
+            map = importExcel(map, sheetName, targetFile);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return map;
+    }
+
+
+    private Map importExcel(Map map, String sheetName, File targetFile) {
+        try {
+            @SuppressWarnings("unchecked")
+            List<List<String>> excelList = UploadExcelCardno.readExcel(targetFile, sheetName);//数据列
+            boolean sheetindex = true;
+            if (excelList == null) {
+                sheetindex = false;
+                map.put("sheetindex", sheetindex);
+                return map;
+            }
+            int sumNum = excelList.size();
+            int cardno = -1;
+            int bankcardno =-1;
+            int custnameNo = -1;
+            List columlst = excelList.get(0);
+            int i = 0;
+            boolean contentidex = true;
+            while (contentidex) {
+                columlst = excelList.get(i++);
+                int len = columlst.size();
+                for (int j = 0; j < len; j++) {
+                    if (columlst.get(j).toString().equals("卡号(必须项)")) {
+                        cardno = j;
+                        contentidex = false;
+                    }
+                    if (columlst.get(j).toString().equals("银行卡号(可选项)")){
+                        bankcardno = j;
+                        contentidex = false;
+                    }
+                    if (columlst.get(j).toString().equals("姓名")) {
+                        custnameNo = j;
+                        contentidex = false;
+                    }
+                }
+
+            }
+
+            boolean cardIndex = false;
+            int queryNum = 0;
+            int queryNoNum = 0;
+            List<TCustomerInfo> tCustomerInfos = new ArrayList<TCustomerInfo>();
+            List<TCustomerNoExistInfo> tCustomerNoExistInfos = new ArrayList<TCustomerNoExistInfo>();
+
+            for (; i < sumNum; i++) {
+                columlst = excelList.get(i);
+
+                String cardStr = columlst.get(cardno).toString();
+                String bankcardStr = columlst.get(bankcardno).toString();
+                cardIndex = false;
+                if (cardStr.length() > 0) {
+                    TCustomerInfo tCustomerInfo = webInterfaceService.getTCustomerByExcel(cardStr);
+                    if (tCustomerInfo == null) {
+                        cardIndex = true;
+                    } else {
+                        tCustomerInfos.add(tCustomerInfo);
+                        queryNum++;
+                    }
+                } else {
+                    cardIndex = true;
+                }
+                if (cardIndex) {
+                    queryNoNum++;
+                    TCustomerNoExistInfo tCustomerNoExistInfo = new TCustomerNoExistInfo();
+                    tCustomerNoExistInfo.setCardno(cardStr);
+                    if (bankcardno > 0){
+                        tCustomerNoExistInfo.setBankcardno(columlst.get(bankcardno).toString());
+                    }
+                    if (custnameNo > 0) {
+                        tCustomerNoExistInfo.setCustname(columlst.get(custnameNo).toString());
+                    }
+
+                    tCustomerNoExistInfos.add(tCustomerNoExistInfo);
+                }
+            }
+
+            map.put("queryNum", String.valueOf(queryNum));
+            map.put("queryNoNum", queryNoNum);
+            map.put("tCustomerInfos", tCustomerInfos);
+            map.put("tCustomerNoExistInfos", tCustomerNoExistInfos);
+            map.put("sheetindex", sheetindex);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return map;
+
+    }
+
+
+    /**
      * 获取设备查询区域和楼栋填充列表
      * @param operUser
      * @return
diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/PermissionDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/PermissionDao.java
index af782a8..e5059e9 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/PermissionDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/PermissionDao.java
@@ -3,9 +3,13 @@
 import com.supwisdom.dlpay.framework.domain.TPermission;
 import org.springframework.data.jpa.repository.JpaRepository;
 
+import java.util.List;
+
 public interface PermissionDao extends JpaRepository<TPermission, String> {
 
     TPermission findByRoleIdAndResid(String roleId, Integer resid);
 
     void deleteByRoleId(String roleId);
+
+    List<TPermission> findByRoleId(String roleId);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/mainservice/dao/CustomerDao.java b/src/main/java/com/supwisdom/dlpay/mainservice/dao/CustomerDao.java
index 45bcc9b..eab430d 100644
--- a/src/main/java/com/supwisdom/dlpay/mainservice/dao/CustomerDao.java
+++ b/src/main/java/com/supwisdom/dlpay/mainservice/dao/CustomerDao.java
@@ -13,4 +13,6 @@
 
     public List<TCustomerInfo> getAllTCustomerList(String perName, String cardno, String bankcardno);
 
+    public TCustomerInfo getTCustomerByExcel(String cardno);
+
 }
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 c505a89..71230c1 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
@@ -75,4 +75,18 @@
         List<TCustomerInfo> list = query.getResultList();
         return list;
     }
+
+    @Transactional
+    @Override
+    public TCustomerInfo getTCustomerByExcel(String cardno) {
+        String sql = "select a.custid,a.custname,b.cardno,b.bankcardno,b.cardphyid,b.expiredate from t_customer a,t_card b  " +
+                " where a.custid = b.custid and b.status = '1' and cardno=?1 ";
+        Query query = entityManager.createNativeQuery(sql, TCustomerInfo.class);
+        query.setParameter(1, cardno);
+        List<TCustomerInfo> list = query.getResultList();
+        if (list!=null && list.size()>0){
+            return list.get(0);
+        }
+        return null;
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/mainservice/dao/impl/DoordtlDaoImpl.java b/src/main/java/com/supwisdom/dlpay/mainservice/dao/impl/DoordtlDaoImpl.java
index 17111ec..5978855 100644
--- a/src/main/java/com/supwisdom/dlpay/mainservice/dao/impl/DoordtlDaoImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/mainservice/dao/impl/DoordtlDaoImpl.java
@@ -56,7 +56,7 @@
                         + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr inner join tmp t on t.regionid=tbr.parentid  "
                         + ") select regionid from tmp  ) ";
             }
-            queryString += " order by a.transdate DESC";
+            queryString += " order by a.transdate DESC,doorseqno";
             Query query = entityManager.createNativeQuery(queryString, TDoordtlInfo.class);
             if (!startTranDate.equals("")) {
                 query.setParameter("startTranDate", startTranDate);
diff --git a/src/main/java/com/supwisdom/dlpay/mainservice/service/WebInterfaceService.java b/src/main/java/com/supwisdom/dlpay/mainservice/service/WebInterfaceService.java
index 0e75b4c..003a167 100644
--- a/src/main/java/com/supwisdom/dlpay/mainservice/service/WebInterfaceService.java
+++ b/src/main/java/com/supwisdom/dlpay/mainservice/service/WebInterfaceService.java
@@ -116,4 +116,8 @@
     //保存卡信息
     @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public boolean saveCard(TCard bean);
+
+    //根据excel卡号信息获取客户信息
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
+    public TCustomerInfo getTCustomerByExcel(String cardno);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/mainservice/service/impl/WebInterfaceServiceImpl.java b/src/main/java/com/supwisdom/dlpay/mainservice/service/impl/WebInterfaceServiceImpl.java
index cadb1d9..349a19f 100644
--- a/src/main/java/com/supwisdom/dlpay/mainservice/service/impl/WebInterfaceServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/mainservice/service/impl/WebInterfaceServiceImpl.java
@@ -123,4 +123,9 @@
     public boolean saveCard(TCard bean) {
         return cardDao.saveCard(bean);
     }
+
+    @Override
+    public TCustomerInfo getTCustomerByExcel(String cardno) {
+        return customerDao.getTCustomerByExcel(cardno);
+    }
 }
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 63f2aee..653bbd8 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/controller/NcMgrController.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/controller/NcMgrController.java
@@ -192,7 +192,7 @@
             if (operUser.getOpertype().equals("L")){
                 regionBuildings = systemService.getBuildingOperBuildingByRegionId(regionid, operUser.getOperid());
             }else if(operUser.getOpertype().equals("H") && !StringUtil.isEmpty(operUser.getRegionid())){
-                regionBuildings = systemService.getBuildingByRegionId(operUser.getRegionid());
+                regionBuildings = systemService.getOperatorBuildingByRegionId(regionid,operUser.getRegionid());
             } else {
                 regionBuildings = systemService.getBuildingByRegionId(regionid);
             }
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 b7b8a4c..69195bc 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
@@ -48,7 +48,7 @@
         if(!devtype.equals("")){
             sql+=" and  devtype = :devtype ";
         }
-        sql+=" order by devtype";
+        sql+=" order by devtype,deviceid";
         Query query = entityManager.createNativeQuery(sql,TNcDevice.class);
 
         if(!devname.equals("")){
@@ -148,7 +148,7 @@
         if(!devtype.equals("")){
             sql+=" and  devtype = :devtype ";
         }
-        sql+=" order by devtype";
+        sql+=" order by devtype,deviceid";
         Query query = entityManager.createNativeQuery(sql,TNcDevice.class);
 
         if(!devname.equals("")){
@@ -242,7 +242,7 @@
         if(!devtype.equals("")){
             sql+=" and  bean.devtype = :devtype ";
         }
-        sql+=" order by devtype";
+        sql+=" order by devtype,deviceid";
         Query query = entityManager.createNativeQuery(sql,TNcDevice.class);
         query.setParameter("operid", operid);
         if(!devname.equals("")){
diff --git a/src/main/java/com/supwisdom/dlpay/ncmgr/domain/TBuilding.java b/src/main/java/com/supwisdom/dlpay/ncmgr/domain/TBuilding.java
index c9391ae..b17ccc3 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/domain/TBuilding.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/domain/TBuilding.java
@@ -6,8 +6,7 @@
  * TBuilding entity. @author MyEclipse Persistence Tools
  */
 @Entity
-@Table(name = "T_BUILDING",
-	indexes = {@Index(name = "idx_building_id",columnList = "buildingid",unique = true)})
+@Table(name = "T_BUILDING")
 public class TBuilding implements java.io.Serializable {
 
 	// Fields
diff --git a/src/main/java/com/supwisdom/dlpay/ncmgr/domain/TNcDevice.java b/src/main/java/com/supwisdom/dlpay/ncmgr/domain/TNcDevice.java
index 8ba75db..e0bd051 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/domain/TNcDevice.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/domain/TNcDevice.java
@@ -9,8 +9,7 @@
  */
 @Entity
 @Table(name = "T_NC_DEVICE",
-		indexes = {@Index(name = "idx_nc_dev_phyid", columnList = "devphyid"),
-				@Index(name = "idx_nc_dev_devid",columnList = "deviceid",unique = true)}
+		indexes = {@Index(name = "idx_nc_dev_phyid", columnList = "devphyid")}
 					)
 public class TNcDevice implements java.io.Serializable {
 
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 605449e..8116b13 100644
--- a/src/main/java/com/supwisdom/dlpay/system/controller/SystemController.java
+++ b/src/main/java/com/supwisdom/dlpay/system/controller/SystemController.java
@@ -284,7 +284,7 @@
                                    @AuthenticationPrincipal TOperator operUser){
         Map map = new HashMap();
         try {
-            TRegion region = systemService.getRegionById(regionid);
+            TRegion region = systemService.getRegionAllFlagById(regionid);
             map.put("region",region);
             List<TDictionaryId> dicts = systemService.findTDictionaryByType(6);//区域级别
             map.put("dicts", dicts);
@@ -348,7 +348,7 @@
             region.setRegionname(postData.getRegionname());
             region.setRemarks(postData.getRemarks());
             region.setParentname(tRegion.getRegionname());
-            region.setFlag(1);
+            region.setFlag("1");
 
             systemService.saveRegion(region);
             map.put("errStr", "");
@@ -378,7 +378,7 @@
                 map.put("errStr", "区域名称已经存在，请修改！");
                 return map;
             }
-            TRegion region = systemService.getRegionById(postData.getRegionid());
+            TRegion region = systemService.getRegionAllFlagById(postData.getRegionid());
             TRegion tRegion = systemService.getRegionById(postData.getParentid());
             region.setAddress(postData.getAddress());
             region.setLevel(tRegion.getLevel()+1);
@@ -386,9 +386,13 @@
             region.setRegionname(postData.getRegionname());
             region.setRemarks(postData.getRemarks());
             region.setParentname(tRegion.getRegionname());
-            region.setFlag(1);
+            region.setFlag("1");
 
             systemService.updateRegion(region);
+
+            //需修改区域表总此区域子区域的父区域名
+            systemService.updateParentnameById(postData.getRegionid(), postData.getRegionname());
+
             map.put("errStr", "");
         }catch (Exception e){
             e.printStackTrace();
diff --git a/src/main/java/com/supwisdom/dlpay/system/dao/BuildingDao.java b/src/main/java/com/supwisdom/dlpay/system/dao/BuildingDao.java
index 404b11e..7519bd6 100644
--- a/src/main/java/com/supwisdom/dlpay/system/dao/BuildingDao.java
+++ b/src/main/java/com/supwisdom/dlpay/system/dao/BuildingDao.java
@@ -44,5 +44,7 @@
 
     public List<TBuilding> getBuildingOperBuildings(String operid);
 
+    public List<TBuilding> getOperatorBuildingByRegionId(String regionid,String operRegionid);
+
     public List<TBuilding> getBuildingOperBuildingByRegionId(String regionid,String operid);
 }
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 780d39f..27a50a4 100644
--- a/src/main/java/com/supwisdom/dlpay/system/dao/RegionDao.java
+++ b/src/main/java/com/supwisdom/dlpay/system/dao/RegionDao.java
@@ -35,4 +35,6 @@
 
     public boolean updateRegion(TRegion bean);
 
+    public boolean updateParentnameById(String regionid,String parentname);
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/system/dao/impl/BuildingDaoImpl.java b/src/main/java/com/supwisdom/dlpay/system/dao/impl/BuildingDaoImpl.java
index e8ab4eb..24ac1ec 100644
--- a/src/main/java/com/supwisdom/dlpay/system/dao/impl/BuildingDaoImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/dao/impl/BuildingDaoImpl.java
@@ -41,8 +41,8 @@
     @Transactional
     @Override
     public Pagination getSystemBuildingList(String regionid, String buildingname, int pageNo, int pageSize) {
-        String sql = "select bean.buildingid,bean.buildingname,bean.synctime,bean.updtime,bean.flag,bean.buildingdesc,bean.regionid " +
-                " from T_Building bean where 1>0 and bean.flag='A' ";
+        String sql = "select bean.buildingid,bean.buildingname,bean.synctime,bean.updtime,case when bean.flag='A' then '有效' else '注销' end flag,bean.buildingdesc,bean.regionid " +
+                " from T_Building bean where 1>0 ";
         if (!StringUtil.isEmpty(regionid)){
             sql += "and bean.regionid in  " +
                     "( with recursive tmp as  ( select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr " +
@@ -79,7 +79,7 @@
 
 
     private int getSystemBuildingListCount(String regionid,String buildingname){
-        String sql = "select count(*) from T_Building bean where 1>0 and bean.flag='A' ";
+        String sql = "select count(*) from T_Building bean where 1>0 ";
         if (!StringUtil.isEmpty(regionid)){
             sql += "and bean.regionid in  " +
                     "(with recursive tmp as  (select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr " +
@@ -108,8 +108,8 @@
     @Transactional
     @Override
     public Pagination getOperatorBuildingList(String operRegionid, String regionid, String buildingname, int pageNo, int pageSize) {
-        String sql = "select bean.buildingid,bean.buildingname,bean.synctime,bean.updtime,bean.flag,bean.buildingdesc,bean.regionid " +
-                " from T_Building bean where 1>0 and bean.flag='A' ";
+        String sql = "select bean.buildingid,bean.buildingname,bean.synctime,bean.updtime,case when bean.flag='A' then '有效' else '注销' end flag,bean.buildingdesc,bean.regionid " +
+                " from T_Building bean where 1>0 ";
 
             sql += "and bean.regionid in  " +
                     "( with recursive tmp as  ( select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr " +
@@ -146,7 +146,7 @@
     }
 
     private int getOperatorBuildingListCount(String operRegionid, String regionid, String buildingname){
-        String sql = "select count(*) from T_Building bean where 1>0 and bean.flag='A' ";
+        String sql = "select count(*) from T_Building bean where 1>0 ";
 
             sql += "and bean.regionid in  " +
                     "(with recursive tmp as  (select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr " +
@@ -177,9 +177,9 @@
     @Override
     public Pagination getBuildingOperBuildingList(String regionid, String buildingname, String operid, int pageNo, int pageSize) {
         // 楼栋管理员regionid为空
-        String sql = "select bean.buildingid,bean.buildingname,bean.synctime,bean.updtime,bean.flag,bean.buildingdesc,bean.regionid "+
+        String sql = "select bean.buildingid,bean.buildingname,bean.synctime,bean.updtime,case when bean.flag='A' then '有效' else '注销' end flag,bean.buildingdesc,bean.regionid "+
                 " from T_Building bean left join T_operbuilding a on a.buildingid=bean.buildingid " +
-                " where 1>0 and bean.flag='A' and a.operid= :operid";
+                " where 1>0 and a.operid= :operid";
         if (!StringUtil.isEmpty(buildingname)){
             sql += " and bean.buildingname like :buildingname";
         }
@@ -203,7 +203,7 @@
 
     private int getBuildingOperBuildingListCount(String operid,String buildingname){
         String sql = "select count(*) from T_BUILDING bean left join T_operbuilding a on a.buildingid=bean.buildingid "+
-                "where 1>0 and bean.flag='A' and a.operid= :operid";
+                "where 1>0 and a.operid= :operid";
         if (!StringUtil.isEmpty(buildingname)){
             sql += " and bean.buildingname like :buildingname";
         }
@@ -405,6 +405,29 @@
 
     @Transactional
     @Override
+    public List<TBuilding> getOperatorBuildingByRegionId(String regionid, String operRegionid) {
+        String sql = "select bean.buildingid,bean.buildingname,bean.synctime,bean.updtime,bean.flag,bean.buildingdesc,bean.regionid" +
+                " from T_Building bean where bean.flag='A' "+
+                "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, TBuilding.class);
+        if (!StringUtil.isEmpty(regionid)) {
+            query.setParameter("regionid", regionid);
+        }else {
+            query.setParameter( "regionid", operRegionid);
+        }
+        List<TBuilding> list = query.getResultList();
+        if (list!=null && list.size()>0){
+            return list;
+        }
+        return null;
+    }
+
+    @Transactional
+    @Override
     public List<TBuilding> getBuildingOperBuildingByRegionId(String regionid,String operid) {
         String sql = "select bean.buildingid,bean.buildingname,bean.synctime,bean.updtime,bean.flag,bean.buildingdesc,bean.regionid" +
                 " from T_Building bean where bean.flag='A' "+
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 991111f..5b394ba 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,7 +25,9 @@
     @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,case when a.status='normal' then '有效' else '注销' end status,a.regionid,a.mobile,a.foperid,c.roleid,c.rolename,d.regionname " +
+        String sql = "select a.operid,a.opername,a.opercode,case when a.opertype='P' then '超级管理员' when a.opertype='S' then '系统管理员' " +
+                " when a.opertype='H' then '区域管理员' when a.opertype='L' then '楼栋管理员' else a.opertype end 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 " +
@@ -97,7 +99,8 @@
     @Transactional
     @Override
     public Pagination getOperOperatorList(String operatorOperid, String operid, String realname, int pageNo, int pageSize) {
-        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 " +
+        String sql = "select a.operid,a.opername,a.opercode,case when a.opertype='P' then '超级管理员' when a.opertype='S' then '系统管理员' " +
+                " when a.opertype='H' then '区域管理员' when a.opertype='L' then '楼栋管理员' else a.opertype end 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 " +
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 231b934..2ce8280 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
@@ -22,14 +22,16 @@
     @Transactional
     @Override
     public Pagination getSystemRegionList(String regionname, int pageNo, int pageSize) {
-        String sql = "select bean from TRegion bean where 1>0 and bean.flag=1 ";
+        String sql = "select bean.regionid,bean.address,bean.level,bean.parentid,bean.regionname,bean.remarks,bean.parentname," +
+                " case when bean.flag='1' then '有效' else '注销' end flag " +
+                " from TB_Region bean where 1>0 ";
         if (!StringUtil.isEmpty(regionname)){
             sql += " and bean.regionname like :regionname ";
         }
 
-        sql += " order by bean.level";
+        sql += " order by bean.level,bean.regionid";
 
-        TypedQuery<TRegion> query = entityManager.createQuery(sql, TRegion.class);
+        Query query = entityManager.createNativeQuery(sql, TRegion.class);
         if(!StringUtil.isEmpty(regionname)){
             query.setParameter("regionname", "%"+regionname+"%" );
         }
@@ -47,7 +49,7 @@
     }
 
     private int getSystemRegionListCount(String regionname){
-        String sql = "select count(*) from TB_Region where 1>0 and flag=1 ";
+        String sql = "select count(*) from TB_Region where 1>0 ";
         if (!StringUtil.isEmpty(regionname)){
             sql += " and regionname like :regionname ";
         }
@@ -66,8 +68,9 @@
     @Transactional
     @Override
     public Pagination getOperatorRegionList(String regionname, String regionid, int pageNo, int pageSize) {
-        String sql = "select bean.regionid,bean.address,bean.level,bean.parentid,bean.regionname,bean.remarks,bean.parentname,bean.flag" +
-                " from Tb_Region bean where 1>0 and bean.flag=1 ";
+        String sql = "select bean.regionid,bean.address,bean.level,bean.parentid,bean.regionname,bean.remarks,bean.parentname," +
+                "case when bean.flag='1' then '有效' else '注销' end flag " +
+                " from Tb_Region bean where 1>0  ";
         sql += "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  " +
@@ -76,7 +79,7 @@
         if (!StringUtil.isEmpty(regionname)){
             sql += " and tmp.regionname like :regionname ";
         }
-        sql += ") order by bean.level";
+        sql += ") order by bean.level,bean.regionid";
 
         Query query = entityManager.createNativeQuery(sql, TRegion.class);
         query.setParameter("regionid" , regionid);
@@ -99,7 +102,7 @@
 
 
     private int getOperatorRegionListCount(String regionname,String regionid){
-        String sql = "select count(*) from Tb_Region bean where 1>0 and bean.flag=1 ";
+        String sql = "select count(*) from Tb_Region bean where 1>0 ";
         sql += "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  " +
@@ -127,7 +130,7 @@
     public boolean updateRegionFlag(String regionid) {
         boolean flag = false;
         try {
-            String sql = "update tb_region set flag = 0 where regionid = ?1 ";
+            String sql = "update tb_region set flag = '0' where regionid = ?1 ";
             Query query = entityManager.createNativeQuery(sql);
             query.setParameter(1, regionid);
             query.executeUpdate();
@@ -141,7 +144,7 @@
     @Transactional
     @Override
     public TRegion getRegionById(String regionid) {
-        String sql = "select bean from TRegion bean where bean.regionid = :regionid and bean.flag=1 ";
+        String sql = "select bean from TRegion bean where bean.regionid = :regionid and bean.flag='1' ";
         TypedQuery<TRegion> query = entityManager.createQuery(sql, TRegion.class);
         query.setParameter("regionid", regionid );
         List<TRegion> list = query.getResultList();
@@ -168,11 +171,11 @@
     @Override
     public List<TRegion> getRegionListById(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 "+
+                "from TB_REGION bean where flag='1' "+
                 "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  )";
+                " ) select regionid from tmp  ) order by bean.level";
         Query query = entityManager.createNativeQuery(sql, TRegion.class);
         query.setParameter("regionid", regionid);
         List list = query.getResultList();
@@ -184,7 +187,7 @@
     @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 "+
+                "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  " +
@@ -199,7 +202,7 @@
     @Transactional
     @Override
     public List<TRegion> getRegionListByLevel(int level) {
-        String sql = "select bean from TRegion bean where bean.flag=1 and bean.level=:level";
+        String sql = "select bean from TRegion bean where bean.flag='1' and bean.level=:level";
         TypedQuery<TRegion> query = entityManager.createQuery(sql, TRegion.class);
         query.setParameter("level" , level-1);
         List<TRegion> list = query.getResultList();
@@ -213,7 +216,7 @@
     @Override
     public List<TRegion> getOperRegionListByLevel(int level, 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.level = :level "+
+                "from TB_REGION bean where flag='1' and bean.level = :level "+
                 " 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  " +
@@ -231,7 +234,7 @@
     @Transactional
     @Override
     public List<TRegion> getAllRegions() {
-        String sql = "select bean from TRegion bean where bean.flag = 1";
+        String sql = "select bean from TRegion bean where bean.flag = '1' order by bean.level";
         TypedQuery<TRegion> query = entityManager.createQuery(sql, TRegion.class);
         List<TRegion> list = query.getResultList();
         if (list!=null && list.size()>0){
@@ -293,6 +296,22 @@
         return flag;
     }
 
+    @Transactional
+    @Override
+    public boolean updateParentnameById(String regionid, String parentname) {
+        boolean flag = false;
+        try{
+            String sql = "update tb_region a set parentname=:parentname where parentid=:regionid ";
+            Query query = entityManager.createNativeQuery(sql);
+            query.setParameter("regionid", regionid);
+            query.setParameter("parentname", parentname);
+            query.executeUpdate();
+            flag = true;
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return flag;
+    }
 
 
 }
diff --git a/src/main/java/com/supwisdom/dlpay/system/domain/TRegion.java b/src/main/java/com/supwisdom/dlpay/system/domain/TRegion.java
index 449e79e..449fce3 100644
--- a/src/main/java/com/supwisdom/dlpay/system/domain/TRegion.java
+++ b/src/main/java/com/supwisdom/dlpay/system/domain/TRegion.java
@@ -3,8 +3,7 @@
 import javax.persistence.*;
 
 @Entity
-@Table(name = "TB_REGION",
-    indexes = {@Index(name = "idx_region_id",columnList = "regionid",unique = true)})
+@Table(name = "TB_REGION")
 public class TRegion {
     private String regionid;
     private String address;
@@ -13,7 +12,7 @@
     private String regionname;
     private String remarks;
     private String parentname;
-    private Integer flag;
+    private String flag;
 
     @Id
     @Column(name = "REGIONID", unique = true, nullable = false, scale = 0)
@@ -79,16 +78,16 @@
         this.parentname = parentname;
     }
 
-    @Column(name = "FLAG")
-    public Integer getFlag() {
+    @Column(name = "FLAG",length = 1)
+    public String getFlag() {
         return flag;
     }
 
-    public void setFlag(Integer flag) {
+    public void setFlag(String flag) {
         this.flag = flag;
     }
 
-    public TRegion(String regionid, String address, Integer level, String parentid, String regionname, String remarks, String parentname, Integer flag) {
+    public TRegion(String regionid, String address, Integer level, String parentid, String regionname, String remarks, String parentname, String flag) {
         this.regionid = regionid;
         this.address = address;
         this.level = level;
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 d486fbd..84949a5 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/SystemService.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/SystemService.java
@@ -54,6 +54,10 @@
     @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<TBuilding> getBuildingByRegionId(String regionid);
 
+    //根据区域id查询区域管理员权限下楼栋
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
+    public List<TBuilding> getOperatorBuildingByRegionId(String regionid,String operRegionid);
+
     //根据区域id查询楼栋管理员权限下楼栋
     @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<TBuilding> getBuildingOperBuildingByRegionId(String regionid,String operid);
@@ -106,6 +110,10 @@
     @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public boolean updateRegion(TRegion bean);
 
+    //根据区域id修改其子区域的父区域名
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
+    public boolean updateParentnameById(String regionid,String parentname);
+
     //获取区域树形数据
     @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<RegionZTreeNodes> getAllRegionTreeList();
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 a02ee7c..ace0e19 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
@@ -133,30 +133,62 @@
         return permissionDao.findByRoleIdAndResid(roleFuncId, resid);
     }
 
+
+    private TPermission findOrNewPermission(List<TPermission> exists, String roleId, Integer resId) {
+        for (TPermission item : exists) {
+            if (resId.equals(item.getResid())) {
+                return item;
+            }
+        }
+
+        TPermission perm = new TPermission();
+        perm.setRoleId(roleId);
+        perm.setResid(resId);
+        return perm;
+    }
+
+    private TRoleFunction findOrNewRoleFunction(List<TRoleFunction> exists, String roleId, Integer funcId) {
+        for (TRoleFunction item : exists) {
+            if (funcId.equals(item.getFunctionId())) {
+                return item;
+            }
+        }
+        TRoleFunction func = new TRoleFunction();
+        func.setFunctionId(funcId);
+        func.setRoleId(roleId);
+        return func;
+    }
+
     @Override
     public JsonResult saveRoleFuncId(String roleId, String funcs) {
         Optional<TRole> ret = roleDao.findById(roleId);
-        if (ret == null || !ret.isPresent()) {
+        if (!ret.isPresent()) {
             return JsonResult.error("角色不存在");
         }
-        roleFunctionDao.deleteByRoleId(roleId);
-        permissionDao.deleteByRoleId(roleId);
+        List<TRoleFunction> functions = roleFunctionDao.findByRoleId(roleId);
+        List<TPermission> permissions = permissionDao.findByRoleId(roleId);
+        ArrayList<TRoleFunction> retainFuncs = new ArrayList<>();
+        ArrayList<TPermission> retainPerms = new ArrayList<>();
         String[] datas = funcs.split(",");
         for (String func : datas) {
             if (func.contains("_res")) {
                 String id = func.replace("_res", "");
-                TPermission permission = new TPermission();
-                permission.setResid(Integer.valueOf(id));
-                permission.setRoleId(roleId);
-                permissionDao.save(permission);
+                retainPerms.add(findOrNewPermission(permissions, roleId, Integer.parseInt(id)));
             } else {
                 if ("-1".equals(func)) continue; //全选排除
-                TRoleFunction roleFunction = new TRoleFunction();
-                roleFunction.setFunctionId(Integer.valueOf(func));
-                roleFunction.setRoleId(roleId);
-                roleFunctionDao.save(roleFunction);
+                retainFuncs.add(findOrNewRoleFunction(functions, roleId, Integer.parseInt(func)));
             }
         }
+        // functions
+        functions.removeAll(retainFuncs);
+        if (functions.size() > 0)
+            roleFunctionDao.deleteAll(functions);
+        roleFunctionDao.saveAll(retainFuncs);
+        // permissions
+        permissions.removeAll(retainPerms);
+        if (permissions.size() > 0)
+            permissionDao.deleteAll(permissions);
+        permissionDao.saveAll(retainPerms);
         return JsonResult.ok("成功");
     }
 
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 e6f818e..f0a8aa1 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
@@ -93,6 +93,11 @@
     }
 
     @Override
+    public List<TBuilding> getOperatorBuildingByRegionId(String regionid, String operRegionid) {
+        return buildingDao.getOperatorBuildingByRegionId(regionid,operRegionid);
+    }
+
+    @Override
     public List<TBuilding> getBuildingOperBuildingByRegionId(String regionid,String operid) {
         return buildingDao.getBuildingOperBuildingByRegionId(regionid, operid);
     }
@@ -158,6 +163,11 @@
     }
 
     @Override
+    public boolean updateParentnameById(String regionid, String parentname) {
+        return regionDao.updateParentnameById(regionid, parentname);
+    }
+
+    @Override
     public List<RegionZTreeNodes> getAllRegionTreeList() {
         List<RegionZTreeNodes> regionZTreeNodesList = new ArrayList<>();
         List<TRegion> regions = regionDao.getAllRegions();
diff --git a/src/main/java/com/supwisdom/dlpay/util/UploadExcelCardno.java b/src/main/java/com/supwisdom/dlpay/util/UploadExcelCardno.java
new file mode 100644
index 0000000..f59ce0e
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/util/UploadExcelCardno.java
@@ -0,0 +1,88 @@
+package com.supwisdom.dlpay.util;
+
+import jxl.Cell;
+import jxl.Sheet;
+import jxl.Workbook;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+public class UploadExcelCardno {
+
+	public static List readExcel(File file,String sheetName) throws Exception{
+		Workbook rwb = null;
+		InputStream  is = null;
+		List<List<String>> biglist = new ArrayList<List<String>>();
+//		String cardno = "";
+		List<String> cardno = new ArrayList<String>();
+		List<String> deviceid = new ArrayList<>();
+		try {
+			// 构建Workbook对象, 只读Workbook对象
+			// 直接从本地文件创建Workbook
+			// 从输入流创建
+			is = new FileInputStream(file);
+			rwb = Workbook.getWorkbook(is);
+			// Sheet(术语：工作表)就是Excel表格左下角的Sheet1,Sheet2,Sheet3但在程序中Sheet的下标是从0开始
+			// 获取第一张Sheet表
+//			Sheet rs = rwb.getSheet(0);
+			Sheet rs = rwb.getSheet(sheetName);
+			System.out.println(rs);
+			if(rs==null){
+				return null;
+			}
+			// 获取Sheet表中所包含的总列数
+			int rsColumns = rs.getColumns();
+			// 获取Sheet表中所包含的总行数
+			int rsRows = rs.getRows();
+			// 获取指定单元格的对象引用
+			List<String> colnames = new ArrayList<String>();
+			int cardIndex = 0;
+			for (int j = 0; j < rsColumns; j++) {
+				Cell cell = rs.getCell(j, 0);
+				String colname = cell.getContents();
+				if(("卡号").equals(colname)){
+					cardIndex = j;
+				}
+				colnames.add(cell.getContents());
+			}
+			
+			biglist.add(colnames);
+			// **从第二行开始读取数据 这里默认从第2行开始读取
+			for (int i = 1; i < rsRows; i++) {
+				List<String> smalllist = new ArrayList<String>();
+				boolean flag = false;
+				for (int j = 0; j < rsColumns; j++) {
+					Cell cell = rs.getCell(j, i);
+					smalllist.add(cell.getContents());
+					if (cell.getContents() != null
+							&& !"".equals(cell.getContents())) {
+						flag = true;
+					}
+					if(j == cardIndex){
+						cardno.add(cell.getContents());
+					}
+				}
+				if (flag) {
+					biglist.add(smalllist);
+				}
+			}
+			return biglist;
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+			if (rwb != null) {
+				rwb.close();
+			}
+			try {
+				is.close();
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
+		return biglist;
+	}	
+}
diff --git a/src/main/resources/templates/doorlist/addDoorlist.html b/src/main/resources/templates/doorlist/addDoorlist.html
index fec24fd..053d412 100644
--- a/src/main/resources/templates/doorlist/addDoorlist.html
+++ b/src/main/resources/templates/doorlist/addDoorlist.html
@@ -41,10 +41,17 @@
                                     <el-col :span="3"  :offset="3">
                                         <el-button size="small" style="height:24px; line-height:9px;overflow:hidden;width:100%;" type="primary" @click="person_searchPerson">&nbsp;搜索&nbsp;</el-button>
                                     </el-col>
+                                    <el-col :span="3"  :offset="2">
+                                        <el-button type="warning" size="small" style="height:24px; line-height:9px;overflow:hidden; " onclick="javascript:document.getElementById('addDoorlist_importquery').scrollIntoView()" @click="open3">导入选择人员</el-button>
+                                    </el-col>
                                 </el-col>
                             </el-row>
                         </el-col>
+
+
                     </div>
+
+
                 <!--</div>-->
 
                 <div id="addDoorlist_personSel">
@@ -170,10 +177,15 @@
                                 stripe
                                 border>
                             <el-table-column
+                                    sortable
                                     prop="cardno"
                                     label="卡号">
                             </el-table-column>
                             <el-table-column
+                                    prop="bankcardno"
+                                    label="银行卡号">
+                            </el-table-column>
+                            <el-table-column
                                     sortable
                                     prop="custname"
                                     label="姓名">
@@ -187,17 +199,18 @@
                         备注&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">
-                        表单：<el-input size="small" v-model="per_sheetname" name="sheetname" style="width: 30%;"></el-input>
+
+                <div id="addDoorlist_importquery" style="float:left;border-top:solid 1px #e0e0e0; width:100%; height:30px; margin-top:10px;padding-top:10px;  font-size: 14px!important;">
+                    <form action="/door/doorlistMgr/addexcel" method="post" style="width: 60%;float:left;" id="addDoorlist_uploadExcelId" name="formUpload" enctype="multipart/form-data" target="_top">
+                        导入查询并选择人员：<el-input size="small" v-model="per_sheetname" name="sheetname" style="width: 20%;"></el-input>
                         <el-button size="small" type="primary" @click="person_openExcel">打开Excel<i class="el-icon-upload el-icon&#45;&#45;right"></i></el-button>
                         文件路径：<el-input size="small" v-model="textfield" name="textfield" style="width: 30%;"></el-input>
-                        <input type="file" name="file" style="display: none" id="filePath" onchange="addDoorlist_vue.textfield=this.value" />
+                        <input type="file" name="file" style="display: none" id="addDoorlist_filePath" onchange="addDoorlist_vue.textfield=this.value" />
                     </form>
-                    <el-button size="small"  type="primary" @click="person_inExcel">导入查询</el-button>
-                    <el-button size="small" type="primary" id="addDoorlist_perImportBack" style="display: none" @click="perImporReturn">返回</el-button>
-                    <el-button size="small" type="primary" @click="downloadExcel">导入模板下载</el-button>
-                </div>-->
+                    <el-button style="margin-top: 3px;" size="small"  type="el-button el-button--success" @click="person_inExcel">导入查询</el-button>
+                    <el-button size="small" type="danger" id="addDoorlist_perImportBack" style="display: none" @click="perImporReturn">返回</el-button>
+                    <el-button size="small" type="success" plain @click="downloadExcel">导入模板下载</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>
@@ -278,18 +291,26 @@
                                 </el-col>
                                 <el-col :span="6" >
                                     区域：
-                                    <el-select v-model="device.regionid" size="mini" @Change="regionChange" clearable placeholder="请选择">
+                                   <!-- <el-select v-model="device.regionid" size="mini" @Change="regionChange" clearable placeholder="请选择">
                                         <el-option
                                                 v-for="regionid in regions"
                                                 :key="regionid.value"
                                                 :label="regionid.label"
                                                 :value="regionid.value">
                                         </el-option>
-                                    </el-select>
+                                    </el-select>-->
+                                    <el-cascader
+                                                 v-model="device.regionvalue"
+                                                 :options="regionoptions"
+                                                 :show-all-levels="false"
+                                                 clearable
+                                                 filterable change-on-select
+                                                 @change="handleChange">
+                                    </el-cascader>
                                 </el-col>
                                 <el-col :span="6" >
                                     楼栋：
-                                    <el-select v-model="device.buildingid" size="mini" clearable placeholder="请选择">
+                                    <el-select v-model="device.buildingid"  clearable placeholder="请选择">
                                         <el-option
                                                 v-for="buildingid in buildings"
                                                 :key="buildingid.value"
@@ -299,11 +320,11 @@
                                     </el-select>
                                 </el-col>
                                 <el-col :span="6">
-                                    <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 :span="6" style="margin-top: 6px">设备名称：</el-col>
+                                    <el-col :span="17"><el-input placeholder="请输入设备名称"  v-model="device.deviceName" ></el-input></el-col>
                                 </el-col>
                                 <el-col :span="2">
-                                    <el-button size="mini" type="primary" @click="seachDevice">&nbsp;&nbsp;搜索&nbsp;&nbsp;</el-button>
+                                    <el-button  type="primary" @click="seachDevice">&nbsp;搜索&nbsp;</el-button>
                                 </el-col>
                             </el-row>
                         </el-col>
@@ -574,7 +595,7 @@
                         <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" v-if="addDoorlist_vue">{{addDoorlist_vue.person_righttable.length}}</span>个， <!--+ parseInt(addDoorlist_vue.personSel_excelNum)}}</span>个，-->
+                        该设备名单的部分明细内容：人员 <span style="color:#f60" id="postSuc_perNum" v-if="addDoorlist_vue">{{addDoorlist_vue.person_righttable.length+ 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>
@@ -652,11 +673,14 @@
             device:{
                 deviceName:'',
                 regionid:'',
+                regionvalue:[],
+                Rregionid:'',
                 buildingid:'',
             },
             dev_addBtn_dis:true,
             dev_delBtn_dis:true,
             regions:[],
+            regionoptions:[],
             buildings:[],
             devSel_allocated:[],
             //时间周选择部分
@@ -817,7 +841,7 @@
             },
             seachDevice:function(){
                 var url = "[[@{/doorlistMgr/getAllTDevgroupdtlList?}]]"+
-                    "deviceName="+addDoorlist_vue.device.deviceName+"&regionid="+addDoorlist_vue.device.regionid
+                    "deviceName="+addDoorlist_vue.device.deviceName+"&regionid="+addDoorlist_vue.device.Rregionid
                         +"&buildingid="+addDoorlist_vue.device.buildingid +"&usetype=MJ";
                 addDoorlist_fillDevice_lefttable(url);
                 addDoorlist_vue.usetype='MJ';
@@ -961,6 +985,29 @@
                 this.device.buildingid='';
                 addDoorlist_getRegionBuilding(this,value);
             },
+            handleChange(value) {
+                if (value.length > 0) {
+                    this.device.Rregionid = value[value.length - 1]
+                } else {
+                    this.device.Rregionid = ''
+                }
+                console.log(this.device.Rregionid);
+
+                this.buildings = [];
+                this.device.buildingid = '';
+                if (this.device.Rregionid == '') {
+                    addDoorlist_getRegionBuilding(this, '0');
+                } else {
+                    addDoorlist_getRegionBuilding(this, this.device.Rregionid);
+                }
+            },
+            open3:function() {
+                this.$notify.info({
+                    title: '导入说明',
+                    message: '1.请先下载模板,根据要求填写信息。2.主要根据填写卡号进行名单查询，不存在的名单将会进行显示，查询到的名单则直接被选择，可进行下一步操作。3.一次导入名单推荐在1000条以内。',
+                    duration: 20000
+                });
+            },
 
         },
         created:function(){
@@ -1088,10 +1135,11 @@
                         type:      'post',
                         headers: {
                             'Accept': 'application/json',
-                            'Content-Type': 'application/json',
-                            'X-CSRF-TOKEN':token,
+                            'X-CSRF-TOKEN': token,
                         },
                         dataType:  'json',
+                        processData:false,
+                        contentType: false,
                         success:function(data){
 
                             if(data.sheetindex == false){
@@ -1156,6 +1204,8 @@
                         value: regiondata[i].regionid
                     });
                 }
+                //级联选择器区域数据填充
+                addDoorlist_vue.regionoptions = addDoorlist_getTreeData(ret.regions) ;
             }
 
             var buildinglist=[];
@@ -1257,6 +1307,64 @@
             }
         })
     }
+
+    function addDoorlist_getTreeData(regionlst){
+        var f = [];
+
+        //获取第一级
+        for(var i=0;i<regionlst.length;i++){
+            if(regionlst[i].parentid == '0'){
+                f.push({
+                    value:regionlst[i].regionid,
+                    label:regionlst[i].regionname,
+                })
+            }
+        }
+        if(f.length>0){
+            //获取第二级
+            addDoorlist_pushRegion(regionlst,f);
+        }else {
+            f.push({
+                value:regionlst[0].regionid,
+                label:regionlst[0].regionname,
+            })
+            //获取第二级
+            addDoorlist_pushRegion(regionlst,f);
+        }
+        addDoorlist_cyclePushRegion(f,regionlst)
+        return f;
+    }
+
+    function addDoorlist_pushRegion(regionlst,pRe){
+        for(var i in regionlst){
+            for(var j in pRe){
+                if(regionlst[i].parentid == pRe[j].value){
+                    if (pRe[j].children==undefined){
+                        pRe[j].children=[]
+                    }
+                    pRe[j].children.push({
+                        value:regionlst[i].regionid,
+                        label:regionlst[i].regionname,
+                    })
+                }
+            }
+        }
+    }
+
+    function addDoorlist_cyclePushRegion(fList,regionlst){
+        for (var i in fList){
+            var s = fList[i].children;
+            if (s!=undefined && s.length>0){
+                addDoorlist_pushRegion(regionlst,s);
+            }
+            for (j in s) {
+                var l = s[j].children;
+                if (l!=undefined && l.length>0){
+                    addDoorlist_cyclePushRegion(s,regionlst)
+                }
+            }
+        }
+    }
 </script>
 
 <style>
diff --git a/src/main/resources/templates/doorlist/deleteDoorlist.html b/src/main/resources/templates/doorlist/deleteDoorlist.html
index eb3aa73..742b47a 100644
--- a/src/main/resources/templates/doorlist/deleteDoorlist.html
+++ b/src/main/resources/templates/doorlist/deleteDoorlist.html
@@ -28,14 +28,22 @@
 
                     <el-col :span="8">
                         <el-form-item label="区域">
-                            <el-select v-model="deleteDoorForm.regionid" placeholder="请选择">
+                            <!--<el-select v-model="deleteDoorForm.regionid" placeholder="请选择">
                                 <el-option
                                         v-for="regionid in regions"
                                         :key="regionid.value"
                                         :label="regionid.label"
                                         :value="regionid.value">
                                 </el-option>
-                            </el-select>
+                            </el-select>-->
+                            <el-cascader
+                                         v-model="deleteDoorForm.regionvalue"
+                                         :options="regionoptions"
+                                         :show-all-levels="false"
+                                         clearable
+                                         filterable change-on-select
+                                         @change="handleChange">
+                            </el-cascader>
                         </el-form-item>
                     </el-col>
 
@@ -189,6 +197,8 @@
                 allocatStartDate: '',
                 custname: '',
                 regionid: '',
+                regionvalue:[],
+                Rregionid:'',
                 devname: '',
                 allocatEndDate: '',
                 cardno: '',
@@ -196,6 +206,7 @@
                 operflag: '',
             },
             regions: [],
+            regionoptions:[],
             syncflags: [],
             operFlags: [],
             dialogFormVisible: false,
@@ -259,6 +270,22 @@
             },
             handleSelect: function (val) {
                 this.selectList = val;
+            },
+            handleChange(value) {
+                if (value.length > 0) {
+                    this.deleteDoorForm.Rregionid = value[value.length - 1]
+                } else {
+                    this.deleteDoorForm.Rregionid = ''
+                }
+                console.log(this.deleteDoorForm.Rregionid);
+
+                /*this.buildings = [];
+                this.deleteDoorForm.buildingid = '';
+                if (this.deleteDoorForm.Rregionid == '') {
+                    deleteDoorlist_getRegionBuilding(this, '0');
+                } else {
+                    deleteDoorlist_getRegionBuilding(this, this.deleteDoorForm.Rregionid);
+                }*/
             }
         },
         created: function () {
@@ -327,7 +354,7 @@
         }
         var url = "[[@{/doorlistMgr/getAllCardListFrDelete?}]]" + "allocatStartDate=" + startStr + "&allocatEndDate=" + endStr +
             "&devname=" + deleteDoor.devname + "&custname=" + deleteDoor.custname
-            + "&cardno=" + deleteDoor.cardno + "&regionid=" + deleteDoor.regionid
+            + "&cardno=" + deleteDoor.cardno + "&regionid=" + deleteDoor.Rregionid
             + "&syncflag=" + deleteDoor.syncflag + "&usetype=MJ" +
             "&pageNo=" + pageno + "&pageSize=" + pagesize + "&operflag=" + deleteDoor.operflag;
         var token=$("meta[name='_csrf_token']").attr("value");
@@ -417,6 +444,8 @@
                             label: regions[i].regionname
                         })
                     }
+                    //级联选择器区域数据填充
+                    deleteDoorlist_vue.regionoptions = deleteDoorlist_getTreeData(data.regions) ;
                 }
 
                 var operDicts = [];
@@ -441,4 +470,64 @@
             }
         })
     }
+
+
+    function deleteDoorlist_getTreeData(regionlst){
+        var f = [];
+
+        //获取第一级
+        for(var i=0;i<regionlst.length;i++){
+            if(regionlst[i].parentid == '0'){
+                f.push({
+                    value:regionlst[i].regionid,
+                    label:regionlst[i].regionname,
+                })
+            }
+        }
+        if(f.length>0){
+            //获取第二级
+            deleteDoorlist_pushRegion(regionlst,f);
+        }else {
+            f.push({
+                value:regionlst[0].regionid,
+                label:regionlst[0].regionname,
+            })
+            //获取第二级
+            deleteDoorlist_pushRegion(regionlst,f);
+        }
+        deleteDoorlist_cyclePushRegion(f,regionlst)
+        return f;
+    }
+
+    function deleteDoorlist_pushRegion(regionlst,pRe){
+        for(var i in regionlst){
+            for(var j in pRe){
+                if(regionlst[i].parentid == pRe[j].value){
+                    if (pRe[j].children==undefined){
+                        pRe[j].children=[]
+                    }
+                    pRe[j].children.push({
+                        value:regionlst[i].regionid,
+                        label:regionlst[i].regionname,
+                    })
+                }
+            }
+        }
+    }
+
+    function deleteDoorlist_cyclePushRegion(fList,regionlst){
+        for (var i in fList){
+            var s = fList[i].children;
+            if (s!=undefined && s.length>0){
+                deleteDoorlist_pushRegion(regionlst,s);
+            }
+            for (j in s) {
+                var l = s[j].children;
+                if (l!=undefined && l.length>0){
+                    deleteDoorlist_cyclePushRegion(s,regionlst)
+                }
+            }
+        }
+    }
+
 </script>
\ No newline at end of file
diff --git a/src/main/resources/templates/doorlist/searchDoorlist.html b/src/main/resources/templates/doorlist/searchDoorlist.html
index c1a0db4..0ac6719 100644
--- a/src/main/resources/templates/doorlist/searchDoorlist.html
+++ b/src/main/resources/templates/doorlist/searchDoorlist.html
@@ -1,6 +1,6 @@
 <div class="layui-card">
     <div class="layui-card-header">
-        <h2 class="header-title">数据中心</h2>
+        <h2 class="header-title">设备名单查询</h2>
         <span class="layui-breadcrumb pull-right">
           <a href="#">数据中心</a>
           <a><cite>设备名单查询</cite></a>
@@ -77,7 +77,7 @@
 
                     <el-col :span="8">
                         <el-form-item label="区域">
-                            <el-select v-model="searchDoorForm.regionid"
+                            <!--<el-select v-model="searchDoorForm.regionid"
                                        @Change="regionChange"
                                        placeholder="请选择">
                                 <el-option
@@ -86,7 +86,15 @@
                                         :label="regionid.label"
                                         :value="regionid.value">
                                 </el-option>
-                            </el-select>
+                            </el-select>-->
+                            <el-cascader
+                                         v-model="searchDoorForm.regionvalue"
+                                         :options="regionoptions"
+                                         :show-all-levels="false"
+                                         clearable
+                                         filterable change-on-select
+                                         @change="handleChange">
+                            </el-cascader>
                         </el-form-item>
                     </el-col>
 
@@ -252,9 +260,12 @@
                 syncflag: '',
                 operflag: '',
                 buildingid: '',
-                regionid:''
+                regionid:'',
+                regionvalue:[],
+                Rregionid:'',
             },
             regions:[],
+            regionoptions:[],
             buildings:[],
             syncFlag: [],
             operFlag: [],
@@ -351,6 +362,22 @@
                 } else {
                     return row.operflag;
                 }
+            },
+            handleChange(value) {
+                if (value.length > 0) {
+                    this.searchDoorForm.Rregionid = value[value.length - 1]
+                } else {
+                    this.searchDoorForm.Rregionid = ''
+                }
+                console.log(this.searchDoorForm.Rregionid);
+
+                this.buildings = [];
+                this.searchDoorForm.buildingid = '';
+                if (this.searchDoorForm.Rregionid == '') {
+                    searchDoorlist_getRegionBuilding(this, '0');
+                } else {
+                    searchDoorlist_getRegionBuilding(this, this.searchDoorForm.Rregionid);
+                }
             }
         },
         created: function () {
@@ -401,6 +428,8 @@
                                 label: region[i]["regionname"]
                             })
                         }
+                        //级联选择器区域数据填充
+                        searchDoorlist_vue.regionoptions = searchDoorlist_getTreeData(data.regions) ;
                     }
 
                     var buildinglist = [];
@@ -449,6 +478,64 @@
         return fmt;
     }
 
+    function searchDoorlist_getTreeData(regionlst){
+        var f = [];
+
+        //获取第一级
+        for(var i=0;i<regionlst.length;i++){
+            if(regionlst[i].parentid == '0'){
+                f.push({
+                    value:regionlst[i].regionid,
+                    label:regionlst[i].regionname,
+                })
+            }
+        }
+        if(f.length>0){
+            //获取第二级
+            searchDoorlist_pushRegion(regionlst,f);
+        }else {
+            f.push({
+                value:regionlst[0].regionid,
+                label:regionlst[0].regionname,
+            })
+            //获取第二级
+            searchDoorlist_pushRegion(regionlst,f);
+        }
+        searchDoorlist_cyclePushRegion(f,regionlst)
+        return f;
+    }
+
+    function searchDoorlist_pushRegion(regionlst,pRe){
+        for(var i in regionlst){
+            for(var j in pRe){
+                if(regionlst[i].parentid == pRe[j].value){
+                    if (pRe[j].children==undefined){
+                        pRe[j].children=[]
+                    }
+                    pRe[j].children.push({
+                        value:regionlst[i].regionid,
+                        label:regionlst[i].regionname,
+                    })
+                }
+            }
+        }
+    }
+
+    function searchDoorlist_cyclePushRegion(fList,regionlst){
+        for (var i in fList){
+            var s = fList[i].children;
+            if (s!=undefined && s.length>0){
+                searchDoorlist_pushRegion(regionlst,s);
+            }
+            for (j in s) {
+                var l = s[j].children;
+                if (l!=undefined && l.length>0){
+                    searchDoorlist_cyclePushRegion(s,regionlst)
+                }
+            }
+        }
+    }
+
 
     function searchDoorlist_commonQuery(_self, searchDoor, pageno, pagesize) {
         var startStr = '';
@@ -467,7 +554,7 @@
             + "&cardno=" + searchDoor.cardno
             + "&syncflag=" + searchDoor.syncflag +
             "&pageNo=" + pageno + "&pageSize=" + pagesize + "&operflag=" + searchDoor.operflag
-            + "&buildingid=" + searchDoor.buildingid+"&regionid=" +searchDoor.regionid;
+            + "&buildingid=" + searchDoor.buildingid+"&regionid=" +searchDoor.Rregionid;
         var token=$("meta[name='_csrf_token']").attr("value");
         $.ajax({
             type: "POST",
diff --git a/src/main/resources/templates/ncmgr/nc_dev.html b/src/main/resources/templates/ncmgr/nc_dev.html
index c1a1308..947dc98 100644
--- a/src/main/resources/templates/ncmgr/nc_dev.html
+++ b/src/main/resources/templates/ncmgr/nc_dev.html
@@ -45,7 +45,7 @@
                         <label class="control-label col-md-4 col-sm-12 col-xs-12" style="font-size: 14px;">所在区域:</span>
                         </label>
                         <div class="col-md-8 col-sm-12 col-xs-12">
-                            <el-select v-model="devform.regionid"
+                            <!--<el-select v-model="devform.regionid"
                                        filterable
                                        clearable
                                        @Change="regionChange"
@@ -56,7 +56,15 @@
                                         :label="regionid.label"
                                         :value="regionid.value">
                                 </el-option>
-                            </el-select>
+                            </el-select>-->
+                            <el-cascader style="width:163px"
+                                         v-model="devform.regionvalue"
+                                         :options="regionoptions"
+                                         :show-all-levels="false"
+                                         clearable
+                                         filterable change-on-select
+                                         @change="handleChange">
+                            </el-cascader>
                         </div>
                     </div>
                 </div>
@@ -129,6 +137,17 @@
                             :formatter="typeform">
                     </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="buildingname"
                             label="设备所在楼栋"
                             width="140">
@@ -149,17 +168,7 @@
                             width="120"
                             :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="同步时间"
@@ -181,13 +190,13 @@
                                     @click="editDev(scope.row.deviceid)">编辑
                             </button>
                             <button type="button" class="btn btn-danger btn-xs" title="删除设备"
-                                    @click="delDev(scope.row.deviceid)">删除
+                                    @click="delDev(scope.row.deviceid)" v-if="scope.row.operflag=='A'">删除
                             </button>
                             <button type="button" class="btn btn-warning btn-xs" title="名单清空"
-                                    @click="listClean(scope.row.deviceid)" v-if="scope.row.devtype=='R'">清空
+                                    @click="listClean(scope.row.deviceid)" v-if="scope.row.devtype=='R' && scope.row.operflag=='A'">清空
                             </button>
                             <button type="button" class="btn btn-success btn-xs" title="名单重下"
-                                    @click="listReload(scope.row.deviceid)" v-if="scope.row.devtype=='R'">重下
+                                    @click="listReload(scope.row.deviceid)" v-if="scope.row.devtype=='R' && scope.row.operflag=='A'">重下
                             </button>
                         </template>
                     </el-table-column>
@@ -368,9 +377,12 @@
                 devname: '',
                 buildingid: '',
                 devtype: '',
-                regionid:''
+                regionid:'',
+                regionvalue:[],
+                Rregionid:'',
             },
             regions:[],
+            regionoptions:[],
             regionsfill:[],
             buildings:[],
             buildingsfill:[],
@@ -509,7 +521,7 @@
                 this.buildings=[];
                 this.devform.buildingid='';
                 dev_getRegionBuilding(this,value);
-                if (this.devform.regionid==''){
+                if (this.devform.Rregionid==''){
                     dev_getRegionBuilding(this,'0');
                 }
             },
@@ -581,6 +593,22 @@
                 if (row.updtime != null) {
                     return dev_timeformatter(row.updtime);
                 }
+            },
+            handleChange(value) {
+                if (value.length > 0) {
+                    this.devform.Rregionid = value[value.length - 1]
+                } else {
+                    this.devform.Rregionid = ''
+                }
+                console.log(this.devform.Rregionid);
+
+                this.buildings = [];
+                this.devform.buildingid = '';
+                if (this.devform.Rregionid == '') {
+                    dev_getRegionBuilding(this, '0');
+                } else {
+                    dev_getRegionBuilding(this, this.devform.Rregionid);
+                }
             }
 
         },
@@ -611,6 +639,9 @@
                                 label: rt[j].regionname
                             });
                         }
+
+                        //级联选择器区域数据填充
+                        dev_vue.regionoptions = dev_getTreeData(ret.regions) ;
                     }
 
 
@@ -646,12 +677,72 @@
                     dev_vue.regions = uows;
                     dev_vue.buildings = rows;
 
+
+
                 }
             })
         }
 
     })
 
+    function dev_getTreeData(regionlst){
+        var f = [];
+
+        //获取第一级
+        for(var i=0;i<regionlst.length;i++){
+            if(regionlst[i].parentid == '0'){
+                f.push({
+                    value:regionlst[i].regionid,
+                    label:regionlst[i].regionname,
+                })
+            }
+        }
+        if(f.length>0){
+            //获取第二级
+            dev_pushRegion(regionlst,f);
+        }else {
+            f.push({
+                value:regionlst[0].regionid,
+                label:regionlst[0].regionname,
+            })
+            //获取第二级
+            dev_pushRegion(regionlst,f);
+        }
+        dev_cyclePushRegion(f,regionlst)
+        return f;
+    }
+
+    function dev_pushRegion(regionlst,pRe){
+        for(var i in regionlst){
+            for(var j in pRe){
+                if(regionlst[i].parentid == pRe[j].value){
+                    if (pRe[j].children==undefined){
+                        pRe[j].children=[]
+                    }
+                    pRe[j].children.push({
+                        value:regionlst[i].regionid,
+                        label:regionlst[i].regionname,
+                    })
+                }
+            }
+        }
+    }
+
+    function dev_cyclePushRegion(fList,regionlst){
+        for (var i in fList){
+            var s = fList[i].children;
+            if (s!=undefined && s.length>0){
+                dev_pushRegion(regionlst,s);
+            }
+            for (j in s) {
+                var l = s[j].children;
+                if (l!=undefined && l.length>0){
+                    dev_cyclePushRegion(s,regionlst)
+                }
+            }
+        }
+    }
+
     function dev_timeformatter(time) {
 
         return time.substr(0, 4) + '-' + time.substr(4, 2) + '-' + time.substr(6, 2) + ' '
@@ -663,7 +754,7 @@
         $.ajax({
             type: "get",
             dataType: "json",
-            url: encodeURI("[[@{/ncmgr/loadDevList?devname=}]]" + rolename.devname + "&pageNo=" + pageno + "&pageSize=" + pagesize + "&buildingid=" + rolename.buildingid + "&devtype=" + rolename.devtype+"&regionid="+rolename.regionid),
+            url: encodeURI("[[@{/ncmgr/loadDevList?devname=}]]" + rolename.devname + "&pageNo=" + pageno + "&pageSize=" + pagesize + "&buildingid=" + rolename.buildingid + "&devtype=" + rolename.devtype+"&regionid="+rolename.Rregionid),
             success: function (ret) {
                 _self.totSize = ret.PageResult.totalCount;
                 _self.tableData = ret.PageResult.list;
@@ -883,6 +974,7 @@
     }
 
     function dev_getRegionBuilding(_self,value){
+        console.log(value)
         $.ajax({
             type: "get",
             dataType: "json",
diff --git a/src/main/resources/templates/query/tdoorstream.html b/src/main/resources/templates/query/tdoorstream.html
index 4929723..0878a51 100644
--- a/src/main/resources/templates/query/tdoorstream.html
+++ b/src/main/resources/templates/query/tdoorstream.html
@@ -45,7 +45,7 @@
                         <label class="control-label" style="margin-right:10px;font-size: 14px;width:80px">区域:
                         </label>
                         <el-form-item >
-                            <el-select style="width:193px" v-model="tdoorstream.regionid"
+                            <!--<el-select style="width:193px" v-model="tdoorstream.regionid"
                                        @Change="regionChange"
                                        placeholder="请选择">
                                 <el-option
@@ -54,7 +54,16 @@
                                         :label="regionid.label"
                                         :value="regionid.value">
                                 </el-option>
-                            </el-select>
+                            </el-select>-->
+
+                            <el-cascader style="width:193px"
+                                         v-model="tdoorstream.regionvalue"
+                                         :options="regionoptions"
+                                         :show-all-levels="false"
+                                         clearable
+                                         filterable change-on-select
+                                         @change="handleChange">
+                            </el-cascader>
                         </el-form-item>
                     </el-col>
 
@@ -182,6 +191,7 @@
             tlist:[],
             buildings:[],
             regions:[],
+            regionoptions:[],
             dtlstatus:[],
             currentRow : null,
             tdoorstream : {
@@ -191,7 +201,9 @@
                 devname:'',
                 buildingid:'',
                 dtlStatus:'all',
-                regionid:''
+                regionid:'',
+                regionvalue:[],
+                Rregionid:'',
             },
         },
         methods : {
@@ -247,6 +259,22 @@
                 this.tdoorstream.buildingid='';
                 tdoorstream_getRegionBuilding(this,value);
             },
+            handleChange(value) {
+                if (value.length > 0) {
+                    this.tdoorstream.Rregionid = value[value.length - 1]
+                } else {
+                    this.tdoorstream.Rregionid = ''
+                }
+                console.log(this.tdoorstream.Rregionid);
+
+                this.buildings = [];
+                this.tdoorstream.buildingid = '';
+                if (this.tdoorstream.Rregionid == '') {
+                    tdoorstream_getRegionBuilding(this, '0');
+                } else {
+                    tdoorstream_getRegionBuilding(this, this.tdoorstream.Rregionid);
+                }
+            }
         },
         created : function() {
             this.loading=true;
@@ -285,6 +313,8 @@
                                 label: region[i]["regionname"]
                             })
                         }
+                        //级联选择器区域数据填充
+                        _self.regionoptions = tdoorstream_getTreeData(ret.regions) ;
                     }
 
                     var buildinglist = [];
@@ -309,6 +339,64 @@
 
     })
 
+    function tdoorstream_getTreeData(regionlst){
+        var f = [];
+
+        //获取第一级
+        for(var i=0;i<regionlst.length;i++){
+            if(regionlst[i].parentid == '0'){
+                f.push({
+                    value:regionlst[i].regionid,
+                    label:regionlst[i].regionname,
+                })
+            }
+        }
+        if(f.length>0){
+            //获取第二级
+            tdoorstream_pushRegion(regionlst,f);
+        }else {
+            f.push({
+                value:regionlst[0].regionid,
+                label:regionlst[0].regionname,
+            })
+            //获取第二级
+            tdoorstream_pushRegion(regionlst,f);
+        }
+        tdoorstream_cyclePushRegion(f,regionlst)
+        return f;
+    }
+
+    function tdoorstream_pushRegion(regionlst,pRe){
+        for(var i in regionlst){
+            for(var j in pRe){
+                if(regionlst[i].parentid == pRe[j].value){
+                    if (pRe[j].children==undefined){
+                        pRe[j].children=[]
+                    }
+                    pRe[j].children.push({
+                        value:regionlst[i].regionid,
+                        label:regionlst[i].regionname,
+                    })
+                }
+            }
+        }
+    }
+
+    function tdoorstream_cyclePushRegion(fList,regionlst){
+        for (var i in fList){
+            var s = fList[i].children;
+            if (s!=undefined && s.length>0){
+                tdoorstream_pushRegion(regionlst,s);
+            }
+            for (j in s) {
+                var l = s[j].children;
+                if (l!=undefined && l.length>0){
+                    tdoorstream_cyclePushRegion(s,regionlst)
+                }
+            }
+        }
+    }
+
 
     function tdoorstream_downloadExcel(_self, Ustarttransdate,Uendtransdate) {
         var factoryid = _self.tdoorstream.factoryid;
@@ -344,7 +432,7 @@
         var custname = _self.tdoorstream.custname;
         var buildingid = _self.tdoorstream.buildingid;
         var devname = _self.tdoorstream.devname;
-        var regionid = _self.tdoorstream.regionid;
+        var regionid = _self.tdoorstream.Rregionid;
         var dtlStatus = _self.tdoorstream.dtlStatus;
         //console.log(factoryid);
         $.ajax({
diff --git a/src/main/resources/templates/system/building.html b/src/main/resources/templates/system/building.html
index 792ac49..369b890 100644
--- a/src/main/resources/templates/system/building.html
+++ b/src/main/resources/templates/system/building.html
@@ -9,15 +9,25 @@
     <div class="layui-card-body">
         <div id="buildingApp">
             <el-form :inline="true" ref="buildingform" :model="buildingform" data-parsley-validate class="form-horizontal form-label-left">
-                <div class="col-md-3" >
+                <div class="col-md-4" >
                     <div class="form-group">
                         <label class="control-label col-md-5 col-sm-12 col-xs-12" style="font-size: 14px;">区域:</label>
                         <div class="col-md-7 col-sm-12 col-xs-12">
-                            <el-select style="width:193px"
-                                       v-model="buildingform.regionid" clearable placeholder="请选择"
-                            > <el-option v-for="item in regionlist"
+                            <!--<el-select style="width:193px"
+                                       v-model="buildingform.regionid" clearable placeholder="请选择">
+                                <el-option v-for="item in regionlist"
                                          :key="item.value" :label="item.label" :value="item.value">
-                            </el-option> </el-select>
+                                </el-option>
+                            </el-select>-->
+
+                            <el-cascader style="width:163px"
+                                    v-model="buildingform.regionvalue"
+                                    :options="regionoptions"
+                                    :show-all-levels="false"
+                                    clearable
+                                    filterable change-on-select
+                                    @change="handleChange">
+                            </el-cascader>
                         </div>
                     </div>
                 </div>
@@ -68,6 +78,17 @@
                             width="150">
                     </el-table-column>
                     <el-table-column
+                            prop="flag"
+                            sortable
+                            label="状态"
+                            width="90">
+                        <template scope="scope">
+                            <el-tag :type="scope.row.flag === '有效' ? 'success' : 'danger'" close-transition>
+                                {{scope.row.flag}}
+                            </el-tag>
+                        </template>
+                    </el-table-column>
+                    <el-table-column
                             prop="updtime"
                             label="更新时间"
                             min-width="180"
@@ -87,7 +108,7 @@
                                     @click="editBuilding(scope.row.buildingid)">编辑
                             </button>
                             <button type="button" class="btn btn-danger btn-xs" title="删除"
-                                    @click="delBuilding(scope.row.buildingid)">删除
+                                    @click="delBuilding(scope.row.buildingid)" v-if="scope.row.flag == '有效'">删除
                             </button>
                         </template>
                     </el-table-column>
@@ -160,6 +181,7 @@
             currentRow: null,
             buildingidDis:false,
             regionlist:[],
+            regionoptions:[],
             regions:[],
             dialogFormVisible: false,
             buildingtitle:'',
@@ -172,6 +194,8 @@
             buildingform:{
                 regionid:'',
                 buildingname:'',
+                regionvalue:[],
+                Rregionid:'',
             },
 
             rules: {
@@ -192,11 +216,11 @@
         methods: {
             handleSizeChange:function(val) {
                 this.pageSize=val;
-                building_commonQuery(this,this.buildingform.regionid,this.buildingform.buildingname,this.currPage,val);
+                building_commonQuery(this,this.buildingform.Rregionid,this.buildingform.buildingname,this.currPage,val);
             },
             currPageChange:function(val) {
                 this.currPage=val;
-                building_commonQuery(this,this.buildingform.regionid,this.buildingform.buildingname,this.currPage,this.pageSize);
+                building_commonQuery(this,this.buildingform.Rregionid,this.buildingform.buildingname,this.currPage,this.pageSize);
             },
             currRowChange:function(val) {
                 this.currentRow = val;
@@ -204,7 +228,7 @@
             query:function () {
                 this.pagesize=10;
                 this.currPage=1;
-                building_commonQuery(this,this.buildingform.regionid,this.buildingform.buildingname,this.currPage,this.pageSize);
+                building_commonQuery(this,this.buildingform.Rregionid,this.buildingform.buildingname,this.currPage,this.pageSize);
             },
             addBuilding:function () {
                 building_getFillData(this,"-1");
@@ -250,6 +274,14 @@
                 if (row.updtime != null) {
                     return building_timeformatter(row.updtime);
                 }
+            },
+            handleChange(value) {
+                if (value.length>0){
+                    this.buildingform.Rregionid = value[value.length-1]
+                }else {
+                    this.buildingform.Rregionid=''
+                }
+                console.log(this.buildingform.Rregionid);
             }
         },
         created:function(){
@@ -276,18 +308,80 @@
                             });
                         }
                         building_vue.regionlist = rows;
+
+                        //级联选择器区域数据填充
+                        building_vue.regionoptions =building_getTreeData(ret.regionList) ;
                     }
                 }
             })
         }
     })
 
-    function building_commonQuery(_self,regionid,buildingname,pageno,pagesize) {
+
+    function building_getTreeData(regionlst){
+        var f = [];
+
+        //获取第一级
+        for(var i=0;i<regionlst.length;i++){
+            if(regionlst[i].parentid == '0'){
+                f.push({
+                    value:regionlst[i].regionid,
+                    label:regionlst[i].regionname,
+                })
+            }
+        }
+        if(f.length>0){
+            //获取第二级
+            building_pushRegion(regionlst,f);
+        }else {
+            f.push({
+                value:regionlst[0].regionid,
+                label:regionlst[0].regionname,
+            })
+            //获取第二级
+            building_pushRegion(regionlst,f);
+        }
+        building_cyclePushRegion(f,regionlst)
+        return f;
+    }
+
+    function building_pushRegion(regionlst,pRe){
+        for(var i in regionlst){
+            for(var j in pRe){
+                if(regionlst[i].parentid == pRe[j].value){
+                    if (pRe[j].children==undefined){
+                        pRe[j].children=[]
+                    }
+                    pRe[j].children.push({
+                        value:regionlst[i].regionid,
+                        label:regionlst[i].regionname,
+                    })
+                }
+            }
+        }
+    }
+
+    function building_cyclePushRegion(fList,regionlst){
+        for (var i in fList){
+            var s = fList[i].children;
+            if (s!=undefined && s.length>0){
+                building_pushRegion(regionlst,s);
+            }
+            for (j in s) {
+                var l = s[j].children;
+                if (l!=undefined && l.length>0){
+                    building_cyclePushRegion(s,regionlst)
+                }
+            }
+        }
+    }
+
+    function building_commonQuery(_self,Rregionid,buildingname,pageno,pagesize) {
         $.ajax({
             type:"get",
             dataType:"json",
             url:encodeURI("[[@{/system/loadBuildingList?regionid=}]]"
-                +regionid+"&buildingname="+buildingname
+                +Rregionid+"&buildingname="+buildingname
                 +"&pageNo="+pageno+"&pageSize="+pagesize),
             success:function(ret){
                 _self.totSize=ret.pageResult.totalCount;
@@ -382,7 +476,7 @@
 
 
     function building_refreshThisTable(){
-        building_commonQuery(building_vue,building_vue.buildingform.regionid,building_vue.buildingform.buildingname,building_vue.currPage,building_vue.pageSize);
+        building_commonQuery(building_vue,building_vue.buildingform.Rregionid,building_vue.buildingform.buildingname,building_vue.currPage,building_vue.pageSize);
     };
 
     function building_timeformatter(time) {
diff --git a/src/main/resources/templates/system/operator.html b/src/main/resources/templates/system/operator.html
index 96bac81..bec77f8 100644
--- a/src/main/resources/templates/system/operator.html
+++ b/src/main/resources/templates/system/operator.html
@@ -70,8 +70,14 @@
                     <el-table-column
                             prop="opertype"
                             label="操作员类别"
-                            width="140"
-                            :formatter="typeform">
+                            sortable
+                            width="130">
+                        <template scope="scope">
+                            <el-tag type="success" v-if="scope.row.opertype=='楼栋管理员'">{{scope.row.opertype}}</el-tag>
+                            <el-tag type="info" v-if="scope.row.opertype=='区域管理员'">{{scope.row.opertype}}</el-tag>
+                            <el-tag type="warning" v-if="scope.row.opertype=='系统管理员'">{{scope.row.opertype}}</el-tag>
+                            <el-tag type="danger" v-if="scope.row.opertype=='超级管理员'">{{scope.row.opertype}}</el-tag>
+                        </template>
                     </el-table-column>
                     <el-table-column
                             prop="rolename"
@@ -106,9 +112,9 @@
                         <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)" v-if="scope.row.opertype!='S' ">删除</button>
+                            <button type="button" class="btn btn-danger btn-xs" title="删除操作员" @click="delOperator(scope.row.operid)" v-if="scope.row.opertype!='系统管理员' && scope.row.opertype!='超级管理员' && scope.row.status=='有效'">删除</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'">分配楼栋
+                                    @click="allotBuilding(scope.row.operid,scope.row.opername)" v-if="scope.row.opertype=='楼栋管理员'">分配楼栋
                             </button>
                         </template>
                     </el-table-column>
@@ -408,23 +414,6 @@
                     this.regionDis = true;
                 }
             },
-            typeform: function (row) {
-                if (row.opertype == 'P') {
-                    return '超级管理员';
-                }
-                else if (row.opertype == 'S') {
-                    return '系统管理员';
-                }
-                else if (row.opertype == 'H') {
-                    return '区域管理员';
-                }
-                else if (row.opertype == 'L') {
-                    return '物业管理员';
-                }
-                else {
-                    return row.opertype;
-                }
-            },
             resetPwd:function (operid) {
                 oper_resetpwd(operid);
             },
diff --git a/src/main/resources/templates/system/region.html b/src/main/resources/templates/system/region.html
index 2e60a61..4e7fc7e 100644
--- a/src/main/resources/templates/system/region.html
+++ b/src/main/resources/templates/system/region.html
@@ -39,9 +39,10 @@
                         border
                         style="width: 100%">
                     <el-table-column
+                            sortable
                             prop="regionid"
                             label="区域编号"
-                            width="140">
+                            width="120">
                     </el-table-column>
                     <el-table-column
                             prop="regionname"
@@ -66,6 +67,17 @@
                             width="200">
                     </el-table-column>
                     <el-table-column
+                            prop="flag"
+                            sortable
+                            label="状态"
+                            width="90">
+                        <template scope="scope">
+                            <el-tag :type="scope.row.flag === '有效' ? 'success' : 'danger'" close-transition>
+                                {{scope.row.flag}}
+                            </el-tag>
+                        </template>
+                    </el-table-column>
+                    <el-table-column
                             prop="remarks"
                             label="备注"
                             width="180">
@@ -75,7 +87,7 @@
                             width="130">
                         <template scope="scope">
                             <button type="button" class="btn btn-info btn-xs" title="编辑" @click="editRegion(scope.row.regionid)" v-if="scope.row.regionid!='0'">编辑</button>
-                            <button type="button" class="btn btn-danger btn-xs" title="删除" @click="delRegion(scope.row.regionid)" v-if="scope.row.regionid!='0'">删除</button>
+                            <button type="button" class="btn btn-danger btn-xs" title="删除" @click="delRegion(scope.row.regionid)" v-if="scope.row.regionid!='0' && scope.row.flag=='有效'">删除</button>
                         </template>
                     </el-table-column>
                 </el-table>
diff --git a/src/main/resources/templates/system/role/func.html b/src/main/resources/templates/system/role/func.html
index 48d6dff..8599d55 100755
--- a/src/main/resources/templates/system/role/func.html
+++ b/src/main/resources/templates/system/role/func.html
@@ -39,7 +39,7 @@
                 initTree(data.node);
             } else if (data.code == 401) {
                 layer.msg(data.msg, {icon: 2, time: 1500}, function () {
-                    location.replace('/login');
+                    location.replace('/door/login');
                 }, 1000);
                 return;
             } else {
