diff --git a/src/main/java/com/supwisdom/dlpay/customer/bean/CustomerSearchBean.java b/src/main/java/com/supwisdom/dlpay/customer/bean/CustomerSearchBean.java
index ee53c17..54ca392 100644
--- a/src/main/java/com/supwisdom/dlpay/customer/bean/CustomerSearchBean.java
+++ b/src/main/java/com/supwisdom/dlpay/customer/bean/CustomerSearchBean.java
@@ -5,6 +5,7 @@
 public class CustomerSearchBean extends PageBean {
     private String custname;
     private String checkstatus;
+    private String deptcode;
 
     public String getCustname() {
         return custname;
@@ -14,6 +15,14 @@
         this.custname = custname;
     }
 
+    public String getDeptcode() {
+        return deptcode;
+    }
+
+    public void setDeptcode(String deptcode) {
+        this.deptcode = deptcode;
+    }
+
     public String getCheckstatus() {
         return checkstatus;
     }
diff --git a/src/main/java/com/supwisdom/dlpay/customer/controller/CustomerController.java b/src/main/java/com/supwisdom/dlpay/customer/controller/CustomerController.java
index ef6727c..bd11ebf 100644
--- a/src/main/java/com/supwisdom/dlpay/customer/controller/CustomerController.java
+++ b/src/main/java/com/supwisdom/dlpay/customer/controller/CustomerController.java
@@ -12,6 +12,7 @@
 import com.supwisdom.dlpay.framework.domain.TOperator;
 import com.supwisdom.dlpay.framework.util.DateUtil;
 import com.supwisdom.dlpay.framework.util.PageResult;
+import com.supwisdom.dlpay.framework.util.StringUtil;
 import com.supwisdom.dlpay.framework.util.WebConstant;
 import com.supwisdom.dlpay.mainservice.service.WebInterfaceService;
 import com.supwisdom.dlpay.paysdk.proxy.UserProxy;
@@ -55,7 +56,8 @@
     @ResponseBody
     public PageResult<TCustomerInfo> getDataList(@RequestParam("page") Integer pageNo,
                                                  @RequestParam("limit") Integer pageSize,
-                                                 @RequestParam(value = "searchkey", required = false) String searchKey) {
+                                                 @RequestParam(value = "searchkey", required = false) String searchKey,
+                                                 @AuthenticationPrincipal TOperator operUser) {
         try {
             if (null == pageNo || pageNo < 1) pageNo = WebConstant.PAGENO_DEFAULT;
             if (null == pageSize || pageSize < 1) pageSize = WebConstant.PAGESIZE_DEFAULT;
@@ -63,6 +65,11 @@
             searchBean.setPageNo(pageNo);
             searchBean.setCustname(searchKey);
             searchBean.setPageSize(pageSize);
+            String deptcode=operUser.getDeptcode();
+            if(!StringUtil.isEmpty(deptcode)){
+                searchBean.setDeptcode(deptcode);
+            }
+
             PageResult<TCustomerInfo> bean= webInterfaceService.getCustomerInfoPage(searchBean);
 
             return bean;
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 2e7c8de..6894c2f 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
@@ -6,6 +6,7 @@
 import com.supwisdom.dlpay.framework.util.StringUtil;
 import com.supwisdom.dlpay.mainservice.dao.CustomerDao;
 import com.supwisdom.dlpay.mainservice.domain.TCustomer;
+import org.apache.commons.lang3.StringUtils;
 import org.hibernate.query.internal.NativeQueryImpl;
 import org.hibernate.transform.Transformers;
 import org.springframework.stereotype.Repository;
@@ -97,6 +98,18 @@
     @Override
     public PageResult<TCustomerInfo> getCustomerInfoPage(CustomerSearchBean param) {
 
+        List<String> childdplist=null;
+        String deptcode=param.getDeptcode();
+        if (!StringUtil.isEmpty(deptcode)&&!"0".equals(deptcode)) {
+            Query chirdGroupQuery = entityManager.createNativeQuery("WITH RECURSIVE r AS(" +
+                    "SELECT * FROM tb_dept WHERE deptcode =:deptcode " +
+                    "union ALL " +
+                    "SELECT t.* FROM tb_dept t, r WHERE t.fdeptcode = r.deptcode) " +
+                    "select deptcode from r order by deptno");
+            chirdGroupQuery.setParameter("deptcode", deptcode);
+            childdplist = chirdGroupQuery.getResultList(); //递归查询所有的子节点
+        }
+
         String perName=param.getCustname();
         String sql = "select a.custid,a.custname,a.deptcode,a.custtypeid,b.cardno,b.bankcardno,b.cardphyid,b.expiredate from T_Customer a left join t_card b on a.custid = b.custid " +
                 " where a.status='1' and b.status='normal' and b.transtatus='normal' ";
@@ -107,6 +120,12 @@
             sql += " and a.custname like :perName ";
             countSql += " and a.custname like :perName ";
         }
+        if (!StringUtil.isEmpty(childdplist)) {
+            sql+=" and a.deptcode in ('"+ StringUtils.join(childdplist.toArray(),"','")+"') ";
+            countSql+=" and a.deptcode in ('"+ StringUtils.join(childdplist.toArray(),"','")+"') ";
+
+        }
+
         sql +=" order by b.cardno desc ";
 
 
diff --git a/src/main/resources/templates/system/operator.html b/src/main/resources/templates/system/operator.html
index 7ca4912..157dca1 100644
--- a/src/main/resources/templates/system/operator.html
+++ b/src/main/resources/templates/system/operator.html
@@ -639,7 +639,7 @@
                     _self.operatorDiaForm.opercode = ret.operator.opercode;
                     _self.operatorDiaForm.opername = ret.operator.opername;
                     _self.operatorDiaForm.opertype = ret.operator.opertype;
-                    _self.operatorDiaForm.roleid = ret.operatorroleid;
+                    _self.operatorDiaForm.roleid = ret.operator.roleid;
                     _self.operatorDiaForm.mobile = ret.operator.mobile;
                     _self.operatorDiaForm.email = ret.operator.email;
                     _self.operatorDiaForm.realname = ret.operator.realname;
@@ -684,6 +684,10 @@
 
                 var deptlist=[];
                 var depts = ret.depts;
+                deptlist.push({
+                    value:"0",
+                    label:"全部"
+                });
                 for (var k=0;k<depts.length;k++){
                     deptlist.push({
                         value:depts[k]["deptcode"],
