diff --git a/src/main/java/com/supwisdom/dlpay/ncmgr/bean/NcDevBean.java b/src/main/java/com/supwisdom/dlpay/ncmgr/bean/NcDevBean.java
index 107133c..bbfb2e8 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/bean/NcDevBean.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/bean/NcDevBean.java
@@ -10,6 +10,7 @@
     private int devno;
     private String usetype;
     private String buildingid;
+    private String regionid;
 
     public int getDeviceid() {
         return deviceid;
@@ -82,4 +83,12 @@
     public void setUsetype(String usetype) {
         this.usetype = usetype;
     }
+
+    public String getRegionid() {
+        return regionid;
+    }
+
+    public void setRegionid(String regionid) {
+        this.regionid = regionid;
+    }
 }
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 df099ce..1053c3c 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/controller/NcMgrController.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/controller/NcMgrController.java
@@ -1,16 +1,20 @@
 package com.supwisdom.dlpay.ncmgr.controller;
 
+import com.supwisdom.dlpay.framework.domain.TOperator;
 import com.supwisdom.dlpay.framework.util.DateUtil;
+import com.supwisdom.dlpay.framework.util.StringUtil;
 import com.supwisdom.dlpay.ncmgr.bean.NcDevBean;
 import com.supwisdom.dlpay.ncmgr.bean.NcTimeBean;
 import com.supwisdom.dlpay.ncmgr.domain.*;
 import com.supwisdom.dlpay.ncmgr.service.NcService;
 import com.supwisdom.dlpay.system.domain.TDictionaryId;
+import com.supwisdom.dlpay.system.domain.TRegion;
 import com.supwisdom.dlpay.system.page.Pagination;
 import com.supwisdom.dlpay.system.service.SystemService;
 import com.supwisdom.dlpay.util.RedisUtil;
 import org.apache.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.annotation.AuthenticationPrincipal;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.*;
@@ -63,8 +67,8 @@
      * @param pageNo
      * @param pageSize
      * @param devname
-     * @param buildingname
-     * @param regionname
+     * @param buildingid
+     * @param regionid
      * @param devtype
      * @return
      */
@@ -75,20 +79,37 @@
                            @RequestParam(value = "pageNo", required = false, defaultValue = "1") int pageNo,
                            @RequestParam(value = "pageSize", required = false, defaultValue = "10") int pageSize,
                            @RequestParam(value = "devname", required = false, defaultValue = "") String devname,
