流水查询、字典、treeSelect
diff --git a/src/main/java/com/supwisdom/dlpay/api/domain/TPersondtl.java b/src/main/java/com/supwisdom/dlpay/api/domain/TPersondtl.java
index 3db4e5a..d132e79 100644
--- a/src/main/java/com/supwisdom/dlpay/api/domain/TPersondtl.java
+++ b/src/main/java/com/supwisdom/dlpay/api/domain/TPersondtl.java
@@ -20,7 +20,7 @@
   @Column(name = "USERID", length = 32, nullable = false)
   private String userid;  //用户ID,或账号
 
-  @Column(name = "acccno", length = 32)
+  @Column(name = "ACCNO", length = 32)
   private String accountNo;
 
   @Column(name = "USERNAME", length = 200)
diff --git a/src/main/java/com/supwisdom/dlpay/api/domain/TShopdtl.java b/src/main/java/com/supwisdom/dlpay/api/domain/TShopdtl.java
index 681085d..76f97a4 100644
--- a/src/main/java/com/supwisdom/dlpay/api/domain/TShopdtl.java
+++ b/src/main/java/com/supwisdom/dlpay/api/domain/TShopdtl.java
@@ -9,46 +9,46 @@
         @Index(name = "shopdtl_transdate", columnList = "transdate")})
 public class TShopdtl {
   @Id
-  @Column(name = "refno", length = 32, nullable = false)
+  @Column(name = "REFNO", length = 32, nullable = false)
   private String refno;
 
-  @Column(name = "accdate", length = 8, nullable = false)
+  @Column(name = "ACCDATE", length = 8, nullable = false)
   private String accdate;
 
-  @Column(name = "shopaccno", length = 10, nullable = false)
+  @Column(name = "SHOPACCNO", length = 10, nullable = false)
   private String shopaccno;
 
-  @Column(name = "shopname", length = 200)
+  @Column(name = "SHOPNAME", length = 200)
   private String shopname;
 
-  @Column(name = "amount", scale = 2, precision = 15, nullable = false)
+  @Column(name = "AMOUNT", scale = 2, precision = 15, nullable = false)
   private Double amount;
 
-  @Column(name = "transdate", length = 8, nullable = false)
-  private String transDate;
+  @Column(name = "TRANSDATE", length = 8, nullable = false)
+  private String transdate;
 
-  @Column(name = "transtime", length = 6, nullable = false)
-  private String transTime;
+  @Column(name = "TRANSTIME", length = 6, nullable = false)
+  private String transtime;
 
-  @Column(name = "tradecode", precision = 8)
-  private Integer tradeCode;
+  @Column(name = "TRANSCODE", precision = 8)
+  private Integer transcode;
 
-  @Column(name = "sourcetype", length = 20)
+  @Column(name = "SOURCETYPE", length = 20)
   private String sourceType;
 
-  @Column(name = "payinfo", length = 200)
+  @Column(name = "PAYINFO", length = 200)
   private String payInfo;
 
-  @Column(name = "tradeflag", length = 6, nullable = false)
+  @Column(name = "TRADEFLAG", length = 6, nullable = false)
   private String tradeflag; // out - 支出 , in - 收入
 
   @Column(name = "TRANSDESC", length = 240)
   private String transdesc; //交易描述
 
-  @Column(name = "reverseflag", length = 10)
+  @Column(name = "REVERSEFLAG", length = 10)
   private String reverseFlag;
 
-  @Column(name = "status", length = 20)
+  @Column(name = "STATUS", length = 20)
   private String status;
 
   @Column(name = "OPPOSITEACCNO", length = 64)
@@ -100,20 +100,28 @@
     this.amount = amount;
   }
 
