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 6cd7f45..a8f6bb1 100644
--- a/src/main/java/com/supwisdom/dlpay/customer/controller/CustomerController.java
+++ b/src/main/java/com/supwisdom/dlpay/customer/controller/CustomerController.java
@@ -69,7 +69,7 @@
     public PageResult<TCustomerInfo> getDataList(@RequestParam("page") Integer pageNo,
                                                  @RequestParam("limit") Integer pageSize,
                                                  @RequestParam(value = "custname", required = false) String custname,
-                                     //            @RequestParam(value = "deptcode", required = false) String deptcode,
+                                                 @RequestParam(value = "deptcode", required = false) String deptcode,
                                                  @AuthenticationPrincipal TOperator operUser) {
         try {
             if (null == pageNo || pageNo < 1) pageNo = WebConstant.PAGENO_DEFAULT;
@@ -78,7 +78,6 @@
             searchBean.setPageNo(pageNo);
             searchBean.setCustname(custname);
             searchBean.setPageSize(pageSize);
-            String deptcode="";
             if (StringUtil.isEmpty(deptcode)&&!"S".equals(operUser.getOpertype())) {
                 deptcode = operUser.getDeptcode();
             }
@@ -137,8 +136,12 @@
 
     @GetMapping("/depttree")
     @ResponseBody
-    public List<TreeSelectNode> searchDeptTree() {
-        List<TreeSelectNode> tree = systemService.getDeptSelectTree();
+    public List<TreeSelectNode> searchDeptTree(@AuthenticationPrincipal TOperator operUser) {
+        String deptcode="";
+        if (!"S".equals(operUser.getOpertype())) {
+            deptcode = operUser.getDeptcode();
+        }
+        List<TreeSelectNode> tree = systemService.getDeptSelectTree(deptcode);
         return tree;
     }
 
diff --git a/src/main/java/com/supwisdom/dlpay/framework/filter/CrosXssFilter.java b/src/main/java/com/supwisdom/dlpay/framework/filter/CrosXssFilter.java
index eafa20c..fa7024a 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/filter/CrosXssFilter.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/filter/CrosXssFilter.java
@@ -40,7 +40,7 @@
 
     //sql,xss过滤
     HttpServletRequest httpServletRequest = (HttpServletRequest) request;
-    logger.info("CrosXssFilter.......orignal url:{},ParameterMap:{}",httpServletRequest.getRequestURI(), new Gson().toJson(httpServletRequest.getParameterMap()));
+   // logger.info("CrosXssFilter.......orignal url:{},ParameterMap:{}",httpServletRequest.getRequestURI(), new Gson().toJson(httpServletRequest.getParameterMap()));
     XssHttpServletRequestWrapper xssHttpServletRequestWrapper = new XssHttpServletRequestWrapper(
         httpServletRequest);
     chain.doFilter(xssHttpServletRequestWrapper, response);
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 12a2bba..c4fe2c8 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/SystemService.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/SystemService.java
@@ -242,6 +242,6 @@
     TDept getDeptByDeptno(String deptno);
 
     @Transactional(rollbackFor = Exception.class, readOnly = true)
-    List<TreeSelectNode> getDeptSelectTree();
+    List<TreeSelectNode> getDeptSelectTree(String deptcode);
 
 }
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 ef8b1a0..6bea91e 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
@@ -1,6 +1,7 @@
 package com.supwisdom.dlpay.system.service.impl;
 
 import com.supwisdom.dlpay.api.bean.JsonResult;
+import com.supwisdom.dlpay.customer.bean.TCustomerExportBean;
 import com.supwisdom.dlpay.framework.util.DateUtil;
 import com.supwisdom.dlpay.framework.util.PageResult;
 import com.supwisdom.dlpay.framework.util.StringUtil;
@@ -11,6 +12,8 @@
 import com.supwisdom.dlpay.system.domain.*;
 import com.supwisdom.dlpay.system.page.Pagination;
 import com.supwisdom.dlpay.system.service.SystemService;
+import org.hibernate.query.internal.NativeQueryImpl;
+import org.hibernate.transform.Transformers;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.Cacheable;
@@ -19,6 +22,9 @@
 import org.springframework.data.domain.Sort;
 import org.springframework.stereotype.Service;
 
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -41,6 +47,10 @@
     @Autowired
     private CustomerDao customerDao;
 
+    @PersistenceContext
+    EntityManager entityManager;
+
+
     @Override
     @CacheEvict(cacheNames = "door_dictionary_cache", key = "'.*'", allEntries = true)
     public void refreshCache() {
@@ -390,21 +400,30 @@
         return dept.size()>0?dept.get(0):null;
     }
 
-    public List<TreeSelectNode> getDeptSelectTree() {
-        List<TDept> groupList = deptDao.findAll();
+    public List<TreeSelectNode> getDeptSelectTree(String deptcode) {
+        List<TDept> groupList;
+        String pid;
+        if(StringUtil.isEmpty(deptcode)){
+            groupList = deptDao.findAll();
+            pid="-1";
+        }else{
+            groupList=getChildDeptlist(deptcode);
+            pid="0";
+        }
+
         if (StringUtil.isEmpty(groupList)) return new ArrayList<>(0);
-        return getDeptTree(groupList, "-1");
+        return getDeptTree(groupList, pid);
     }
 
     private List<TreeSelectNode> getDeptTree(List<TDept> groupList, String pid) {
         List<TreeSelectNode> result = new ArrayList<>(0);
         for (TDept gp : groupList) {
-            if (("-1".equals(pid) && "-1".equals(gp.getFdeptcode())) || (null != pid && pid.equals(gp.getFdeptcode()))) {
+     //       if (("-1".equals(pid) && "-1".equals(gp.getFdeptcode())) || (null != pid && pid.equals(gp.getFdeptcode()))) {
+            if ( (null != pid && pid.equals(gp.getFdeptcode()))) {
                 TreeSelectNode node = new TreeSelectNode();
                 node.setId(gp.getDeptcode());
                 node.setName(gp.getDeptname());
                 node.setOpen(true);
-              //  node.setGrouptype(gp.getGrouptype());
                 node.setChecked(false);
                 List<TreeSelectNode> children = getDeptTree(groupList, gp.getDeptcode());
                 if (!StringUtil.isEmpty(children)) {
@@ -417,4 +436,21 @@
         }
         return result;
     }
+
+
+    private  List<TDept> getChildDeptlist( String deptcode) {
+        List<TDept> childdplist=null;
+        if (!StringUtil.isEmpty(deptcode)) {
+            Query query = 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 * from r order by deptno");
+            query.setParameter("deptcode", deptcode);
+
+            query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(TDept.class));
+            childdplist = query.getResultList();
+        }
+        return childdplist;
+    }
 }
diff --git a/src/main/resources/templates/doorlist/customer/index.html b/src/main/resources/templates/doorlist/customer/index.html
index ebab5f3..2f6513a 100644
--- a/src/main/resources/templates/doorlist/customer/index.html
+++ b/src/main/resources/templates/doorlist/customer/index.html
@@ -9,10 +9,14 @@
     <div class="layui-card-body">
         <div class="layui-form toolbar">
             搜索：
-            <input id="customer-search-value" class="layui-input search-input" type="text" placeholder="输入姓名"/>
-           <!-- <input id="search-customer-deptcode" type="text"
-                   lay-filter="search-customer-deptcode-filter" autocomplete="off"
-                   class="layui-input search-input"/>-->
+            <div class="layui-inline" style="margin-right: 20px;">
+                <input id="customer-search-value" class="layui-input search-input" type="text" placeholder="输入姓名"
+                style="margin-right: 20px"/>
+                <input id="search-customer-deptcode" type="text"
+                       lay-filter="search-customer-deptcode-filter" autocomplete="off"
+                       class="layui-input search-input"/>
+            </div>
+
             <button id="customer-btn-search" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
             </button>
             <button id="customer-btn-add" class="layui-btn icon-btn" data-type="add"><i class="layui-icon"></i>添加人员</button>
@@ -34,11 +38,12 @@
         let form = layui.form;
         let table = layui.table;
         let admin = layui.admin;
-     //   var treeSelect = layui.treeSelect;
         var $ = layui.$;
 
         form.render("select");
-       /* treeSelect.render({
+
+        var treeSelect=layui.treeSelect;
+        treeSelect.render({
             elem: '#search-customer-deptcode',
             data: '[[@{/customer/depttree}]]',
             type: 'get',
@@ -61,7 +66,8 @@
             success: function (d) {
                 console.log(d); // 加载完成后的回调函数
             }
-        });*/
+        });
+
         // 渲染表格
         table.render({
             elem: '#customer-table',
@@ -144,9 +150,9 @@
         // 搜索按钮点击事件
         $('#customer-btn-search').click(function () {
             let key = $('#customer-search-value').val().trim();
-          //  let deptcode=$('#customer-deptcode').val();
+            let deptcode=$('#search-customer-deptcode').val();
 
-            table.reload('customer-table', {where: {custname: key}, page: {curr: 1}});
+            table.reload('customer-table', {where: {custname: key,deptcode:deptcode}, page: {curr: 1}});
         });
         $('#customer-btn-add').click(function () {
             showModel();