-                           @RequestParam(value = "buildingname", required = false, defaultValue = "") String buildingname,
-                           @RequestParam(value = "regionname",required = false,defaultValue = "") String regionname,
-                           @RequestParam(value = "devtype", required = false, defaultValue = "") String devtype){
+                           @RequestParam(value = "buildingid", required = false, defaultValue = "") String buildingid,
+                           @RequestParam(value = "regionid",required = false,defaultValue = "") String regionid,
+                           @RequestParam(value = "devtype", required = false, defaultValue = "") String devtype,
+                           @AuthenticationPrincipal TOperator operUser){
         Map map = new HashMap();
         try{
+            String opertype = operUser.getOpertype();
             Pagination page = null;
-            page = ncService.getNcDeviceWithPage(devname, pageNo, pageSize, map, buildingname,regionname, devtype);
-            map.put("PageResult", page);
+            List<TRegion> regions = null;
+            List<TBuilding> buildings = null;
+            if (!StringUtil.isEmpty(opertype) &&(opertype.equals("S")||opertype.equals("P"))) {
+                page = ncService.getSystemNcDeviceWithPage(devname, pageNo, pageSize, map, buildingid, regionid, devtype);
+                map.put("PageResult", page);
+                regions = systemService.getAllRegions();
+                map.put("regions", regions);
+                buildings = ncService.getAllBuilding();
+                map.put("buildings", buildings);
+
+            }else if (!StringUtil.isEmpty(operUser.getRegionid())){
+                page = ncService.getOperatorNcDeviceWithPage(devname, pageNo, pageSize, buildingid, operUser.getRegionid(), devtype);
+                map.put("PageResult", page);
+                TRegion regionById = systemService.getRegionById(operUser.getRegionid());
+                regions.add(regionById);
+                map.put("regions", regions);
+                buildings = systemService.getBuildingByRegionId(operUser.getRegionid());
+                map.put("buildings", buildings);
+            }
             List<TDictionaryId> dicts = systemService.findTDictionaryByType(8);
             map.put("dicts", dicts);
-            List<TBuilding> buildings = ncService.getAllBuilding();
-            map.put("buildings", buildings);
-            List<TNcDevice> devices = ncService.getDevByType("C");
-            map.put("devices", devices);
+
+
         }catch (Exception e){
             e.printStackTrace();
             logger.error("查询设备失败：" + e.getMessage());
@@ -103,19 +124,39 @@
      */
     @RequestMapping("/loadNcDevForUpdate")
     @ResponseBody
-    public Map loadNcDevForUpdate(@RequestParam(value = "deviceid") int deviceid){
+    public Map loadNcDevForUpdate(@RequestParam(value = "deviceid") int deviceid,
+                                  @AuthenticationPrincipal TOperator operUser){
         Map map = new HashMap();
         try {
             TNcDevice device = ncService.findDevById(deviceid);
             map.put("device", device);
             List<TDictionaryId> dicts = systemService.findTDictionaryByType(8);//设备类型  C：控制器  R：读头
             map.put("dicts", dicts);
-            List<TBuilding> buildings = ncService.getAllBuilding();
-            map.put("buildings", buildings);
-            List<TNcDevice> devices = ncService.getDevByType("C");//根据设备类型获取设备
-            map.put("devices", devices);
             List<TDictionaryId> devUseType = systemService.findTDictionaryByType(16);//获取设备使用类别
             map.put("devUseType", devUseType);
+
+            String opertype = operUser.getOpertype();
+            List<TRegion> regionsfill = null;
+            List<TBuilding> buildingsfill = null;
+            List<TNcDevice> devices = null;
+            if (!StringUtil.isEmpty(opertype) &&(opertype.equals("S")||opertype.equals("P"))){
+                regionsfill = systemService.getAllRegions();
+                map.put("regionsfill", regionsfill);
+                buildingsfill = ncService.getAllBuilding();
+                map.put("buildingsfill", buildingsfill);
+                devices = ncService.getSystemDevByType("C");//根据设备类型获取设备
+                map.put("devices", devices);
+            }else if (!StringUtil.isEmpty(operUser.getRegionid())){
+                TRegion regionById = systemService.getRegionById(operUser.getRegionid());
+                regionsfill.add(regionById);
+                map.put("regionsfill", regionsfill);
+                buildingsfill = systemService.getBuildingByRegionId(operUser.getRegionid());
+                map.put("buildingsfill", buildingsfill);
+                devices = ncService.getOperatorDevByType("C", operUser.getRegionid());
+                map.put("devices", devices);
+            }
+
+
         } catch (Exception e) {
             e.printStackTrace();
         }
@@ -123,6 +164,25 @@
     }
 
     /**
+     * 根据区域id填充可选楼栋列表
+     * @param regionid
+     * @return
+     */
+    @ResponseBody
+    @RequestMapping("/getRegionBuilding")
+    public Map getRegionBuilding(@RequestParam(value = "regionid") String regionid){
+        Map map = new HashMap();
+        try{
+            List<TBuilding> regionBuildings = systemService.getBuildingByRegionId(regionid);
+            map.put("reBuilding", regionBuildings);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return map;
+    }
+
+
+    /**
      * 添加或修改设备
      * @param postData
      * @param request
@@ -171,10 +231,11 @@
                 devUpdate.setDevno(postData.getDevno());
                 devUpdate.setIp(postData.getIp());
                 devUpdate.setOperflag("A");
-                devUpdate.setSyncfalg("S");
+                devUpdate.setSyncflag("S");
                 devUpdate.setUpdtime(DateUtil.getNow());
                 devUpdate.setSynctime(DateUtil.getNow());
                 devUpdate.setBuildingid(postData.getBuildingid());
+                devUpdate.setRegionid(postData.getRegionid());
                 TBuilding buiding = ncService.getBuidingById(postData.getBuildingid());
                 devUpdate.setBuildingname(buiding.getBuildingname());
 
@@ -223,8 +284,9 @@
                 devAdd.setBuildingid(postData.getBuildingid());
                 TBuilding buiding = ncService.getBuidingById(postData.getBuildingid());
                 devAdd.setBuildingname(buiding.getBuildingname());
+                devAdd.setRegionid(postData.getRegionid());
                 devAdd.setOperflag("A");
-                devAdd.setSyncfalg("S");
+                devAdd.setSyncflag("S");
                 devAdd.setUpdtime(DateUtil.getNow());
                 devAdd.setSynctime(DateUtil.getNow());
                 devAdd.setUsetype(postData.getUsetype());
diff --git a/src/main/java/com/supwisdom/dlpay/ncmgr/dao/NcDeviceDao.java b/src/main/java/com/supwisdom/dlpay/ncmgr/dao/NcDeviceDao.java
index 91196b9..df2a07b 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/dao/NcDeviceDao.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/dao/NcDeviceDao.java
@@ -8,7 +8,7 @@
 import java.util.List;
 
 public interface NcDeviceDao {
-    public Pagination getNcDeviceWithPage(String devname, int pageNo, int pageSize, String buildingname,String regionname, String devtype);
+    public Pagination getSystemNcDeviceWithPage(String devname, int pageNo, int pageSize, String buildingid,String regionid, String devtype);
 
     public List<TBuilding> getAllBuilding();
 
@@ -16,7 +16,9 @@
 
     public TBuilding getBuidingById(String id);
 
-    public List<TNcDevice> getDevByType(String type);
+    public List<TNcDevice> getSystemDevByType(String type);
+
+    public List<TNcDevice> getOperatorDevByType(String type,String regionid);
 
     public TNcDevice findDevById(int id);
 
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 5a2f752..f0ff557 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
@@ -22,7 +22,7 @@
 
     @Transactional
     @Override
-    public Pagination getNcDeviceWithPage(String devname, int pageNo, int pageSize, String buildingname,String regionname, String devtype) {
+    public Pagination getSystemNcDeviceWithPage(String devname, int pageNo, int pageSize, String buildingid,String regionid, String devtype) {
         String sql ="select * from T_Nc_Device bean "
                 +" left join t_building tb on bean.buildingid=tb.buildingid"
                 +" left join tb_region tr on tr.regionid=tb.regionid"
@@ -30,15 +30,15 @@
         if(!devname.equals("")){
             sql+="and devname like :devname ";
         }
-        if(!buildingname.equals("")){
-            sql+="and  buildingname like :buildingname ";
+        if(!buildingid.equals("")){
+            sql+="and  buildingid = :buildingid ";
         }
-        if (!regionname.equals("")){
+        if (!regionid.equals("")){
             sql += "and tr.regionid in  "
                     +"("
                     + "with recursive tmp as  "
                     + "("
-                    + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionname like :regionname  "
+                    + "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  )";
@@ -52,14 +52,14 @@
         if(!devname.equals("")){
             query.setParameter("devname", "%"+devname+"%");
         }
-        if(!buildingname.equals("")){
-            query.setParameter("buildingname", "%"+buildingname+"%");
+        if(!buildingid.equals("")){
+            query.setParameter("buildingid", buildingid);
         }
         if(!devtype.equals("")){
             query.setParameter("devtype", devtype);
         }
-        if (!("").equals(regionname)){
-            query.setParameter("regionname", "%"+regionname+"%");
+        if (!("").equals(regionid)){
+            query.setParameter("regionid", regionid);
         }
         pageNo = pageNo <= 0 ? 1 : pageNo;
         query.setFirstResult((pageNo - 1) * pageSize);
@@ -69,12 +69,13 @@
         page.setPageSize(pageSize);
         List<TNcDevice> list = query.getResultList();
         page.setList(list);
-        int totalCount = getNcDeviceCount(devname, buildingname, regionname, devtype);
+        int totalCount = getSystemNcDeviceCount(devname, buildingid, regionid, devtype);
         page.setTotalCount(totalCount);
         return page;
     }
 
-    private int getNcDeviceCount(String devname, String buildingname,String regionname, String devtype){
+
+    private int getSystemNcDeviceCount(String devname, String buildingid,String regionid, String devtype){
         String sql ="select count(bean.deviceid) from T_Nc_Device bean "
                 +" left join t_building tb on bean.buildingid=tb.buildingid"
                 +" left join tb_region tr on tr.regionid=tb.regionid"
@@ -82,15 +83,15 @@
         if(!devname.equals("")){
             sql+="and devname like :devname ";
         }
-        if(!buildingname.equals("")){
-            sql+="and  buildingname like :buildingname ";
+        if(!buildingid.equals("")){
+            sql+="and  buildingid = :buildingid ";
         }
-        if (!regionname.equals("")){
+        if (!regionid.equals("")){
             sql += "and tr.regionid in  "
                     +"("
                     + "with recursive tmp as  "
                     + "("
-                    + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionname like :regionname  "
+                    + "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  )";
@@ -102,14 +103,14 @@
         if(!devname.equals("")){
             query.setParameter("devname", "%"+devname+"%");
         }
-        if(!buildingname.equals("")){
-            query.setParameter("buildingname", "%"+buildingname+"%");
+        if(!buildingid.equals("")){
+            query.setParameter("buildingid", buildingid);
         }
         if(!devtype.equals("")){
             query.setParameter("devtype", devtype);
         }
-        if (!("").equals(regionname)){
-            query.setParameter("regionname", "%"+regionname+"%");
+        if (!("").equals(regionid)){
+            query.setParameter("regionid", regionid);
         }
         List list = query.getResultList();
         int cnt = 0;
@@ -120,7 +121,6 @@
     }
 
 
-
     @Transactional
     @Override
     public List<TBuilding> getAllBuilding() {
@@ -154,7 +154,7 @@
 
     @Transactional
     @Override
-    public List<TNcDevice> getDevByType(String type) {
+    public List<TNcDevice> getSystemDevByType(String type) {
         String sql = "select r from TNcDevice r where r.devtype=?1 and r.operflag='A' order by r.devname";
         Query query = entityManager.createQuery(sql);
         query.setParameter(1, type);
@@ -164,6 +164,24 @@
 
     @Transactional
     @Override
+    public List<TNcDevice> getOperatorDevByType(String type, String regionid) {
+        String sql = "select bean.deviceid,bean.devphyid,bean.devname,bean.ip,bean.operflag,bean.syncflag,bean.synctime," +
+                "bean.updtime,bean.fdevid,bean.devtype,bean.devno,bean.usetype,bean.buildingid,bean.buildingname,bean.regionid " +
+                " from T_NC_DEVICE bean where devtype=:devtype and operflag='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, TNcDevice.class);
+        query.setParameter("devtype", type);
+        query.setParameter(regionid, regionid);
+        List<TNcDevice> list = query.getResultList();
+        return list;
+    }
+
+    @Transactional
+    @Override
     public TNcDevice findDevById(int id) {
         String sql = " select r from TNcDevice r where  r.deviceid=:deviceid";
         Query query = entityManager.createQuery(sql,TNcDevice.class);
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 2df3d9d..807d168 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/domain/TNcDevice.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/domain/TNcDevice.java
@@ -38,6 +38,8 @@
 	private String buildingid;
 	@Excel(name = "设备所在楼栋名称")
 	private String buildingname;
+	@Excel(name = "设备所在区域编号")
+	private String regionid;
 
 	// Constructors
 
@@ -51,21 +53,22 @@
 	}
 
 	/** full constructor */
-	public TNcDevice(Integer deviceid, String devphyid, String devname,
-                     String ip, String operflag, String syncfalg, String synctime,
-                     String updtime, Integer fdevid, String devtype, Integer devno, String usetype) {
+	public TNcDevice(Integer deviceid, String devphyid, String devname, String ip, String operflag, String syncflag, String synctime, String updtime, Integer fdevid, String devtype, Integer devno, String usetype, String buildingid, String buildingname, String regionid) {
 		this.deviceid = deviceid;
 		this.devphyid = devphyid;
 		this.devname = devname;
 		this.ip = ip;
 		this.operflag = operflag;
-		this.syncflag = syncfalg;
+		this.syncflag = syncflag;
 		this.synctime = synctime;
 		this.updtime = updtime;
 		this.fdevid = fdevid;
 		this.devtype = devtype;
 		this.devno = devno;
 		this.usetype = usetype;
+		this.buildingid = buildingid;
+		this.buildingname = buildingname;
+		this.regionid = regionid;
 	}
 
 	// Property accessors
@@ -115,15 +118,6 @@
 		this.operflag = operflag;
 	}
 
-	@Column(name = "SYNCFALG", length = 3)
-	public String getSyncfalg() {
-		return this.syncflag;
-	}
-
-	public void setSyncfalg(String syncfalg) {
-		this.syncflag = syncfalg;
-	}
-
 	@Column(name = "SYNCTIME", length = 20)
 	public String getSynctime() {
 		return this.synctime;
@@ -195,4 +189,22 @@
 	public void setBuildingname(String buildingname) {
 		this.buildingname = buildingname;
 	}
+
+	@Column(name = "SYNCFLAG",length = 3)
+	public String getSyncflag() {
+		return syncflag;
+	}
+
+	public void setSyncflag(String syncflag) {
+		this.syncflag = syncflag;
+	}
+
+	@Column(name = "REGIONID",length = 32)
+	public String getRegionid() {
+		return regionid;
+	}
+
+	public void setRegionid(String regionid) {
+		this.regionid = regionid;
+	}
 }
\ No newline at end of file
diff --git a/src/main/java/com/supwisdom/dlpay/ncmgr/service/NcService.java b/src/main/java/com/supwisdom/dlpay/ncmgr/service/NcService.java
index 6c09ff9..de45972 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/service/NcService.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/service/NcService.java
@@ -9,7 +9,10 @@
 
 public interface NcService {
     //根据查询条件分页获取所有设备
-    public Pagination getNcDeviceWithPage(String devname, int pageNo, int pageSize, Map map, String buildingname,String regionname, String devtype);
+    public Pagination getSystemNcDeviceWithPage(String devname, int pageNo, int pageSize, Map map, String buildingid,String regionid, String devtype);
+
+    //根据查询条件分页获取管理员设备--- 实际与管理员dao层方法一致，只是regionid传入管理员权限区域id
+    public Pagination getOperatorNcDeviceWithPage(String devname,int pageNo,int pageSize, String buildingid,String regionid,String devtype);
 
     //获取所有楼栋信息
     public List<TBuilding> getAllBuilding();
@@ -21,7 +24,10 @@
     public TBuilding getBuidingById(String id);
 
     //根据设备类型获取所有设备
-    public List<TNcDevice> getDevByType(String type);
+    public List<TNcDevice> getSystemDevByType(String type);
+
+    //根据设备类型获取操作员权限设备
+    public List<TNcDevice> getOperatorDevByType(String type,String regionid);
 
     //根据设备id获取设备
     public TNcDevice findDevById(int id);
diff --git a/src/main/java/com/supwisdom/dlpay/ncmgr/service/impl/NcServiceImpl.java b/src/main/java/com/supwisdom/dlpay/ncmgr/service/impl/NcServiceImpl.java
index 551fdfb..c76c9e7 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/service/impl/NcServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/service/impl/NcServiceImpl.java
@@ -28,13 +28,18 @@
 
 
     @Override
-    public Pagination getNcDeviceWithPage(String devname, int pageNo, int pageSize, Map map, String buildingname,String regionname, String devtype) {
-        Pagination page = ncDeviceDao.getNcDeviceWithPage(devname, pageNo, pageSize, buildingname,regionname, devtype);
+    public Pagination getSystemNcDeviceWithPage(String devname, int pageNo, int pageSize, Map map, String buildingid,String regionid, String devtype) {
+        Pagination page = ncDeviceDao.getSystemNcDeviceWithPage(devname, pageNo, pageSize, buildingid,regionid, devtype);
         map.put("devPage", page);
         return page;
     }
 
     @Override
+    public Pagination getOperatorNcDeviceWithPage(String devname, int pageNo, int pageSize, String buildingid, String regionid, String devtype) {
+        return ncDeviceDao.getSystemNcDeviceWithPage(devname, pageNo, pageSize, buildingid, regionid, devtype);
+    }
+
+    @Override
     public List<TBuilding> getAllBuilding() {
         return ncDeviceDao.getAllBuilding();
     }
@@ -50,8 +55,13 @@
     }
 
     @Override
-    public List<TNcDevice> getDevByType(String type) {
-        return ncDeviceDao.getDevByType(type);
+    public List<TNcDevice> getSystemDevByType(String type) {
+        return ncDeviceDao.getSystemDevByType(type);
+    }
+
+    @Override
+    public List<TNcDevice> getOperatorDevByType(String type,String regionid) {
+        return ncDeviceDao.getOperatorDevByType(type,regionid);
     }
 
     @Override
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 3fa49bf..ffff38f 100644
--- a/src/main/java/com/supwisdom/dlpay/system/controller/SystemController.java
+++ b/src/main/java/com/supwisdom/dlpay/system/controller/SystemController.java
@@ -417,15 +417,19 @@
         try {
             String opertype = operUser.getOpertype();
             Pagination page = null;
-            page = systemService.getSystemBuildingList(regionid, buildingname, pageNo, pageSize);
-            map.put("pageResult", page);
+
 
             List<TRegion> regionList = null;
             if (!StringUtil.isEmpty(opertype) &&(opertype.equals("S")||opertype.equals("P"))){
                 regionList = systemService.getAllRegions();
+                page = systemService.getSystemBuildingList(regionid, buildingname, pageNo, pageSize);
+                map.put("pageResult", page);
             }else if (!StringUtil.isEmpty(operUser.getRegionid())){
                 TRegion region = systemService.getRegionById(operUser.getRegionid());
                 regionList.add(region);
+                page = systemService.getSystemBuildingList(operUser.getRegionid(), buildingname, pageNo, pageSize);//regionid固定为管理员的权限区域id
+                map.put("pageResult", page);
+
             }
             map.put("regionList", regionList);
 
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 90c93f2..0bebeeb 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
@@ -20,8 +20,14 @@
     @Transactional
     @Override
     public List<TBuilding> getBuildingByRegionId(String regionid) {
-        String sql = "select bean from TBuilding bean where bean.flag='A' and bean.regionid=:regionid ";
-        TypedQuery<TBuilding> query = entityManager.createQuery(sql, TBuilding.class);
+        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);
         query.setParameter("regionid", regionid);
         List<TBuilding> list = query.getResultList();
         if (list!=null && list.size()>0){
diff --git a/src/main/resources/templates/ncmgr/nc_dev.html b/src/main/resources/templates/ncmgr/nc_dev.html
index b94c176..b4521e3 100644
--- a/src/main/resources/templates/ncmgr/nc_dev.html
+++ b/src/main/resources/templates/ncmgr/nc_dev.html
@@ -27,6 +27,7 @@
                         <div class="col-md-8 col-sm-12 col-xs-12">
                             <el-select v-model="devform.devtype"
                                        filterable
+                                       clearable
                                        @Change="devtypeChange"
                                        placeholder="请选择">
                                 <el-option
@@ -44,7 +45,18 @@
                         <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-input v-model="devform.regionname" id="regionname"></el-input>
+                            <el-select v-model="devform.regionid"
+                                       filterable
+                                       clearable
+                                       @Change="regionChange"
+                                       placeholder="请选择">
+                                <el-option
+                                        v-for="regionid in regions"
+                                        :key="regionid.value"
+                                        :label="regionid.label"
+                                        :value="regionid.value">
+                                </el-option>
+                            </el-select>
                         </div>
                     </div>
                 </div>
@@ -54,7 +66,17 @@
                         <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-input v-model="devform.buildingname" id="buildingname"></el-input>
+                            <el-select v-model="devform.buildingid"
+                                       filterable
+                                       clearable
+                                       placeholder="请选择">
+                                <el-option
+                                        v-for="buildingid in buildings"
+                                        :key="buildingid.value"
+                                        :label="buildingid.label"
+                                        :value="buildingid.value">
+                                </el-option>
+                            </el-select>
                         </div>
                     </div>
                 </div>
@@ -93,7 +115,7 @@
                     <el-table-column
                             prop="devno"
                             label="读头号"
-                            width="120">
+                            width="100">
                     </el-table-column>
                     <el-table-column
                             prop="devname"
@@ -112,9 +134,9 @@
                             width="140">
                     </el-table-column>
                     <el-table-column
-                            prop="regionname"
-                            label="设备所属区域"
-                            width="140">
+                            prop="regionid"
+                            label="区域编号"
+                            width="100">
                     </el-table-column>
                     <el-table-column
                             prop="ip"
@@ -247,15 +269,30 @@
                             </el-input>
                         </el-col>
                     </el-form-item>
+                    <el-form-item label="所在区域:" prop="regionid">
+                        <el-col :span="18">
+                            <el-select v-model="devUpform.regionid"
+                                       style="width: 187px;" clearable
+                                       filterable
+                                       @Change="regionfillChange"
+                                       placeholder="请选择">
+                                <el-option
+                                        v-for="regionid in regionsfill"
+                                        :key="regionid.value"
+                                        :label="regionid.label"
+                                        :value="regionid.value">
+                                </el-option>
+                            </el-select>
+                        </el-col>
+                    </el-form-item>
                     <el-form-item label="所在楼栋:" prop="buildingid">
                         <el-col :span="18">
                             <el-select v-model="devUpform.buildingid"
                                        style="width: 187px;" clearable
                                        filterable
-                                       :disabled="buildingDis"
                                        placeholder="请选择">
                                 <el-option
-                                        v-for="buildingid in buildings"
+                                        v-for="buildingid in buildingsfill"
                                         :key="buildingid.value"
                                         :label="buildingid.label"
                                         :value="buildingid.value">
@@ -316,15 +353,18 @@
             phyDis: false,
             devform: {
                 devname: '',
-                buildingname: '',
+                buildingid: '',
                 devtype: '',
-                regionname:''
+                regionid:''
             },
+            regions:[],
+            regionsfill:[],
+            buildings:[],
+            buildingsfill:[],
             checkvisible: true,
             continueadd: true,
             devtypes: [],
             fdevs: [],
-            buildings:[],
             devusetypes: [],
             dialogFormVisible: false,
             dlgAllotDevVisible: false,
@@ -339,6 +379,7 @@
                 devno: '',
                 ip: '',
                 buildingid:'',
+                regionid:''
             },
 
             rules: {
@@ -357,7 +398,13 @@
                 ],
                 devno: [
                     {validator: validatePass, trigger: 'blur'}
-                ]
+                ],
+                regionid: [
+                    {required: true, message: '请选择设备所在区域', trigger: 'blur'}
+                ],
+                buildingid: [
+                    {required: true, message: '请选择设备所在楼栋', trigger: 'blur'}
+                ],
             },
             usetypeVals: [],
             usetypeNames: []
@@ -439,6 +486,14 @@
                     //this.checkvisible=false;
                 }
             },
+            regionChange:function(value){
+                this.buildings=[];
+                getRegionBuilding(this,value);
+            },
+            regionfillChange:function(value){
+                this.buildingsfill=[];
+                getRegionBuildingfill(this,value);
+            },
             editDev: function (deviceid) {
                 this.devnoDis = false;
                 this.fdevDis = false;
@@ -498,16 +553,35 @@
             $.ajax({
                 type: "get",
                 dataType: "json",
-                url: "/ncmgr/loadDevList?devname=",
+                url: "/ncmgr/loadDevList",
                 success: function (ret) {
                     //console.log(ret);
                     _self.totSize = ret.PageResult.totalCount;
                     _self.tableData = ret.PageResult.list;
+
+                    var rt = ret.regions;
+                    var uows = [];
+                    uows.push({
+                        value:'',
+                        label:''
+                    });
+                    if (rt.length==1){
+                        vue.devform.regionid = rt[0].regionid;
+                    }
+                    for (var j=0;j<rt.length;j++){
+                        uows.push({
+                            value: rt[j].regionid,
+                            label: rt[j].regionname
+                        });
+                    }
+
+
+
                     var ut = ret.buildings;
                     var rows = [];
                     rows.push({
                         value: '',
-                        label: ""
+                        label: ''
                     });
                     for (var i = 0; i < ut.length; i++) {
                         rows.push({
@@ -531,8 +605,9 @@
                         });
                     }
                     vue.devtypes = dictlist;
+                    vue.regions = uows;
                     vue.buildings = rows;
-                    vue.devform.builddingname = '';
+
                 }
             })
         }
@@ -550,7 +625,7 @@
         $.ajax({
             type: "get",
             dataType: "json",
-            url: encodeURI("/ncmgr/loadDevList?devname=" + rolename.devname + "&pageNo=" + pageno + "&pageSize=" + pagesize + "&buildingname=" + rolename.buildingname + "&devtype=" + rolename.devtype+"&regionname="+rolename.regionname),
+            url: encodeURI("/ncmgr/loadDevList?devname=" + rolename.devname + "&pageNo=" + pageno + "&pageSize=" + pagesize + "&buildingid=" + rolename.buildingid + "&devtype=" + rolename.devtype+"&regionid="+rolename.regionid),
             success: function (ret) {
                 _self.totSize = ret.PageResult.totalCount;
                 _self.tableData = ret.PageResult.list;
@@ -593,8 +668,17 @@
                         value: dev[i].deviceid
                     });
                 }
+                var regionlist=[];
+                var regiondata = ret.regionsfill;
+                for (var i = 0; i < regiondata.length; i++) {
+                    regionlist.push({
+                        label: regiondata[i].regionname,
+                        value: regiondata[i].regionid
+                    });
+                }
+
                 var buildinglist=[];
-                var buildingdata = ret.buildings;
+                var buildingdata = ret.buildingsfill;
                 for (var i = 0; i < buildingdata.length; i++) {
                     buildinglist.push({
                         label: buildingdata[i].buildingname,
@@ -618,11 +702,14 @@
                     _self.devUpform.usetype = ret.device.usetype;
                     _self.devUpform.fdevid = ret.device.fdevid;
                     _self.devUpform.ip = ret.device.ip;
+                    _self.devUpform.regionid = ret.device.regionid;
+                    _self.devUpform.buildingid = ret.device.buildingid;
 
                 }
                 _self.devtypes = dictlist;
                 _self.fdevs = devlist;
-                _self.buildings = buildinglist;
+                _self.regionsfill = regionlist;
+                _self.buildingsfill = buildinglist;
                 _self.devusetypes = devUseType;
             }
         })
@@ -754,4 +841,48 @@
         });
     }
 
+    function getRegionBuilding(_self,value){
+        $.ajax({
+            type: "get",
+            dataType: "json",
+            url: encodeURI("/ncmgr/getRegionBuilding?regionid=" + value),
+            success: function (ret) {
+                var bList = [];
+                var rB = ret.reBuilding;
+                if (rB!=null) {
+                    for (var j = 0; j < rB.length; j++) {
+                        bList.push({
+                            value: rB[j]["buildingid"],
+                            label: rB[j]["buildingname"]
+                        });
+                    }
+                }
+
+                _self.buildings = bList;
+            }
+        })
+    }
+
+    function getRegionBuildingfill(_self,value) {
+        $.ajax({
+            type: "get",
+            dataType: "json",
+            url: encodeURI("/ncmgr/getRegionBuilding?regionid=" + value),
+            success: function (ret) {
+                var bfList = [];
+                var rBf = ret.reBuilding;
+                if (rBf != null) {
+                    for (var j = 0; j < rBf.length; j++) {
+                        bfList.push({
+                            value: rBf[j]["buildingid"],
+                            label: rBf[j]["buildingname"]
+                        });
+                    }
+                }
+
+                _self.buildingsfill = bfList;
+            }
+        })
+    }
+
 </script>
\ No newline at end of file