-  public String getTransDate() {
-    return transDate;
+  public String getTransdate() {
+    return transdate;
   }
 
-  public void setTransDate(String transDate) {
-    this.transDate = transDate;
+  public void setTransdate(String transdate) {
+    this.transdate = transdate;
   }
 
-  public String getTransTime() {
-    return transTime;
+  public String getTranstime() {
+    return transtime;
   }
 
-  public void setTransTime(String transTime) {
-    this.transTime = transTime;
+  public void setTranstime(String transtime) {
+    this.transtime = transtime;
+  }
+
+  public Integer getTranscode() {
+    return transcode;
+  }
+
+  public void setTranscode(Integer transcode) {
+    this.transcode = transcode;
   }
 
   public String getSourceType() {
@@ -132,6 +140,30 @@
     this.payInfo = payInfo;
   }
 
+  public String getTradeflag() {
+    return tradeflag;
+  }
+
+  public void setTradeflag(String tradeflag) {
+    this.tradeflag = tradeflag;
+  }
+
+  public String getTransdesc() {
+    return transdesc;
+  }
+
+  public void setTransdesc(String transdesc) {
+    this.transdesc = transdesc;
+  }
+
+  public String getReverseFlag() {
+    return reverseFlag;
+  }
+
+  public void setReverseFlag(String reverseFlag) {
+    this.reverseFlag = reverseFlag;
+  }
+
   public String getStatus() {
     return status;
   }
@@ -156,30 +188,6 @@
     this.oppositeAccName = oppositeAccName;
   }
 
-  public Integer getTradeCode() {
-    return tradeCode;
-  }
-
-  public void setTradeCode(Integer tradeCode) {
-    this.tradeCode = tradeCode;
-  }
-
-  public String getTradeflag() {
-    return tradeflag;
-  }
-
-  public void setTradeflag(String tradeflag) {
-    this.tradeflag = tradeflag;
-  }
-
-  public String getTransdesc() {
-    return transdesc;
-  }
-
-  public void setTransdesc(String transdesc) {
-    this.transdesc = transdesc;
-  }
-
   public String getRemark() {
     return remark;
   }
@@ -187,12 +195,4 @@
   public void setRemark(String remark) {
     this.remark = remark;
   }
-
-  public String getReverseFlag() {
-    return reverseFlag;
-  }
-
-  public void setReverseFlag(String reverseFlag) {
-    this.reverseFlag = reverseFlag;
-  }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/DictionaryDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/DictionaryDao.java
new file mode 100644
index 0000000..05e15ea
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/DictionaryDao.java
@@ -0,0 +1,13 @@
+package com.supwisdom.dlpay.framework.dao;
+
+import com.supwisdom.dlpay.framework.domain.TDictionary;
+import com.supwisdom.dlpay.framework.domain.TDictionaryPK;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface DictionaryDao extends JpaRepository<TDictionary, TDictionaryPK> {
+  List<TDictionary> findAllByDicttype(int dicttype);
+}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/domain/TDictionary.java b/src/main/java/com/supwisdom/dlpay/framework/domain/TDictionary.java
new file mode 100644
index 0000000..461ef29
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/framework/domain/TDictionary.java
@@ -0,0 +1,54 @@
+package com.supwisdom.dlpay.framework.domain;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "TB_DICTIONARY")
+@IdClass(TDictionaryPK.class)
+public class TDictionary {
+  @Id
+  @Column(name = "DICTTYPE", nullable = false, precision = 9)
+  private Integer dicttype;
+
+  @Id
+  @Column(name = "DICTVAL", nullable = false, length = 30)
+  private String dictval;
+
+  @Column(name = "DICTTYPENAME", length = 60)
+  private String dicttypename;
+
+  @Column(name = "DICTCAPTION", length = 60)
+  private String dictcaption;
+
+  public Integer getDicttype() {
+    return dicttype;
+  }
+
+  public void setDicttype(Integer dicttype) {
+    this.dicttype = dicttype;
+  }
+
+  public String getDictval() {
+    return dictval;
+  }
+
+  public void setDictval(String dictval) {
+    this.dictval = dictval;
+  }
+
+  public String getDicttypename() {
+    return dicttypename;
+  }
+
+  public void setDicttypename(String dicttypename) {
+    this.dicttypename = dicttypename;
+  }
+
+  public String getDictcaption() {
+    return dictcaption;
+  }
+
+  public void setDictcaption(String dictcaption) {
+    this.dictcaption = dictcaption;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/domain/TDictionaryPK.java b/src/main/java/com/supwisdom/dlpay/framework/domain/TDictionaryPK.java
new file mode 100644
index 0000000..04874e2
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/framework/domain/TDictionaryPK.java
@@ -0,0 +1,50 @@
+package com.supwisdom.dlpay.framework.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Id;
+import java.io.Serializable;
+
+public class TDictionaryPK implements Serializable {
+  @Id
+  @Column(name = "DICTTYPE", nullable = false, precision = 9)
+  private Integer dicttype;
+
+  @Id
+  @Column(name = "DICTVAL", nullable = false, length = 30)
+  private String dictval;
+
+  public Integer getDicttype() {
+    return dicttype;
+  }
+
+  public void setDicttype(Integer dicttype) {
+    this.dicttype = dicttype;
+  }
+
+  public String getDictval() {
+    return dictval;
+  }
+
+  public void setDictval(String dictval) {
+    this.dictval = dictval;
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) return true;
+    if (o == null || getClass() != o.getClass()) return false;
+    TDictionaryPK tDictionaryPK = (TDictionaryPK) o;
+    if (dicttype != null ? !dicttype.equals(tDictionaryPK.getDicttype()) : dicttype != null)
+      return false;
+    if (dictval != null ? !dictval.equals(tDictionaryPK.getDictval()) : dictval != null)
+      return false;
+    return true;
+  }
+
+  @Override
+  public int hashCode() {
+    int result = dicttype != null ? dicttype.hashCode() : 0;
+    result = 31 * result + (dictval != null ? dictval.hashCode() : 0);
+    return result;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java b/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java
index d551c98..2928642 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java
@@ -1,7 +1,5 @@
 package com.supwisdom.dlpay.framework.util;
 
-import org.jetbrains.annotations.Nullable;
-
 public class TradeDict {
   /**
    * 状态:
diff --git a/src/main/java/com/supwisdom/dlpay/system/bean/ShopdtlSearchBean.java b/src/main/java/com/supwisdom/dlpay/system/bean/ShopdtlSearchBean.java
index 5ff7988..f32d349 100644
--- a/src/main/java/com/supwisdom/dlpay/system/bean/ShopdtlSearchBean.java
+++ b/src/main/java/com/supwisdom/dlpay/system/bean/ShopdtlSearchBean.java
@@ -1,16 +1,35 @@
 package com.supwisdom.dlpay.system.bean;
 
 public class ShopdtlSearchBean {
+  private Integer page;
+  private Integer limit;
   private String startAccdate;
   private String endAccdate;
   private String startTransdate;
   private String endTransdate;
   private String shopname;
-  private String paytype;
+  private String shopaccno;
+  private String sourcetype;
   private String tradeflag;
   private String transcode;
   private String status;
 
+  public Integer getPage() {
+    return page;
+  }
+
+  public void setPage(Integer page) {
+    this.page = page;
+  }
+
+  public Integer getLimit() {
+    return limit;
+  }
+
+  public void setLimit(Integer limit) {
+    this.limit = limit;
+  }
+
   public String getStartAccdate() {
     return startAccdate;
   }
@@ -51,12 +70,20 @@
     this.shopname = shopname;
   }
 
-  public String getPaytype() {
-    return paytype;
+  public String getShopaccno() {
+    return shopaccno;
   }
 
-  public void setPaytype(String paytype) {
-    this.paytype = paytype;
+  public void setShopaccno(String shopaccno) {
+    this.shopaccno = shopaccno;
+  }
+
+  public String getSourcetype() {
+    return sourcetype;
+  }
+
+  public void setSourcetype(String sourcetype) {
+    this.sourcetype = sourcetype;
   }
 
   public String getTradeflag() {
diff --git a/src/main/java/com/supwisdom/dlpay/system/bean/TreeSelectNode.java b/src/main/java/com/supwisdom/dlpay/system/bean/TreeSelectNode.java
new file mode 100644
index 0000000..47ceff2
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/system/bean/TreeSelectNode.java
@@ -0,0 +1,61 @@
+package com.supwisdom.dlpay.system.bean;
+
+import java.util.List;
+
+public class TreeSelectNode {
+  private String id;
+  private String name;
+  private boolean open;
+  private boolean checked;
+  private List<TreeSelectNode> children;
+
+  private String accno; //扩展:商户账号
+
+  public String getId() {
+    return id;
+  }
+
+  public void setId(String id) {
+    this.id = id;
+  }
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public boolean isOpen() {
+    return open;
+  }
+
+  public void setOpen(boolean open) {
+    this.open = open;
+  }
+
+  public boolean isChecked() {
+    return checked;
+  }
+
+  public void setChecked(boolean checked) {
+    this.checked = checked;
+  }
+
+  public List<TreeSelectNode> getChildren() {
+    return children;
+  }
+
+  public void setChildren(List<TreeSelectNode> children) {
+    this.children = children;
+  }
+
+  public String getAccno() {
+    return accno;
+  }
+
+  public void setAccno(String accno) {
+    this.accno = accno;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/system/bean/UserdtlSearchBean.java b/src/main/java/com/supwisdom/dlpay/system/bean/UserdtlSearchBean.java
index 4bcc45a..91b0cba 100644
--- a/src/main/java/com/supwisdom/dlpay/system/bean/UserdtlSearchBean.java
+++ b/src/main/java/com/supwisdom/dlpay/system/bean/UserdtlSearchBean.java
@@ -1,16 +1,35 @@
 package com.supwisdom.dlpay.system.bean;
 
 public class UserdtlSearchBean {
+  private Integer page;
+  private Integer limit;
   private String startAccdate;
   private String endAccdate;
   private String startTransdate;
   private String endTransdate;
   private String personname;
-  private String paytype;
+  private String cardno;
+  private String sourcetype;
   private String tradeflag;
   private String transcode;
   private String status;
 
+  public Integer getPage() {
+    return page;
+  }
+
+  public void setPage(Integer page) {
+    this.page = page;
+  }
+
+  public Integer getLimit() {
+    return limit;
+  }
+
+  public void setLimit(Integer limit) {
+    this.limit = limit;
+  }
+
   public String getStartAccdate() {
     return startAccdate;
   }
@@ -51,12 +70,20 @@
     this.personname = personname;
   }
 
-  public String getPaytype() {
-    return paytype;
+  public String getCardno() {
+    return cardno;
   }
 
-  public void setPaytype(String paytype) {
-    this.paytype = paytype;
+  public void setCardno(String cardno) {
+    this.cardno = cardno;
+  }
+
+  public String getSourcetype() {
+    return sourcetype;
+  }
+
+  public void setSourcetype(String sourcetype) {
+    this.sourcetype = sourcetype;
   }
 
   public String getTradeflag() {
diff --git a/src/main/java/com/supwisdom/dlpay/system/common/DictPool.java b/src/main/java/com/supwisdom/dlpay/system/common/DictPool.java
new file mode 100644
index 0000000..56128cc
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/system/common/DictPool.java
@@ -0,0 +1,37 @@
+package com.supwisdom.dlpay.system.common;
+
+import com.supwisdom.dlpay.system.service.DictionaryDataService;
+import com.supwisdom.dlpay.util.ConstantUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@Component("dictPool")
+@Scope("singleton")
+public class DictPool {
+  private static HashMap<String, Object> dictmap = new HashMap<>();
+
+  @Autowired
+  private DictionaryDataService dictionaryDataService;
+
+  public static HashMap<Object, Object> getDictMap(String key) {
+    synchronized (dictmap) {
+      return (HashMap<Object, Object>) dictmap.get(key);
+    }
+  }
+
+  public static void updateDict(String dictType, Map<String, String> value) {
+    synchronized (dictmap) {
+      dictmap.put(dictType, value);
+    }
+  }
+
+  public void init() {
+    dictmap.put("allSourcetypeList", dictionaryDataService.getSystemAllSourcetype());
+    dictmap.put("allReverseflagList", dictionaryDataService.getDictionaryByDicttype(ConstantUtil.DICTTYPE_NO1));
+
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/system/controller/DictPoolAction.java b/src/main/java/com/supwisdom/dlpay/system/controller/DictPoolAction.java
new file mode 100644
index 0000000..085a27d
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/system/controller/DictPoolAction.java
@@ -0,0 +1,30 @@
+package com.supwisdom.dlpay.system.controller;
+
+import com.supwisdom.dlpay.api.bean.JsonResult;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.supwisdom.dlpay.system.common.DictPool;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.FormParam;
+import java.util.Map;
+
+@RestController
+public class DictPoolAction {
+  @Autowired
+  private DictPool dictPool;
+
+  @GetMapping("/dictpool")
+  public Map getDictDataByDicttype(@FormParam("dicttype") String dictType, HttpServletRequest request) {
+    dictType = request.getParameter("dicttype");
+    Map res = DictPool.getDictMap(dictType);
+    return res;
+  }
+
+  @GetMapping("/dictrefresh")
+  public JsonResult refreshDict() {
+    dictPool.init();
+    return JsonResult.ok();
+  }
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/system/controller/DtlController.java b/src/main/java/com/supwisdom/dlpay/system/controller/DtlController.java
index de2d1b0..1bd3bd8 100644
--- a/src/main/java/com/supwisdom/dlpay/system/controller/DtlController.java
+++ b/src/main/java/com/supwisdom/dlpay/system/controller/DtlController.java
@@ -5,18 +5,23 @@
 import com.supwisdom.dlpay.framework.util.PageResult;
 import com.supwisdom.dlpay.framework.util.WebConstant;
 import com.supwisdom.dlpay.system.bean.ShopdtlSearchBean;
+import com.supwisdom.dlpay.system.bean.TreeSelectNode;
 import com.supwisdom.dlpay.system.bean.UserdtlSearchBean;
 import com.supwisdom.dlpay.system.service.DtlDataService;
+import com.supwisdom.dlpay.system.service.ShopDataService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
 
 @Controller
 public class DtlController {
   @Autowired
+  private ShopDataService shopDataService;
+  @Autowired
   private DtlDataService dtlDataService;
 
   /**
@@ -25,21 +30,22 @@
    * ====================================================
    */
   @GetMapping("/dtl/userdtl")
-  public String userdtlView() {
+  public String userdtlView(Model model) {
+    model.addAttribute("paytypelist", shopDataService.getConsumePaytypes());
+    model.addAttribute("transcodelist", dtlDataService.getAllTranscodes());
+    model.addAttribute("dtlstatuslist", dtlDataService.getAllDtlStatus());
     return "system/dtl/userdtl";
   }
 
   @GetMapping("/dtl/userdtllist")
   @PreAuthorize("hasPermission('/dtl/userdtl','')")
   @ResponseBody
-  public PageResult<TPersondtl> searchUserdtlPage(@RequestParam("page") Integer pageNo,
-                                                  @RequestParam("limit") Integer pageSize,
-                                                  @RequestParam(value = "paraid", required = false) Integer paraid,
-                                                  @RequestParam(value = "paraname", required = false) String paraname) {
+  public PageResult<TPersondtl> searchUserdtlPage(@ModelAttribute UserdtlSearchBean searchBean) {
     try {
+      Integer pageNo = searchBean.getPage();
+      Integer pageSize = searchBean.getLimit();
       if (null == pageNo || pageNo < 1) pageNo = WebConstant.PAGENO_DEFAULT;
       if (null == pageSize || pageSize < 1) pageSize = WebConstant.PAGESIZE_DEFAULT;
-      UserdtlSearchBean searchBean = new UserdtlSearchBean();
       return dtlDataService.getPersondtlPage(searchBean, pageNo, pageSize);
     } catch (Exception e) {
       e.printStackTrace();
@@ -53,20 +59,22 @@
    * ====================================================
    */
   @GetMapping("/dtl/shopdtl")
-  public String shopdtlView() {
+  public String shopdtlView(Model model) {
+    model.addAttribute("paytypelist", shopDataService.getConsumePaytypes());
+    model.addAttribute("transcodelist", dtlDataService.getAllTranscodes());
+    model.addAttribute("dtlstatuslist", dtlDataService.getAllDtlStatus());
     return "system/dtl/shopdtl";
   }
 
   @GetMapping("/dtl/shopdtllist")
   @PreAuthorize("hasPermission('/dtl/shopdtl','')")
   @ResponseBody
-  public PageResult<TShopdtl> searchUserdtlPage(@RequestParam("page") Integer pageNo,
-                                                @RequestParam("limit") Integer pageSize,
-                                                @RequestParam(value = "paraid", required = false) Integer paraid) {
+  public PageResult<TShopdtl> searchUserdtlPage(@ModelAttribute ShopdtlSearchBean searchBean) {
     try {
+      Integer pageNo = searchBean.getPage();
+      Integer pageSize = searchBean.getLimit();
       if (null == pageNo || pageNo < 1) pageNo = WebConstant.PAGENO_DEFAULT;
       if (null == pageSize || pageSize < 1) pageSize = WebConstant.PAGESIZE_DEFAULT;
-      ShopdtlSearchBean searchBean = new ShopdtlSearchBean();
       return dtlDataService.getShopdtlPage(searchBean, pageNo, pageSize);
     } catch (Exception e) {
       e.printStackTrace();
@@ -74,4 +82,12 @@
     }
   }
 
+  @GetMapping("/dtl/shoptreeselect")
+  @PreAuthorize("hasPermission('/dtl/shopdtl','')")
+  @ResponseBody
+  public List<TreeSelectNode> searchShopTree() {
+    List<TreeSelectNode> tree = dtlDataService.getTreeSelectShops();
+    return tree;
+  }
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/DictionaryDataService.java b/src/main/java/com/supwisdom/dlpay/system/service/DictionaryDataService.java
new file mode 100644
index 0000000..a378a8c
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/system/service/DictionaryDataService.java
@@ -0,0 +1,12 @@
+package com.supwisdom.dlpay.system.service;
+
+import java.util.HashMap;
+
+public interface DictionaryDataService {
+  HashMap<String, Object> getSystemAllSourcetype();
+
+  HashMap<String, Object> getDictionaryByDicttype(int dicttype);
+
+
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/DtlDataService.java b/src/main/java/com/supwisdom/dlpay/system/service/DtlDataService.java
index 4389e1c..fa0affe 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/DtlDataService.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/DtlDataService.java
@@ -2,16 +2,30 @@
 
 import com.supwisdom.dlpay.api.domain.TPersondtl;
 import com.supwisdom.dlpay.api.domain.TShopdtl;
+import com.supwisdom.dlpay.framework.domain.TDictionary;
+import com.supwisdom.dlpay.framework.domain.TTranscode;
 import com.supwisdom.dlpay.framework.util.PageResult;
 import com.supwisdom.dlpay.system.bean.ShopdtlSearchBean;
+import com.supwisdom.dlpay.system.bean.TreeSelectNode;
 import com.supwisdom.dlpay.system.bean.UserdtlSearchBean;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.List;
+
 public interface DtlDataService {
   @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
   PageResult<TPersondtl> getPersondtlPage(UserdtlSearchBean searchBean, int pageNo, int pageSize);
 
   @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
   PageResult<TShopdtl> getShopdtlPage(ShopdtlSearchBean searchBean, int pageNo, int pageSize);
+
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
+  List<TTranscode> getAllTranscodes();
+
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
+  List<TDictionary> getAllDtlStatus();
+
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
+  List<TreeSelectNode> getTreeSelectShops();
 }
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/impl/DictionaryDataServiceImpl.java b/src/main/java/com/supwisdom/dlpay/system/service/impl/DictionaryDataServiceImpl.java
new file mode 100644
index 0000000..85e9438
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/system/service/impl/DictionaryDataServiceImpl.java
@@ -0,0 +1,45 @@
+package com.supwisdom.dlpay.system.service.impl;
+
+import com.supwisdom.dlpay.api.dao.SourceTypeDao;
+import com.supwisdom.dlpay.api.domain.TSourceType;
+import com.supwisdom.dlpay.framework.dao.DictionaryDao;
+import com.supwisdom.dlpay.framework.domain.TDictionary;
+import com.supwisdom.dlpay.framework.util.StringUtil;
+import com.supwisdom.dlpay.system.service.DictionaryDataService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.List;
+
+@Service
+public class DictionaryDataServiceImpl implements DictionaryDataService {
+  @Autowired
+  private SourceTypeDao sourceTypeDao;
+  @Autowired
+  private DictionaryDao dictionaryDao;
+
+  @Override
+  public HashMap<String, Object> getSystemAllSourcetype() {
+    HashMap<String, Object> result = new HashMap<>(0);
+    List<TSourceType> list = sourceTypeDao.findAll();
+    if (!StringUtil.isEmpty(list)) {
+      for (TSourceType tst : list) {
+        result.put(tst.getSourceType(), tst.getPaydesc());
+      }
+    }
+    return result;
+  }
+
+  @Override
+  public HashMap<String, Object> getDictionaryByDicttype(int dicttype) {
+    HashMap<String, Object> result = new HashMap<>(0);
+    List<TDictionary> list = dictionaryDao.findAllByDicttype(dicttype);
+    if (!StringUtil.isEmpty(list)) {
+      for (TDictionary dict : list) {
+        result.put(dict.getDictval() == null ? "" : dict.getDictval(), dict.getDictcaption());
+      }
+    }
+    return result;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/impl/DtlDataServiceImpl.java b/src/main/java/com/supwisdom/dlpay/system/service/impl/DtlDataServiceImpl.java
index 6f7b1ba..869bf31 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/impl/DtlDataServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/impl/DtlDataServiceImpl.java
@@ -4,12 +4,20 @@
 import com.supwisdom.dlpay.api.dao.ShopdtlDao;
 import com.supwisdom.dlpay.api.domain.TPersondtl;
 import com.supwisdom.dlpay.api.domain.TShopdtl;
+import com.supwisdom.dlpay.framework.dao.DictionaryDao;
+import com.supwisdom.dlpay.framework.dao.ShopDao;
+import com.supwisdom.dlpay.framework.dao.TranscodeDao;
+import com.supwisdom.dlpay.framework.domain.TDictionary;
+import com.supwisdom.dlpay.framework.domain.TShop;
+import com.supwisdom.dlpay.framework.domain.TTranscode;
 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.system.bean.ShopdtlSearchBean;
+import com.supwisdom.dlpay.system.bean.TreeSelectNode;
 import com.supwisdom.dlpay.system.bean.UserdtlSearchBean;
 import com.supwisdom.dlpay.system.service.DtlDataService;
+import com.supwisdom.dlpay.util.ConstantUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
@@ -31,6 +39,12 @@
   private PersondtlDao persondtlDao;
   @Autowired
   private ShopdtlDao shopdtlDao;
+  @Autowired
+  private TranscodeDao transcodeDao;
+  @Autowired
+  private DictionaryDao dictionaryDao;
+  @Autowired
+  private ShopDao shopDao;
 
   @Override
   public PageResult<TPersondtl> getPersondtlPage(UserdtlSearchBean searchBean, int pageNo, int pageSize) {
@@ -53,10 +67,10 @@
           predicates.add(criteriaBuilder.le(root.get("transdate").as(Integer.class),Integer.valueOf(DateUtil.unParseToDateFormat(searchBean.getEndTransdate()))));
         }
         if(!StringUtil.isEmpty(searchBean.getPersonname())){
-          predicates.add(criteriaBuilder.like(root.get("username").as(String.class), "%" + searchBean.getPersonname().trim() + "%"));
+          predicates.add(criteriaBuilder.like(root.get("userName").as(String.class), "%" + searchBean.getPersonname().trim() + "%"));
         }
-        if(!StringUtil.isEmpty(searchBean.getPaytype())){
-          predicates.add(criteriaBuilder.equal(root.get("paytype").as(String.class), searchBean.getPaytype().trim()));
+        if(!StringUtil.isEmpty(searchBean.getSourcetype())){
+          predicates.add(criteriaBuilder.equal(root.get("sourceType").as(String.class), searchBean.getSourcetype().trim()));
         }
         if(!StringUtil.isEmpty(searchBean.getTradeflag())){
           predicates.add(criteriaBuilder.equal(root.get("tradeflag").as(String.class), searchBean.getTradeflag().trim()));
@@ -96,8 +110,11 @@
         if(!StringUtil.isEmpty(searchBean.getShopname())){
           predicates.add(criteriaBuilder.like(root.get("shopname").as(String.class), "%" + searchBean.getShopname().trim() + "%"));
         }
-        if(!StringUtil.isEmpty(searchBean.getPaytype())){
-          predicates.add(criteriaBuilder.equal(root.get("paytype").as(String.class), searchBean.getPaytype().trim()));
+        if(!StringUtil.isEmpty(searchBean.getShopaccno())){
+          predicates.add(criteriaBuilder.equal(root.get("shopaccno").as(String.class), searchBean.getShopaccno().trim()));
+        }
+        if(!StringUtil.isEmpty(searchBean.getSourcetype())){
+          predicates.add(criteriaBuilder.equal(root.get("sourceType").as(String.class), searchBean.getSourcetype().trim()));
         }
         if(!StringUtil.isEmpty(searchBean.getTradeflag())){
           predicates.add(criteriaBuilder.equal(root.get("tradeflag").as(String.class), searchBean.getTradeflag().trim()));
@@ -113,4 +130,52 @@
     }, pageable);
     return new PageResult<>(page);
   }
+
+  @Override
+  public List<TTranscode> getAllTranscodes(){
+    return transcodeDao.findAll();
+  }
+
+  @Override
+  public List<TDictionary> getAllDtlStatus(){
+    List<TDictionary> list = dictionaryDao.findAllByDicttype(ConstantUtil.DICTTYPE_NO2);
+    if(!StringUtil.isEmpty(list)){
+      return list;
+    }
+    return new ArrayList<>(0);
+  }
+
+  @Override
+  public List<TreeSelectNode> getTreeSelectShops() {
+    List<TShop> shoplist = shopDao.getNormalShops();
+    if (StringUtil.isEmpty(shoplist)) {
+      return new ArrayList<>(0);
+    }
+    return getShopSelectTree(shoplist, 0);
+  }
+
+  private List<TreeSelectNode> getShopSelectTree(List<TShop> shoplist, Integer fshopid) {
+    List<TreeSelectNode> result = new ArrayList<>(0);
+    for (TShop shop : shoplist) {
+      if (fshopid.equals(shop.getFshopid())) {
+        TreeSelectNode node = new TreeSelectNode();
+        node.setId(String.valueOf(shop.getShopid()));
+        if(!StringUtil.isEmpty(shop.getShopaccno())){
+          node.setId(shop.getShopaccno()); //替换商户账号
+        }
+        node.setName(shop.getShopname());
+        node.setOpen(StringUtil.isEmpty(shop.getShopaccno()));
+        node.setChecked(false);
+        node.setAccno(shop.getShopaccno());
+        List<TreeSelectNode> children = getShopSelectTree(shoplist, shop.getShopid());
+        if(null!=children && children.size()>0){
+          node.setChildren(children);
+        }else{
+          node.setChildren(null);
+        }
+        result.add(node);
+      }
+    }
+    return result;
+  }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/util/ConstantUtil.java b/src/main/java/com/supwisdom/dlpay/util/ConstantUtil.java
index d791ab0..a525547 100644
--- a/src/main/java/com/supwisdom/dlpay/util/ConstantUtil.java
+++ b/src/main/java/com/supwisdom/dlpay/util/ConstantUtil.java
@@ -26,4 +26,11 @@
   public static final String FEETYPE_MEALER = "mealer";
   public static final String FEETYPE_DISCOUNT = "discount";
   public static final String[] FEETYPE_DICTS = {"none", "mealer", "discount"}; //联动
+
+
+  /**
+   * TDictionary的dicttype
+   * */
+  public static final int DICTTYPE_NO1 = 1; //冲正状态字典
+  public static final int DICTTYPE_NO2 = 2; //流水状态字典
 }
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
index 48b7105..d7e8895 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
@@ -111,9 +111,9 @@
                     this.amount = builder.shop().amount
                     this.payInfo = builder.shop().payinfo
                     this.sourceType = builder.sourceType
-                    this.transDate = builder.transDate
-                    this.transTime = builder.transTime
-                    this.tradeCode = builder.transCode
+                    this.transdate = builder.transDate
+                    this.transtime = builder.transTime
+                    this.transcode = builder.transCode
                     this.sourceType = builder.sourceType
                     amount = if (builder.shop().tradeFlag == TradeDict.TRADE_FLAG_IN) {
                         builder.shop().amount
diff --git a/src/main/kotlin/com/supwisdom/dlpay/security.kt b/src/main/kotlin/com/supwisdom/dlpay/security.kt
index e0c5833..30c0edd 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/security.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/security.kt
@@ -8,6 +8,7 @@
 import com.supwisdom.dlpay.framework.security.ValidateCodeSecurityConfig
 import com.supwisdom.dlpay.framework.service.OperatorDetailService
 import com.supwisdom.dlpay.framework.util.TradeDict
+import com.supwisdom.dlpay.system.common.DictPool
 import org.jose4j.jwt.consumer.InvalidJwtException
 import org.jose4j.lang.JoseException
 import org.springframework.beans.factory.annotation.Autowired
@@ -151,7 +152,8 @@
             lateinit var authenticationSuccessHandler: AuthenticationSuccessHandler
             @Autowired
             lateinit var passwordBCryptConfig: PasswordBCryptConfig
-
+            @Autowired
+            lateinit var dictPool: DictPool
 
             @Autowired
             lateinit var userDetailsService: OperatorDetailService
@@ -186,6 +188,8 @@
             }
 
             override fun configure(http: HttpSecurity) {
+                dictPool.init() //初始化字典
+
                 // 设置 Web MVC 应用权限
                 http.apply(validateCodeSecurityConfig)
                         .and()
diff --git a/src/main/resources/static/custom/module/admin.js b/src/main/resources/static/custom/module/admin.js
index e9b34ef..e6ad642 100755
--- a/src/main/resources/static/custom/module/admin.js
+++ b/src/main/resources/static/custom/module/admin.js
@@ -304,6 +304,29 @@
         // 关闭所有弹窗

         closeDialog: function () {

             layer.closeAll('page');

+        },

+        //刷新字典

+        refreshDict: function (){

+            layer.confirm('确定要刷新数据字典吗?', {

+                    btn: ['确定', '取消']

+                }, function (index, layero) {

+                    layer.closeAll('dialog');  //加入这个信息点击确定 会关闭这个消息框

+                    admin.dgo("/dictrefresh", {}, function (data) {

+                        if (data.code == 200) {

+                            layer.msg("刷新数据字典成功!", {icon: 1, time: 1000});

+                            DictPoolToolkit().initAll("/dictpool");

+                        } else if (data.code == 401) {

+                            layer.msg(data.msg, {icon: 2, time: 1500}, function () {

+                                location.replace('/login');

+                            }, 1000);

+                            return;

+                        } else {

+                            layer.msg(data.msg, {icon: 2, time: 1500});

+                        }

+                    }, function () {

+                        layer.msg("数据字典刷新失败,访问服务器失败!", {icon: 2, time: 1500});

+                    });

+                });

         }

     };

 

diff --git a/src/main/resources/static/custom/module/treeSelect/treeSelect.js b/src/main/resources/static/custom/module/treeSelect/treeSelect.js
new file mode 100755
index 0000000..5e20c18
--- /dev/null
+++ b/src/main/resources/static/custom/module/treeSelect/treeSelect.js
@@ -0,0 +1,597 @@
+
+layui.define(['form', 'jquery'], function (exports) { //提示:模块也可以依赖其它模块,如:layui.define('layer', callback);
+  var jQuery = layui.jquery,
+      $ = jQuery,
+      form = layui.form,
+      _MOD = 'treeSelect',
+      trss = {},
+      TreeSelect = function () {
+        this.v = '1.0.5';
+      };
+
+
+
+/*
+ * JQuery zTree core v3.5.37
+ * http://treejs.cn/
+ *
+ * Copyright (c) 2010 Hunter.z
+ *
+ * Licensed same as jquery - MIT License
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ * email: hunter.z@263.net
+ * Date: 2018-08-21
+ */
+(function(r){var J,K,L,M,N,O,v,t={},w={},x={},P={treeId:"",treeObj:null,view:{addDiyDom:null,autoCancelSelected:!0,dblClickExpand:!0,expandSpeed:"fast",fontCss:{},nameIsHTML:!1,selectedMulti:!0,showIcon:!0,showLine:!0,showTitle:!0,txtSelectedEnable:!1},data:{key:{isParent:"isParent",children:"children",name:"name",title:"",url:"url",icon:"icon"},simpleData:{enable:!1,idKey:"id",pIdKey:"pId",rootPId:null},keep:{parent:!1,leaf:!1}},async:{enable:!1,contentType:"application/x-www-form-urlencoded",type:"post",
+dataType:"text",headers:{},xhrFields:{},url:"",autoParam:[],otherParam:[],dataFilter:null},callback:{beforeAsync:null,beforeClick:null,beforeDblClick:null,beforeRightClick:null,beforeMouseDown:null,beforeMouseUp:null,beforeExpand:null,beforeCollapse:null,beforeRemove:null,onAsyncError:null,onAsyncSuccess:null,onNodeCreated:null,onClick:null,onDblClick:null,onRightClick:null,onMouseDown:null,onMouseUp:null,onExpand:null,onCollapse:null,onRemove:null}},y=[function(a){var b=a.treeObj,c=g.event;b.bind(c.NODECREATED,
+function(b,c,i){h.apply(a.callback.onNodeCreated,[b,c,i])});b.bind(c.CLICK,function(b,c,i,e,k){h.apply(a.callback.onClick,[c,i,e,k])});b.bind(c.EXPAND,function(b,c,i){h.apply(a.callback.onExpand,[b,c,i])});b.bind(c.COLLAPSE,function(b,c,i){h.apply(a.callback.onCollapse,[b,c,i])});b.bind(c.ASYNC_SUCCESS,function(b,c,i,e){h.apply(a.callback.onAsyncSuccess,[b,c,i,e])});b.bind(c.ASYNC_ERROR,function(b,c,i,e,k,g){h.apply(a.callback.onAsyncError,[b,c,i,e,k,g])});b.bind(c.REMOVE,function(b,c,i){h.apply(a.callback.onRemove,
+[b,c,i])});b.bind(c.SELECTED,function(b,c,i){h.apply(a.callback.onSelected,[c,i])});b.bind(c.UNSELECTED,function(b,c,i){h.apply(a.callback.onUnSelected,[c,i])})}],z=[function(a){var b=g.event;a.treeObj.unbind(b.NODECREATED).unbind(b.CLICK).unbind(b.EXPAND).unbind(b.COLLAPSE).unbind(b.ASYNC_SUCCESS).unbind(b.ASYNC_ERROR).unbind(b.REMOVE).unbind(b.SELECTED).unbind(b.UNSELECTED)}],A=[function(a){var b=e.getCache(a);b||(b={},e.setCache(a,b));b.nodes=[];b.doms=[]}],B=[function(a,b,c,d,f,i){if(c){var m=
+e.getRoot(a),k=e.nodeChildren(a,c);c.level=b;c.tId=a.treeId+"_"+ ++m.zId;c.parentTId=d?d.tId:null;c.open=typeof c.open=="string"?h.eqs(c.open,"true"):!!c.open;b=e.nodeIsParent(a,c);h.isArray(k)&&!(b===!1||typeof b=="string"&&h.eqs(b,"false"))?(e.nodeIsParent(a,c,!0),c.zAsync=!0):(b=e.nodeIsParent(a,c,b),c.open=b&&!a.async.enable?c.open:!1,c.zAsync=!b);c.isFirstNode=f;c.isLastNode=i;c.getParentNode=function(){return e.getNodeCache(a,c.parentTId)};c.getPreNode=function(){return e.getPreNode(a,c)};c.getNextNode=
+function(){return e.getNextNode(a,c)};c.getIndex=function(){return e.getNodeIndex(a,c)};c.getPath=function(){return e.getNodePath(a,c)};c.isAjaxing=!1;e.fixPIdKeyValue(a,c)}}],u=[function(a){var b=a.target,c=e.getSetting(a.data.treeId),d="",f=null,i="",m="",k=null,j=null,o=null;if(h.eqs(a.type,"mousedown"))m="mousedown";else if(h.eqs(a.type,"mouseup"))m="mouseup";else if(h.eqs(a.type,"contextmenu"))m="contextmenu";else if(h.eqs(a.type,"click"))if(h.eqs(b.tagName,"span")&&b.getAttribute("treeNode"+
+g.id.SWITCH)!==null)d=h.getNodeMainDom(b).id,i="switchNode";else{if(o=h.getMDom(c,b,[{tagName:"a",attrName:"treeNode"+g.id.A}]))d=h.getNodeMainDom(o).id,i="clickNode"}else if(h.eqs(a.type,"dblclick")&&(m="dblclick",o=h.getMDom(c,b,[{tagName:"a",attrName:"treeNode"+g.id.A}])))d=h.getNodeMainDom(o).id,i="switchNode";if(m.length>0&&d.length==0&&(o=h.getMDom(c,b,[{tagName:"a",attrName:"treeNode"+g.id.A}])))d=h.getNodeMainDom(o).id;if(d.length>0)switch(f=e.getNodeCache(c,d),i){case "switchNode":e.nodeIsParent(c,
+f)?h.eqs(a.type,"click")||h.eqs(a.type,"dblclick")&&h.apply(c.view.dblClickExpand,[c.treeId,f],c.view.dblClickExpand)?k=J:i="":i="";break;case "clickNode":k=K}switch(m){case "mousedown":j=L;break;case "mouseup":j=M;break;case "dblclick":j=N;break;case "contextmenu":j=O}return{stop:!1,node:f,nodeEventType:i,nodeEventCallback:k,treeEventType:m,treeEventCallback:j}}],C=[function(a){var b=e.getRoot(a);b||(b={},e.setRoot(a,b));e.nodeChildren(a,b,[]);b.expandTriggerFlag=!1;b.curSelectedList=[];b.noSelection=
+!0;b.createdNodes=[];b.zId=0;b._ver=(new Date).getTime()}],D=[],E=[],F=[],G=[],H=[],e={addNodeCache:function(a,b){e.getCache(a).nodes[e.getNodeCacheId(b.tId)]=b},getNodeCacheId:function(a){return a.substring(a.lastIndexOf("_")+1)},addAfterA:function(a){E.push(a)},addBeforeA:function(a){D.push(a)},addInnerAfterA:function(a){G.push(a)},addInnerBeforeA:function(a){F.push(a)},addInitBind:function(a){y.push(a)},addInitUnBind:function(a){z.push(a)},addInitCache:function(a){A.push(a)},addInitNode:function(a){B.push(a)},
+addInitProxy:function(a,b){b?u.splice(0,0,a):u.push(a)},addInitRoot:function(a){C.push(a)},addNodesData:function(a,b,c,d){var f=e.nodeChildren(a,b);f?c>=f.length&&(c=-1):(f=e.nodeChildren(a,b,[]),c=-1);if(f.length>0&&c===0)f[0].isFirstNode=!1,j.setNodeLineIcos(a,f[0]);else if(f.length>0&&c<0)f[f.length-1].isLastNode=!1,j.setNodeLineIcos(a,f[f.length-1]);e.nodeIsParent(a,b,!0);c<0?e.nodeChildren(a,b,f.concat(d)):(a=[c,0].concat(d),f.splice.apply(f,a))},addSelectedNode:function(a,b){var c=e.getRoot(a);
+e.isSelectedNode(a,b)||c.curSelectedList.push(b)},addCreatedNode:function(a,b){(a.callback.onNodeCreated||a.view.addDiyDom)&&e.getRoot(a).createdNodes.push(b)},addZTreeTools:function(a){H.push(a)},exSetting:function(a){r.extend(!0,P,a)},fixPIdKeyValue:function(a,b){a.data.simpleData.enable&&(b[a.data.simpleData.pIdKey]=b.parentTId?b.getParentNode()[a.data.simpleData.idKey]:a.data.simpleData.rootPId)},getAfterA:function(a,b,c){for(var d=0,e=E.length;d<e;d++)E[d].apply(this,arguments)},getBeforeA:function(a,
+b,c){for(var d=0,e=D.length;d<e;d++)D[d].apply(this,arguments)},getInnerAfterA:function(a,b,c){for(var d=0,e=G.length;d<e;d++)G[d].apply(this,arguments)},getInnerBeforeA:function(a,b,c){for(var d=0,e=F.length;d<e;d++)F[d].apply(this,arguments)},getCache:function(a){return x[a.treeId]},getNodeIndex:function(a,b){if(!b)return null;for(var c=b.parentTId?b.getParentNode():e.getRoot(a),c=e.nodeChildren(a,c),d=0,f=c.length-1;d<=f;d++)if(c[d]===b)return d;return-1},getNextNode:function(a,b){if(!b)return null;
+for(var c=b.parentTId?b.getParentNode():e.getRoot(a),c=e.nodeChildren(a,c),d=0,f=c.length-1;d<=f;d++)if(c[d]===b)return d==f?null:c[d+1];return null},getNodeByParam:function(a,b,c,d){if(!b||!c)return null;for(var f=0,i=b.length;f<i;f++){var m=b[f];if(m[c]==d)return b[f];m=e.nodeChildren(a,m);if(m=e.getNodeByParam(a,m,c,d))return m}return null},getNodeCache:function(a,b){if(!b)return null;var c=x[a.treeId].nodes[e.getNodeCacheId(b)];return c?c:null},getNodePath:function(a,b){if(!b)return null;var c;
+(c=b.parentTId?b.getParentNode().getPath():[])&&c.push(b);return c},getNodes:function(a){return e.nodeChildren(a,e.getRoot(a))},getNodesByParam:function(a,b,c,d){if(!b||!c)return[];for(var f=[],i=0,m=b.length;i<m;i++){var k=b[i];k[c]==d&&f.push(k);k=e.nodeChildren(a,k);f=f.concat(e.getNodesByParam(a,k,c,d))}return f},getNodesByParamFuzzy:function(a,b,c,d){if(!b||!c)return[];for(var f=[],d=d.toLowerCase(),i=0,m=b.length;i<m;i++){var k=b[i];typeof k[c]=="string"&&b[i][c].toLowerCase().indexOf(d)>-1&&
+f.push(k);k=e.nodeChildren(a,k);f=f.concat(e.getNodesByParamFuzzy(a,k,c,d))}return f},getNodesByFilter:function(a,b,c,d,f){if(!b)return d?null:[];for(var i=d?null:[],m=0,k=b.length;m<k;m++){var g=b[m];if(h.apply(c,[g,f],!1)){if(d)return g;i.push(g)}g=e.nodeChildren(a,g);g=e.getNodesByFilter(a,g,c,d,f);if(d&&g)return g;i=d?g:i.concat(g)}return i},getPreNode:function(a,b){if(!b)return null;for(var c=b.parentTId?b.getParentNode():e.getRoot(a),c=e.nodeChildren(a,c),d=0,f=c.length;d<f;d++)if(c[d]===b)return d==
+0?null:c[d-1];return null},getRoot:function(a){return a?w[a.treeId]:null},getRoots:function(){return w},getSetting:function(a){return t[a]},getSettings:function(){return t},getZTreeTools:function(a){return(a=this.getRoot(this.getSetting(a)))?a.treeTools:null},initCache:function(a){for(var b=0,c=A.length;b<c;b++)A[b].apply(this,arguments)},initNode:function(a,b,c,d,e,i){for(var m=0,g=B.length;m<g;m++)B[m].apply(this,arguments)},initRoot:function(a){for(var b=0,c=C.length;b<c;b++)C[b].apply(this,arguments)},
+isSelectedNode:function(a,b){for(var c=e.getRoot(a),d=0,f=c.curSelectedList.length;d<f;d++)if(b===c.curSelectedList[d])return!0;return!1},nodeChildren:function(a,b,c){if(!b)return null;a=a.data.key.children;typeof c!=="undefined"&&(b[a]=c);return b[a]},nodeIsParent:function(a,b,c){if(!b)return!1;a=a.data.key.isParent;typeof c!=="undefined"&&(typeof c==="string"&&(c=h.eqs(c,"true")),b[a]=!!c);return b[a]},nodeName:function(a,b,c){a=a.data.key.name;typeof c!=="undefined"&&(b[a]=c);return""+b[a]},nodeTitle:function(a,
+b){return""+b[a.data.key.title===""?a.data.key.name:a.data.key.title]},removeNodeCache:function(a,b){var c=e.nodeChildren(a,b);if(c)for(var d=0,f=c.length;d<f;d++)e.removeNodeCache(a,c[d]);e.getCache(a).nodes[e.getNodeCacheId(b.tId)]=null},removeSelectedNode:function(a,b){for(var c=e.getRoot(a),d=0,f=c.curSelectedList.length;d<f;d++)if(b===c.curSelectedList[d]||!e.getNodeCache(a,c.curSelectedList[d].tId))c.curSelectedList.splice(d,1),a.treeObj.trigger(g.event.UNSELECTED,[a.treeId,b]),d--,f--},setCache:function(a,
+b){x[a.treeId]=b},setRoot:function(a,b){w[a.treeId]=b},setZTreeTools:function(a,b){for(var c=0,d=H.length;c<d;c++)H[c].apply(this,arguments)},transformToArrayFormat:function(a,b){function c(b){d.push(b);(b=e.nodeChildren(a,b))&&(d=d.concat(e.transformToArrayFormat(a,b)))}if(!b)return[];var d=[];if(h.isArray(b))for(var f=0,i=b.length;f<i;f++)c(b[f]);else c(b);return d},transformTozTreeFormat:function(a,b){var c,d,f=a.data.simpleData.idKey,i=a.data.simpleData.pIdKey;if(!f||f==""||!b)return[];if(h.isArray(b)){var g=
+[],k={};for(c=0,d=b.length;c<d;c++)k[b[c][f]]=b[c];for(c=0,d=b.length;c<d;c++){var j=k[b[c][i]];if(j&&b[c][f]!=b[c][i]){var o=e.nodeChildren(a,j);o||(o=e.nodeChildren(a,j,[]));o.push(b[c])}else g.push(b[c])}return g}else return[b]}},n={bindEvent:function(a){for(var b=0,c=y.length;b<c;b++)y[b].apply(this,arguments)},unbindEvent:function(a){for(var b=0,c=z.length;b<c;b++)z[b].apply(this,arguments)},bindTree:function(a){var b={treeId:a.treeId},c=a.treeObj;a.view.txtSelectedEnable||c.bind("selectstart",
+v).css({"-moz-user-select":"-moz-none"});c.bind("click",b,n.proxy);c.bind("dblclick",b,n.proxy);c.bind("mouseover",b,n.proxy);c.bind("mouseout",b,n.proxy);c.bind("mousedown",b,n.proxy);c.bind("mouseup",b,n.proxy);c.bind("contextmenu",b,n.proxy)},unbindTree:function(a){a.treeObj.unbind("selectstart",v).unbind("click",n.proxy).unbind("dblclick",n.proxy).unbind("mouseover",n.proxy).unbind("mouseout",n.proxy).unbind("mousedown",n.proxy).unbind("mouseup",n.proxy).unbind("contextmenu",n.proxy)},doProxy:function(a){for(var b=
+[],c=0,d=u.length;c<d;c++){var e=u[c].apply(this,arguments);b.push(e);if(e.stop)break}return b},proxy:function(a){var b=e.getSetting(a.data.treeId);if(!h.uCanDo(b,a))return!0;for(var b=n.doProxy(a),c=!0,d=0,f=b.length;d<f;d++){var i=b[d];i.nodeEventCallback&&(c=i.nodeEventCallback.apply(i,[a,i.node])&&c);i.treeEventCallback&&(c=i.treeEventCallback.apply(i,[a,i.node])&&c)}return c}};J=function(a,b){var c=e.getSetting(a.data.treeId);if(b.open){if(h.apply(c.callback.beforeCollapse,[c.treeId,b],!0)==
+!1)return!0}else if(h.apply(c.callback.beforeExpand,[c.treeId,b],!0)==!1)return!0;e.getRoot(c).expandTriggerFlag=!0;j.switchNode(c,b);return!0};K=function(a,b){var c=e.getSetting(a.data.treeId),d=c.view.autoCancelSelected&&(a.ctrlKey||a.metaKey)&&e.isSelectedNode(c,b)?0:c.view.autoCancelSelected&&(a.ctrlKey||a.metaKey)&&c.view.selectedMulti?2:1;if(h.apply(c.callback.beforeClick,[c.treeId,b,d],!0)==!1)return!0;d===0?j.cancelPreSelectedNode(c,b):j.selectNode(c,b,d===2);c.treeObj.trigger(g.event.CLICK,
+[a,c.treeId,b,d]);return!0};L=function(a,b){var c=e.getSetting(a.data.treeId);h.apply(c.callback.beforeMouseDown,[c.treeId,b],!0)&&h.apply(c.callback.onMouseDown,[a,c.treeId,b]);return!0};M=function(a,b){var c=e.getSetting(a.data.treeId);h.apply(c.callback.beforeMouseUp,[c.treeId,b],!0)&&h.apply(c.callback.onMouseUp,[a,c.treeId,b]);return!0};N=function(a,b){var c=e.getSetting(a.data.treeId);h.apply(c.callback.beforeDblClick,[c.treeId,b],!0)&&h.apply(c.callback.onDblClick,[a,c.treeId,b]);return!0};
+O=function(a,b){var c=e.getSetting(a.data.treeId);h.apply(c.callback.beforeRightClick,[c.treeId,b],!0)&&h.apply(c.callback.onRightClick,[a,c.treeId,b]);return typeof c.callback.onRightClick!="function"};v=function(a){a=a.originalEvent.srcElement.nodeName.toLowerCase();return a==="input"||a==="textarea"};var h={apply:function(a,b,c){return typeof a=="function"?a.apply(Q,b?b:[]):c},canAsync:function(a,b){var c=e.nodeChildren(a,b),d=e.nodeIsParent(a,b);return a.async.enable&&b&&d&&!(b.zAsync||c&&c.length>
+0)},clone:function(a){if(a===null)return null;var b=h.isArray(a)?[]:{},c;for(c in a)b[c]=a[c]instanceof Date?new Date(a[c].getTime()):typeof a[c]==="object"?h.clone(a[c]):a[c];return b},eqs:function(a,b){return a.toLowerCase()===b.toLowerCase()},isArray:function(a){return Object.prototype.toString.apply(a)==="[object Array]"},isElement:function(a){return typeof HTMLElement==="object"?a instanceof HTMLElement:a&&typeof a==="object"&&a!==null&&a.nodeType===1&&typeof a.nodeName==="string"},$:function(a,
+b,c){b&&typeof b!="string"&&(c=b,b="");return typeof a=="string"?r(a,c?c.treeObj.get(0).ownerDocument:null):r("#"+a.tId+b,c?c.treeObj:null)},getMDom:function(a,b,c){if(!b)return null;for(;b&&b.id!==a.treeId;){for(var d=0,e=c.length;b.tagName&&d<e;d++)if(h.eqs(b.tagName,c[d].tagName)&&b.getAttribute(c[d].attrName)!==null)return b;b=b.parentNode}return null},getNodeMainDom:function(a){return r(a).parent("li").get(0)||r(a).parentsUntil("li").parent().get(0)},isChildOrSelf:function(a,b){return r(a).closest("#"+
+b).length>0},uCanDo:function(){return!0}},j={addNodes:function(a,b,c,d,f){var i=e.nodeIsParent(a,b);if(!a.data.keep.leaf||!b||i)if(h.isArray(d)||(d=[d]),a.data.simpleData.enable&&(d=e.transformTozTreeFormat(a,d)),b){var i=l(b,g.id.SWITCH,a),m=l(b,g.id.ICON,a),k=l(b,g.id.UL,a);if(!b.open)j.replaceSwitchClass(b,i,g.folder.CLOSE),j.replaceIcoClass(b,m,g.folder.CLOSE),b.open=!1,k.css({display:"none"});e.addNodesData(a,b,c,d);j.createNodes(a,b.level+1,d,b,c);f||j.expandCollapseParentNode(a,b,!0)}else e.addNodesData(a,
+e.getRoot(a),c,d),j.createNodes(a,0,d,null,c)},appendNodes:function(a,b,c,d,f,i,g){if(!c)return[];var k=[],h=d?d:e.getRoot(a),h=e.nodeChildren(a,h),o,l;if(!h||f>=h.length-c.length)f=-1;for(var s=0,n=c.length;s<n;s++){var p=c[s];i&&(o=(f===0||h.length==c.length)&&s==0,l=f<0&&s==c.length-1,e.initNode(a,b,p,d,o,l,g),e.addNodeCache(a,p));o=e.nodeIsParent(a,p);l=[];var I=e.nodeChildren(a,p);I&&I.length>0&&(l=j.appendNodes(a,b+1,I,p,-1,i,g&&p.open));g&&(j.makeDOMNodeMainBefore(k,a,p),j.makeDOMNodeLine(k,
+a,p),e.getBeforeA(a,p,k),j.makeDOMNodeNameBefore(k,a,p),e.getInnerBeforeA(a,p,k),j.makeDOMNodeIcon(k,a,p),e.getInnerAfterA(a,p,k),j.makeDOMNodeNameAfter(k,a,p),e.getAfterA(a,p,k),o&&p.open&&j.makeUlHtml(a,p,k,l.join("")),j.makeDOMNodeMainAfter(k,a,p),e.addCreatedNode(a,p))}return k},appendParentULDom:function(a,b){var c=[],d=l(b,a);!d.get(0)&&b.parentTId&&(j.appendParentULDom(a,b.getParentNode()),d=l(b,a));var f=l(b,g.id.UL,a);f.get(0)&&f.remove();f=e.nodeChildren(a,b);f=j.appendNodes(a,b.level+1,
+f,b,-1,!1,!0);j.makeUlHtml(a,b,c,f.join(""));d.append(c.join(""))},asyncNode:function(a,b,c,d){var f,i;f=e.nodeIsParent(a,b);if(b&&!f)return h.apply(d),!1;else if(b&&b.isAjaxing)return!1;else if(h.apply(a.callback.beforeAsync,[a.treeId,b],!0)==!1)return h.apply(d),!1;if(b)b.isAjaxing=!0,l(b,g.id.ICON,a).attr({style:"","class":g.className.BUTTON+" "+g.className.ICO_LOADING});var m={},k=h.apply(a.async.autoParam,[a.treeId,b],a.async.autoParam);for(f=0,i=k.length;b&&f<i;f++){var q=k[f].split("="),o=
+q;q.length>1&&(o=q[1],q=q[0]);m[o]=b[q]}k=h.apply(a.async.otherParam,[a.treeId,b],a.async.otherParam);if(h.isArray(k))for(f=0,i=k.length;f<i;f+=2)m[k[f]]=k[f+1];else for(var n in k)m[n]=k[n];var s=e.getRoot(a)._ver;r.ajax({contentType:a.async.contentType,cache:!1,type:a.async.type,url:h.apply(a.async.url,[a.treeId,b],a.async.url),data:a.async.contentType.indexOf("application/json")>-1?JSON.stringify(m):m,dataType:a.async.dataType,headers:a.async.headers,xhrFields:a.async.xhrFields,success:function(i){if(s==
+e.getRoot(a)._ver){var f=[];try{f=!i||i.length==0?[]:typeof i=="string"?eval("("+i+")"):i}catch(k){f=i}if(b)b.isAjaxing=null,b.zAsync=!0;j.setNodeLineIcos(a,b);f&&f!==""?(f=h.apply(a.async.dataFilter,[a.treeId,b,f],f),j.addNodes(a,b,-1,f?h.clone(f):[],!!c)):j.addNodes(a,b,-1,[],!!c);a.treeObj.trigger(g.event.ASYNC_SUCCESS,[a.treeId,b,i]);h.apply(d)}},error:function(c,d,i){if(s==e.getRoot(a)._ver){if(b)b.isAjaxing=null;j.setNodeLineIcos(a,b);a.treeObj.trigger(g.event.ASYNC_ERROR,[a.treeId,b,c,d,i])}}});
+return!0},cancelPreSelectedNode:function(a,b,c){var d=e.getRoot(a).curSelectedList,f,i;for(f=d.length-1;f>=0;f--)if(i=d[f],b===i||!b&&(!c||c!==i))if(l(i,g.id.A,a).removeClass(g.node.CURSELECTED),b){e.removeSelectedNode(a,b);break}else d.splice(f,1),a.treeObj.trigger(g.event.UNSELECTED,[a.treeId,i])},createNodeCallback:function(a){if(a.callback.onNodeCreated||a.view.addDiyDom)for(var b=e.getRoot(a);b.createdNodes.length>0;){var c=b.createdNodes.shift();h.apply(a.view.addDiyDom,[a.treeId,c]);a.callback.onNodeCreated&&
+a.treeObj.trigger(g.event.NODECREATED,[a.treeId,c])}},createNodes:function(a,b,c,d,f){if(c&&c.length!=0){var i=e.getRoot(a),m=!d||d.open||!!l(e.nodeChildren(a,d)[0],a).get(0);i.createdNodes=[];var b=j.appendNodes(a,b,c,d,f,!0,m),k,h;d?(d=l(d,g.id.UL,a),d.get(0)&&(k=d)):k=a.treeObj;k&&(f>=0&&(h=k.children()[f]),f>=0&&h?r(h).before(b.join("")):k.append(b.join("")));j.createNodeCallback(a)}},destroy:function(a){a&&(e.initCache(a),e.initRoot(a),n.unbindTree(a),n.unbindEvent(a),a.treeObj.empty(),delete t[a.treeId])},
+expandCollapseNode:function(a,b,c,d,f){var i=e.getRoot(a),m;if(b){var k=e.nodeChildren(a,b),q=e.nodeIsParent(a,b);if(i.expandTriggerFlag)m=f,f=function(){m&&m();b.open?a.treeObj.trigger(g.event.EXPAND,[a.treeId,b]):a.treeObj.trigger(g.event.COLLAPSE,[a.treeId,b])},i.expandTriggerFlag=!1;if(!b.open&&q&&(!l(b,g.id.UL,a).get(0)||k&&k.length>0&&!l(k[0],a).get(0)))j.appendParentULDom(a,b),j.createNodeCallback(a);if(b.open==c)h.apply(f,[]);else{var c=l(b,g.id.UL,a),i=l(b,g.id.SWITCH,a),o=l(b,g.id.ICON,
+a);q?(b.open=!b.open,b.iconOpen&&b.iconClose&&o.attr("style",j.makeNodeIcoStyle(a,b)),b.open?(j.replaceSwitchClass(b,i,g.folder.OPEN),j.replaceIcoClass(b,o,g.folder.OPEN),d==!1||a.view.expandSpeed==""?(c.show(),h.apply(f,[])):k&&k.length>0?c.slideDown(a.view.expandSpeed,f):(c.show(),h.apply(f,[]))):(j.replaceSwitchClass(b,i,g.folder.CLOSE),j.replaceIcoClass(b,o,g.folder.CLOSE),d==!1||a.view.expandSpeed==""||!(k&&k.length>0)?(c.hide(),h.apply(f,[])):c.slideUp(a.view.expandSpeed,f))):h.apply(f,[])}}else h.apply(f,
+[])},expandCollapseParentNode:function(a,b,c,d,e){b&&(b.parentTId?(j.expandCollapseNode(a,b,c,d),b.parentTId&&j.expandCollapseParentNode(a,b.getParentNode(),c,d,e)):j.expandCollapseNode(a,b,c,d,e))},expandCollapseSonNode:function(a,b,c,d,f){var i=e.getRoot(a),i=b?e.nodeChildren(a,b):e.nodeChildren(a,i),g=b?!1:d,k=e.getRoot(a).expandTriggerFlag;e.getRoot(a).expandTriggerFlag=!1;if(i)for(var h=0,l=i.length;h<l;h++)i[h]&&j.expandCollapseSonNode(a,i[h],c,g);e.getRoot(a).expandTriggerFlag=k;j.expandCollapseNode(a,
+b,c,d,f)},isSelectedNode:function(a,b){if(!b)return!1;var c=e.getRoot(a).curSelectedList,d;for(d=c.length-1;d>=0;d--)if(b===c[d])return!0;return!1},makeDOMNodeIcon:function(a,b,c){var d=e.nodeName(b,c),d=b.view.nameIsHTML?d:d.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");a.push("<span id='",c.tId,g.id.ICON,"' title='' treeNode",g.id.ICON," class='",j.makeNodeIcoClass(b,c),"' style='",j.makeNodeIcoStyle(b,c),"'></span><span id='",c.tId,g.id.SPAN,"' class='",g.className.NAME,"'>",
+d,"</span>")},makeDOMNodeLine:function(a,b,c){a.push("<span id='",c.tId,g.id.SWITCH,"' title='' class='",j.makeNodeLineClass(b,c),"' treeNode",g.id.SWITCH,"></span>")},makeDOMNodeMainAfter:function(a){a.push("</li>")},makeDOMNodeMainBefore:function(a,b,c){a.push("<li id='",c.tId,"' class='",g.className.LEVEL,c.level,"' tabindex='0' hidefocus='true' treenode>")},makeDOMNodeNameAfter:function(a){a.push("</a>")},makeDOMNodeNameBefore:function(a,b,c){var d=e.nodeTitle(b,c),f=j.makeNodeUrl(b,c),i=j.makeNodeFontCss(b,
+c),m=[],k;for(k in i)m.push(k,":",i[k],";");a.push("<a id='",c.tId,g.id.A,"' class='",g.className.LEVEL,c.level,"' treeNode",g.id.A,' onclick="',c.click||"",'" ',f!=null&&f.length>0?"href='"+f+"'":""," target='",j.makeNodeTarget(c),"' style='",m.join(""),"'");h.apply(b.view.showTitle,[b.treeId,c],b.view.showTitle)&&d&&a.push("title='",d.replace(/'/g,"&#39;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),"'");a.push(">")},makeNodeFontCss:function(a,b){var c=h.apply(a.view.fontCss,[a.treeId,b],a.view.fontCss);
+return c&&typeof c!="function"?c:{}},makeNodeIcoClass:function(a,b){var c=["ico"];if(!b.isAjaxing){var d=e.nodeIsParent(a,b);c[0]=(b.iconSkin?b.iconSkin+"_":"")+c[0];d?c.push(b.open?g.folder.OPEN:g.folder.CLOSE):c.push(g.folder.DOCU)}return g.className.BUTTON+" "+c.join("_")},makeNodeIcoStyle:function(a,b){var c=[];if(!b.isAjaxing){var d=e.nodeIsParent(a,b)&&b.iconOpen&&b.iconClose?b.open?b.iconOpen:b.iconClose:b[a.data.key.icon];d&&c.push("background:url(",d,") 0 0 no-repeat;");(a.view.showIcon==
+!1||!h.apply(a.view.showIcon,[a.treeId,b],!0))&&c.push("width:0px;height:0px;")}return c.join("")},makeNodeLineClass:function(a,b){var c=[];a.view.showLine?b.level==0&&b.isFirstNode&&b.isLastNode?c.push(g.line.ROOT):b.level==0&&b.isFirstNode?c.push(g.line.ROOTS):b.isLastNode?c.push(g.line.BOTTOM):c.push(g.line.CENTER):c.push(g.line.NOLINE);e.nodeIsParent(a,b)?c.push(b.open?g.folder.OPEN:g.folder.CLOSE):c.push(g.folder.DOCU);return j.makeNodeLineClassEx(b)+c.join("_")},makeNodeLineClassEx:function(a){return g.className.BUTTON+
+" "+g.className.LEVEL+a.level+" "+g.className.SWITCH+" "},makeNodeTarget:function(a){return a.target||"_blank"},makeNodeUrl:function(a,b){var c=a.data.key.url;return b[c]?b[c]:null},makeUlHtml:function(a,b,c,d){c.push("<ul id='",b.tId,g.id.UL,"' class='",g.className.LEVEL,b.level," ",j.makeUlLineClass(a,b),"' style='display:",b.open?"block":"none","'>");c.push(d);c.push("</ul>")},makeUlLineClass:function(a,b){return a.view.showLine&&!b.isLastNode?g.line.LINE:""},removeChildNodes:function(a,b){if(b){var c=
+e.nodeChildren(a,b);if(c){for(var d=0,f=c.length;d<f;d++)e.removeNodeCache(a,c[d]);e.removeSelectedNode(a);delete b[a.data.key.children];a.data.keep.parent?l(b,g.id.UL,a).empty():(e.nodeIsParent(a,b,!1),b.open=!1,c=l(b,g.id.SWITCH,a),d=l(b,g.id.ICON,a),j.replaceSwitchClass(b,c,g.folder.DOCU),j.replaceIcoClass(b,d,g.folder.DOCU),l(b,g.id.UL,a).remove())}}},scrollIntoView:function(a,b){if(b)if(typeof Element==="undefined"){var c=a.treeObj.get(0).getBoundingClientRect(),d=b.getBoundingClientRect();(d.top<
+c.top||d.bottom>c.bottom||d.right>c.right||d.left<c.left)&&b.scrollIntoView()}else{if(!Element.prototype.scrollIntoViewIfNeeded)Element.prototype.scrollIntoViewIfNeeded=function(a){function b(a,c){return{start:a,length:c,end:a+c}}function c(b,d){return!1===a||d.start<b.end&&b.start<d.end?Math.max(b.end-d.length,Math.min(d.start,b.start)):(b.start+b.end-d.length)/2}function d(a,b){return{x:a,y:b,translate:function(c,i){return d(a+c,b+i)}}}function e(a,b){for(;a;)b=b.translate(a.offsetLeft,a.offsetTop),
+a=a.offsetParent;return b}for(var g=e(this,d(0,0)),j=d(this.offsetWidth,this.offsetHeight),h=this.parentNode,l;h instanceof HTMLElement;)l=e(h,d(h.clientLeft,h.clientTop)),h.scrollLeft=c(b(g.x-l.x,j.x),b(h.scrollLeft,h.clientWidth)),h.scrollTop=c(b(g.y-l.y,j.y),b(h.scrollTop,h.clientHeight)),g=g.translate(-h.scrollLeft,-h.scrollTop),h=h.parentNode};b.scrollIntoViewIfNeeded()}},setFirstNode:function(a,b){var c=e.nodeChildren(a,b);if(c.length>0)c[0].isFirstNode=!0},setLastNode:function(a,b){var c=e.nodeChildren(a,
+b);if(c.length>0)c[c.length-1].isLastNode=!0},removeNode:function(a,b){var c=e.getRoot(a),d=b.parentTId?b.getParentNode():c;b.isFirstNode=!1;b.isLastNode=!1;b.getPreNode=function(){return null};b.getNextNode=function(){return null};if(e.getNodeCache(a,b.tId)){l(b,a).remove();e.removeNodeCache(a,b);e.removeSelectedNode(a,b);for(var f=e.nodeChildren(a,d),i=0,h=f.length;i<h;i++)if(f[i].tId==b.tId){f.splice(i,1);break}j.setFirstNode(a,d);j.setLastNode(a,d);var k,i=f.length;if(!a.data.keep.parent&&i==
+0)e.nodeIsParent(a,d,!1),d.open=!1,delete d[a.data.key.children],i=l(d,g.id.UL,a),h=l(d,g.id.SWITCH,a),k=l(d,g.id.ICON,a),j.replaceSwitchClass(d,h,g.folder.DOCU),j.replaceIcoClass(d,k,g.folder.DOCU),i.css("display","none");else if(a.view.showLine&&i>0){var q=f[i-1],i=l(q,g.id.UL,a),h=l(q,g.id.SWITCH,a);k=l(q,g.id.ICON,a);d==c?f.length==1?j.replaceSwitchClass(q,h,g.line.ROOT):(c=l(f[0],g.id.SWITCH,a),j.replaceSwitchClass(f[0],c,g.line.ROOTS),j.replaceSwitchClass(q,h,g.line.BOTTOM)):j.replaceSwitchClass(q,
+h,g.line.BOTTOM);i.removeClass(g.line.LINE)}}},replaceIcoClass:function(a,b,c){if(b&&!a.isAjaxing&&(a=b.attr("class"),a!=void 0)){a=a.split("_");switch(c){case g.folder.OPEN:case g.folder.CLOSE:case g.folder.DOCU:a[a.length-1]=c}b.attr("class",a.join("_"))}},replaceSwitchClass:function(a,b,c){if(b){var d=b.attr("class");if(d!=void 0){d=d.split("_");switch(c){case g.line.ROOT:case g.line.ROOTS:case g.line.CENTER:case g.line.BOTTOM:case g.line.NOLINE:d[0]=j.makeNodeLineClassEx(a)+c;break;case g.folder.OPEN:case g.folder.CLOSE:case g.folder.DOCU:d[1]=
+c}b.attr("class",d.join("_"));c!==g.folder.DOCU?b.removeAttr("disabled"):b.attr("disabled","disabled")}}},selectNode:function(a,b,c){c||j.cancelPreSelectedNode(a,null,b);l(b,g.id.A,a).addClass(g.node.CURSELECTED);e.addSelectedNode(a,b);a.treeObj.trigger(g.event.SELECTED,[a.treeId,b])},setNodeFontCss:function(a,b){var c=l(b,g.id.A,a),d=j.makeNodeFontCss(a,b);d&&c.css(d)},setNodeLineIcos:function(a,b){if(b){var c=l(b,g.id.SWITCH,a),d=l(b,g.id.UL,a),f=l(b,g.id.ICON,a),i=j.makeUlLineClass(a,b);i.length==
+0?d.removeClass(g.line.LINE):d.addClass(i);c.attr("class",j.makeNodeLineClass(a,b));e.nodeIsParent(a,b)?c.removeAttr("disabled"):c.attr("disabled","disabled");f.removeAttr("style");f.attr("style",j.makeNodeIcoStyle(a,b));f.attr("class",j.makeNodeIcoClass(a,b))}},setNodeName:function(a,b){var c=e.nodeTitle(a,b),d=l(b,g.id.SPAN,a);d.empty();a.view.nameIsHTML?d.html(e.nodeName(a,b)):d.text(e.nodeName(a,b));h.apply(a.view.showTitle,[a.treeId,b],a.view.showTitle)&&l(b,g.id.A,a).attr("title",!c?"":c)},
+setNodeTarget:function(a,b){l(b,g.id.A,a).attr("target",j.makeNodeTarget(b))},setNodeUrl:function(a,b){var c=l(b,g.id.A,a),d=j.makeNodeUrl(a,b);d==null||d.length==0?c.removeAttr("href"):c.attr("href",d)},switchNode:function(a,b){b.open||!h.canAsync(a,b)?j.expandCollapseNode(a,b,!b.open):a.async.enable?j.asyncNode(a,b)||j.expandCollapseNode(a,b,!b.open):b&&j.expandCollapseNode(a,b,!b.open)}};r.fn.zTree={consts:{className:{BUTTON:"button",LEVEL:"level",ICO_LOADING:"ico_loading",SWITCH:"switch",NAME:"node_name"},
+event:{NODECREATED:"ztree_nodeCreated",CLICK:"ztree_click",EXPAND:"ztree_expand",COLLAPSE:"ztree_collapse",ASYNC_SUCCESS:"ztree_async_success",ASYNC_ERROR:"ztree_async_error",REMOVE:"ztree_remove",SELECTED:"ztree_selected",UNSELECTED:"ztree_unselected"},id:{A:"_a",ICON:"_ico",SPAN:"_span",SWITCH:"_switch",UL:"_ul"},line:{ROOT:"root",ROOTS:"roots",CENTER:"center",BOTTOM:"bottom",NOLINE:"noline",LINE:"line"},folder:{OPEN:"open",CLOSE:"close",DOCU:"docu"},node:{CURSELECTED:"curSelectedNode"}},_z:{tools:h,
+view:j,event:n,data:e},getZTreeObj:function(a){return(a=e.getZTreeTools(a))?a:null},destroy:function(a){if(a&&a.length>0)j.destroy(e.getSetting(a));else for(var b in t)j.destroy(t[b])},init:function(a,b,c){var d=h.clone(P);r.extend(!0,d,b);d.treeId=a.attr("id");d.treeObj=a;d.treeObj.empty();t[d.treeId]=d;if(typeof document.body.style.maxHeight==="undefined")d.view.expandSpeed="";e.initRoot(d);a=e.getRoot(d);c=c?h.clone(h.isArray(c)?c:[c]):[];d.data.simpleData.enable?e.nodeChildren(d,a,e.transformTozTreeFormat(d,
+c)):e.nodeChildren(d,a,c);e.initCache(d);n.unbindTree(d);n.bindTree(d);n.unbindEvent(d);n.bindEvent(d);var f={setting:d,addNodes:function(a,b,c,f){function g(){j.addNodes(d,a,b,n,f==!0)}a||(a=null);var l=e.nodeIsParent(d,a);if(a&&!l&&d.data.keep.leaf)return null;l=parseInt(b,10);isNaN(l)?(f=!!c,c=b,b=-1):b=l;if(!c)return null;var n=h.clone(h.isArray(c)?c:[c]);h.canAsync(d,a)?j.asyncNode(d,a,f,g):g();return n},cancelSelectedNode:function(a){j.cancelPreSelectedNode(d,a)},destroy:function(){j.destroy(d)},
+expandAll:function(a){a=!!a;j.expandCollapseSonNode(d,null,a,!0);return a},expandNode:function(a,b,c,f,g){function n(){var b=l(a,d).get(0);b&&f!==!1&&j.scrollIntoView(d,b)}if(!a||!e.nodeIsParent(d,a))return null;b!==!0&&b!==!1&&(b=!a.open);if((g=!!g)&&b&&h.apply(d.callback.beforeExpand,[d.treeId,a],!0)==!1)return null;else if(g&&!b&&h.apply(d.callback.beforeCollapse,[d.treeId,a],!0)==!1)return null;b&&a.parentTId&&j.expandCollapseParentNode(d,a.getParentNode(),b,!1);if(b===a.open&&!c)return null;
+e.getRoot(d).expandTriggerFlag=g;!h.canAsync(d,a)&&c?j.expandCollapseSonNode(d,a,b,!0,n):(a.open=!b,j.switchNode(this.setting,a),n());return b},getNodes:function(){return e.getNodes(d)},getNodeByParam:function(a,b,c){return!a?null:e.getNodeByParam(d,c?e.nodeChildren(d,c):e.getNodes(d),a,b)},getNodeByTId:function(a){return e.getNodeCache(d,a)},getNodesByParam:function(a,b,c){return!a?null:e.getNodesByParam(d,c?e.nodeChildren(d,c):e.getNodes(d),a,b)},getNodesByParamFuzzy:function(a,b,c){return!a?null:
+e.getNodesByParamFuzzy(d,c?e.nodeChildren(d,c):e.getNodes(d),a,b)},getNodesByFilter:function(a,b,c,f){b=!!b;return!a||typeof a!="function"?b?null:[]:e.getNodesByFilter(d,c?e.nodeChildren(d,c):e.getNodes(d),a,b,f)},getNodeIndex:function(a){if(!a)return null;for(var b=a.parentTId?a.getParentNode():e.getRoot(d),b=e.nodeChildren(d,b),c=0,f=b.length;c<f;c++)if(b[c]==a)return c;return-1},getSelectedNodes:function(){for(var a=[],b=e.getRoot(d).curSelectedList,c=0,f=b.length;c<f;c++)a.push(b[c]);return a},
+isSelectedNode:function(a){return e.isSelectedNode(d,a)},reAsyncChildNodesPromise:function(a,b,c){return new Promise(function(d,e){try{f.reAsyncChildNodes(a,b,c,function(){d(a)})}catch(g){e(g)}})},reAsyncChildNodes:function(a,b,c,f){if(this.setting.async.enable){var h=!a;h&&(a=e.getRoot(d));if(b=="refresh"){for(var b=e.nodeChildren(d,a),n=0,r=b?b.length:0;n<r;n++)e.removeNodeCache(d,b[n]);e.removeSelectedNode(d);e.nodeChildren(d,a,[]);h?this.setting.treeObj.empty():l(a,g.id.UL,d).empty()}j.asyncNode(this.setting,
+h?null:a,!!c,f)}},refresh:function(){this.setting.treeObj.empty();var a=e.getRoot(d),b=e.nodeChildren(d,a);e.initRoot(d);e.nodeChildren(d,a,b);e.initCache(d);j.createNodes(d,0,e.nodeChildren(d,a),null,-1)},removeChildNodes:function(a){if(!a)return null;var b=e.nodeChildren(d,a);j.removeChildNodes(d,a);return b?b:null},removeNode:function(a,b){a&&(b=!!b,b&&h.apply(d.callback.beforeRemove,[d.treeId,a],!0)==!1||(j.removeNode(d,a),b&&this.setting.treeObj.trigger(g.event.REMOVE,[d.treeId,a])))},selectNode:function(a,
+b,c){function e(){if(!c){var b=l(a,d).get(0);j.scrollIntoView(d,b)}}if(a&&h.uCanDo(d)){b=d.view.selectedMulti&&b;if(a.parentTId)j.expandCollapseParentNode(d,a.getParentNode(),!0,!1,e);else if(!c)try{l(a,d).focus().blur()}catch(f){}j.selectNode(d,a,b)}},transformTozTreeNodes:function(a){return e.transformTozTreeFormat(d,a)},transformToArray:function(a){return e.transformToArrayFormat(d,a)},updateNode:function(a){a&&l(a,d).get(0)&&h.uCanDo(d)&&(j.setNodeName(d,a),j.setNodeTarget(d,a),j.setNodeUrl(d,
+a),j.setNodeLineIcos(d,a),j.setNodeFontCss(d,a))}};a.treeTools=f;e.setZTreeTools(d,f);(c=e.nodeChildren(d,a))&&c.length>0?j.createNodes(d,0,c,null,-1):d.async.enable&&d.async.url&&d.async.url!==""&&j.asyncNode(d);return f}};var Q=r.fn.zTree,l=h.$,g=Q.consts})(jQuery);
+
+/*
+ * JQuery zTree excheck v3.5.37
+ * http://treejs.cn/
+ *
+ * Copyright (c) 2010 Hunter.z
+ *
+ * Licensed same as jquery - MIT License
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ * email: hunter.z@263.net
+ * Date: 2018-08-21
+ */
+(function(n){var q,r,s,p={event:{CHECK:"ztree_check"},id:{CHECK:"_check"},checkbox:{STYLE:"checkbox",DEFAULT:"chk",DISABLED:"disable",FALSE:"false",TRUE:"true",FULL:"full",PART:"part",FOCUS:"focus"},radio:{STYLE:"radio",TYPE_ALL:"all",TYPE_LEVEL:"level"}},w={check:{enable:!1,autoCheckTrigger:!1,chkStyle:p.checkbox.STYLE,nocheckInherit:!1,chkDisabledInherit:!1,radioType:p.radio.TYPE_LEVEL,chkboxType:{Y:"ps",N:"ps"}},data:{key:{checked:"checked"}},callback:{beforeCheck:null,onCheck:null}};q=function(c,
+a){if(a.chkDisabled===!0)return!1;var b=e.getSetting(c.data.treeId);if(i.apply(b.callback.beforeCheck,[b.treeId,a],!0)==!1)return!0;var d=e.nodeChecked(b,a);e.nodeChecked(b,a,!d);f.checkNodeRelation(b,a);d=m(a,h.id.CHECK,b);f.setChkClass(b,d,a);f.repairParentChkClassWithSelf(b,a);b.treeObj.trigger(h.event.CHECK,[c,b.treeId,a]);return!0};r=function(c,a){if(a.chkDisabled===!0)return!1;var b=e.getSetting(c.data.treeId),d=m(a,h.id.CHECK,b);a.check_Focus=!0;f.setChkClass(b,d,a);return!0};s=function(c,
+a){if(a.chkDisabled===!0)return!1;var b=e.getSetting(c.data.treeId),d=m(a,h.id.CHECK,b);a.check_Focus=!1;f.setChkClass(b,d,a);return!0};n.extend(!0,n.fn.zTree.consts,p);n.extend(!0,n.fn.zTree._z,{tools:{},view:{checkNodeRelation:function(c,a){var b,d,j;d=h.radio;b=e.nodeChecked(c,a);if(c.check.chkStyle==d.STYLE){var g=e.getRadioCheckedList(c);if(b)if(c.check.radioType==d.TYPE_ALL){for(d=g.length-1;d>=0;d--){b=g[d];var k=e.nodeChecked(c,b);k&&b!=a&&(e.nodeChecked(c,b,!1),g.splice(d,1),f.setChkClass(c,
+m(b,h.id.CHECK,c),b),b.parentTId!=a.parentTId&&f.repairParentChkClassWithSelf(c,b))}g.push(a)}else{g=a.parentTId?a.getParentNode():e.getRoot(c);g=e.nodeChildren(c,g);for(d=0,j=g.length;d<j;d++)if(b=g[d],(k=e.nodeChecked(c,b))&&b!=a)e.nodeChecked(c,b,!1),f.setChkClass(c,m(b,h.id.CHECK,c),b)}else if(c.check.radioType==d.TYPE_ALL)for(d=0,j=g.length;d<j;d++)if(a==g[d]){g.splice(d,1);break}}else g=e.nodeChildren(c,a),b&&(!g||g.length==0||c.check.chkboxType.Y.indexOf("s")>-1)&&f.setSonNodeCheckBox(c,a,
+!0),!b&&(!g||g.length==0||c.check.chkboxType.N.indexOf("s")>-1)&&f.setSonNodeCheckBox(c,a,!1),b&&c.check.chkboxType.Y.indexOf("p")>-1&&f.setParentNodeCheckBox(c,a,!0),!b&&c.check.chkboxType.N.indexOf("p")>-1&&f.setParentNodeCheckBox(c,a,!1)},makeChkClass:function(c,a){var b=h.checkbox,d=h.radio,j="",g=e.nodeChecked(c,a),j=a.chkDisabled===!0?b.DISABLED:a.halfCheck?b.PART:c.check.chkStyle==d.STYLE?a.check_Child_State<1?b.FULL:b.PART:g?a.check_Child_State===2||a.check_Child_State===-1?b.FULL:b.PART:
+a.check_Child_State<1?b.FULL:b.PART,d=c.check.chkStyle+"_"+(g?b.TRUE:b.FALSE)+"_"+j,d=a.check_Focus&&a.chkDisabled!==!0?d+"_"+b.FOCUS:d;return h.className.BUTTON+" "+b.DEFAULT+" "+d},repairAllChk:function(c,a){if(c.check.enable&&c.check.chkStyle===h.checkbox.STYLE)for(var b=e.getRoot(c),b=e.nodeChildren(c,b),d=0,j=b.length;d<j;d++){var g=b[d];g.nocheck!==!0&&g.chkDisabled!==!0&&e.nodeChecked(c,g,a);f.setSonNodeCheckBox(c,g,a)}},repairChkClass:function(c,a){if(a&&(e.makeChkFlag(c,a),a.nocheck!==!0)){var b=
+m(a,h.id.CHECK,c);f.setChkClass(c,b,a)}},repairParentChkClass:function(c,a){if(a&&a.parentTId){var b=a.getParentNode();f.repairChkClass(c,b);f.repairParentChkClass(c,b)}},repairParentChkClassWithSelf:function(c,a){if(a){var b=e.nodeChildren(c,a);b&&b.length>0?f.repairParentChkClass(c,b[0]):f.repairParentChkClass(c,a)}},repairSonChkDisabled:function(c,a,b,d){if(a){if(a.chkDisabled!=b)a.chkDisabled=b;f.repairChkClass(c,a);if((a=e.nodeChildren(c,a))&&d)for(var j=0,g=a.length;j<g;j++)f.repairSonChkDisabled(c,
+a[j],b,d)}},repairParentChkDisabled:function(c,a,b,d){if(a){if(a.chkDisabled!=b&&d)a.chkDisabled=b;f.repairChkClass(c,a);f.repairParentChkDisabled(c,a.getParentNode(),b,d)}},setChkClass:function(c,a,b){a&&(b.nocheck===!0?a.hide():a.show(),a.attr("class",f.makeChkClass(c,b)))},setParentNodeCheckBox:function(c,a,b,d){var j=m(a,h.id.CHECK,c);d||(d=a);e.makeChkFlag(c,a);a.nocheck!==!0&&a.chkDisabled!==!0&&(e.nodeChecked(c,a,b),f.setChkClass(c,j,a),c.check.autoCheckTrigger&&a!=d&&c.treeObj.trigger(h.event.CHECK,
+[null,c.treeId,a]));if(a.parentTId){j=!0;if(!b)for(var g=e.nodeChildren(c,a.getParentNode()),k=0,o=g.length;k<o;k++){var l=g[k],i=e.nodeChecked(c,l);if(l.nocheck!==!0&&l.chkDisabled!==!0&&i||(l.nocheck===!0||l.chkDisabled===!0)&&l.check_Child_State>0){j=!1;break}}j&&f.setParentNodeCheckBox(c,a.getParentNode(),b,d)}},setSonNodeCheckBox:function(c,a,b,d){if(a){var j=m(a,h.id.CHECK,c);d||(d=a);var g=!1,k=e.nodeChildren(c,a);if(k)for(var o=0,l=k.length;o<l;o++){var i=k[o];f.setSonNodeCheckBox(c,i,b,d);
+i.chkDisabled===!0&&(g=!0)}if(a!=e.getRoot(c)&&a.chkDisabled!==!0){g&&a.nocheck!==!0&&e.makeChkFlag(c,a);if(a.nocheck!==!0&&a.chkDisabled!==!0){if(e.nodeChecked(c,a,b),!g)a.check_Child_State=k&&k.length>0?b?2:0:-1}else a.check_Child_State=-1;f.setChkClass(c,j,a);c.check.autoCheckTrigger&&a!=d&&a.nocheck!==!0&&a.chkDisabled!==!0&&c.treeObj.trigger(h.event.CHECK,[null,c.treeId,a])}}}},event:{},data:{getRadioCheckedList:function(c){for(var a=e.getRoot(c).radioCheckedList,b=0,d=a.length;b<d;b++)e.getNodeCache(c,
+a[b].tId)||(a.splice(b,1),b--,d--);return a},getCheckStatus:function(c,a){if(!c.check.enable||a.nocheck||a.chkDisabled)return null;var b=e.nodeChecked(c,a);return{checked:b,half:a.halfCheck?a.halfCheck:c.check.chkStyle==h.radio.STYLE?a.check_Child_State===2:b?a.check_Child_State>-1&&a.check_Child_State<2:a.check_Child_State>0}},getTreeCheckedNodes:function(c,a,b,d){if(!a)return[];for(var j=b&&c.check.chkStyle==h.radio.STYLE&&c.check.radioType==h.radio.TYPE_ALL,d=!d?[]:d,g=0,f=a.length;g<f;g++){var i=
+a[g],l=e.nodeChildren(c,i),m=e.nodeChecked(c,i);if(i.nocheck!==!0&&i.chkDisabled!==!0&&m==b&&(d.push(i),j))break;e.getTreeCheckedNodes(c,l,b,d);if(j&&d.length>0)break}return d},getTreeChangeCheckedNodes:function(c,a,b){if(!a)return[];for(var b=!b?[]:b,d=0,j=a.length;d<j;d++){var g=a[d],f=e.nodeChildren(c,g),h=e.nodeChecked(c,g);g.nocheck!==!0&&g.chkDisabled!==!0&&h!=g.checkedOld&&b.push(g);e.getTreeChangeCheckedNodes(c,f,b)}return b},makeChkFlag:function(c,a){if(a){var b=-1,d=e.nodeChildren(c,a);
+if(d)for(var j=0,g=d.length;j<g;j++){var f=d[j],i=e.nodeChecked(c,f),l=-1;if(c.check.chkStyle==h.radio.STYLE)if(l=f.nocheck===!0||f.chkDisabled===!0?f.check_Child_State:f.halfCheck===!0?2:i?2:f.check_Child_State>0?2:0,l==2){b=2;break}else l==0&&(b=0);else if(c.check.chkStyle==h.checkbox.STYLE)if(l=f.nocheck===!0||f.chkDisabled===!0?f.check_Child_State:f.halfCheck===!0?1:i?f.check_Child_State===-1||f.check_Child_State===2?2:1:f.check_Child_State>0?1:0,l===1){b=1;break}else if(l===2&&b>-1&&j>0&&l!==
+b){b=1;break}else if(b===2&&l>-1&&l<2){b=1;break}else l>-1&&(b=l)}a.check_Child_State=b}}}});var n=n.fn.zTree,i=n._z.tools,h=n.consts,f=n._z.view,e=n._z.data,m=i.$;e.nodeChecked=function(c,a,b){if(!a)return!1;c=c.data.key.checked;typeof b!=="undefined"&&(typeof b==="string"&&(b=i.eqs(b,"true")),a[c]=!!b);return a[c]};e.exSetting(w);e.addInitBind(function(c){c.treeObj.bind(h.event.CHECK,function(a,b,d,e){a.srcEvent=b;i.apply(c.callback.onCheck,[a,d,e])})});e.addInitUnBind(function(c){c.treeObj.unbind(h.event.CHECK)});
+e.addInitCache(function(){});e.addInitNode(function(c,a,b,d){if(b){a=e.nodeChecked(c,b);a=e.nodeChecked(c,b,a);b.checkedOld=a;if(typeof b.nocheck=="string")b.nocheck=i.eqs(b.nocheck,"true");b.nocheck=!!b.nocheck||c.check.nocheckInherit&&d&&!!d.nocheck;if(typeof b.chkDisabled=="string")b.chkDisabled=i.eqs(b.chkDisabled,"true");b.chkDisabled=!!b.chkDisabled||c.check.chkDisabledInherit&&d&&!!d.chkDisabled;if(typeof b.halfCheck=="string")b.halfCheck=i.eqs(b.halfCheck,"true");b.halfCheck=!!b.halfCheck;
+b.check_Child_State=-1;b.check_Focus=!1;b.getCheckStatus=function(){return e.getCheckStatus(c,b)};c.check.chkStyle==h.radio.STYLE&&c.check.radioType==h.radio.TYPE_ALL&&a&&e.getRoot(c).radioCheckedList.push(b)}});e.addInitProxy(function(c){var a=c.target,b=e.getSetting(c.data.treeId),d="",f=null,g="",k=null;if(i.eqs(c.type,"mouseover")){if(b.check.enable&&i.eqs(a.tagName,"span")&&a.getAttribute("treeNode"+h.id.CHECK)!==null)d=i.getNodeMainDom(a).id,g="mouseoverCheck"}else if(i.eqs(c.type,"mouseout")){if(b.check.enable&&
+i.eqs(a.tagName,"span")&&a.getAttribute("treeNode"+h.id.CHECK)!==null)d=i.getNodeMainDom(a).id,g="mouseoutCheck"}else if(i.eqs(c.type,"click")&&b.check.enable&&i.eqs(a.tagName,"span")&&a.getAttribute("treeNode"+h.id.CHECK)!==null)d=i.getNodeMainDom(a).id,g="checkNode";if(d.length>0)switch(f=e.getNodeCache(b,d),g){case "checkNode":k=q;break;case "mouseoverCheck":k=r;break;case "mouseoutCheck":k=s}return{stop:g==="checkNode",node:f,nodeEventType:g,nodeEventCallback:k,treeEventType:"",treeEventCallback:null}},
+!0);e.addInitRoot(function(c){e.getRoot(c).radioCheckedList=[]});e.addBeforeA(function(c,a,b){c.check.enable&&(e.makeChkFlag(c,a),b.push("<span ID='",a.tId,h.id.CHECK,"' class='",f.makeChkClass(c,a),"' treeNode",h.id.CHECK,a.nocheck===!0?" style='display:none;'":"","></span>"))});e.addZTreeTools(function(c,a){a.checkNode=function(a,b,g,k){var o=e.nodeChecked(c,a);if(a.chkDisabled!==!0&&(b!==!0&&b!==!1&&(b=!o),k=!!k,(o!==b||g)&&!(k&&i.apply(this.setting.callback.beforeCheck,[this.setting.treeId,a],
+!0)==!1)&&i.uCanDo(this.setting)&&this.setting.check.enable&&a.nocheck!==!0))e.nodeChecked(c,a,b),b=m(a,h.id.CHECK,this.setting),(g||this.setting.check.chkStyle===h.radio.STYLE)&&f.checkNodeRelation(this.setting,a),f.setChkClass(this.setting,b,a),f.repairParentChkClassWithSelf(this.setting,a),k&&this.setting.treeObj.trigger(h.event.CHECK,[null,this.setting.treeId,a])};a.checkAllNodes=function(a){f.repairAllChk(this.setting,!!a)};a.getCheckedNodes=function(a){var a=a!==!1,b=e.nodeChildren(c,e.getRoot(this.setting));
+return e.getTreeCheckedNodes(this.setting,b,a)};a.getChangeCheckedNodes=function(){var a=e.nodeChildren(c,e.getRoot(this.setting));return e.getTreeChangeCheckedNodes(this.setting,a)};a.setChkDisabled=function(a,b,c,e){b=!!b;c=!!c;f.repairSonChkDisabled(this.setting,a,b,!!e);f.repairParentChkDisabled(this.setting,a.getParentNode(),b,c)};var b=a.updateNode;a.updateNode=function(c,e){b&&b.apply(a,arguments);if(c&&this.setting.check.enable&&m(c,this.setting).get(0)&&i.uCanDo(this.setting)){var g=m(c,
+h.id.CHECK,this.setting);(e==!0||this.setting.check.chkStyle===h.radio.STYLE)&&f.checkNodeRelation(this.setting,c);f.setChkClass(this.setting,g,c);f.repairParentChkClassWithSelf(this.setting,c)}}});var t=f.createNodes;f.createNodes=function(c,a,b,d,e){t&&t.apply(f,arguments);b&&f.repairParentChkClassWithSelf(c,d)};var u=f.removeNode;f.removeNode=function(c,a){var b=a.getParentNode();u&&u.apply(f,arguments);a&&b&&(f.repairChkClass(c,b),f.repairParentChkClass(c,b))};var v=f.appendNodes;f.appendNodes=
+function(c,a,b,d,h,g,i){var m="";v&&(m=v.apply(f,arguments));d&&e.makeChkFlag(c,d);return m}})(jQuery);
+
+/*
+ * JQuery zTree exedit v3.5.37
+ * http://treejs.cn/
+ *
+ * Copyright (c) 2010 Hunter.z
+ *
+ * Licensed same as jquery - MIT License
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ * email: hunter.z@263.net
+ * Date: 2018-08-21
+ */
+(function(B){var I={event:{DRAG:"ztree_drag",DROP:"ztree_drop",RENAME:"ztree_rename",DRAGMOVE:"ztree_dragmove"},id:{EDIT:"_edit",INPUT:"_input",REMOVE:"_remove"},move:{TYPE_INNER:"inner",TYPE_PREV:"prev",TYPE_NEXT:"next"},node:{CURSELECTED_EDIT:"curSelectedNode_Edit",TMPTARGET_TREE:"tmpTargetzTree",TMPTARGET_NODE:"tmpTargetNode"}},v={onHoverOverNode:function(a,b){var c=i.getSetting(a.data.treeId),d=i.getRoot(c);if(d.curHoverNode!=b)v.onHoverOutNode(a);d.curHoverNode=b;e.addHoverDom(c,b)},onHoverOutNode:function(a){var a=
+i.getSetting(a.data.treeId),b=i.getRoot(a);if(b.curHoverNode&&!i.isSelectedNode(a,b.curHoverNode))e.removeTreeDom(a,b.curHoverNode),b.curHoverNode=null},onMousedownNode:function(a,b){function c(a){if(m.dragFlag==0&&Math.abs(N-a.clientX)<f.edit.drag.minMoveSize&&Math.abs(O-a.clientY)<f.edit.drag.minMoveSize)return!0;var b,c,g,j;L.css("cursor","pointer");if(m.dragFlag==0){if(k.apply(f.callback.beforeDrag,[f.treeId,n],!0)==!1)return l(a),!0;for(b=0,c=n.length;b<c;b++){if(b==0)m.dragNodeShowBefore=[];
+g=n[b];i.nodeIsParent(f,g)&&g.open?(e.expandCollapseNode(f,g,!g.open),m.dragNodeShowBefore[g.tId]=!0):m.dragNodeShowBefore[g.tId]=!1}m.dragFlag=1;y.showHoverDom=!1;k.showIfameMask(f,!0);j=!0;var p=-1;if(n.length>1){var o=n[0].parentTId?i.nodeChildren(f,n[0].getParentNode()):i.getNodes(f);g=[];for(b=0,c=o.length;b<c;b++)if(m.dragNodeShowBefore[o[b].tId]!==void 0&&(j&&p>-1&&p+1!==b&&(j=!1),g.push(o[b]),p=b),n.length===g.length){n=g;break}}j&&(H=n[0].getPreNode(),Q=n[n.length-1].getNextNode());C=q("<ul class='zTreeDragUL'></ul>",
+f);for(b=0,c=n.length;b<c;b++)g=n[b],g.editNameFlag=!1,e.selectNode(f,g,b>0),e.removeTreeDom(f,g),b>f.edit.drag.maxShowNodeNum-1||(j=q("<li id='"+g.tId+"_tmp'></li>",f),j.append(q(g,d.id.A,f).clone()),j.css("padding","0"),j.children("#"+g.tId+d.id.A).removeClass(d.node.CURSELECTED),C.append(j),b==f.edit.drag.maxShowNodeNum-1&&(j=q("<li id='"+g.tId+"_moretmp'><a>  ...  </a></li>",f),C.append(j)));C.attr("id",n[0].tId+d.id.UL+"_tmp");C.addClass(f.treeObj.attr("class"));C.appendTo(L);u=q("<span class='tmpzTreeMove_arrow'></span>",
+f);u.attr("id","zTreeMove_arrow_tmp");u.appendTo(L);f.treeObj.trigger(d.event.DRAG,[a,f.treeId,n])}if(m.dragFlag==1){t&&u.attr("id")==a.target.id&&w&&a.clientX+G.scrollLeft()+2>B("#"+w+d.id.A,t).offset().left?(g=B("#"+w+d.id.A,t),a.target=g.length>0?g.get(0):a.target):t&&(t.removeClass(d.node.TMPTARGET_TREE),w&&B("#"+w+d.id.A,t).removeClass(d.node.TMPTARGET_NODE+"_"+d.move.TYPE_PREV).removeClass(d.node.TMPTARGET_NODE+"_"+I.move.TYPE_NEXT).removeClass(d.node.TMPTARGET_NODE+"_"+I.move.TYPE_INNER));
+w=t=null;J=!1;h=f;g=i.getSettings();for(var z in g)if(g[z].treeId&&g[z].edit.enable&&g[z].treeId!=f.treeId&&(a.target.id==g[z].treeId||B(a.target).parents("#"+g[z].treeId).length>0))J=!0,h=g[z];z=G.scrollTop();j=G.scrollLeft();p=h.treeObj.offset();b=h.treeObj.get(0).scrollHeight;g=h.treeObj.get(0).scrollWidth;c=a.clientY+z-p.top;var E=h.treeObj.height()+p.top-a.clientY-z,r=a.clientX+j-p.left,s=h.treeObj.width()+p.left-a.clientX-j,p=c<f.edit.drag.borderMax&&c>f.edit.drag.borderMin,o=E<f.edit.drag.borderMax&&
+E>f.edit.drag.borderMin,F=r<f.edit.drag.borderMax&&r>f.edit.drag.borderMin,v=s<f.edit.drag.borderMax&&s>f.edit.drag.borderMin,E=c>f.edit.drag.borderMin&&E>f.edit.drag.borderMin&&r>f.edit.drag.borderMin&&s>f.edit.drag.borderMin,r=p&&h.treeObj.scrollTop()<=0,s=o&&h.treeObj.scrollTop()+h.treeObj.height()+10>=b,M=F&&h.treeObj.scrollLeft()<=0,P=v&&h.treeObj.scrollLeft()+h.treeObj.width()+10>=g;if(a.target&&k.isChildOrSelf(a.target,h.treeId)){for(var D=a.target;D&&D.tagName&&!k.eqs(D.tagName,"li")&&D.id!=
+h.treeId;)D=D.parentNode;var R=!0;for(b=0,c=n.length;b<c;b++)if(g=n[b],D.id===g.tId){R=!1;break}else if(q(g,f).find("#"+D.id).length>0){R=!1;break}if(R&&a.target&&k.isChildOrSelf(a.target,D.id+d.id.A))t=B(D),w=D.id}g=n[0];if(E&&k.isChildOrSelf(a.target,h.treeId)){if(!t&&(a.target.id==h.treeId||r||s||M||P)&&(J||!J&&g.parentTId))t=h.treeObj;p?h.treeObj.scrollTop(h.treeObj.scrollTop()-10):o&&h.treeObj.scrollTop(h.treeObj.scrollTop()+10);F?h.treeObj.scrollLeft(h.treeObj.scrollLeft()-10):v&&h.treeObj.scrollLeft(h.treeObj.scrollLeft()+
+10);t&&t!=h.treeObj&&t.offset().left<h.treeObj.offset().left&&h.treeObj.scrollLeft(h.treeObj.scrollLeft()+t.offset().left-h.treeObj.offset().left)}C.css({top:a.clientY+z+3+"px",left:a.clientX+j+3+"px"});b=j=0;if(t&&t.attr("id")!=h.treeId){var A=w==null?null:i.getNodeCache(h,w),p=(a.ctrlKey||a.metaKey)&&f.edit.drag.isMove&&f.edit.drag.isCopy||!f.edit.drag.isMove&&f.edit.drag.isCopy;c=!!(H&&w===H.tId);F=!!(Q&&w===Q.tId);o=g.parentTId&&g.parentTId==w;g=(p||!F)&&k.apply(h.edit.drag.prev,[h.treeId,n,A],
+!!h.edit.drag.prev);c=(p||!c)&&k.apply(h.edit.drag.next,[h.treeId,n,A],!!h.edit.drag.next);p=(p||!o)&&!(h.data.keep.leaf&&!i.nodeIsParent(f,A))&&k.apply(h.edit.drag.inner,[h.treeId,n,A],!!h.edit.drag.inner);o=function(){t=null;w="";x=d.move.TYPE_INNER;u.css({display:"none"});if(window.zTreeMoveTimer)clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=null};if(!g&&!c&&!p)o();else if(F=B("#"+w+d.id.A,t),v=A.isLastNode?null:B("#"+A.getNextNode().tId+d.id.A,t.next()),E=F.offset().top,r=
+F.offset().left,s=g?p?0.25:c?0.5:1:-1,M=c?p?0.75:g?0.5:0:-1,z=(a.clientY+z-E)/F.height(),(s==1||z<=s&&z>=-0.2)&&g?(j=1-u.width(),b=E-u.height()/2,x=d.move.TYPE_PREV):(M==0||z>=M&&z<=1.2)&&c?(j=1-u.width(),b=v==null||i.nodeIsParent(f,A)&&A.open?E+F.height()-u.height()/2:v.offset().top-u.height()/2,x=d.move.TYPE_NEXT):p?(j=5-u.width(),b=E,x=d.move.TYPE_INNER):o(),t){u.css({display:"block",top:b+"px",left:r+j+"px"});F.addClass(d.node.TMPTARGET_NODE+"_"+x);if(S!=w||T!=x)K=(new Date).getTime();if(A&&i.nodeIsParent(f,
+A)&&x==d.move.TYPE_INNER&&(z=!0,window.zTreeMoveTimer&&window.zTreeMoveTargetNodeTId!==A.tId?(clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=null):window.zTreeMoveTimer&&window.zTreeMoveTargetNodeTId===A.tId&&(z=!1),z))window.zTreeMoveTimer=setTimeout(function(){x==d.move.TYPE_INNER&&A&&i.nodeIsParent(f,A)&&!A.open&&(new Date).getTime()-K>h.edit.drag.autoOpenTime&&k.apply(h.callback.beforeDragOpen,[h.treeId,A],!0)&&(e.switchNode(h,A),h.edit.drag.autoExpandTrigger&&h.treeObj.trigger(d.event.EXPAND,
+[h.treeId,A]))},h.edit.drag.autoOpenTime+50),window.zTreeMoveTargetNodeTId=A.tId}}else if(x=d.move.TYPE_INNER,t&&k.apply(h.edit.drag.inner,[h.treeId,n,null],!!h.edit.drag.inner)?t.addClass(d.node.TMPTARGET_TREE):t=null,u.css({display:"none"}),window.zTreeMoveTimer)clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=null;S=w;T=x;f.treeObj.trigger(d.event.DRAGMOVE,[a,f.treeId,n])}return!1}function l(a){if(window.zTreeMoveTimer)clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=
+null;T=S=null;G.unbind("mousemove",c);G.unbind("mouseup",l);G.unbind("selectstart",g);L.css("cursor","");t&&(t.removeClass(d.node.TMPTARGET_TREE),w&&B("#"+w+d.id.A,t).removeClass(d.node.TMPTARGET_NODE+"_"+d.move.TYPE_PREV).removeClass(d.node.TMPTARGET_NODE+"_"+I.move.TYPE_NEXT).removeClass(d.node.TMPTARGET_NODE+"_"+I.move.TYPE_INNER));k.showIfameMask(f,!1);y.showHoverDom=!0;if(m.dragFlag!=0){m.dragFlag=0;var b,j,o;for(b=0,j=n.length;b<j;b++)o=n[b],i.nodeIsParent(f,o)&&m.dragNodeShowBefore[o.tId]&&
+!o.open&&(e.expandCollapseNode(f,o,!o.open),delete m.dragNodeShowBefore[o.tId]);C&&C.remove();u&&u.remove();var r=(a.ctrlKey||a.metaKey)&&f.edit.drag.isMove&&f.edit.drag.isCopy||!f.edit.drag.isMove&&f.edit.drag.isCopy;!r&&t&&w&&n[0].parentTId&&w==n[0].parentTId&&x==d.move.TYPE_INNER&&(t=null);if(t){var p=w==null?null:i.getNodeCache(h,w);if(k.apply(f.callback.beforeDrop,[h.treeId,n,p,x,r],!0)==!1)e.selectNodes(v,n);else{var s=r?k.clone(n):n;b=function(){if(J){if(!r)for(var b=0,c=n.length;b<c;b++)e.removeNode(f,
+n[b]);x==d.move.TYPE_INNER?e.addNodes(h,p,-1,s):e.addNodes(h,p.getParentNode(),x==d.move.TYPE_PREV?p.getIndex():p.getIndex()+1,s)}else if(r&&x==d.move.TYPE_INNER)e.addNodes(h,p,-1,s);else if(r)e.addNodes(h,p.getParentNode(),x==d.move.TYPE_PREV?p.getIndex():p.getIndex()+1,s);else if(x!=d.move.TYPE_NEXT)for(b=0,c=s.length;b<c;b++)e.moveNode(h,p,s[b],x,!1);else for(b=-1,c=s.length-1;b<c;c--)e.moveNode(h,p,s[c],x,!1);e.selectNodes(h,s);b=q(s[0],f).get(0);e.scrollIntoView(f,b);f.treeObj.trigger(d.event.DROP,
+[a,h.treeId,s,p,x,r])};x==d.move.TYPE_INNER&&k.canAsync(h,p)?e.asyncNode(h,p,!1,b):b()}}else e.selectNodes(v,n),f.treeObj.trigger(d.event.DROP,[a,f.treeId,n,null,null,null])}}function g(){return!1}var o,j,f=i.getSetting(a.data.treeId),m=i.getRoot(f),y=i.getRoots();if(a.button==2||!f.edit.enable||!f.edit.drag.isCopy&&!f.edit.drag.isMove)return!0;var r=a.target,s=i.getRoot(f).curSelectedList,n=[];if(i.isSelectedNode(f,b))for(o=0,j=s.length;o<j;o++){if(s[o].editNameFlag&&k.eqs(r.tagName,"input")&&r.getAttribute("treeNode"+
+d.id.INPUT)!==null)return!0;n.push(s[o]);if(n[0].parentTId!==s[o].parentTId){n=[b];break}}else n=[b];e.editNodeBlur=!0;e.cancelCurEditNode(f);var G=B(f.treeObj.get(0).ownerDocument),L=B(f.treeObj.get(0).ownerDocument.body),C,u,t,J=!1,h=f,v=f,H,Q,S=null,T=null,w=null,x=d.move.TYPE_INNER,N=a.clientX,O=a.clientY,K=(new Date).getTime();k.uCanDo(f)&&G.bind("mousemove",c);G.bind("mouseup",l);G.bind("selectstart",g);return!0}};B.extend(!0,B.fn.zTree.consts,I);B.extend(!0,B.fn.zTree._z,{tools:{getAbs:function(a){a=
+a.getBoundingClientRect();return[a.left+(document.body.scrollLeft+document.documentElement.scrollLeft),a.top+(document.body.scrollTop+document.documentElement.scrollTop)]},inputFocus:function(a){a.get(0)&&(a.focus(),k.setCursorPosition(a.get(0),a.val().length))},inputSelect:function(a){a.get(0)&&(a.focus(),a.select())},setCursorPosition:function(a,b){if(a.setSelectionRange)a.focus(),a.setSelectionRange(b,b);else if(a.createTextRange){var c=a.createTextRange();c.collapse(!0);c.moveEnd("character",
+b);c.moveStart("character",b);c.select()}},showIfameMask:function(a,b){for(var c=i.getRoot(a);c.dragMaskList.length>0;)c.dragMaskList[0].remove(),c.dragMaskList.shift();if(b)for(var d=q("iframe",a),g=0,e=d.length;g<e;g++){var j=d.get(g),f=k.getAbs(j),j=q("<div id='zTreeMask_"+g+"' class='zTreeMask' style='top:"+f[1]+"px; left:"+f[0]+"px; width:"+j.offsetWidth+"px; height:"+j.offsetHeight+"px;'></div>",a);j.appendTo(q("body",a));c.dragMaskList.push(j)}}},view:{addEditBtn:function(a,b){if(!(b.editNameFlag||
+q(b,d.id.EDIT,a).length>0)&&k.apply(a.edit.showRenameBtn,[a.treeId,b],a.edit.showRenameBtn)){var c=q(b,d.id.A,a),l="<span class='"+d.className.BUTTON+" edit' id='"+b.tId+d.id.EDIT+"' title='"+k.apply(a.edit.renameTitle,[a.treeId,b],a.edit.renameTitle)+"' treeNode"+d.id.EDIT+" style='display:none;'></span>";c.append(l);q(b,d.id.EDIT,a).bind("click",function(){if(!k.uCanDo(a)||k.apply(a.callback.beforeEditName,[a.treeId,b],!0)==!1)return!1;e.editNode(a,b);return!1}).show()}},addRemoveBtn:function(a,
+b){if(!(b.editNameFlag||q(b,d.id.REMOVE,a).length>0)&&k.apply(a.edit.showRemoveBtn,[a.treeId,b],a.edit.showRemoveBtn)){var c=q(b,d.id.A,a),l="<span class='"+d.className.BUTTON+" remove' id='"+b.tId+d.id.REMOVE+"' title='"+k.apply(a.edit.removeTitle,[a.treeId,b],a.edit.removeTitle)+"' treeNode"+d.id.REMOVE+" style='display:none;'></span>";c.append(l);q(b,d.id.REMOVE,a).bind("click",function(){if(!k.uCanDo(a)||k.apply(a.callback.beforeRemove,[a.treeId,b],!0)==!1)return!1;e.removeNode(a,b);a.treeObj.trigger(d.event.REMOVE,
+[a.treeId,b]);return!1}).bind("mousedown",function(){return!0}).show()}},addHoverDom:function(a,b){if(i.getRoots().showHoverDom)b.isHover=!0,a.edit.enable&&(e.addEditBtn(a,b),e.addRemoveBtn(a,b)),k.apply(a.view.addHoverDom,[a.treeId,b])},cancelCurEditNode:function(a,b,c){var l=i.getRoot(a),g=l.curEditNode;if(g){var o=l.curEditInput,b=b?b:c?i.nodeName(a,g):o.val();if(k.apply(a.callback.beforeRename,[a.treeId,g,b,c],!0)===!1)return!1;i.nodeName(a,g,b);q(g,d.id.A,a).removeClass(d.node.CURSELECTED_EDIT);
+o.unbind();e.setNodeName(a,g);g.editNameFlag=!1;l.curEditNode=null;l.curEditInput=null;e.selectNode(a,g,!1);a.treeObj.trigger(d.event.RENAME,[a.treeId,g,c])}return l.noSelection=!0},editNode:function(a,b){var c=i.getRoot(a);e.editNodeBlur=!1;if(i.isSelectedNode(a,b)&&c.curEditNode==b&&b.editNameFlag)setTimeout(function(){k.inputFocus(c.curEditInput)},0);else{b.editNameFlag=!0;e.removeTreeDom(a,b);e.cancelCurEditNode(a);e.selectNode(a,b,!1);q(b,d.id.SPAN,a).html("<input type=text class='rename' id='"+
+b.tId+d.id.INPUT+"' treeNode"+d.id.INPUT+" >");var l=q(b,d.id.INPUT,a);l.attr("value",i.nodeName(a,b));a.edit.editNameSelectAll?k.inputSelect(l):k.inputFocus(l);l.bind("blur",function(){e.editNodeBlur||e.cancelCurEditNode(a)}).bind("keydown",function(b){b.keyCode=="13"?(e.editNodeBlur=!0,e.cancelCurEditNode(a)):b.keyCode=="27"&&e.cancelCurEditNode(a,null,!0)}).bind("click",function(){return!1}).bind("dblclick",function(){return!1});q(b,d.id.A,a).addClass(d.node.CURSELECTED_EDIT);c.curEditInput=l;
+c.noSelection=!1;c.curEditNode=b}},moveNode:function(a,b,c,l,g,k){var j=i.getRoot(a);if(b!=c&&(!a.data.keep.leaf||!b||i.nodeIsParent(a,b)||l!=d.move.TYPE_INNER)){var f=c.parentTId?c.getParentNode():j,m=b===null||b==j;m&&b===null&&(b=j);if(m)l=d.move.TYPE_INNER;j=b.parentTId?b.getParentNode():j;if(l!=d.move.TYPE_PREV&&l!=d.move.TYPE_NEXT)l=d.move.TYPE_INNER;if(l==d.move.TYPE_INNER)if(m)c.parentTId=null;else{if(!i.nodeIsParent(a,b))i.nodeIsParent(a,b,!0),b.open=!!b.open,e.setNodeLineIcos(a,b);c.parentTId=
+b.tId}var y;m?y=m=a.treeObj:(!k&&l==d.move.TYPE_INNER?e.expandCollapseNode(a,b,!0,!1):k||e.expandCollapseNode(a,b.getParentNode(),!0,!1),m=q(b,a),y=q(b,d.id.UL,a),m.get(0)&&!y.get(0)&&(y=[],e.makeUlHtml(a,b,y,""),m.append(y.join(""))),y=q(b,d.id.UL,a));var r=q(c,a);r.get(0)?m.get(0)||r.remove():r=e.appendNodes(a,c.level,[c],null,-1,!1,!0).join("");y.get(0)&&l==d.move.TYPE_INNER?y.append(r):m.get(0)&&l==d.move.TYPE_PREV?m.before(r):m.get(0)&&l==d.move.TYPE_NEXT&&m.after(r);var s;y=-1;var r=0,n=null,
+m=null,B=c.level,v=i.nodeChildren(a,f),C=i.nodeChildren(a,j),u=i.nodeChildren(a,b);if(c.isFirstNode){if(y=0,v.length>1)n=v[1],n.isFirstNode=!0}else if(c.isLastNode)y=v.length-1,n=v[y-1],n.isLastNode=!0;else for(j=0,s=v.length;j<s;j++)if(v[j].tId==c.tId){y=j;break}y>=0&&v.splice(y,1);if(l!=d.move.TYPE_INNER)for(j=0,s=C.length;j<s;j++)C[j].tId==b.tId&&(r=j);if(l==d.move.TYPE_INNER){u||(u=i.nodeChildren(a,b,[]));if(u.length>0)m=u[u.length-1],m.isLastNode=!1;u.splice(u.length,0,c);c.isLastNode=!0;c.isFirstNode=
+u.length==1}else b.isFirstNode&&l==d.move.TYPE_PREV?(C.splice(r,0,c),m=b,m.isFirstNode=!1,c.parentTId=b.parentTId,c.isFirstNode=!0,c.isLastNode=!1):b.isLastNode&&l==d.move.TYPE_NEXT?(C.splice(r+1,0,c),m=b,m.isLastNode=!1,c.parentTId=b.parentTId,c.isFirstNode=!1,c.isLastNode=!0):(l==d.move.TYPE_PREV?C.splice(r,0,c):C.splice(r+1,0,c),c.parentTId=b.parentTId,c.isFirstNode=!1,c.isLastNode=!1);i.fixPIdKeyValue(a,c);i.setSonNodeLevel(a,c.getParentNode(),c);e.setNodeLineIcos(a,c);e.repairNodeLevelClass(a,
+c,B);!a.data.keep.parent&&v.length<1?(i.nodeIsParent(a,f,!1),f.open=!1,b=q(f,d.id.UL,a),l=q(f,d.id.SWITCH,a),j=q(f,d.id.ICON,a),e.replaceSwitchClass(f,l,d.folder.DOCU),e.replaceIcoClass(f,j,d.folder.DOCU),b.css("display","none")):n&&e.setNodeLineIcos(a,n);m&&e.setNodeLineIcos(a,m);a.check&&a.check.enable&&e.repairChkClass&&(e.repairChkClass(a,f),e.repairParentChkClassWithSelf(a,f),f!=c.parent&&e.repairParentChkClassWithSelf(a,c));k||e.expandCollapseParentNode(a,c.getParentNode(),!0,g)}},removeEditBtn:function(a,
+b){q(b,d.id.EDIT,a).unbind().remove()},removeRemoveBtn:function(a,b){q(b,d.id.REMOVE,a).unbind().remove()},removeTreeDom:function(a,b){b.isHover=!1;e.removeEditBtn(a,b);e.removeRemoveBtn(a,b);k.apply(a.view.removeHoverDom,[a.treeId,b])},repairNodeLevelClass:function(a,b,c){if(c!==b.level){var e=q(b,a),g=q(b,d.id.A,a),a=q(b,d.id.UL,a),c=d.className.LEVEL+c,b=d.className.LEVEL+b.level;e.removeClass(c);e.addClass(b);g.removeClass(c);g.addClass(b);a.removeClass(c);a.addClass(b)}},selectNodes:function(a,
+b){for(var c=0,d=b.length;c<d;c++)e.selectNode(a,b[c],c>0)}},event:{},data:{setSonNodeLevel:function(a,b,c){if(c){var d=i.nodeChildren(a,c);c.level=b?b.level+1:0;if(d)for(var b=0,g=d.length;b<g;b++)d[b]&&i.setSonNodeLevel(a,c,d[b])}}}});var H=B.fn.zTree,k=H._z.tools,d=H.consts,e=H._z.view,i=H._z.data,q=k.$;i.exSetting({edit:{enable:!1,editNameSelectAll:!1,showRemoveBtn:!0,showRenameBtn:!0,removeTitle:"remove",renameTitle:"rename",drag:{autoExpandTrigger:!1,isCopy:!0,isMove:!0,prev:!0,next:!0,inner:!0,
+minMoveSize:5,borderMax:10,borderMin:-5,maxShowNodeNum:5,autoOpenTime:500}},view:{addHoverDom:null,removeHoverDom:null},callback:{beforeDrag:null,beforeDragOpen:null,beforeDrop:null,beforeEditName:null,beforeRename:null,onDrag:null,onDragMove:null,onDrop:null,onRename:null}});i.addInitBind(function(a){var b=a.treeObj,c=d.event;b.bind(c.RENAME,function(b,c,d,e){k.apply(a.callback.onRename,[b,c,d,e])});b.bind(c.DRAG,function(b,c,d,e){k.apply(a.callback.onDrag,[c,d,e])});b.bind(c.DRAGMOVE,function(b,
+c,d,e){k.apply(a.callback.onDragMove,[c,d,e])});b.bind(c.DROP,function(b,c,d,e,f,i,q){k.apply(a.callback.onDrop,[c,d,e,f,i,q])})});i.addInitUnBind(function(a){var a=a.treeObj,b=d.event;a.unbind(b.RENAME);a.unbind(b.DRAG);a.unbind(b.DRAGMOVE);a.unbind(b.DROP)});i.addInitCache(function(){});i.addInitNode(function(a,b,c){if(c)c.isHover=!1,c.editNameFlag=!1});i.addInitProxy(function(a){var b=a.target,c=i.getSetting(a.data.treeId),e=a.relatedTarget,g="",o=null,j="",f=null,m=null;if(k.eqs(a.type,"mouseover")){if(m=
+k.getMDom(c,b,[{tagName:"a",attrName:"treeNode"+d.id.A}]))g=k.getNodeMainDom(m).id,j="hoverOverNode"}else if(k.eqs(a.type,"mouseout"))m=k.getMDom(c,e,[{tagName:"a",attrName:"treeNode"+d.id.A}]),m||(g="remove",j="hoverOutNode");else if(k.eqs(a.type,"mousedown")&&(m=k.getMDom(c,b,[{tagName:"a",attrName:"treeNode"+d.id.A}])))g=k.getNodeMainDom(m).id,j="mousedownNode";if(g.length>0)switch(o=i.getNodeCache(c,g),j){case "mousedownNode":f=v.onMousedownNode;break;case "hoverOverNode":f=v.onHoverOverNode;
+break;case "hoverOutNode":f=v.onHoverOutNode}return{stop:!1,node:o,nodeEventType:j,nodeEventCallback:f,treeEventType:"",treeEventCallback:null}});i.addInitRoot(function(a){var a=i.getRoot(a),b=i.getRoots();a.curEditNode=null;a.curEditInput=null;a.curHoverNode=null;a.dragFlag=0;a.dragNodeShowBefore=[];a.dragMaskList=[];b.showHoverDom=!0});i.addZTreeTools(function(a,b){b.cancelEditName=function(a){i.getRoot(this.setting).curEditNode&&e.cancelCurEditNode(this.setting,a?a:null,!0)};b.copyNode=function(b,
+l,g,o){if(!l)return null;var j=i.nodeIsParent(a,b);if(b&&!j&&this.setting.data.keep.leaf&&g===d.move.TYPE_INNER)return null;var f=this,m=k.clone(l);if(!b)b=null,g=d.move.TYPE_INNER;g==d.move.TYPE_INNER?(l=function(){e.addNodes(f.setting,b,-1,[m],o)},k.canAsync(this.setting,b)?e.asyncNode(this.setting,b,o,l):l()):(e.addNodes(this.setting,b.parentNode,-1,[m],o),e.moveNode(this.setting,b,m,g,!1,o));return m};b.editName=function(a){a&&a.tId&&a===i.getNodeCache(this.setting,a.tId)&&(a.parentTId&&e.expandCollapseParentNode(this.setting,
+a.getParentNode(),!0),e.editNode(this.setting,a))};b.moveNode=function(b,l,g,o){function j(){e.moveNode(m.setting,b,l,g,!1,o)}if(!l)return l;var f=i.nodeIsParent(a,b);if(b&&!f&&this.setting.data.keep.leaf&&g===d.move.TYPE_INNER)return null;else if(b&&(l.parentTId==b.tId&&g==d.move.TYPE_INNER||q(l,this.setting).find("#"+b.tId).length>0))return null;else b||(b=null);var m=this;k.canAsync(this.setting,b)&&g===d.move.TYPE_INNER?e.asyncNode(this.setting,b,o,j):j();return l};b.setEditable=function(a){this.setting.edit.enable=
+a;return this.refresh()}});var N=e.cancelPreSelectedNode;e.cancelPreSelectedNode=function(a,b){for(var c=i.getRoot(a).curSelectedList,d=0,g=c.length;d<g;d++)if(!b||b===c[d])if(e.removeTreeDom(a,c[d]),b)break;N&&N.apply(e,arguments)};var O=e.createNodes;e.createNodes=function(a,b,c,d,g){O&&O.apply(e,arguments);c&&e.repairParentChkClassWithSelf&&e.repairParentChkClassWithSelf(a,d)};var V=e.makeNodeUrl;e.makeNodeUrl=function(a,b){return a.edit.enable?null:V.apply(e,arguments)};var K=e.removeNode;e.removeNode=
+function(a,b){var c=i.getRoot(a);if(c.curEditNode===b)c.curEditNode=null;K&&K.apply(e,arguments)};var P=e.selectNode;e.selectNode=function(a,b,c){var d=i.getRoot(a);if(i.isSelectedNode(a,b)&&d.curEditNode==b&&b.editNameFlag)return!1;P&&P.apply(e,arguments);e.addHoverDom(a,b);return!0};var U=k.uCanDo;k.uCanDo=function(a,b){var c=i.getRoot(a);if(b&&(k.eqs(b.type,"mouseover")||k.eqs(b.type,"mouseout")||k.eqs(b.type,"mousedown")||k.eqs(b.type,"mouseup")))return!0;if(c.curEditNode)e.editNodeBlur=!1,c.curEditInput.focus();
+return!c.curEditNode&&(U?U.apply(e,arguments):!0)}})(jQuery);
+/*
+ * JQuery zTree exHideNodes v3.5.37
+ * http://treejs.cn/
+ *
+ * Copyright (c) 2010 Hunter.z
+ *
+ * Licensed same as jquery - MIT License
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ * email: hunter.z@263.net
+ * Date: 2018-08-21
+ */
+(function(j){j.extend(!0,j.fn.zTree._z,{view:{clearOldFirstNode:function(c,a){for(var b=a.getNextNode();b;){if(b.isFirstNode){b.isFirstNode=!1;e.setNodeLineIcos(c,b);break}if(b.isLastNode)break;b=b.getNextNode()}},clearOldLastNode:function(c,a,b){for(a=a.getPreNode();a;){if(a.isLastNode){a.isLastNode=!1;b&&e.setNodeLineIcos(c,a);break}if(a.isFirstNode)break;a=a.getPreNode()}},makeDOMNodeMainBefore:function(c,a,b){a=d.isHidden(a,b);c.push("<li ",a?"style='display:none;' ":"","id='",b.tId,"' class='",
+l.className.LEVEL,b.level,"' tabindex='0' hidefocus='true' treenode>")},showNode:function(c,a){d.isHidden(c,a,!1);d.initShowForExCheck(c,a);k(a,c).show()},showNodes:function(c,a,b){if(a&&a.length!=0){var f={},g,i;for(g=0,i=a.length;g<i;g++){var h=a[g];if(!f[h.parentTId]){var u=h.getParentNode();f[h.parentTId]=u===null?d.getRoot(c):h.getParentNode()}e.showNode(c,h,b)}for(var j in f)a=d.nodeChildren(c,f[j]),e.setFirstNodeForShow(c,a),e.setLastNodeForShow(c,a)}},hideNode:function(c,a){d.isHidden(c,a,
+!0);a.isFirstNode=!1;a.isLastNode=!1;d.initHideForExCheck(c,a);e.cancelPreSelectedNode(c,a);k(a,c).hide()},hideNodes:function(c,a,b){if(a&&a.length!=0){var f={},g,i;for(g=0,i=a.length;g<i;g++){var h=a[g];if((h.isFirstNode||h.isLastNode)&&!f[h.parentTId]){var j=h.getParentNode();f[h.parentTId]=j===null?d.getRoot(c):h.getParentNode()}e.hideNode(c,h,b)}for(var k in f)a=d.nodeChildren(c,f[k]),e.setFirstNodeForHide(c,a),e.setLastNodeForHide(c,a)}},setFirstNode:function(c,a){var b=d.nodeChildren(c,a),f=
+d.isHidden(c,b[0],!1);b.length>0&&!f?b[0].isFirstNode=!0:b.length>0&&e.setFirstNodeForHide(c,b)},setLastNode:function(c,a){var b=d.nodeChildren(c,a),f=d.isHidden(c,b[0]);b.length>0&&!f?b[b.length-1].isLastNode=!0:b.length>0&&e.setLastNodeForHide(c,b)},setFirstNodeForHide:function(c,a){var b,f,g;for(f=0,g=a.length;f<g;f++){b=a[f];if(b.isFirstNode)break;if(!d.isHidden(c,b)&&!b.isFirstNode){b.isFirstNode=!0;e.setNodeLineIcos(c,b);break}else b=null}return b},setFirstNodeForShow:function(c,a){var b,f,
+g,i,h;for(f=0,g=a.length;f<g;f++){b=a[f];var j=d.isHidden(c,b);if(!i&&!j&&b.isFirstNode){i=b;break}else if(!i&&!j&&!b.isFirstNode)b.isFirstNode=!0,i=b,e.setNodeLineIcos(c,b);else if(i&&b.isFirstNode){b.isFirstNode=!1;h=b;e.setNodeLineIcos(c,b);break}}return{"new":i,old:h}},setLastNodeForHide:function(c,a){var b,f;for(f=a.length-1;f>=0;f--){b=a[f];if(b.isLastNode)break;if(!d.isHidden(c,b)&&!b.isLastNode){b.isLastNode=!0;e.setNodeLineIcos(c,b);break}else b=null}return b},setLastNodeForShow:function(c,
+a){var b,f,g,i;for(f=a.length-1;f>=0;f--){b=a[f];var h=d.isHidden(c,b);if(!g&&!h&&b.isLastNode){g=b;break}else if(!g&&!h&&!b.isLastNode)b.isLastNode=!0,g=b,e.setNodeLineIcos(c,b);else if(g&&b.isLastNode){b.isLastNode=!1;i=b;e.setNodeLineIcos(c,b);break}}return{"new":g,old:i}}},data:{initHideForExCheck:function(c,a){if(d.isHidden(c,a)&&c.check&&c.check.enable){if(typeof a._nocheck=="undefined")a._nocheck=!!a.nocheck,a.nocheck=!0;a.check_Child_State=-1;e.repairParentChkClassWithSelf&&e.repairParentChkClassWithSelf(c,
+a)}},initShowForExCheck:function(c,a){if(!d.isHidden(c,a)&&c.check&&c.check.enable){if(typeof a._nocheck!="undefined")a.nocheck=a._nocheck,delete a._nocheck;if(e.setChkClass){var b=k(a,l.id.CHECK,c);e.setChkClass(c,b,a)}e.repairParentChkClassWithSelf&&e.repairParentChkClassWithSelf(c,a)}}}});var j=j.fn.zTree,m=j._z.tools,l=j.consts,e=j._z.view,d=j._z.data,k=m.$;d.isHidden=function(c,a,b){if(!a)return!1;c=c.data.key.isHidden;typeof b!=="undefined"&&(typeof b==="string"&&(b=m.eqs(checked,"true")),a[c]=
+!!b);return a[c]};d.exSetting({data:{key:{isHidden:"isHidden"}}});d.addInitNode(function(c,a,b){a=d.isHidden(c,b);d.isHidden(c,b,a);d.initHideForExCheck(c,b)});d.addBeforeA(function(){});d.addZTreeTools(function(c,a){a.showNodes=function(a,b){e.showNodes(c,a,b)};a.showNode=function(a,b){a&&e.showNodes(c,[a],b)};a.hideNodes=function(a,b){e.hideNodes(c,a,b)};a.hideNode=function(a,b){a&&e.hideNodes(c,[a],b)};var b=a.checkNode;if(b)a.checkNode=function(f,e,i,h){(!f||!d.isHidden(c,f))&&b.apply(a,arguments)}});
+var n=d.initNode;d.initNode=function(c,a,b,f,g,i,h){var j=(f?f:d.getRoot(c))[c.data.key.children];d.tmpHideFirstNode=e.setFirstNodeForHide(c,j);d.tmpHideLastNode=e.setLastNodeForHide(c,j);h&&(e.setNodeLineIcos(c,d.tmpHideFirstNode),e.setNodeLineIcos(c,d.tmpHideLastNode));g=d.tmpHideFirstNode===b;i=d.tmpHideLastNode===b;n&&n.apply(d,arguments);h&&i&&e.clearOldLastNode(c,b,h)};var o=d.makeChkFlag;if(o)d.makeChkFlag=function(c,a){(!a||!d.isHidden(c,a))&&o.apply(d,arguments)};var p=d.getTreeCheckedNodes;
+if(p)d.getTreeCheckedNodes=function(c,a,b,f){if(a&&a.length>0){var e=a[0].getParentNode();if(e&&d.isHidden(c,e))return[]}return p.apply(d,arguments)};var q=d.getTreeChangeCheckedNodes;if(q)d.getTreeChangeCheckedNodes=function(c,a,b){if(a&&a.length>0){var e=a[0].getParentNode();if(e&&d.isHidden(c,e))return[]}return q.apply(d,arguments)};var r=e.expandCollapseSonNode;if(r)e.expandCollapseSonNode=function(c,a,b,f,g){(!a||!d.isHidden(c,a))&&r.apply(e,arguments)};var s=e.setSonNodeCheckBox;if(s)e.setSonNodeCheckBox=
+function(c,a,b,f){(!a||!d.isHidden(c,a))&&s.apply(e,arguments)};var t=e.repairParentChkClassWithSelf;if(t)e.repairParentChkClassWithSelf=function(c,a){(!a||!d.isHidden(c,a))&&t.apply(e,arguments)}})(jQuery);
+
+
+
+
+  TreeSelect.prototype.render = function (options) {
+    var elem = options.elem,
+      // 请求地址
+      data = options.data,
+      // 请求头
+      headers = options.headers,
+      // 请求方式
+      type = options.type === undefined ? 'GET' : options.type,
+      // 节点点击回调
+      click = options.click,
+      // 渲染成功后的回调函数
+      success = options.success,
+      // 占位符(提示信息)
+      placeholder = options.placeholder === undefined ? '请选择' : options.placeholder,
+      // 是否开启搜索
+      search = options.search === undefined ? false : options.search,
+      // 样式配置项
+      style = options.style,
+      // 唯一id
+      tmp = new Date().getTime(),
+      DATA = {},
+      selected = 'layui-form-selected',
+      TREE_OBJ = undefined,
+      TREE_INPUT_ID = 'treeSelect-input-' + tmp,
+      TREE_INPUT_CLASS = 'layui-treeselect',
+      TREE_SELECT_ID = 'layui-treeSelect-' + tmp,
+      TREE_SELECT_CLASS = 'layui-treeSelect',
+      TREE_SELECT_TITLE_ID = 'layui-select-title-' + tmp,
+      TREE_SELECT_TITLE_CLASS = 'layui-select-title',
+      TREE_SELECT_BODY_ID = 'layui-treeSelect-body-' + tmp,
+      TREE_SELECT_BODY_CLASS = 'layui-treeSelect-body',
+      TREE_SELECT_SEARCHED_CLASS = 'layui-treeSelect-search-ed';
+
+
+    var a = {
+      init: function () {
+        $.ajax({
+          url: data,
+          type: type,
+          headers: headers,
+          dataType: 'json',
+          success: function (d) {
+            DATA = d;
+            a.hideElem().input().toggleSelect().loadCss().preventEvent();
+            $.fn.zTree.init($('#' + TREE_SELECT_BODY_ID), a.setting(), d);
+            TREE_OBJ = $.fn.zTree.getZTreeObj(TREE_SELECT_BODY_ID);
+            if (search) {
+              a.searchParam();
+            }
+            a.configStyle();
+            if (success) {
+              var obj = {
+                treeId: TREE_SELECT_ID,
+                data: d
+              };
+              success(obj);
+            }
+          }
+        });
+        return a;
+      },
+      // 检查input是否有默认值
+      checkDefaultValue: function () {
+
+      },
+      setting: function () {
+        var setting = {
+          callback: {
+            onClick: a.onClick,
+            onExpand: a.onExpand,
+            onCollapse: a.onCollapse,
+            beforeExpand: a.ztreeCallBack.beforeExpand
+          }
+        };
+        return setting;
+      },
+      ztreeCallBack: {
+        beforeExpand: function () {
+          a.configStyle();
+        },
+      },
+      onCollapse: function () {
+        a.focusInput();
+      },
+      onExpand: function () {
+        a.configStyle();
+        a.focusInput();
+      },
+      focusInput: function () {
+        $('#' + TREE_INPUT_ID).focus();
+      },
+      onClick: function (event, treeId, treeNode) {
+        var name = treeNode.name,
+          id = treeNode.id,
+          $input = $('#' + TREE_SELECT_TITLE_ID + ' input');
+        $input.val(name);
+        $(elem).attr('value', id).val(id);
+        $('#' + TREE_SELECT_ID).removeClass(selected);
+
+        if (click) {
+          var obj = {
+            data: DATA,
+            current: treeNode,
+            treeId: TREE_SELECT_ID
+          };
+          click(obj);
+        }
+        return a;
+      },
+      hideElem: function () {
+        $(elem).hide();
+        return a;
+      },
+      input: function () {
+        var readonly = '';
+        if (!search) {
+          readonly = 'readonly';
+        }
+        var selectHtml = '<div class="' + TREE_SELECT_CLASS + ' layui-unselect layui-form-select" id="' + TREE_SELECT_ID + '">' +
+          '<div class="' + TREE_SELECT_TITLE_CLASS + '" id="' + TREE_SELECT_TITLE_ID + '">' +
+          ' <input type="text" id="' + TREE_INPUT_ID + '" placeholder="' + placeholder + '" value="" ' + readonly + ' class="layui-input layui-unselect">' +
+          '<i class="layui-edge"></i>' +
+          '</div>' +
+          '<div class="layui-anim layui-anim-upbit" style="">' +
+          '<div class="' + TREE_SELECT_BODY_CLASS + ' ztree" id="' + TREE_SELECT_BODY_ID + '"></div>' +
+          '</div>' +
+          '</div>';
+        $(elem).parent().append(selectHtml);
+        return a;
+      },
+      /**
+       * 展开/折叠下拉框
+       */
+      toggleSelect: function () {
+        var item = '#' + TREE_SELECT_TITLE_ID;
+        a.event('click', item, function (e) {
+          var $select = $('#' + TREE_SELECT_ID);
+          if ($select.hasClass(selected)) {
+            $select.removeClass(selected);
+            $('#' + TREE_INPUT_ID).blur();
+          } else {
+            // 隐藏其他picker
+            $('.layui-form-select').removeClass(selected);
+            // 显示当前picker
+            $select.addClass(selected);
+          }
+          e.stopPropagation();
+        });
+        $(document).click(function () {
+          var $select = $('#' + TREE_SELECT_ID);
+          if ($select.hasClass(selected)) {
+            $select.removeClass(selected);
+            $('#' + TREE_INPUT_ID).blur();
+          }
+        });
+        return a;
+      },
+      // 模糊查询
+      searchParam: function () {
+        if (!search) {
+          return;
+        }
+
+        var item = '#' + TREE_INPUT_ID;
+        a.fuzzySearch(item, null, true);
+      },
+      fuzzySearch: function (searchField, isHighLight, isExpand) {
+        var zTreeObj = TREE_OBJ;//get the ztree object by ztree id
+        if (!zTreeObj) {
+          alert("fail to get ztree object");
+        }
+        var nameKey = zTreeObj.setting.data.key.name; //get the key of the node name
+        isHighLight = isHighLight === false ? false : true;//default true, only use false to disable highlight
+        isExpand = isExpand ? true : false; // not to expand in default
+        zTreeObj.setting.view.nameIsHTML = isHighLight; //allow use html in node name for highlight use
+
+        var metaChar = '[\\[\\]\\\\\^\\$\\.\\|\\?\\*\\+\\(\\)]'; //js meta characters
+        var rexMeta = new RegExp(metaChar, 'gi');//regular expression to match meta characters
+
+        // keywords filter function 
+        function ztreeFilter(zTreeObj, _keywords, callBackFunc) {
+          if (!_keywords) {
+            _keywords = ''; //default blank for _keywords 
+          }
+
+          // function to find the matching node
+          function filterFunc(node) {
+            if (node && node.oldname && node.oldname.length > 0) {
+              node[nameKey] = node.oldname; //recover oldname of the node if exist
+            }
+            zTreeObj.updateNode(node); //update node to for modifications take effect
+            if (_keywords.length == 0) {
+              //return true to show all nodes if the keyword is blank
+              zTreeObj.showNode(node);
+              zTreeObj.expandNode(node, isExpand);
+              return true;
+            }
+            //transform node name and keywords to lowercase
+            if (node[nameKey] && node[nameKey].toLowerCase().indexOf(_keywords.toLowerCase()) != -1) {
+              zTreeObj.showNode(node);//show node with matching keywords
+              return true; //return true and show this node
+            }
+
+            zTreeObj.hideNode(node); // hide node that not matched
+            return false; //return false for node not matched
+          }
+
+          var nodesShow = zTreeObj.getNodesByFilter(filterFunc); //get all nodes that would be shown
+          processShowNodes(nodesShow, _keywords);//nodes should be reprocessed to show correctly
+        }
+
+        /**
+         * reprocess of nodes before showing
+         */
+        function processShowNodes(nodesShow, _keywords) {
+          if (nodesShow && nodesShow.length > 0) {
+            //process the ancient nodes if _keywords is not blank
+            if (_keywords.length > 0) {
+              $.each(nodesShow, function (n, obj) {
+                var pathOfOne = obj.getPath();//get all the ancient nodes including current node
+                if (pathOfOne && pathOfOne.length > 0) {
+                  //i < pathOfOne.length-1 process every node in path except self
+                  for (var i = 0; i < pathOfOne.length - 1; i++) {
+                    zTreeObj.showNode(pathOfOne[i]); //show node 
+                    zTreeObj.expandNode(pathOfOne[i], true); //expand node
+                  }
+                }
+              });
+            } else { //show all nodes when _keywords is blank and expand the root nodes
+              var rootNodes = zTreeObj.getNodesByParam('level', '0');//get all root nodes
+              $.each(rootNodes, function (n, obj) {
+                zTreeObj.expandNode(obj, true); //expand all root nodes
+              });
+            }
+          }
+        }
+
+        //listen to change in input element
+        $(searchField).bind('input propertychange', function () {
+          var _keywords = $(this).val();
+          searchNodeLazy(_keywords); //call lazy load
+        });
+
+        var timeoutId = null;
+        // excute lazy load once after input change, the last pending task will be cancled  
+        function searchNodeLazy(_keywords) {
+          if (timeoutId) {
+            //clear pending task
+            clearTimeout(timeoutId);
+          }
+          timeoutId = setTimeout(function () {
+            ztreeFilter(zTreeObj, _keywords); //lazy load ztreeFilter function 
+            $(searchField).focus();//focus input field again after filtering
+          }, 500);
+        }
+      },
+      checkNodes: function (nodes) {
+        for (var i = 0; i < nodes.length; i++) {
+          var o = nodes[i],
+            pid = o.parentTId,
+            tid = o.tId;
+          if (pid !== null) {
+            // 获取父节点
+            $('#' + pid).addClass(TREE_SELECT_SEARCHED_CLASS);
+            var pNode = TREE_OBJ.getNodesByParam("tId", pid, null);
+            TREE_OBJ.expandNode(pNode[0], true, false, true);
+          }
+          $('#' + tid).addClass(TREE_SELECT_SEARCHED_CLASS);
+        }
+      },
+      // 阻止Layui的一些默认事件
+      preventEvent: function () {
+        var item = '#' + TREE_SELECT_ID + ' .layui-anim';
+        a.event('click', item, function (e) {
+          e.stopPropagation();
+        });
+        return a;
+      },
+      loadCss: function () {
+        var ztree = '.ztree *{padding:0;margin:0;font-size:12px;font-family:Verdana,Arial,Helvetica,AppleGothic,sans-serif}.ztree{margin:0;padding:5px;color:#333}.ztree li{padding:0;margin:0;list-style:none;line-height:14px;text-align:left;white-space:nowrap;outline:0}.ztree li ul{margin:0;padding:0 0 0 18px}.ztree li ul.line{background:url(./img/line_conn.gif) 0 0 repeat-y;}.ztree li a{padding:1px 3px 0 0;margin:0;cursor:pointer;height:17px;color:#333;background-color:transparent;text-decoration:none;vertical-align:top;display:inline-block}.ztree li a:hover{text-decoration:underline}.ztree li a.curSelectedNode{padding-top:0px;background-color:#FFE6B0;color:black;height:16px;border:1px #FFB951 solid;opacity:0.8;}.ztree li a.curSelectedNode_Edit{padding-top:0px;background-color:#FFE6B0;color:black;height:16px;border:1px #FFB951 solid;opacity:0.8;}.ztree li a.tmpTargetNode_inner{padding-top:0px;background-color:#316AC5;color:white;height:16px;border:1px #316AC5 solid;opacity:0.8;filter:alpha(opacity=80)}.ztree li a.tmpTargetNode_prev{}.ztree li a.tmpTargetNode_next{}.ztree li a input.rename{height:14px;width:80px;padding:0;margin:0;font-size:12px;border:1px #7EC4CC solid;*border:0px}.ztree li span{line-height:16px;margin-right:2px}.ztree li span.button{line-height:0;margin:0;width:16px;height:16px;display:inline-block;vertical-align:middle;border:0 none;cursor:pointer;outline:none;background-color:transparent;background-repeat:no-repeat;background-attachment:scroll;background-image:url("./img/zTreeStandard.png");*background-image:url("./img/zTreeStandard.gif")}.ztree li span.button.chk{width:13px;height:13px;margin:0 3px 0 0;cursor:auto}.ztree li span.button.chk.checkbox_false_full{background-position:0 0}.ztree li span.button.chk.checkbox_false_full_focus{background-position:0 -14px}.ztree li span.button.chk.checkbox_false_part{background-position:0 -28px}.ztree li span.button.chk.checkbox_false_part_focus{background-position:0 -42px}.ztree li span.button.chk.checkbox_false_disable{background-position:0 -56px}.ztree li span.button.chk.checkbox_true_full{background-position:-14px 0}.ztree li span.button.chk.checkbox_true_full_focus{background-position:-14px -14px}.ztree li span.button.chk.checkbox_true_part{background-position:-14px -28px}.ztree li span.button.chk.checkbox_true_part_focus{background-position:-14px -42px}.ztree li span.button.chk.checkbox_true_disable{background-position:-14px -56px}.ztree li span.button.chk.radio_false_full{background-position:-28px 0}.ztree li span.button.chk.radio_false_full_focus{background-position:-28px -14px}.ztree li span.button.chk.radio_false_part{background-position:-28px -28px}.ztree li span.button.chk.radio_false_part_focus{background-position:-28px -42px}.ztree li span.button.chk.radio_false_disable{background-position:-28px -56px}.ztree li span.button.chk.radio_true_full{background-position:-42px 0}.ztree li span.button.chk.radio_true_full_focus{background-position:-42px -14px}.ztree li span.button.chk.radio_true_part{background-position:-42px -28px}.ztree li span.button.chk.radio_true_part_focus{background-position:-42px -42px}.ztree li span.button.chk.radio_true_disable{background-position:-42px -56px}.ztree li span.button.switch{width:18px;height:18px}.ztree li span.button.root_open{background-position:-92px -54px}.ztree li span.button.root_close{background-position:-74px -54px}.ztree li span.button.roots_open{background-position:-92px 0}.ztree li span.button.roots_close{background-position:-74px 0}.ztree li span.button.center_open{background-position:-92px -18px}.ztree li span.button.center_close{background-position:-74px -18px}.ztree li span.button.bottom_open{background-position:-92px -36px}.ztree li span.button.bottom_close{background-position:-74px -36px}.ztree li span.button.noline_open{background-position:-92px -72px}.ztree li span.button.noline_close{background-position:-74px -72px}.ztree li span.button.root_docu{background:none;}.ztree li span.button.roots_docu{background-position:-56px 0}.ztree li span.button.center_docu{background-position:-56px -18px}.ztree li span.button.bottom_docu{background-position:-56px -36px}.ztree li span.button.noline_docu{background:none;}.ztree li span.button.ico_open{margin-right:2px;background-position:-110px -16px;vertical-align:top;*vertical-align:middle}.ztree li span.button.ico_close{margin-right:2px;background-position:-110px 0;vertical-align:top;*vertical-align:middle}.ztree li span.button.ico_docu{margin-right:2px;background-position:-110px -32px;vertical-align:top;*vertical-align:middle}.ztree li span.button.edit{margin-right:2px;background-position:-110px -48px;vertical-align:top;*vertical-align:middle}.ztree li span.button.remove{margin-right:2px;background-position:-110px -64px;vertical-align:top;*vertical-align:middle}.ztree li span.button.ico_loading{margin-right:2px;background:url(./img/loading.gif) no-repeat scroll 0 0 transparent;vertical-align:top;*vertical-align:middle}ul.tmpTargetzTree{background-color:#FFE6B0;opacity:0.8;filter:alpha(opacity=80)}span.tmpzTreeMove_arrow{width:16px;height:16px;display:inline-block;padding:0;margin:2px 0 0 1px;border:0 none;position:absolute;background-color:transparent;background-repeat:no-repeat;background-attachment:scroll;background-position:-110px -80px;background-image:url("./img/zTreeStandard.png");*background-image:url("./img/zTreeStandard.gif")}ul.ztree.zTreeDragUL{margin:0;padding:0;position:absolute;width:auto;height:auto;overflow:hidden;background-color:#cfcfcf;border:1px #00B83F dotted;opacity:0.8;filter:alpha(opacity=80)}.zTreeMask{z-index:10000;background-color:#cfcfcf;opacity:0.0;filter:alpha(opacity=0);position:absolute}',
+          ztree_ex = '.layui-treeSelect .ztree li span.button{font-family:layui-icon!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:none;line-height:inherit;}.layui-treeSelect .ztree li span.button.ico_open{display:none;}.layui-treeSelect .ztree li span.button.ico_close{display:none;}.layui-treeSelect .ztree li span.button.ico_docu:before{content:"\\e621";}.layui-treeSelect .ztree li span.button.bottom_close:before,.layui-treeSelect .ztree li span.button.center_close:before,.layui-treeSelect .ztree li span.button.roots_close:before,.layui-treeSelect .ztree li span.button.root_close:before{content:"\\e623";}.layui-treeSelect .ztree li span.button.bottom_open:before,.layui-treeSelect .ztree li span.button.roots_open:before,.layui-treeSelect .ztree li span.button.center_open:before,.layui-treeSelect .ztree li span.button.root_open:before{content:"\\e625";}.layui-treeSelect .ztree li a:hover{text-decoration:none;}.layui-treeSelect .ztree *{font-size:14px;}.layui-treeSelect .ztree li{line-height:inherit;padding:2px 0;}.layui-treeSelect .ztree li span.button.switch{position:relative;top:-1px;}.layui-treeSelect .ztree li a,.ztree li span{line-height:18px;height:inherit;}.layui-treeSelect .ztree li a.curSelectedNode{color:#5FB878;background:none;border:none;height:inherit;padding-top:1px;}.layui-treeSelect .layui-anim::-webkit-scrollbar{width:6px;height:6px;background-color:#F5F5F5;}.layui-treeSelect .layui-anim::-webkit-scrollbar-track{box-shadow:inset 0 0 6px rgba(107,98,98,0.3);border-radius:10px;background-color:#F5F5F5;}.layui-treeSelect .layui-anim::-webkit-scrollbar-thumb{border-radius:10px;box-shadow:inset 0 0 6px rgba(107,98,98,0.3);background-color:#555;}.layui-treeSelect.layui-form-select .layui-anim{display:none;position:absolute;left:0;top:42px;padding:5px 0;z-index:9999;min-width:100%;border:1px solid #d2d2d2;max-height:300px;overflow-y:auto;background-color:#fff;border-radius:2px;box-shadow:0 2px 4px rgba(0,0,0,.12);box-sizing:border-box;}.layui-treeSelect.layui-form-selected .layui-anim{display:block;}.layui-treeSelect .ztree li ul.line{background:none;position:relative;}.layui-treeSelect .ztree li ul.line:before{content:"";height:100%;border-left:1px dotted #ece;position:absolute;left:8px;}.layui-treeSelect .ztree li .center_docu:before,.ztree li .bottom_docu::before{content:"";height:100%;border-left:1px dotted #ece;position:absolute;left:8px;}.layui-treeSelect .ztree li .center_docu::after,.ztree li .bottom_docu::after{content:"";position:absolute;left:8px;top:8px;width:8px;border-top:1px dotted #ece;}.layui-treeSelect .ztree li span.button.ico_open{display:inline-block;position:relative;top:1px;}.layui-treeSelect .ztree li span.button.ico_close{display:inline-block;position:relative;top:1px;}.layui-treeSelect .ztree li span.button.ico_open:before{content:"\\e643";}.layui-treeSelect .ztree li span.button.ico_close:before{content:"\\e63f";}';
+        $head = $('head'),
+          ztreeStyle = $head.find('style[ztree]');
+
+        if (ztreeStyle.length === 0) {
+          $head.append($('<style ztree>').append(ztree).append(ztree_ex))
+        }
+        return a;
+      },
+      configStyle: function () {
+        if (style == undefined || style.line == undefined || !style.line.enable) {
+          $('#' + TREE_SELECT_ID).find('li .center_docu,li .bottom_docu').hide();
+          //.layui-treeSelect .ztree li .center_docu:before, .ztree li .bottom_docu::before
+        }
+
+        if (style == undefined || style.folder == undefined || !style.folder.enable) {
+          $('#' + TREE_SELECT_ID).find('li span.button.ico_open').hide();
+          $('#' + TREE_SELECT_ID).find('li span.button.ico_close').hide();
+        }
+      },
+      event: function (evt, el, fn) {
+        $('body').on(evt, el, fn);
+      }
+    };
+    a.init();
+    return new TreeSelect();
+  };
+
+  /**
+   * 重新加载trerSelect
+   * @param filter
+   */
+  TreeSelect.prototype.refresh = function (filter) {
+      var treeObj = obj.treeObj(filter);
+      treeObj.reAsyncChildNodes(null, "refresh");
+  };
+
+  /**
+   * 选中节点,因为tree是异步加载,所以必须在success回调中调用checkNode函数,否则无法获取生成的DOM元素
+   * @param filter lay-filter属性
+   * @param id 选中的id
+   */
+  TreeSelect.prototype.checkNode = function(filter, id){
+    var o = obj.filter(filter),
+        treeInput = o.find('.layui-select-title input'),
+        treeObj = obj.treeObj(filter),
+        node = treeObj.getNodeByParam("id", id, null),
+        name = node.name;
+    treeInput.val(name);
+    o.find('a[treenode_a]').removeClass('curSelectedNode');
+    obj.get(filter).val(id).attr('value', id);
+    treeObj.selectNode(node);
+  };
+
+  /**
+   * 撤销选中的节点
+   * @param filter lay-filter属性
+   * @param fn 回调函数
+   */
+  TreeSelect.prototype.revokeNode = function(filter, fn){
+    var o = obj.filter(filter);
+    o.find('a[treenode_a]').removeClass('curSelectedNode');
+    o.find('.layui-select-title input.layui-input').val('');
+    obj.get(filter).attr('value', '').val('');
+    // obj.treeObj(filter).expandAll(false);
+    if (fn){
+      fn({
+        treeId: o.attr('id')
+      });
+    }
+  }
+
+  /**
+   * 销毁组件
+   */
+  TreeSelect.prototype.destroy = function(filter) {
+    var o = obj.filter(filter);
+    o.remove();
+    obj.get(filter).show();
+  }
+
+  /**
+   * 获取zTree对象,可调用所有zTree函数
+   * @param filter
+   */
+  TreeSelect.prototype.zTree = function (filter) {
+    return obj.treeObj(filter);
+  };
+
+  var obj = {
+    get: function(filter){
+      if (!filter) {
+        layui.hint().error('filter 不能为空');
+      }
+      return $('*[lay-filter='+ filter +']');
+    },
+    filter: function(filter){
+      var tf = obj.get(filter),
+          o = tf.next();
+      return o;
+    },
+    treeObj: function (filter) {
+      var o = obj.filter(filter),
+          treeId = o.find('.layui-treeSelect-body').attr('id'),
+          tree = $.fn.zTree.getZTreeObj(treeId);
+      return tree;
+    }
+  };
+
+  //输出接口
+  var mod = new TreeSelect();
+  exports(_MOD, mod);
+});    
\ No newline at end of file
diff --git a/src/main/resources/static/libs/custom.js b/src/main/resources/static/libs/custom.js
new file mode 100644
index 0000000..0560c24
--- /dev/null
+++ b/src/main/resources/static/libs/custom.js
@@ -0,0 +1,95 @@
+// 自定义全局js
+(function (root) {
+    "use strict";
+
+    root.DictPoolToolkit = function () {
+        var storage = root.localStorage;
+        if (storage == null || storage === undefined) {
+            layer.msg("浏览器不支持 LocalStorage!!!", {icon: 2, time: 1000});
+            return null;
+        }
+
+        return {
+            url: "",
+            storage: storage,
+            pool: {},
+            addNewDict: function (dictType) {
+                var that = this;
+                console.log("正在加载<"+dictType+">");
+                $.ajax(that.url, {
+                        method: "GET",
+                        data: "dicttype=" + dictType,
+                        contentType: "application/x-www-form-urlencoded",
+                        success: function (data) {
+                            if (data == null || data == "") {
+                                that.storage.removeItem(dictType);
+                            } else {
+                                that.storage.setItem(dictType, JSON.stringify(data));
+                                console.log("<"+dictType+">加载成功!");
+                            }
+                        },
+                        error: function(e){
+                            console.log("<"+dictType+">加载失败!");
+                        }
+                    }
+                );
+                return this;
+            },
+            loadSyncDict: function (dictType) {
+                var that = this;
+                console.log("正在加载<" + dictType + ">");
+                $.ajax(that.url, {
+                        method: "GET",
+                        data: "dicttype=" + dictType,
+                        async: false,  //同步
+                        contentType: "application/x-www-form-urlencoded",
+                        success: function (data) {
+                            if (data == null || data == "") {
+                                that.storage.removeItem(dictType);
+                            } else {
+                                that.storage.setItem(dictType, JSON.stringify(data));
+                                console.log("<"+dictType+">加载成功!");
+                            }
+                        },
+                        error: function (e) {
+                            console.log("<" + dictType + ">加载失败!");
+                        }
+                    }
+                );
+                return this;
+            },
+            initAll: function (url) {
+                this.url = url;
+                this.addNewDict("allSourcetypeList").addNewDict("allReverseflagList");
+            },
+            getDict: function (dictType) {
+                var dict, that = this;
+                if (that.pool[dictType] != undefined) {
+                    return that.pool[dictType];
+                } else {
+                    dict = that.storage.getItem(dictType);
+                    if (dict == undefined) {
+                        return null;
+                    } else {
+                        that.pool[dictType] = JSON.parse(dict);
+                        return that.pool[dictType];
+                    }
+                }
+            },
+            getDictValue: function (dictType, code) {
+                var dict, that = this;
+                dict = that.getDict(dictType);
+                if (dict == null) {
+                    return code;
+                } else {
+                    var c = "" + code;
+                    return dict[c] == undefined ? code : dict[c];
+                }
+            }
+        }
+    }
+
+    root.getTempDictValue = function (dicttype, key) {
+        return DictPoolToolkit().getDictValue(dicttype, key);
+    }
+}(window));
\ No newline at end of file
diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html
index a959451..5128026 100755
--- a/src/main/resources/templates/index.html
+++ b/src/main/resources/templates/index.html
@@ -33,8 +33,11 @@
         </ul>

         <ul class="layui-nav layui-layout-right">

             <li class="layui-nav-item" lay-unselect>

-                <a id="btnMessage" title="消息"><i class="layui-icon layui-icon-notice"></i></a>

+                <a ew-event="refreshDict" title="刷新字典"><i class="layui-icon layui-icon-read"></i></a>

             </li>

+            <!--<li class="layui-nav-item" lay-unselect>-->

+                <!--<a id="btnMessage" title="消息"><i class="layui-icon layui-icon-notice"></i></a>-->

+            <!--</li>-->

             <li class="layui-nav-item layui-hide-xs" lay-unselect>

                 <a ew-event="fullScreen" title="全屏"><i class="layui-icon layui-icon-screen-full"></i></a>

             </li>

@@ -130,12 +133,15 @@
 <script type="text/javascript" th:src="@{/static/libs/q.js}"></script>

 <script type="text/javascript" th:src="@{/static/libs/layui/layui.js}"></script>

 <script type="text/javascript" th:src="@{/static/libs/zTree/js/jquery.ztree.all-3.5.min.js}"></script>

+<script type="text/javascript" th:src="@{/static/libs/custom.js}"></script>

+

 <script>

     layui.config({

         base: 'static/custom/module/'

     }).extend({

         formSelects: 'formSelects/formSelects-v4',

-        treetable: 'treetable-lay/treetable'

+        treetable: 'treetable-lay/treetable',

+        treeSelect: 'treeSelect/treeSelect'

     }).use(['admin'], function () {

         var admin = layui.admin;

     });

@@ -148,6 +154,8 @@
         index.initRouter();  // 导航栏和tab联动

         index.bindEvent();  // 绑定事件

 

+        var dictpool = DictPoolToolkit();

+        dictpool.initAll("/dictpool"); //加载字典

     });

 </script>

 </body>

diff --git a/src/main/resources/templates/system/dtl/shopdtl.html b/src/main/resources/templates/system/dtl/shopdtl.html
index 9fc1cc3..94fc668 100644
--- a/src/main/resources/templates/system/dtl/shopdtl.html
+++ b/src/main/resources/templates/system/dtl/shopdtl.html
@@ -7,13 +7,265 @@
         </span>
     </div>
     <div class="layui-card-body">
-        <div class="layui-form toolbar">
-            搜索:
-            <input id="search-shopdtl-shopname" class="layui-input search-input" type="text" maxlength="30" placeholder="输入名称"/>&emsp;
-            <button id="btn-search-shopdtl" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
+        <div class="layui-form" lay-filter="shopdtl-search-form">
+            <div class="layui-form-item" style="margin-bottom: 0;">
+                <div class="layui-inline">
+                    <label class="layui-form-label">记账日期</label>
+                    <div class="layui-input-inline" style="width: 120px;">
+                        <input type="text" name="startAccdate" id="shopdtl-search-startAccdate" placeholder="开始日期"
+                               autocomplete="off" class="layui-input"/>
+                    </div>
+                    <div class="layui-form-mid">-</div>
+                    <div class="layui-input-inline" style="width: 120px;">
+                        <input type="text" name="endAccdate" id="shopdtl-search-endAccdate" placeholder="结束日期"
+                               autocomplete="off"
+                               class="layui-input"/>
+                    </div>
+                </div>
+
+                <div class="layui-inline" style="width: 298px;">
+                    <label class="layui-form-label">商户名称</label>
+                    <div class="layui-input-block">
+                        <input type="text" name="shopname" id="shopdtl-search-shopname" placeholder="商户名称"
+                               autocomplete="off" class="layui-input" maxlength="20"/>
+                    </div>
+                </div>
+
+                <div class="layui-inline">
+                    <label class="layui-form-label">支付方式</label>
+                    <div class="layui-input-block">
+                        <select name="sourcetype" id="shopdtl-search-sourcetype" class="layui-select">
+                            <option value=""> 全部</option>
+                            <option th:each="pt:${paytypelist}" th:value="${pt.sourceType}"
+                                    th:text="${pt.paydesc}"></option>
+                        </select>&emsp;
+                    </div>
+                </div>
+
+                <div class="layui-inline">
+                    <label class="layui-form-label">状态</label>
+                    <div class="layui-input-block">
+                        <select name="status" id="shopdtl-search-status" class="layui-select">
+                            <option value=""> 全部</option>
+                            <option th:each="st:${dtlstatuslist}" th:value="${st.dictval}"
+                                    th:text="${st.dictcaption}"></option>
+                        </select>&emsp;
+                    </div>
+                </div>
+            </div>
+
+            <div class="layui-form-item" style="margin-bottom: 0;">
+                <div class="layui-inline">
+                    <label class="layui-form-label">交易日期</label>
+                    <div class="layui-input-inline" style="width: 120px;">
+                        <input type="text" name="startTransdate" id="shopdtl-search-startTransdate" placeholder="开始日期"
+                               autocomplete="off" class="layui-input"/>
+                    </div>
+                    <div class="layui-form-mid">-</div>
+                    <div class="layui-input-inline" style="width: 120px;">
+                        <input type="text" name="endTransdate" id="shopdtl-search-endTransdate" placeholder="结束日期"
+                               autocomplete="off" class="layui-input"/>
+                    </div>
+                </div>
+
+                <div class="layui-inline">
+                    <label class="layui-form-label">选择商户</label>
+                    <div class="layui-input-block">
+                        <input type="text" name="shopaccno" id="shopdtl-search-shopaccno" placeholder="选择商户" lay-filter="shopdtl-search-shopaccno-filter"
+                               autocomplete="off" class="layui-input"/>
+                    </div>
+                </div>
+
+                <div class="layui-inline">
+                    <label class="layui-form-label">类型</label>
+                    <div class="layui-input-block">
+                        <select name="tradeflag" id="shopdtl-search-tradeflag" class="layui-select">
+                            <option value=""> 全部</option>
+                            <option value="in">收入</option>
+                            <option value="out">支出</option>
+                        </select>&emsp;
+                    </div>
+                </div>
+
+                <div class="layui-inline">
+                    <label class="layui-form-label">交易码</label>
+                    <div class="layui-input-block">
+                        <select name="transcode" id="shopdtl-search-transcode" class="layui-select">
+                            <option value=""> 全部</option>
+                            <option th:each="tc:${transcodelist}" th:value="${tc.transcode}"
+                                    th:text="${tc.transname}"></option>
+                        </select>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+    <div class="layui-card-body">
+        <div class="toolbar">
+            <button id="btn-search-shopdtl" class="layui-btn icon-btn" data-type="search"><i
+                    class="layui-icon">&#xe615;</i>搜索
             </button>
-            <button id="btn-reset-shopdtl" class="layui-btn layui-btn-primary" data-type="reset"><i class="layui-icon"></i>清 空</button>
+            <button id="btn-reset-shopdtl" class="layui-btn layui-btn-primary" data-type="reset"><i
+                    class="layui-icon"></i>清 空
+            </button>
         </div>
         <table class="layui-table" id="shopdtlSearchTable" lay-filter="shopdtlSearchTable-filter"></table>
     </div>
-</div>
\ No newline at end of file
+</div>
+
+
+<script>
+    layui.use(['form', 'table', 'layer', 'admin', 'element', 'laydate', 'treeSelect'], function () {
+        var form = layui.form;
+        var table = layui.table;
+        var admin = layui.admin;
+        var laydate = layui.laydate;
+        var treeSelect = layui.treeSelect;
+
+        form.render("select");
+
+        laydate.render({
+            elem: '#shopdtl-search-startAccdate'
+        });
+        laydate.render({
+            elem: '#shopdtl-search-endAccdate'
+        });
+        laydate.render({
+            elem: '#shopdtl-search-startTransdate'
+        });
+        laydate.render({
+            elem: '#shopdtl-search-endTransdate'
+        });
+
+        treeSelect.render({
+            elem: '#shopdtl-search-shopaccno',
+            data: '/dtl/shoptreeselect',
+            type: 'get',
+            placeholder: '选择商户',
+            search: false,
+            style: {
+                folder: {
+                    enable: false
+                },
+                line: {
+                    enable: true
+                }
+            },
+            // 点击回调
+            click: function (d) {
+                var treeNode = d.current;
+                console.log(treeNode);
+                if(undefined == treeNode.accno || null == treeNode.accno){
+                    layer.msg("请选择结算商户", {icon: 2, time:1500});
+                    $("#shopdtl-search-shopaccno").val("");
+                    treeSelect.revokeNode('shopdtl-search-shopaccno-filter');
+                    return false;
+                }
+                return true;
+            },
+            success: function (d) {
+                console.log(d); // 加载完成后的回调函数
+            }
+        });
+
+
+        $("#btn-search-shopdtl").click(function () {
+            table.reload('shopdtlSearchTable', {
+                where: {
+                    startAccdate: $("#shopdtl-search-startAccdate").val(),
+                    endAccdate: $("#shopdtl-search-endAccdate").val(),
+                    startTransdate: $("#shopdtl-search-startTransdate").val(),
+                    endTransdate: $("#shopdtl-search-endTransdate").val(),
+                    personname: $("#shopdtl-search-personname").val(),
+                    shopaccno: $("#shopdtl-search-shopaccno").val(),
+                    sourcetype: $("#shopdtl-search-sourcetype").val(),
+                    tradeflag: $("#shopdtl-search-tradeflag").val(),
+                    transcode: $("#shopdtl-search-transcode").val(),
+                    status: $("#shopdtl-search-status").val()
+                }, page: {curr: 1}
+            });
+        });
+
+        $("#btn-reset-shopdtl").click(function () {
+            form.val("shopdtl-search-form", {
+                "startAccdate": "",
+                "endAccdate": "",
+                "startTransdate": "",
+                "endTransdate": "",
+                "shopname": "",
+                "shopaccno": "",
+                "sourcetype": "",
+                "tradeflag": "",
+                "transcode": "",
+                "status": ""
+            });
+            form.render("select");
+            treeSelect.revokeNode('shopdtl-search-shopaccno-filter');
+        });
+
+        // 渲染表格
+        table.render({
+            elem: '#shopdtlSearchTable',
+            url: '/dtl/shopdtllist',
+            page: true,
+            cols: [
+                [
+                    {field: 'refno', title: '参考号', align: 'center', width: 200, sort: true},
+                    {field: 'accdate', title: '记账日期', align: 'center', width: 100, sort: true},
+                    {field: 'transdesc', title: '交易描述', align: 'center', width: 175},
+                    {field: 'shopname', title: '商户名称', align: 'center', width: 250},
+                    {field: 'amount', title: '交易金额', align: 'center', width: 120, sort: true},
+                    {
+                        field: 'status', title: '状态', align: 'center', width: 90, templet: function (item) {
+                            if (item.status == 'init') {
+                                return '<span class="layui-badge layui-bg-gray">初始化</span>';
+                            } else if (item.status == 'success') {
+                                return '<span class="layui-badge layui-bg-green">成功</span>';
+                            } else if (item.status == 'fail') {
+                                return '<span class="layui-badge">失败</span>';
+                            } else if (item.status == 'wip') {
+                                return '<span class="layui-badge layui-bg-orange">待支付</span>';
+                            } else {
+                                return item.status;
+                            }
+                        }
+                    },
+                    {
+                        field: 'tradeflag', title: '类型', align: 'center', width: 60, templet: function (item) {
+                            if (item.tradeflag == 'in') {
+                                return '<span style="color: green;">收入</span>';
+                            } else if (item.tradeflag == 'out') {
+                                return '<span style="color: red;">支出</span>';
+                            } else {
+                                return item.tradeflag;
+                            }
+                        }
+                    },
+                    {field: 'transdate', title: '交易日期', align: 'center', width: 100, sort: true},
+                    {field: 'transtime', title: '交易时间', align: 'center', width: 100, sort: true},
+                    {
+                        field: 'sourceType',
+                        title: '支付方式',
+                        align: 'center',
+                        width: 130,
+                        sort: true,
+                        templet: function (item) {
+                            return getTempDictValue('allSourcetypeList', item.sourceType);
+                        }
+                    },
+                    {
+                        field: 'reverseFlag', title: '冲正状态', align: 'center', width: 100, templet: function (item) {
+                            return getTempDictValue('allReverseflagList', item.reverseFlag);
+                        }
+                    },
+                    {field: 'oppositeAccName', title: '交易对象', align: 'center', width: 150},
+                    // {field: 'outtradeno', title: '子系统订单号', align: 'center', width: 200},
+                    {field: 'transcode', title: '交易码', align: 'center', width: 100},
+                    {field: 'remark', title: '备注信息', align: 'center', width: 200}
+                ]
+            ]
+        });
+
+
+    });
+</script>
diff --git a/src/main/resources/templates/system/dtl/userdtl.html b/src/main/resources/templates/system/dtl/userdtl.html
index 987e869..e7ebaff 100644
--- a/src/main/resources/templates/system/dtl/userdtl.html
+++ b/src/main/resources/templates/system/dtl/userdtl.html
@@ -6,54 +6,231 @@
           <a><cite>个人流水查询</cite></a>
         </span>
     </div>
-    <div class="layui-form layui-card-header layuiadmin-card-header-auto">
-        <div class="layui-form-item">
-            <div class="layui-inline">
-                <label class="layui-form-label">ID</label>
-                <div class="layui-input-block">
-                    <input type="text" name="id" placeholder="请输入" autocomplete="off" class="layui-input">
+    <div class="layui-card-body">
+        <div class="layui-form" lay-filter="userdtl-search-form">
+            <div class="layui-form-item" style="margin-bottom: 0;">
+                <div class="layui-inline">
+                    <label class="layui-form-label">记账日期</label>
+                    <div class="layui-input-inline" style="width: 120px;">
+                        <input type="text" name="startAccdate" id="userdtl-search-startAccdate" placeholder="开始日期"
+                               autocomplete="off" class="layui-input"/>
+                    </div>
+                    <div class="layui-form-mid">-</div>
+                    <div class="layui-input-inline" style="width: 120px;">
+                        <input type="text" name="endAccdate" id="userdtl-search-endAccdate" placeholder="结束日期"
+                               autocomplete="off"
+                               class="layui-input"/>
+                    </div>
+                </div>
+
+                <div class="layui-inline">
+                    <label class="layui-form-label">姓名</label>
+                    <div class="layui-input-block">
+                        <input type="text" name="personname" id="userdtl-search-personname" placeholder="姓名"
+                               autocomplete="off" class="layui-input" maxlength="20"/>
+                    </div>
+                </div>
+
+                <div class="layui-inline">
+                    <label class="layui-form-label">支付方式</label>
+                    <div class="layui-input-block">
+                        <select name="sourcetype" id="userdtl-search-sourcetype" class="layui-select">
+                            <option value=""> 全部</option>
+                            <option th:each="pt:${paytypelist}" th:value="${pt.sourceType}"
+                                    th:text="${pt.paydesc}"></option>
+                        </select>&emsp;
+                    </div>
+                </div>
+
+                <div class="layui-inline">
+                    <label class="layui-form-label">状态</label>
+                    <div class="layui-input-block">
+                        <select name="status" id="userdtl-search-status" class="layui-select">
+                            <option value=""> 全部</option>
+                            <option th:each="st:${dtlstatuslist}" th:value="${st.dictval}"
+                                    th:text="${st.dictcaption}"></option>
+                        </select>&emsp;
+                    </div>
                 </div>
             </div>
-            <div class="layui-inline">
-                <label class="layui-form-label">用户名</label>
-                <div class="layui-input-block">
-                    <input type="text" name="username" placeholder="请输入" autocomplete="off" class="layui-input">
+
+            <div class="layui-form-item" style="margin-bottom: 0;">
+                <div class="layui-inline">
+                    <label class="layui-form-label">交易日期</label>
+                    <div class="layui-input-inline" style="width: 120px;">
+                        <input type="text" name="startTransdate" id="userdtl-search-startTransdate" placeholder="开始日期"
+                               autocomplete="off" class="layui-input"/>
+                    </div>
+                    <div class="layui-form-mid">-</div>
+                    <div class="layui-input-inline" style="width: 120px;">
+                        <input type="text" name="endTransdate" id="userdtl-search-endTransdate" placeholder="结束日期"
+                               autocomplete="off" class="layui-input"/>
+                    </div>
                 </div>
-            </div>
-            <div class="layui-inline">
-                <label class="layui-form-label">邮箱</label>
-                <div class="layui-input-block">
-                    <input type="text" name="email" placeholder="请输入" autocomplete="off" class="layui-input">
+
+                <div class="layui-inline">
+                    <label class="layui-form-label">市民卡号</label>
+                    <div class="layui-input-block">
+                        <input type="text" name="cardno" id="userdtl-search-cardno" placeholder="市民卡号"
+                               autocomplete="off" class="layui-input"/>
+                    </div>
                 </div>
-            </div>
-            <div class="layui-inline">
-                <label class="layui-form-label">性别</label>
-                <div class="layui-input-block">
-                    <select name="sex">
-                        <option value="0">不限</option>
-                        <option value="1">男</option>
-                        <option value="2">女</option>
-                    </select>
+
+                <div class="layui-inline">
+                    <label class="layui-form-label">类型</label>
+                    <div class="layui-input-block">
+                        <select name="tradeflag" id="userdtl-search-tradeflag" class="layui-select">
+                            <option value=""> 全部</option>
+                            <option value="in">收入</option>
+                            <option value="out">支出</option>
+                        </select>&emsp;
+                    </div>
                 </div>
-            </div>
-            <div class="layui-inline">
-                <button class="layui-btn layuiadmin-btn-useradmin" lay-submit lay-filter="LAY-user-front-search">
-                    <i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>
-                </button>
+
+                <div class="layui-inline">
+                    <label class="layui-form-label">交易码</label>
+                    <div class="layui-input-block">
+                        <select name="transcode" id="userdtl-search-transcode" class="layui-select">
+                            <option value=""> 全部</option>
+                            <option th:each="tc:${transcodelist}" th:value="${tc.transcode}"
+                                    th:text="${tc.transname}"></option>
+                        </select>
+                    </div>
+                </div>
             </div>
         </div>
     </div>
     <div class="layui-card-body">
-
-
-
-        <div class="layui-form toolbar">
-            搜索:
-            <input id="search-shopdtl-personname" class="layui-input search-input" type="text" maxlength="30" placeholder="输入名称"/>&emsp;
-            <button id="btn-search-sysparam" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
+        <div class="toolbar">
+            <button id="btn-search-userdtl" class="layui-btn icon-btn" data-type="search"><i
+                    class="layui-icon">&#xe615;</i>搜索
             </button>
-            <button id="btn-reset-sysparam" class="layui-btn layui-btn-primary" data-type="reset"><i class="layui-icon"></i>清 空</button>
+            <button id="btn-reset-userdtl" class="layui-btn layui-btn-primary" data-type="reset"><i
+                    class="layui-icon"></i>清 空
+            </button>
         </div>
         <table class="layui-table" id="userdtlSearchTable" lay-filter="userdtlSearchTable-filter"></table>
     </div>
-</div>
\ No newline at end of file
+</div>
+
+<script>
+    layui.use(['form', 'table', 'layer', 'admin', 'element', 'laydate'], function () {
+        var form = layui.form;
+        var table = layui.table;
+        var admin = layui.admin;
+        var laydate = layui.laydate;
+
+        form.render("select");
+
+        laydate.render({
+            elem: '#userdtl-search-startAccdate'
+        });
+        laydate.render({
+            elem: '#userdtl-search-endAccdate'
+        });
+        laydate.render({
+            elem: '#userdtl-search-startTransdate'
+        });
+        laydate.render({
+            elem: '#userdtl-search-endTransdate'
+        });
+
+        $("#btn-search-userdtl").click(function () {
+            table.reload('userdtlSearchTable', {
+                where: {
+                    startAccdate: $("#userdtl-search-startAccdate").val(),
+                    endAccdate: $("#userdtl-search-endAccdate").val(),
+                    startTransdate: $("#userdtl-search-startTransdate").val(),
+                    endTransdate: $("#userdtl-search-endTransdate").val(),
+                    personname: $("#userdtl-search-personname").val(),
+                    cardno: $("#userdtl-search-cardno").val(),
+                    sourcetype: $("#userdtl-search-sourcetype").val(),
+                    tradeflag: $("#userdtl-search-tradeflag").val(),
+                    transcode: $("#userdtl-search-transcode").val(),
+                    status: $("#userdtl-search-status").val()
+                }, page: {curr: 1}
+            });
+        });
+
+        $("#btn-reset-userdtl").click(function () {
+            form.val("userdtl-search-form", {
+                "startAccdate": "",
+                "endAccdate": "",
+                "startTransdate": "",
+                "endTransdate": "",
+                "personname": "",
+                "cardno": "",
+                "sourcetype": "",
+                "tradeflag": "",
+                "transcode": "",
+                "status": ""
+            });
+            form.render("select");
+        });
+
+        // 渲染表格
+        table.render({
+            elem: '#userdtlSearchTable',
+            url: '/dtl/userdtllist',
+            page: true,
+            cols: [
+                [
+                    {field: 'refno', title: '参考号', align: 'center', width: 200, sort: true},
+                    {field: 'accdate', title: '记账日期', align: 'center', width: 100, sort: true},
+                    {field: 'transdesc', title: '交易描述', align: 'center', width: 175},
+                    {field: 'userName', title: '姓名', align: 'center', width: 150},
+                    {field: 'amount', title: '交易金额', align: 'center', width: 120, sort: true},
+                    {
+                        field: 'status', title: '状态', align: 'center', width: 90, templet: function (item) {
+                            if (item.status == 'init') {
+                                return '<span class="layui-badge layui-bg-gray">初始化</span>';
+                            } else if (item.status == 'success') {
+                                return '<span class="layui-badge layui-bg-green">成功</span>';
+                            } else if (item.status == 'fail') {
+                                return '<span class="layui-badge">失败</span>';
+                            } else if (item.status == 'wip') {
+                                return '<span class="layui-badge layui-bg-orange">待支付</span>';
+                            } else {
+                                return item.status;
+                            }
+                        }
+                    },
+                    {
+                        field: 'tradeflag', title: '类型', align: 'center', width: 60, templet: function (item) {
+                            if (item.tradeflag == 'in') {
+                                return '<span style="color: green;">收入</span>';
+                            } else if (item.tradeflag == 'out') {
+                                return '<span style="color: red;">支出</span>';
+                            } else {
+                                return item.tradeflag;
+                            }
+                        }
+                    },
+                    {field: 'transdate', title: '交易日期', align: 'center', width: 100, sort: true},
+                    {field: 'transtime', title: '交易时间', align: 'center', width: 100, sort: true},
+                    {
+                        field: 'sourceType',
+                        title: '支付方式',
+                        align: 'center',
+                        width: 130,
+                        sort: true,
+                        templet: function (item) {
+                            return getTempDictValue('allSourcetypeList', item.sourceType);
+                        }
+                    },
+                    {
+                        field: 'reverseFlag', title: '冲正状态', align: 'center', width: 100, templet: function (item) {
+                            return getTempDictValue('allReverseflagList', item.reverseFlag);
+                        }
+                    },
+                    {field: 'oppositeAccName', title: '交易对象', align: 'center', width: 250},
+                    {field: 'outtradeno', title: '子系统订单号', align: 'center', width: 200},
+                    {field: 'transcode', title: '交易码', align: 'center', width: 100},
+                    {field: 'remark', title: '备注信息', align: 'center', width: 200}
+                ]
+            ]
+        });
+
+
+    });
+</script>