diff --git a/src/main/java/com/supwisdom/dlpay/system/bean/RegionZTreeNodes.java b/src/main/java/com/supwisdom/dlpay/system/bean/RegionZTreeNodes.java
new file mode 100644
index 0000000..635ea74
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/system/bean/RegionZTreeNodes.java
@@ -0,0 +1,49 @@
+package com.supwisdom.dlpay.system.bean;
+
+public class RegionZTreeNodes {
+    private String id;
+    private String pId;
+    private String  name;
+    private boolean isParent;
+    private boolean open;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getpId() {
+        return pId;
+    }
+
+    public void setpId(String pId) {
+        this.pId = pId;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public boolean isParent() {
+        return isParent;
+    }
+
+    public void setParent(boolean parent) {
+        isParent = parent;
+    }
+
+    public boolean isOpen() {
+        return open;
+    }
+
+    public void setOpen(boolean open) {
+        this.open = open;
+    }
+}
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 c5409c5..605449e 100644
--- a/src/main/java/com/supwisdom/dlpay/system/controller/SystemController.java
+++ b/src/main/java/com/supwisdom/dlpay/system/controller/SystemController.java
@@ -9,6 +9,7 @@
 import com.supwisdom.dlpay.system.bean.AllotBuildingBean;
 import com.supwisdom.dlpay.system.bean.BuildingBean;
 import com.supwisdom.dlpay.system.bean.RegionBean;
+import com.supwisdom.dlpay.system.bean.RegionZTreeNodes;
 import com.supwisdom.dlpay.system.domain.*;
 import com.supwisdom.dlpay.system.page.Pagination;
 import com.supwisdom.dlpay.system.service.SystemService;
@@ -423,6 +424,21 @@
         return map;
     }
 
+
+    /**
+     * 填充区域树
+     * @param operator
+     * @return
+     */
+    @ResponseBody
+    @RequestMapping("/fillRegionTree")
+    public Map fillRegionTree(@AuthenticationPrincipal TOperator operator){
+        Map map = new HashMap();
+        List<RegionZTreeNodes> regionTreeList = systemService.getAllRegionTreeList();
+        map.put("regionTree", regionTreeList);
+        return map;
+    }
+
     /**
      * 根据查询条件分页获取楼栋
      * @param request
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 d9402a6..ff84e30 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/SystemService.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/SystemService.java
@@ -3,6 +3,7 @@
 
 import com.supwisdom.dlpay.ncmgr.domain.TBuilding;
 import com.supwisdom.dlpay.system.bean.AllotBuildingBean;
+import com.supwisdom.dlpay.system.bean.RegionZTreeNodes;
 import com.supwisdom.dlpay.system.domain.*;
 import com.supwisdom.dlpay.system.page.Pagination;
 
@@ -80,6 +81,9 @@
     //修改区域
     public boolean updateRegion(TRegion bean);
 
+    //获取区域树形数据
+    public List<RegionZTreeNodes> getAllRegionTreeList();
+
 
     //根据查询条件分页获取所有楼栋
     public Pagination getSystemBuildingList(String regionid,String buildingname,int pageNo,int pageSize);
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 9205dda..3cbe761 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
@@ -2,6 +2,7 @@
 
 import com.supwisdom.dlpay.ncmgr.domain.TBuilding;
 import com.supwisdom.dlpay.system.bean.AllotBuildingBean;
+import com.supwisdom.dlpay.system.bean.RegionZTreeNodes;
 import com.supwisdom.dlpay.system.dao.BuildingDao;
 import com.supwisdom.dlpay.system.dao.DictionaryDao;
 import com.supwisdom.dlpay.system.dao.OperatorDao;
@@ -12,6 +13,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.List;
 
 @Service
@@ -149,6 +151,22 @@
         return regionDao.updateRegion(bean);
     }
 
+    @Override
+    public List<RegionZTreeNodes> getAllRegionTreeList() {
+        List<RegionZTreeNodes> regionZTreeNodesList = new ArrayList<>();
+        List<TRegion> regions = regionDao.getAllRegions();
+        for (TRegion region:regions){
+            RegionZTreeNodes node = new RegionZTreeNodes();
+            node.setId(region.getRegionid());
+            node.setName(region.getRegionname()+"-"+region.getLevel()+"级");
+            node.setpId(region.getParentid());
+            node.setParent(false);
+            regionZTreeNodesList.add(node);
+        }
+
+        return regionZTreeNodesList;
+    }
+
 
     @Override
     public Pagination getSystemBuildingList(String regionid, String buildingname, int pageNo, int pageSize) {
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index b17f28c..3421309 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -31,6 +31,8 @@
 server.tomcat.uri-encoding=UTF-8
 
 ################################################
+
+spring.servlet.multipart.max-file-size=10MB
 # user password
 auth.password.bcrypt.length=10
 
diff --git a/src/main/resources/templates/doorlist/impCustomerlist.html b/src/main/resources/templates/doorlist/impCustomerlist.html
index 884f36b..89a31b4 100644
--- a/src/main/resources/templates/doorlist/impCustomerlist.html
+++ b/src/main/resources/templates/doorlist/impCustomerlist.html
@@ -7,7 +7,10 @@
         </span>
     </div>
     <div class="layui-card-body">
-        <div id="impCustomerlist">
+        <div id="impCustomerlist" v-loading.lock="loading"
+             element-loading-text="拼命导入ing不要取消~~~"
+             element-loading-spinner="el-icon-loading"
+             element-loading-background="rgba(0, 0, 0, 0.8)">
             <el-alert
                     title="人员名单导入步骤："
                     type="info"
@@ -56,6 +59,8 @@
             exceltable:[],
             textfield:'',
 
+            loading:false,
+
             per_sheetname:'sheet1',
             impDoorForm:{
             }
@@ -81,16 +86,23 @@
                 var path=JSON.parse(JSON.stringify(this.textfield));
                 console.log(path);
                 var file=path.substring(path.lastIndexOf(".") + 1);
+
                 impCustomerlist_uploadExcel(path,file);
                 this.textfield='';
 
+
             },
+
+
+
         },
         created:function(){
 
         }
     });
 
+
+
     function impCustomerlist_uploadExcel(path,file) {
         if (path.length == 0) {
             layer.msg('请选择要上传的文件!', {icon: 2, time: 1000});
@@ -113,6 +125,7 @@
 
                     $('#excelTable').show();
                     var token=$("meta[name='_csrf_token']").attr("value");
+                    impCustomerlist_vue.loading = true;
                     var options = {
                         success:   "",
                         type:      'post',
@@ -126,6 +139,7 @@
                         //data: formData,
                         success:function(data){
                             //console.log(data);
+                            impCustomerlist_vue.loading = false;
                             if (data.flag==1){
                                 var tmpStr = "共："+data.imp_totCnt+"条，成功："+data.imp_succCnt+"条，失败："+data.imp_errCnt+"条";
                                 layer.alert('人员名单导入完成-->'+tmpStr, {icon: 6});
diff --git a/src/main/resources/templates/system/region.html b/src/main/resources/templates/system/region.html
index bdcb65d..5bdffbe 100644
--- a/src/main/resources/templates/system/region.html
+++ b/src/main/resources/templates/system/region.html
@@ -19,11 +19,11 @@
                         </div>
                     </div>
                 </div>
-                <div class="col-md-3">
+                <div class="col-md-6">
                     <div class="form-group">
                         <button type="button" class="btn btn-info" @click="query" id="region_qrybtn">查 询</button>
                         <button class="btn btn-primary" type="button" @click="addRegion">添加区域</button>
-                        <!--<button class="btn btn-info" type="button" @click="lookTree">查看区域树形图</button>-->
+                        <button class="btn btn-info" type="button" @click="lookTree">查看区域树形图</button>
                     </div>
                 </div>
             </el-form>
@@ -143,6 +143,23 @@
                     <el-button type="primary" @click="saveRegion('regionDiaForm')">确 定</el-button>
                 </div>
             </el-dialog>
+
+            <!--区域树形图-->
+            <el-dialog :title="regionTreetitile" :visible.sync="dialogTreeVisible"  :modal-append-to-body='false' >
+                <el-input
+                        placeholder="输入关键字进行过滤"
+                        v-model="filterText">
+                </el-input>
+
+                <el-tree
+                        class="filter-tree"
+                        :data="regionTreeList"
+                        :props="defaultProps"
+                        default-expand-all
+                        :filter-node-method="filterNode"
+                        ref="tree">
+                </el-tree>
+            </el-dialog>
         </div>
     </div>
 </div>
@@ -161,6 +178,7 @@
                 regionname:''
             },
             dialogFormVisible: false,
+            dialogTreeVisible: false,
             regionidDis:false,
             dlgAllotDevVisible:false,
             parentRegions:[],
@@ -186,6 +204,19 @@
                 ]
             },
             regiontitile:'添加区域',
+            regionTreetitile:'区域树形图',
+
+            filterText: '',
+            regionTreeList: [],
+            defaultProps: {
+                children: 'children',
+                label: 'label'
+            }
+        },
+        watch:{
+            filterText(val) {
+                this.$refs.tree.filter(val);
+            }
         },
         methods:{
             handleSizeChange:function(val) {
@@ -247,6 +278,15 @@
             },
             levelform: function (row, column, cellValue) {
                 return row.level+"级";
+            },
+            lookTree:function () {
+                region_fillTree(this);
+                this.dialogTreeVisible = true;
+
+            },
+            filterNode(value, data) {
+                if (!value) return true;
+                return data.label.indexOf(value) !== -1;
             }
         },
         created:function(){
@@ -355,9 +395,59 @@
         })
     }
 
-   /* function lookTree(){
-        alert(tree);
-    }*/
+    function region_fillTree(_self){
+        $.ajax({
+            type: "get",
+            url: encodeURI("[[@{/system/fillRegionTree}]]"),
+            dataType: "json",
+            contentType: "application/json",
+            success: function (data) {
+
+                _self.regionTreeList = getTreeData(data.regionTree) ;
+            }
+        });
+    }
+
+    function getTreeData(regionlst){
+        var f = [];
+
+        //获取第一级
+        for(var i=0;i<regionlst.length;i++){
+            if(regionlst[i].pId == 0){
+                f.push({
+                    id:regionlst[i].id,
+                    label:regionlst[i].name,
+                    children:[]
+                })
+            }
+        }
+        if(f.length>0){
+            //获取第二级
+            pushRegion(regionlst,f);
+        }
+        for(var i in f){
+            var s = f[i].children;
+            if(s.length>0){
+                pushRegion(regionlst,s);
+            }
+        }
+
+        return f;
+    }
+
+    function pushRegion(regionlst,pRe){
+        for(var i in regionlst){
+            for(var j in pRe){
+                if(regionlst[i].pId == pRe[j].id){
+                    pRe[j].children.push({
+                        id:regionlst[i].id,
+                        label:regionlst[i].name,
+                        children:[]
+                    })
+                }
+            }
+        }
+    }
 
 
     function region_saveData(_that,formdata,formName){
