主功能菜单
diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/FunctionDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/FunctionDao.java
index d846c25..e881f2c 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/FunctionDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/FunctionDao.java
@@ -2,8 +2,13 @@
 
 import com.supwisdom.dlpay.framework.domain.TFunction;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 @Repository
 public interface FunctionDao extends JpaRepository<TFunction, String> {
+  @Query("select distinct t from TFunction t,TRoleFunction a, TOperRole b where t.id=a.functionId and a.roleId=b.roleId and b.operid=?1 order by t.orderNum ")
+  List<TFunction> getTFunctionsByOperid(String operid);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/domain/TFunction.java b/src/main/java/com/supwisdom/dlpay/framework/domain/TFunction.java
index 7ccab75..5b7beab 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/domain/TFunction.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/domain/TFunction.java
@@ -28,6 +28,9 @@
   @Column(name="ORDER_NUM", precision = 9)
   private Integer orderNum;
 
+  @Column(name="MENU_ICON", precision = 9)
+  private String menuIcon;
+
   @Column(name="CREATETIME", length = 14)
   private String createtime;
 
@@ -82,6 +85,14 @@
     this.orderNum = orderNum;
   }
 
+  public String getMenuIcon() {
+    return menuIcon;
+  }
+
+  public void setMenuIcon(String menuIcon) {
+    this.menuIcon = menuIcon;
+  }
+
   public String getCreatetime() {
     return createtime;
   }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/domain/TOperator.java b/src/main/java/com/supwisdom/dlpay/framework/domain/TOperator.java
index 83885d3..6285302 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/domain/TOperator.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/domain/TOperator.java
@@ -41,6 +41,25 @@
   @Transient
   private Collection<? extends GrantedAuthority> authorities;  //权限
 
+  public TOperator() {
+  }
+
+  public TOperator(String opercode, String opername) {
+    this.opercode = opercode;
+    this.opername = opername;
+  }
+
+  public TOperator(String opercode, String opertype, String opername, String operpwd, String status, String opendate, String closedate, Collection<? extends GrantedAuthority> authorities) {
+    this.opercode = opercode;
+    this.opertype = opertype;
+    this.opername = opername;
+    this.operpwd = operpwd;
+    this.status = status;
+    this.opendate = opendate;
+    this.closedate = closedate;
+    this.authorities = authorities;
+  }
+
   public String getOperid() {
     return operid;
   }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/security/OperUtil.java b/src/main/java/com/supwisdom/dlpay/framework/security/OperUtil.java
new file mode 100644
index 0000000..d576b41
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/framework/security/OperUtil.java
@@ -0,0 +1,68 @@
+package com.supwisdom.dlpay.framework.security;

+

+import com.supwisdom.dlpay.framework.domain.TOperator;

+import org.springframework.security.core.Authentication;

+import org.springframework.security.core.GrantedAuthority;

+import org.springframework.security.core.context.SecurityContextHolder;

+

+import java.util.Collection;

+

+public class OperUtil {

+

+  public static TOperator getCurrentOper() {

+    Authentication au = SecurityContextHolder.getContext()

+        .getAuthentication();

+    if (au == null)

+      return null;

+    if (au.getPrincipal() == null)

+      return null;

+    if (au != null && au.getPrincipal() instanceof TOperator) {

+      return (TOperator) au.getPrincipal();

+    } else {

+      TOperator oper = new TOperator();

+      oper.setOpername(au.getPrincipal().toString());

+      oper.setOperpwd(au.getCredentials() == null ? null : au

+          .getCredentials().toString());

+      return oper;

+    }

+  }

+

+  public static String getCurrentOperid() {

+    TOperator oper = getCurrentOper();

+    if (oper == null)

+      return null;

+    return oper.getOperid() == null ? oper.getOpercode() : oper.getOperid();

+  }

+

+  public static boolean isLogined() {

+    Authentication au = SecurityContextHolder.getContext()

+        .getAuthentication();

+    if (au == null)

+      return false;

+    if (au.getPrincipal() == null)

+      return false;

+    if (au.getPrincipal() instanceof TOperator)

+      return true;

+    return false;

+  }

+

+  public static boolean isAdmin() {

+    TOperator loginOper = OperUtil.getCurrentOper();

+    if (loginOper != null) {

+      Collection<? extends GrantedAuthority> gas = loginOper.getAuthorities();

+      if (gas == null) {

+        return false;

+      }

+      boolean flag = false;

+      for (GrantedAuthority grantedAuthority : gas) {

+        if ("ROLE_ADMIN".equals(grantedAuthority.getAuthority())) {

+          flag = true;

+        }

+      }

+      return flag;

+    } else {

+      return false;

+    }

+  }

+

+}

diff --git a/src/main/kotlin/com/supwisdom/dlpay/framework/controller/security_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/framework/controller/security_controller.kt
index e1c06aa..4df76c6 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/framework/controller/security_controller.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/framework/controller/security_controller.kt
@@ -7,9 +7,13 @@
 import com.supwisdom.dlpay.framework.security.validate.ImageCodeUtil
 import com.supwisdom.dlpay.framework.security.validate.VerifyCode
 import com.supwisdom.dlpay.framework.domain.ApiClientRedis
+import com.supwisdom.dlpay.framework.domain.TOperator
 import com.supwisdom.dlpay.framework.redisrepo.ApiClientRepository
+import com.supwisdom.dlpay.framework.security.OperUtil
 import com.supwisdom.dlpay.framework.service.SystemUtilService
 import com.supwisdom.dlpay.framework.util.HmacUtil
+import com.supwisdom.dlpay.system.service.CommonService
+import com.supwisdom.dlpay.system.service.FunctionService
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.http.HttpStatus
 import org.springframework.http.ResponseEntity
@@ -17,9 +21,9 @@
 import org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler
 import org.springframework.social.connect.web.HttpSessionSessionStrategy
 import org.springframework.stereotype.Controller
+import org.springframework.ui.Model
 import org.springframework.web.bind.annotation.*
 import org.springframework.web.context.request.ServletWebRequest
-import sun.plugin.liveconnect.SecurityContextHelper
 import java.util.*
 import javax.imageio.ImageIO
 import javax.servlet.http.HttpServletRequest
@@ -119,13 +123,15 @@
 
 @Controller
 class WebHomeController {
-
-    @GetMapping("/index")
-    fun homeView() = "index"
+    @Autowired
+    lateinit var functionService: FunctionService
+    @Autowired
+    lateinit var commonService: CommonService
 
     @GetMapping("/login")
     fun loginView() = "login"
 
+
     @PostMapping("/login/form")
     fun loginForm(form: LoginForm): ResponseEntity<Any> {
         return ResponseEntity.ok(ResponseBodyBuilder.create()
@@ -139,4 +145,13 @@
         }
         return "redirect:/login?logout"
     }
+
+    @GetMapping("/index")
+    fun homeView(model: Model): String {
+        model.addAttribute("loginOper", TOperator("111","开发测试"))
+        val funclist = functionService.getFunctionsByOperid("111")
+        model.addAttribute("menus", functionService.getMenuTree(funclist, "-1"))
+        model.addAttribute("payapiVersion",commonService.getSystemVersion())
+        return "index"
+    }
 }
diff --git a/src/main/kotlin/com/supwisdom/dlpay/security.kt b/src/main/kotlin/com/supwisdom/dlpay/security.kt
index 7998f23..7347908 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/security.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/security.kt
@@ -131,6 +131,8 @@
                         .anyRequest().hasRole("THIRD_COMMON")
                         .and()
                         .csrf().ignoringAntMatchers("/api/**")
+//                        .anyRequest().authenticated()
+                // 注册 filter
             }
         }
 
diff --git a/src/main/kotlin/com/supwisdom/dlpay/system/controller/system_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/system/controller/system_controller.kt
new file mode 100644
index 0000000..7477a8f
--- /dev/null
+++ b/src/main/kotlin/com/supwisdom/dlpay/system/controller/system_controller.kt
@@ -0,0 +1 @@
+package com.supwisdom.dlpay.system.controller
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/system/service/impl/system_service_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/system/service/impl/system_service_impl.kt
new file mode 100644
index 0000000..8e017d5
--- /dev/null
+++ b/src/main/kotlin/com/supwisdom/dlpay/system/service/impl/system_service_impl.kt
@@ -0,0 +1,52 @@
+package com.supwisdom.dlpay.system.service.impl
+
+import com.jcabi.manifests.Manifests
+import com.supwisdom.dlpay.framework.dao.FunctionDao
+import com.supwisdom.dlpay.framework.domain.TFunction
+import com.supwisdom.dlpay.system.service.CommonService
+import com.supwisdom.dlpay.system.service.FunctionService
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.stereotype.Service
+import java.util.HashMap
+
+@Service
+class CommonServiceImpl : CommonService {
+    override fun getSystemVersion(): String {
+        try {
+            return Manifests.read("Payapi-Version") ?: "version 1.0"
+        } catch (ex: Exception) {
+            ex.printStackTrace()
+            return "unknown"
+        }
+    }
+}
+
+@Service
+class FunctionServiceImpl : FunctionService {
+    @Autowired
+    lateinit var functionDao: FunctionDao
+
+    override fun getFunctionsByOperid(operid: String): List<TFunction> {
+        return functionDao.getTFunctionsByOperid(operid) ?: ArrayList(0)
+    }
+
+    override fun getMenuTree(funcList: List<TFunction>, parentId: String): List<Map<String, Any>> {
+        val list = java.util.ArrayList<Map<String, Any>>()
+        for (func in funcList) {
+            if (parentId == func.parentId) {
+                val map = HashMap<String, Any>()
+                map["menuName"] = func.name
+                map["menuIcon"] = func.menuIcon
+                if ("#" == func.menuUrl) {
+                    map["menuUrl"] = "javascript:;"
+                } else {
+                    map["menuUrl"] = func.menuUrl
+                }
+                map["subMenus"] = getMenuTree(funcList, func.id)
+                list.add(map)
+            }
+        }
+        return list
+    }
+
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/system/service/system_service.kt b/src/main/kotlin/com/supwisdom/dlpay/system/service/system_service.kt
new file mode 100644
index 0000000..7133732
--- /dev/null
+++ b/src/main/kotlin/com/supwisdom/dlpay/system/service/system_service.kt
@@ -0,0 +1,19 @@
+package com.supwisdom.dlpay.system.service
+
+import com.supwisdom.dlpay.framework.domain.TFunction
+import org.springframework.transaction.annotation.Propagation
+import org.springframework.transaction.annotation.Transactional
+
+interface CommonService{
+    fun getSystemVersion(): String;
+}
+
+interface FunctionService {
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class), readOnly = true)
+    fun getFunctionsByOperid(operid: String): List<TFunction>
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class), readOnly = true)
+    fun getMenuTree(funcList: List<TFunction>, parentId: String): List<Map<String, Any>>
+
+
+}
\ No newline at end of file
diff --git a/src/main/resources/static/custom/css/admin.css b/src/main/resources/static/custom/css/admin.css
new file mode 100755
index 0000000..608c847
--- /dev/null
+++ b/src/main/resources/static/custom/css/admin.css
@@ -0,0 +1,704 @@
+/** EasyWeb */
+html {
+    background-color: #f2f2f2;
+    color: #666;
+}
+
+/** header样式 */
+/** 导航栏下面的线条 */
+.layui-layout-admin .layui-header .layui-nav .layui-this:after, .layui-layout-admin .layui-header .layui-nav-bar {
+    height: 2px;
+    background-color: #03152A;
+    top: 0 !important;
+}
+
+.layui-layout-admin .layui-header .layui-nav .layui-nav-item {
+    line-height: 50px; /** 高度重写 */
+}
+
+.layui-layout-admin .layui-header .layui-nav .layui-nav-item .layui-nav-child {
+    top: 55px;
+}
+
+.layui-layout-admin .layui-header .layui-nav-item .layui-icon {
+    font-size: 16px; /** 图标大小 */
+}
+
+.layui-layout-admin .layui-header .layui-layout-left {
+    left: 220px;
+    padding: 0 10px;
+    transition: all .3s;
+}
+
+.layui-layout-admin .layui-header .layui-layout-right {
+    padding: 0;
+}
+
+/** 重写header的背景色和字体颜色 */
+.layui-layout-admin .layui-header {
+    background-color: #fff;
+    height: 50px;
+    box-shadow: 0 1px 4px 0 rgba(0, 21, 41, .08);
+}
+
+.layui-layout-admin .layui-header a {
+    color: #333;
+    padding: 0 15px;
+}
+
+.layui-layout-admin .layui-header a:hover {
+    color: #333;
+}
+
+.layui-layout-admin .layui-header .layui-nav-child a {
+    color: #333 !important;
+}
+
+.layui-layout-admin .layui-header .layui-nav .layui-nav-more {
+    border-color: #666 transparent transparent;
+}
+
+.layui-layout-admin .layui-header .layui-nav .layui-nav-mored {
+    border-color: transparent transparent #666;
+}
+
+/** logo部分样式 */
+.layui-layout-admin .layui-header .layui-logo {
+    width: 220px;
+    background-color: #001529;
+    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, .15);
+    color: #eee;
+    font-size: 16px;
+    font-family: Myriad Pro, Helvetica Neue, Arial, Helvetica, sans-serif;
+    font-weight: 300;
+    overflow: hidden;
+    line-height: 50px;
+    transition: all .3s;
+}
+
+.layui-layout-admin .layui-header .layui-logo img {
+    height: 40px;
+}
+
+.layui-layout-admin .layui-header .layui-logo cite {
+    font-style: normal;
+}
+
+.layui-layout-admin .layui-header .layui-nav-img {
+    margin-right: 5px;
+}
+
+.layui-layout-admin .layui-header .layui-nav-img + cite {
+    margin-right: 5px;
+}
+
+.layui-layout-admin .layui-header .layui-nav-child dd {
+    text-align: center;
+}
+
+.layui-layout-admin .layui-header a {
+    cursor: pointer;
+}
+
+/** //header样式结束 */
+
+/** 侧边栏样式 */
+.layui-layout-admin .layui-side .layui-side-scroll {
+    width: 240px;
+}
+
+.layui-layout-admin .layui-side {
+    top: 50px;
+    width: 220px;
+    background-color: #001529;
+    transition: all .3s;
+    -webkit-transition: all .3s;
+}
+
+.layui-layout-admin .layui-side .layui-nav {
+    width: 220px;
+    background-color: transparent;
+}
+
+.layui-layout-admin .layui-side .layui-nav .layui-nav-item > a:hover {
+    background: transparent;
+}
+
+.layui-layout-admin .layui-side .layui-nav .layui-nav-item > .layui-nav-child {
+    padding: 5px 0;
+    background-color: rgba(0, 0, 0, .3) !important;
+}
+
+.layui-layout-admin .layui-side .layui-nav .layui-nav-more {
+    right: 15px;
+}
+
+.layui-layout-admin .layui-side .layui-nav .layui-nav-item .layui-nav-child a {
+    padding-left: 50px; /** 导航字体位置 */
+}
+
+.layui-layout-admin .layui-side .layui-nav .layui-nav-item .layui-nav-child .layui-nav-child a {
+    padding-left: 70px;
+}
+
+.layui-layout-admin .layui-side .layui-nav .layui-nav-item > a {
+    padding-top: 8px;
+    padding-bottom: 8px;
+}
+
+/** 侧边栏样式结束 */
+
+/** 主体部分样式 */
+.layui-layout-admin .layui-body {
+    left: 220px;
+    top: 50px;
+    transition: left .3s;
+    overflow-y: scroll;
+    padding: 15px;
+}
+
+/** //主体部分样式结束 */
+
+/** 底部样式 */
+.layui-layout-admin .layui-footer {
+    left: 220px;
+    background: #fff;
+    transition: all .3s;
+}
+
+/** 底部样式结束 */
+
+/** 侧导航折叠样式PC */
+.layui-layout-admin.admin-nav-mini .layui-header .layui-logo {
+    width: 60px;
+}
+
+.layui-layout-admin.admin-nav-mini .layui-header .layui-logo cite {
+    display: none;
+}
+
+.layui-layout-admin.admin-nav-mini .layui-header .layui-layout-left {
+    left: 60px;
+}
+
+.layui-layout-admin.admin-nav-mini .layui-side {
+    width: 60px;
+}
+
+.layui-layout-admin.admin-nav-mini .layui-side .layui-nav {
+    width: 60px;
+}
+
+.layui-layout-admin.admin-nav-mini .layui-side-scroll {
+    width: 80px;
+}
+
+/** 侧导航隐藏文字 */
+.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .layui-nav-item > a > cite {
+    display: none;
+}
+
+.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .layui-nav-item > a .layui-nav-more {
+    display: none;
+}
+
+.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .layui-nav-item > a {
+    overflow: visible;
+}
+
+.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .layui-nav-itemed .layui-nav-child {
+    display: none;
+}
+
+.layui-layout-admin.admin-nav-mini .layui-body {
+    left: 60px;
+}
+
+.layui-layout-admin.admin-nav-mini .layui-footer {
+    left: 60px;
+}
+
+.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .layui-nav-itemed > a {
+    background: rgba(0, 0, 0, .3);
+}
+
+/** 修改折叠的图标 */
+.layui-layout-admin.admin-nav-mini .layui-header .layui-icon-shrink-right:before {
+    content: "\e66b";
+}
+
+/** //侧导航折叠样式结束 */
+
+/** 移动设备样式 */
+@media screen and (max-width: 750px) {
+    .layui-layout-admin .layui-side {
+        position: fixed;
+        left: -260px;
+        z-index: 10000;
+    }
+
+    .layui-layout-admin .layui-body {
+        left: 0;
+    }
+
+    .layui-layout-admin .layui-footer {
+        left: 0;
+    }
+
+    .layui-layout-admin .layui-header .layui-logo {
+        left: -260px;
+    }
+
+    .layui-layout-admin .layui-header .layui-layout-left {
+        left: 0;
+    }
+
+    .layui-layout-admin .layui-header .layui-icon-shrink-right:before {
+        content: "\e66b";
+    }
+
+    /* 移动设备侧导航折叠样式 */
+    .layui-layout-admin.admin-nav-mini .layui-header .layui-logo {
+        width: 220px;
+        left: 0;
+        z-index: 10001;
+    }
+
+    .layui-layout-admin.admin-nav-mini .layui-header {
+        z-index: auto;
+    }
+
+    .layui-layout-admin.admin-nav-mini .layui-header .layui-logo cite {
+        display: inline-block;
+    }
+
+    .layui-layout-admin.admin-nav-mini .layui-header .layui-layout-left {
+        left: 0;
+    }
+
+    .layui-layout-admin.admin-nav-mini .layui-side {
+        width: 220px;
+        left: 0;
+    }
+
+    .layui-layout-admin.admin-nav-mini .layui-side .layui-nav {
+        width: 220px;
+    }
+
+    .layui-layout-admin.admin-nav-mini .layui-side-scroll {
+        width: 240px;
+    }
+
+    .layui-layout-admin.admin-nav-mini .layui-side .layui-nav .layui-nav-item > a > cite {
+        display: inline-block;
+    }
+
+    .layui-layout-admin.admin-nav-mini .layui-side .layui-nav .layui-nav-item > a .layui-nav-more {
+        display: inline-block;
+    }
+
+    .layui-layout-admin.admin-nav-mini .layui-side .layui-nav .layui-nav-item > a {
+        overflow: hidden;
+    }
+
+    .layui-layout-admin.admin-nav-mini .layui-side .layui-nav .layui-nav-itemed > .layui-nav-child {
+        display: block;
+    }
+
+    .layui-layout-admin.admin-nav-mini .layui-body {
+        left: 0;
+    }
+
+    .layui-layout-admin.admin-nav-mini .layui-footer {
+        left: 0;
+    }
+
+    /** 移动设备遮罩层 */
+    .layui-layout-admin.admin-nav-mini .site-mobile-shade {
+        content: '';
+        position: fixed;
+        top: 0;
+        bottom: 0;
+        left: 0;
+        right: 0;
+        background-color: rgba(0, 0, 0, .2);
+        z-index: 9999;
+        cursor: pointer;
+    }
+
+    .layui-layout-admin.admin-nav-mini .layui-side .layui-nav .layui-nav-itemed > a {
+        background: transparent;
+    }
+
+    .layui-layout-admin.admin-nav-mini .layui-header .layui-icon-shrink-right:before {
+        content: "\e668";
+    }
+}
+
+/** //移动设备样式结束 */
+
+/** 右侧弹窗样式 */
+.layui-layer.layui-layer-adminRight {
+    top: 50px !important;
+    bottom: 0;
+    box-shadow: 1px 1px 10px rgba(0, 0, 0, .1);
+    border-radius: 0;
+    overflow: auto;
+}
+
+/** 消息列表样式 */
+.message-list {
+}
+
+.message-list-item {
+    padding: 10px 24px;
+    border-bottom: 1px solid #e8e8e8;
+    -ms-flex-align: start;
+    align-items: flex-start;
+    display: flex;
+    -ms-flex: 1 1;
+    flex: 1 1;
+}
+
+.message-list-item:hover {
+    background: #F2F2F2;
+}
+
+.message-item-icon {
+    width: 40px;
+    height: 40px;
+    margin-right: 16px;
+    display: block;
+    margin-top: 4px;
+}
+
+.message-item-right {
+    display: block;
+    flex: 1 0;
+}
+
+.message-item-title {
+    font-size: 14px;
+    color: rgba(0, 0, 0, .65);
+}
+
+.message-item-text {
+    color: rgba(0, 0, 0, .45);
+    font-size: 12px;
+}
+
+/** //消息列表样式结束 */
+
+/** 主体部分标题样式 */
+.layui-card-header .header-title {
+    display: inline;
+    font-size: 16px;
+}
+
+/** 表格搜索框样式 */
+.search-input {
+    width: 150px;
+    display: inline-block;
+    height: 36px;
+    vertical-align: middle;
+    padding: 3px 6px;
+}
+
+/** 重写layui默认按钮的高度,因为按钮跟输入框不一样高特别丑 */
+.layui-btn:not(.layui-btn-lg ):not(.layui-btn-sm):not(.layui-btn-xs) {
+    height: 34px;
+    line-height: 34px;
+}
+
+/** 如果按钮加图标减少内边距 */
+.icon-btn {
+    padding: 0 8px;
+}
+
+.layui-form.toolbar .layui-btn + .layui-btn {
+    margin-left: 15px;
+}
+
+.model-form-footer .layui-btn + .layui-btn {
+    margin-left: 15px;
+}
+
+.layui-table-cell .layui-btn + .layui-btn {
+    margin-left: 5px;
+}
+
+/** 表格上方工具栏样式 */
+.layui-form.toolbar {
+    color: #333;
+}
+
+.layui-form.toolbar .layui-form-select input {
+    height: 35px;
+    line-height: 35px;
+    width: 150px;
+    overflow: hidden;
+}
+
+.layui-form.toolbar .layui-form-select {
+    display: inline-block;
+}
+
+/* 表单弹窗样式 */
+.model-form {
+    padding-top: 30px;
+    padding-right: 45px;
+}
+
+.model-form-footer {
+    text-align: right;
+}
+
+/** dialog超出显示 */
+.layui-layout-body .layui-layer-page .layui-layer-content {
+    overflow: visible;
+}
+
+/* layui文档官网右侧弹窗目录列表的样式 */
+.site-dir li {
+    line-height: 26px;
+    margin-left: 20px;
+    overflow: visible;
+    list-style-type: disc;
+}
+
+/** laydate加图标 */
+.date-icon {
+    background-image: url(../images/icon_date.png);
+    background-repeat: no-repeat;
+    background-position: right center;
+}
+
+/** 辅助样式 */
+.layui-link {
+    color: #029789 !important;
+}
+
+.layui-link:hover {
+    opacity: .8;
+}
+
+.pull-right {
+    float: right;
+}
+
+.inline-block {
+    display: inline-block;
+}
+
+/** 卡片header里面的徽章样式调整 */
+.layui-card .layui-card-header .layui-badge.pull-right {
+    top: 50%;
+    margin-top: -9px;
+}
+
+/** 特大字体 */
+.lay-big-font {
+    font-size: 36px;
+    color: #666;
+    line-height: 36px;
+    padding: 5px 0 10px;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    word-break: break-all;
+    white-space: nowrap;
+}
+
+/** 超链接样式 */
+.layui-text a:not(.layui-btn) {
+    color: #01AAED;
+}
+
+.layui-text a:not(.layui-btn):hover {
+    text-decoration: underline;
+}
+
+/** loading组件样式 */
+.admin-loading {
+    position: absolute;
+    left: 50%;
+    top: 50%;
+    margin: -16px -15px;
+    font-size: 30px;
+    color: #c2c2c2
+}
+
+/** admin选项卡样式 */
+/** 调整header阴影 */
+.layui-layout-admin.open-tab .layui-header {
+    box-shadow: 0 1px 1px 0 rgba(0, 21, 41, .05);
+}
+
+.layui-layout-admin.open-tab .layui-body {
+    padding: 0;
+    overflow: hidden;
+}
+
+.layui-layout-admin .layui-body .layui-tab {
+    margin: 0;
+    overflow: hidden;
+}
+
+/** 开启选项卡后让tab-content样式为以前的layui-body样式 */
+.layui-layout-admin .layui-body .layui-tab .layui-tab-content .layui-tab-item {
+    position: absolute;
+    bottom: 0;
+    overflow-y: scroll;
+    padding: 15px;
+    right: 0;
+    top: 40px;
+    left: 0;
+}
+
+/** 选项卡标题样式 */
+.layui-layout-admin .layui-body .layui-tab .layui-tab-title {
+    height: 40px;
+    line-height: 40px;
+    padding: 0 80px 0 40px;
+    background-color: #fff;
+    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, .1);
+    position: absolute;
+    right: 0;
+    z-index: 999;
+    border: none;
+    overflow: hidden;
+}
+
+.layui-layout-admin .layui-body .layui-tab .layui-tab-title li {
+    min-width: 0;
+    line-height: 40px;
+    max-width: 160px;
+    text-overflow: ellipsis;
+    overflow: hidden;
+    border-right: 1px solid #f6f6f6;
+    vertical-align: top;
+}
+
+.layui-layout-admin .layui-body .layui-tab .layui-tab-title .layui-tab-bar {
+    display: none;
+}
+
+.layui-layout-admin .layui-body .layui-tab .layui-tab-title li.layui-this,
+.layui-layout-admin .layui-body .layui-tab .layui-tab-title li:hover {
+    background-color: #f6f6f6;
+}
+
+.layui-layout-admin .layui-body .layui-tab .layui-tab-title li.layui-this:after {
+    width: 100%;
+    border: none;
+    height: 2px;
+    background-color: #292B34;
+    border-radius: 0;
+}
+
+/** tab关闭按钮样式 */
+.layui-layout-admin .layui-body .layui-tab .layui-tab-title li .layui-tab-close {
+    width: 16px;
+    height: 16px;
+    line-height: 16px;
+    border-radius: 50%;
+    font-size: 12px;
+}
+
+.layui-layout-admin .layui-body .layui-tab .layui-tab-title li:first-child .layui-tab-close {
+    display: none; /** 第一个选项卡不可关闭 */
+}
+
+/** 选项卡其他操作按钮样式 */
+.layui-layout-admin .layui-body .admin-tabs-control {
+    position: absolute;
+    top: 0;
+    width: 40px;
+    height: 40px;
+    line-height: 40px;
+    text-align: center;
+    cursor: pointer;
+    transition: all .3s;
+    box-sizing: border-box;
+    border-left: 1px solid #f6f6f6;
+    z-index: 1000;
+    visibility: hidden; /** 默认隐藏 */
+    background-color: white;
+}
+
+.layui-layout-admin.open-tab .layui-body .admin-tabs-control {
+    visibility: visible;
+}
+
+.layui-layout-admin .layui-body .admin-tabs-control:hover {
+    background-color: #f6f6f6
+}
+
+.layui-layout-admin .layui-body .layui-icon-prev {
+    left: 0;
+    border-left: none;
+    border-right: 1px solid #f6f6f6;
+}
+
+.layui-layout-admin .layui-body .layui-icon-next {
+    right: 40px;
+}
+
+.layui-layout-admin .layui-body .layui-icon-down {
+    right: 0;
+}
+
+.admin-tabs-select.layui-nav {
+    position: absolute;
+    left: 0;
+    top: 0;
+    width: 100%;
+    height: 100%;
+    padding: 0;
+    background: 0 0;
+}
+
+.admin-tabs-select.layui-nav .layui-nav-item {
+    line-height: 40px
+}
+
+.admin-tabs-select.layui-nav .layui-nav-item > a {
+    height: 40px
+}
+
+.admin-tabs-select.layui-nav .layui-nav-item a {
+    color: #666
+}
+
+.admin-tabs-select.layui-nav .layui-nav-child {
+    top: 40px;
+    left: auto;
+    right: 0
+}
+
+.admin-tabs-select.layui-nav .layui-nav-child dd.layui-this,
+.admin-tabs-select.layui-nav .layui-nav-child dd.layui-this a {
+    background-color: #f2f2f2 !important;
+    color: #333
+}
+
+.admin-tabs-select.layui-nav .layui-nav-bar, .admin-tabs-select.layui-nav .layui-nav-more {
+    display: none;
+}
+
+.layui-fluid {
+    padding: 15px;
+}
+
+body.layui-fluid {
+    overflow-y: scroll;
+}
+
+.admin-iframe {
+    width: 100%;
+    height: 100%;
+}
+
+.layui-layout-admin .layui-body.admin-iframe-body {
+    padding: 0;
+    overflow: hidden;
+}
diff --git a/src/main/resources/static/payapi/css/login.css b/src/main/resources/static/custom/css/login.css
similarity index 100%
rename from src/main/resources/static/payapi/css/login.css
rename to src/main/resources/static/custom/css/login.css
diff --git a/src/main/resources/static/custom/css/theme-blue.css b/src/main/resources/static/custom/css/theme-blue.css
new file mode 100755
index 0000000..476b1bd
--- /dev/null
+++ b/src/main/resources/static/custom/css/theme-blue.css
@@ -0,0 +1,102 @@
+/** logo部分样式 */
+.layui-layout-admin .layui-header .layui-logo {
+    background-color: #0085E8;
+    color: #fff;
+}
+
+/** header样式 */
+.layui-layout-admin .layui-header {
+    background-color: #1E9FFF;
+}
+
+.layui-layout-admin .layui-header a {
+    color: #fff;
+}
+
+.layui-layout-admin .layui-header a:hover {
+    color: #fff;
+}
+
+.layui-layout-admin .layui-header .layui-nav .layui-nav-more {
+    border-color: #fff transparent transparent;
+}
+
+.layui-layout-admin .layui-header .layui-nav .layui-nav-mored {
+    border-color: transparent transparent #fff;
+}
+
+/** 导航栏下面的线条 */
+.layui-layout-admin .layui-header .layui-nav .layui-this:after, .layui-layout-admin .layui-header .layui-nav-bar {
+    background-color: #fff;
+}
+
+/** 侧边栏样式 */
+.layui-layout-admin .layui-side {
+    background-color: #344058;
+}
+
+.layui-nav-tree .layui-nav-child dd.layui-this, .layui-nav-tree .layui-nav-child dd.layui-this a, .layui-nav-tree .layui-this, .layui-nav-tree .layui-this > a, .layui-nav-tree .layui-this > a:hover {
+    background-color: #1E9FFF;
+}
+
+.layui-nav-tree .layui-nav-bar {
+    background-color: #1E9FFF;
+}
+
+/** 主题颜色 */
+
+/** 按钮 */
+.layui-btn:not(.layui-btn-primary):not(.layui-btn-normal):not(.layui-btn-warm):not(.layui-btn-danger):not(.layui-btn-disabled) {
+    background-color: #1E9FFF;
+}
+
+.layui-btn.layui-btn-primary:hover {
+    border-color: #1E9FFF;
+}
+
+/** 开关 */
+.layui-form-onswitch {
+    border-color: #1E9FFF;
+    background-color: #1E9FFF;
+}
+
+/** 分页插件 */
+.layui-laypage .layui-laypage-curr .layui-laypage-em {
+    background-color: #1E9FFF;
+}
+
+.layui-table-page .layui-laypage input:focus {
+    border-color: #1E9FFF !important;
+}
+
+.layui-table-view select:focus {
+    border-color: #1E9FFF !important;
+}
+
+.layui-table-page .layui-laypage a:hover {
+    color: #1E9FFF;
+}
+
+/** 单选按钮 */
+.layui-form-radio > i:hover, .layui-form-radioed > i {
+    color: #1E9FFF;
+}
+
+/** 下拉条目选中 */
+.layui-form-select dl dd.layui-this {
+    background-color: #1E9FFF;
+}
+
+/** 选项卡 */
+.layui-tab-brief > .layui-tab-title .layui-this {
+    color: #1E9FFF;
+}
+
+.layui-tab-brief > .layui-tab-more li.layui-this:after, .layui-tab-brief > .layui-tab-title .layui-this:after {
+    border-color: #1E9FFF !important;
+}
+
+/** 面包屑导航 */
+.layui-breadcrumb a:hover {
+    color: #1E9FFF !important;
+}
\ No newline at end of file
diff --git a/src/main/resources/static/payapi/images/bg_login.png b/src/main/resources/static/custom/images/bg_login.png
similarity index 100%
rename from src/main/resources/static/payapi/images/bg_login.png
rename to src/main/resources/static/custom/images/bg_login.png
Binary files differ
diff --git a/src/main/resources/static/custom/images/head.png b/src/main/resources/static/custom/images/head.png
new file mode 100755
index 0000000..e298c8a
--- /dev/null
+++ b/src/main/resources/static/custom/images/head.png
Binary files differ
diff --git a/src/main/resources/static/payapi/images/logo.png b/src/main/resources/static/custom/images/logo.png
similarity index 100%
rename from src/main/resources/static/payapi/images/logo.png
rename to src/main/resources/static/custom/images/logo.png
Binary files differ
diff --git a/src/main/resources/static/custom/module/admin.js b/src/main/resources/static/custom/module/admin.js
new file mode 100755
index 0000000..898ce05
--- /dev/null
+++ b/src/main/resources/static/custom/module/admin.js
@@ -0,0 +1,327 @@
+layui.define(['layer'], function (exports) {

+    var layer = layui.layer;

+    var popupRightIndex, popupCenterIndex, popupCenterParam;

+

+    var admin = {

+        isRefresh: false,

+        // 设置侧栏折叠

+        flexible: function (expand) {

+            var isExapnd = $('.layui-layout-admin').hasClass('admin-nav-mini');

+            if (isExapnd == !expand) {

+                return;

+            }

+            if (expand) {

+                $('.layui-layout-admin').removeClass('admin-nav-mini');

+            } else {

+                $('.layui-layout-admin').addClass('admin-nav-mini');

+            }

+        },

+        // 设置导航栏选中

+        activeNav: function (url) {

+            $('.layui-layout-admin .layui-side .layui-nav .layui-nav-item .layui-nav-child dd').removeClass('layui-this');

+            $('.layui-layout-admin .layui-side .layui-nav .layui-nav-item').removeClass('layui-this');

+            if (url && url != '') {

+                $('.layui-layout-admin .layui-side .layui-nav .layui-nav-item').removeClass('layui-nav-itemed');

+                var $a = $('.layui-layout-admin .layui-side .layui-nav a[href="#!' + url + '"]');

+                $a.parent('li').addClass('layui-this');

+                $a.parent('dd').addClass('layui-this');

+                $a.parent('dd').parent('.layui-nav-child').parent('.layui-nav-item').addClass('layui-nav-itemed');

+            }

+        },

+        // 右侧弹出

+        popupRight: function (path) {

+            var param = new Object();

+            param.path = path;

+            param.id = 'adminPopupR';

+            param.title = false;

+            param.anim = 2;

+            param.isOutAnim = false;

+            param.closeBtn = false;

+            param.offset = 'r';

+            param.shadeClose = true;

+            param.area = '336px';

+            param.skin = 'layui-layer-adminRight';

+            param.end = function () {

+                layer.closeAll('tips');

+            };

+            popupRightIndex = admin.open(param);

+            return popupRightIndex;

+        },

+        // 关闭右侧弹出

+        closePopupRight: function () {

+            layer.close(popupRightIndex);

+        },

+        // 中间弹出

+        popupCenter: function (param) {

+            param.id = 'adminPopupC';

+            popupCenterParam = param;

+            popupCenterIndex = admin.open(param);

+            return popupCenterIndex;

+        },

+        // 关闭中间弹出并且触发finish回调

+        finishPopupCenter: function () {

+            layer.close(popupCenterIndex);

+            popupCenterParam.finish ? popupCenterParam.finish() : '';

+        },

+        // 关闭中间弹出

+        closePopupCenter: function () {

+            layer.close(popupCenterIndex);

+        },

+        // 封装layer.open

+        open: function (param) {

+            var sCallBack = param.success;

+            param.type = 1;

+            param.area = param.area ? param.area : '450px';

+            param.offset = param.offset ? param.offset : '120px';

+            param.resize ? param.resize : false;

+            param.shade ? param.shade : .2;

+            param.success = function (layero, index) {

+                sCallBack ? sCallBack(layero, index) : '';

+                admin.ajax({

+                    url: param.path,

+                    type: 'GET',

+                    dataType: 'html',

+                    success: function (result, status, xhr) {

+                        $(layero).children('.layui-layer-content').html(result);

+                    }

+                });

+            };

+            return layer.open(param);

+        },

+        

+        go:function(url,data,success){

+        	  $.ajax({

+        		  url: url,

+        		  data: data,

+        		  async: false,

+        		  dataType: 'json',

+        		  type: 'post',

+        		   success: success

+        	  })

+        },

+        dgo:function(url,data,success){

+      	  $.ajax({

+      		  url: url,

+      		  data: data,

+      		  async: false,

+      		  dataType: 'json',

+      		  type: 'get',

+      		   success: success

+      	  })

+      },

+        // 封装ajax请求,返回数据类型为json

+        req: function (url, data, success, method) {

+            admin.ajax({

+                url: url,

+                data: data,

+                async: false,

+                type: method,

+                dataType: 'json',

+                success: success

+            });

+        },

+        // 封装ajax请求

+        ajax: function (param) {

+        	console.log(param);

+            var successCallback = param.success;

+            param.success = function (result, status, xhr) {

+                // 判断登录过期和没有权限

+                var jsonRs;

+                if ('json' == param.dataType.toLowerCase()) {

+                    jsonRs = result;

+                } else if ('html' == param.dataType.toLowerCase() || 'text' == param.dataType.toLowerCase()) {

+                    jsonRs = admin.parseJSON(result);

+                }

+                if (jsonRs) {

+                    if (jsonRs.code == 401) {

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

+                            location.replace('/login');

+                        }, 1000);

+                        return;

+                    } else if ('html' == param.dataType.toLowerCase() && jsonRs.code == 403) {

+                        layer.msg(jsonRs.msg, {icon: 2});

+                    }

+                }

+                successCallback(result, status, xhr);

+            };

+            param.error = function (xhr) {

+                param.success({code: xhr.status, msg: xhr.statusText});

+            };

+            $.ajax(param);

+        },

+        // 显示加载动画

+        showLoading: function (element) {

+            $(element).append('<i class="layui-icon layui-icon-loading layui-anim layui-anim-rotate layui-anim-loop admin-loading"></i>');

+        },

+        // 移除加载动画

+        removeLoading: function (element) {

+            $(element + '>.admin-loading').remove();

+        },

+        // 缓存临时数据

+        putTempData: function (key, value) {

+            if (value) {

+                layui.sessionData('tempData', {key: key, value: value});

+            } else {

+                layui.sessionData('tempData', {key: key, remove: true});

+            }

+        },

+        // 获取缓存临时数据

+        getTempData: function (key) {

+            return layui.sessionData('tempData')[key];

+        },

+        // 滑动选项卡

+        rollPage: function (d) {

+            var $tabTitle = $('.layui-layout-admin .layui-body .layui-tab .layui-tab-title');

+            var left = $tabTitle.scrollLeft();

+            if ('left' === d) {

+                $tabTitle.scrollLeft(left - 120);

+            } else if ('auto' === d) {

+                var autoLeft = 0;

+                $tabTitle.children("li").each(function () {

+                    if ($(this).hasClass('layui-this')) {

+                        return false;

+                    } else {

+                        autoLeft += $(this).outerWidth();

+                    }

+                });

+                $tabTitle.scrollLeft(autoLeft - 47);

+            } else {

+                $tabTitle.scrollLeft(left + 120);

+            }

+        },

+        // 刷新主题部分

+        refresh: function () {

+            admin.isRefresh = true;

+            Q.refresh();

+        },

+        // 判断是否为json

+        parseJSON: function (str) {

+            if (typeof str == 'string') {

+                try {

+                    var obj = JSON.parse(str);

+                    if (typeof obj == 'object' && obj) {

+                        return obj;

+                    }

+                } catch (e) {

+                }

+            }

+        }

+    };

+

+    // ewAdmin提供的事件

+    admin.events = {

+        // 折叠侧导航

+        flexible: function (e) {

+            var expand = $('.layui-layout-admin').hasClass('admin-nav-mini');

+            admin.flexible(expand);

+        },

+        // 刷新主体部分

+        refresh: function () {

+            admin.refresh();

+        },

+        //后退

+        back: function () {

+            history.back();

+        },

+        // 设置主题

+        theme: function () {

+            admin.popupRight('home/theme');

+        },

+        // 全屏

+        fullScreen: function (e) {

+            var ac = 'layui-icon-screen-full', ic = 'layui-icon-screen-restore';

+            var ti = $(this).find('i');

+

+            var isFullscreen = document.fullscreenElement || document.msFullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || false;

+            if (isFullscreen) {

+                var efs = document.exitFullscreen || document.webkitExitFullscreen || document.mozCancelFullScreen || document.msExitFullscreen;

+                if (efs) {

+                    efs.call(document);

+                } else if (window.ActiveXObject) {

+                    var ws = new ActiveXObject('WScript.Shell');

+                    ws && ws.SendKeys('{F11}');

+                }

+                ti.addClass(ac).removeClass(ic);

+            } else {

+                var el = document.documentElement;

+                var rfs = el.requestFullscreen || el.webkitRequestFullscreen || el.mozRequestFullScreen || el.msRequestFullscreen;

+                if (rfs) {

+                    rfs.call(el);

+                } else if (window.ActiveXObject) {

+                    var ws = new ActiveXObject('WScript.Shell');

+                    ws && ws.SendKeys('{F11}');

+                }

+                ti.addClass(ic).removeClass(ac);

+            }

+        },

+        // 左滑动tab

+        leftPage: function () {

+            admin.rollPage("left");

+        },

+        // 右滑动tab

+        rightPage: function () {

+            admin.rollPage();

+        },

+        // 关闭当前选项卡

+        closeThisTabs: function () {

+            var $title = $('.layui-layout-admin .layui-body .layui-tab .layui-tab-title');

+            if ($title.find('li').first().hasClass('layui-this')) {

+                return;

+            }

+            $title.find('li.layui-this').find(".layui-tab-close").trigger("click");

+        },

+        // 关闭其他选项卡

+        closeOtherTabs: function () {

+            $('.layui-layout-admin .layui-body .layui-tab .layui-tab-title li:gt(0):not(.layui-this)').find('.layui-tab-close').trigger('click');

+        },

+        // 关闭所有选项卡

+        closeAllTabs: function () {

+            $('.layui-layout-admin .layui-body .layui-tab .layui-tab-title li:gt(0)').find('.layui-tab-close').trigger('click');

+        },

+        // 关闭所有弹窗

+        closeDialog: function () {

+            layer.closeAll('page');

+        }

+    };

+

+    // 所有ew-event

+    $('body').on('click', '*[ew-event]', function () {

+        var event = $(this).attr('ew-event');

+        var te = admin.events[event];

+        te && te.call(this, $(this));

+    });

+

+    // 移动设备遮罩层点击事件

+    $('.site-mobile-shade').click(function () {

+        admin.flexible(true);

+    });

+

+    // 侧导航折叠状态下鼠标经过显示提示

+    $('body').on('mouseenter', '.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .layui-nav-item>a', function () {

+        var tipText = $(this).find('cite').text();

+        if (document.body.clientWidth > 750) {

+            layer.tips(tipText, this);

+        }

+    }).on('mouseleave', '.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .layui-nav-item>a', function () {

+        layer.closeAll('tips');

+    });

+

+    // 侧导航折叠状态下点击展开

+    $('body').on('click', '.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .layui-nav-item>a', function () {

+        if (document.body.clientWidth > 750) {

+            layer.closeAll('tips');

+            admin.flexible(true);

+        }

+    });

+

+    // 所有lay-tips处理

+    $('body').on('mouseenter', '*[lay-tips]', function () {

+        var tipText = $(this).attr('lay-tips');

+        var dt = $(this).attr('lay-direction');

+        layer.tips(tipText, this, {tips: dt || 1, time: -1});

+    }).on('mouseleave', '*[lay-tips]', function () {

+        layer.closeAll('tips');

+    });

+

+    exports('admin', admin);

+});

diff --git a/src/main/resources/static/custom/module/formSelects/formSelects-v4.all.js b/src/main/resources/static/custom/module/formSelects/formSelects-v4.all.js
new file mode 100755
index 0000000..6599c17
--- /dev/null
+++ b/src/main/resources/static/custom/module/formSelects/formSelects-v4.all.js
@@ -0,0 +1,1415 @@
+'use strict';
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+/**
+ * name: formSelects
+ * 基于Layui Select多选
+ * version: 4.0.0.formSelects
+ * http://sun.faysunshine.com/layui/formSelects-v4/dist/formSelects-v4.js
+ */
+(function (layui, window, factory) {
+	if ((typeof exports === 'undefined' ? 'undefined' : _typeof(exports)) === 'object') {
+		// 支持 CommonJS
+		module.exports = factory();
+	} else if (typeof define === 'function' && define.amd) {
+		// 支持 AMD
+		define(factory);
+	} else if (window.layui && layui.define) {
+		//layui加载
+		layui.define(['jquery'], function (exports) {
+			exports('formSelects', factory());
+		});
+	} else {
+		window.formSelects = factory();
+	}
+})(typeof layui == 'undefined' ? null : layui, window, function () {
+	var v = '4.0.0.formSelects',
+	    NAME = 'xm-select',
+	    PNAME = 'xm-select-parent',
+	    INPUT = 'xm-select-input',
+	    TDIV = 'xm-select--suffix',
+	    THIS = 'xm-select-this',
+	    LABEL = 'xm-select-label',
+	    SEARCH = 'xm-select-search',
+	    CREATE = 'xm-select-create',
+	    CREATE_LONG = 'xm-select-create-long',
+	    MAX = 'xm-select-max',
+	    SKIN = 'xm-select-skin',
+	    DIRECTION = "xm-select-direction",
+	    HEIGHT = 'xm-select-height',
+	    DISABLED = 'xm-dis-disabled',
+	    DIS = 'xm-select-dis',
+	    TEMP = 'xm-select-temp',
+	    RADIO = 'xm-select-radio',
+	    LINKAGE = 'xm-select-linkage',
+	    DL = 'xm-select-dl',
+	    HIDE_INPUT = 'xm-hide-input',
+	    SANJIAO = 'xm-select-sj',
+	    ICON_CLOSE = 'xm-icon-close',
+	    FORM_TITLE = 'xm-select-title',
+	    FORM_SELECT = 'xm-form-select',
+	    FORM_SELECTED = 'xm-form-selected',
+	    FORM_NONE = 'xm-select-none',
+	    FORM_EMPTY = 'xm-select-empty',
+	    FORM_INPUT = 'xm-input',
+	    FORM_SELECT_TIPS = 'xm-select-tips',
+	    CHECKBOX_YES = 'xm-icon-yes',
+	    CZ = 'xm-cz',
+	    CZ_GROUP = 'xm-cz-group',
+	    TIPS = '请选择',
+	    data = {},
+	    events = {
+		on: {},
+		filter: {},
+		maxTips: {}
+	},
+	    ajax = {
+		type: 'get',
+		header: {},
+		first: true,
+		data: {},
+		searchUrl: '',
+		searchName: 'keyword',
+		searchVal: null,
+		keyName: 'name',
+		keyVal: 'value',
+		keySel: 'selected',
+		keyDis: 'disabled',
+		keyChildren: 'children',
+		dataType: '',
+		delay: 500,
+		beforeSuccess: null,
+		success: null,
+		error: null,
+		beforeSearch: null,
+		clearInput: false
+	},
+	    quickBtns = [{ icon: 'iconfont icon-quanxuan', name: '全选', click: function click(id, cm) {
+			cm.selectAll(id, true, true);
+		} }, { icon: 'iconfont icon-qingkong', name: '清空', click: function click(id, cm) {
+			cm.removeAll(id, true, true);
+		} }, { icon: 'iconfont icon-fanxuan', name: '反选', click: function click(id, cm) {
+			cm.reverse(id, true, true);
+		} }, { icon: 'iconfont icon-pifu', name: '换肤', click: function click(id, cm) {
+			cm.skin(id);
+		} }],
+	    $ = window.$ || window.layui && window.layui.jquery,
+	    $win = $(window),
+	    ajaxs = {},
+	    FormSelects = function FormSelects(options) {
+		var _this = this;
+
+		this.config = {
+			name: null, //xm-select="xxx"
+			max: null,
+			maxTips: function maxTips(vals, val, max) {
+				var ipt = $('[xid="' + _this.config.name + '"]').prev().find('.' + NAME);
+				if (ipt.parents('.layui-form-item[pane]').length) {
+					ipt = ipt.parents('.layui-form-item[pane]');
+				}
+				ipt.attr('style', 'border-color: red !important');
+				setTimeout(function () {
+					ipt.removeAttr('style');
+				}, 300);
+			},
+			init: null, //初始化的选择值,
+			on: null, //select值发生变化
+			filter: function filter(id, inputVal, val, isDisabled) {
+				return val.name.indexOf(inputVal) == -1;
+			},
+			clearid: -1,
+			direction: 'auto',
+			height: null,
+			isEmpty: false,
+			btns: [quickBtns[0], quickBtns[1], quickBtns[2]]
+		};
+		this.select = null;
+		this.values = [];
+		$.extend(true, this.config, options);
+	};
+
+	//一些简单的处理方法
+	var Common = function Common() {
+		this.loadingCss();
+		this.appender();
+		this.init();
+		this.on();
+		this.initVal();
+		this.onreset();
+		this.listening();
+	};
+
+	Common.prototype.appender = function () {
+		//针对IE做的一些拓展
+		if (!Array.prototype.map) {
+			Array.prototype.map = function (callback, thisArg) {
+				var T,
+				    A,
+				    k,
+				    O = Object(this),
+				    len = O.length >>> 0;
+				if (thisArg) {
+					T = thisArg;
+				}
+				A = new Array(len);
+				k = 0;
+				while (k < len) {
+					var kValue, mappedValue;
+					if (k in O) {
+						kValue = O[k];
+						mappedValue = callback.call(T, kValue, k, O);
+						A[k] = mappedValue;
+					}
+					k++;
+				}
+				return A;
+			};
+		}
+		if (!Array.prototype.forEach) {
+			Array.prototype.forEach = function forEach(callback, thisArg) {
+				var T, k;
+				if (this == null) {
+					throw new TypeError("this is null or not defined");
+				}
+				var O = Object(this);
+				var len = O.length >>> 0;
+				if (typeof callback !== "function") {
+					throw new TypeError(callback + " is not a function");
+				}
+				if (arguments.length > 1) {
+					T = thisArg;
+				}
+				k = 0;
+				while (k < len) {
+					var kValue;
+					if (k in O) {
+
+						kValue = O[k];
+						callback.call(T, kValue, k, O);
+					}
+					k++;
+				}
+			};
+		}
+	};
+
+	Common.prototype.init = function (target) {
+		var _this2 = this;
+
+		//初始化页面上已有的select
+		$(target ? target : 'select[' + NAME + ']').each(function (index, select) {
+			var othis = $(select),
+			    id = othis.attr(NAME),
+			    hasRender = othis.next('.layui-form-select'),
+			    disabled = select.disabled,
+			    max = othis.attr(MAX) - 0,
+			    isSearch = othis.attr(SEARCH) != undefined,
+			    searchUrl = isSearch ? othis.attr(SEARCH) : null,
+			    isCreate = othis.attr(CREATE) != undefined,
+			    isRadio = othis.attr(RADIO) != undefined,
+			    skin = othis.attr(SKIN),
+			    direction = othis.attr(DIRECTION),
+			    optionsFirst = select.options[0],
+			    height = othis.attr(HEIGHT),
+			    formname = othis.attr('name'),
+			    layverify = othis.attr('lay-verify'),
+			    placeholder = optionsFirst ? optionsFirst.value ? TIPS : optionsFirst.innerHTML || TIPS : TIPS,
+			    value = othis.find('option[selected]').toArray().map(function (option) {
+				//获取已选中的数据
+				return {
+					name: option.innerHTML,
+					val: option.value
+				};
+			}),
+			    fs = new FormSelects();
+			data[id] = fs;
+			//先取消layui对select的渲染
+			hasRender[0] && hasRender.remove();
+
+			//包裹一个div
+			othis.wrap('<div class="' + PNAME + '"></div>');
+
+			//构造渲染div
+			var dinfo = _this2.renderSelect(id, placeholder, select);
+			var heightStyle = height ? 'style="height: ' + height + ';"' : '';
+			var inputHtml = height ? ['<div class="' + LABEL + '" style="margin-right: 50px;"></div>', '<input type="text" fsw class="' + FORM_INPUT + ' ' + INPUT + '" ' + (isSearch ? '' : 'style="display: none;"') + ' autocomplete="off" debounce="0" style="position: absolute;right: 10px;top: 3px;"/>'] : ['<div class="' + LABEL + '">', '<input type="text" fsw class="' + FORM_INPUT + ' ' + INPUT + '" ' + (isSearch ? '' : 'style="display: none;"') + ' autocomplete="off" debounce="0" />', '</div>'];
+			var reElem = $('<div class="' + FORM_SELECT + '" ' + SKIN + '="' + skin + '">\n\t\t\t\t\t<input type="hidden" class="' + HIDE_INPUT + '" value="" name="' + formname + '" lay-verify="' + layverify + '"/>\n\t\t\t\t\t<div class="' + FORM_TITLE + ' ' + (disabled ? DIS : '') + '">\n\t\t\t\t\t\t<div class="' + FORM_INPUT + ' ' + NAME + '" ' + heightStyle + '>\n\t\t\t\t\t\t\t' + inputHtml.join('') + '\n\t\t\t\t\t\t\t<i class="' + SANJIAO + '"></i>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="' + TDIV + '">\n\t\t\t\t\t\t\t<input type="text" autocomplete="off" placeholder="' + placeholder + '" readonly="readonly" unselectable="on" class="' + FORM_INPUT + '">\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div></div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<dl xid="' + id + '" class="' + DL + ' ' + (isRadio ? RADIO : '') + '">' + dinfo + '</dl>\n\t\t\t\t</div>');
+			othis.after(reElem);
+			fs.select = othis.remove(); //去掉layui.form.render
+			fs.values = value;
+			fs.config.name = id;
+			fs.config.init = value.concat([]);
+			fs.config.direction = direction;
+			fs.config.height = height;
+			fs.config.radio = isRadio;
+
+			if (max) {
+				//有最大值
+				fs.config.max = max;
+			}
+
+			//如果可搜索, 加上事件
+			if (isSearch) {
+				reElem.find('.' + INPUT).on('input propertychange', function (e) {
+					var input = e.target,
+					    inputValue = $.trim(input.value),
+					    keyCode = e.keyCode;
+					if (keyCode === 9 || keyCode === 13 || keyCode === 37 || keyCode === 38 || keyCode === 39 || keyCode === 40) {
+						return false;
+					}
+
+					//过滤一下tips
+					_this2.changePlaceHolder($(input));
+
+					var ajaxConfig = ajaxs[id] ? ajaxs[id] : ajax;
+					searchUrl = ajaxConfig.searchUrl || searchUrl;
+					//如果开启了远程搜索
+					if (searchUrl) {
+						if (ajaxConfig.searchVal) {
+							inputValue = ajaxConfig.searchVal;
+							ajaxConfig.searchVal = '';
+						}
+						if (!ajaxConfig.beforeSearch || ajaxConfig.beforeSearch && ajaxConfig.beforeSearch instanceof Function && ajaxConfig.beforeSearch(id, searchUrl, inputValue)) {
+							var delay = ajaxConfig.delay;
+							if (ajaxConfig.first) {
+								ajaxConfig.first = false;
+								delay = 10;
+							}
+							clearTimeout(fs.clearid);
+							fs.clearid = setTimeout(function () {
+								reElem.find('dl > *:not(.' + FORM_SELECT_TIPS + ')').remove();
+								reElem.find('dd.' + FORM_NONE).addClass(FORM_EMPTY).text('请求中');
+								_this2.ajax(id, searchUrl, inputValue, false, null, true);
+							}, delay);
+						}
+					} else {
+						reElem.find('dl .layui-hide').removeClass('layui-hide');
+						//遍历选项, 选择可以显示的值
+						reElem.find('dl dd:not(.' + FORM_SELECT_TIPS + ')').each(function (idx, item) {
+							var _item = $(item);
+							var searchFun = data[id].config.filter || events.filter[id];
+							if (searchFun && searchFun(id, inputValue, {
+								name: _item.find('span').text(),
+								val: _item.attr('lay-value')
+							}, _item.hasClass(DISABLED)) == true) {
+								_item.addClass('layui-hide');
+							}
+						});
+						//控制分组名称
+						reElem.find('dl dt').each(function (index, item) {
+							if (!$(item).nextUntil('dt', ':not(.layui-hide)').length) {
+								$(item).addClass('layui-hide');
+							}
+						});
+						//动态创建
+						_this2.create(id, isCreate, inputValue);
+						var shows = reElem.find('dl dd:not(.' + FORM_SELECT_TIPS + '):not(.layui-hide)');
+						if (!shows.length) {
+							reElem.find('dd.' + FORM_NONE).addClass(FORM_EMPTY).text('无匹配项');
+						} else {
+							reElem.find('dd.' + FORM_NONE).removeClass(FORM_EMPTY);
+						}
+					}
+				});
+				if (searchUrl) {
+					//触发第一次请求事件
+					_this2.triggerSearch(reElem, true);
+				}
+			}
+		});
+	};
+
+	Common.prototype.isArray = function (obj) {
+		return Object.prototype.toString.call(obj) == "[object Array]";
+	};
+
+	Common.prototype.triggerSearch = function (div, isCall) {
+		(div ? [div] : $('.' + FORM_SELECT).toArray()).forEach(function (reElem, index) {
+			reElem = $(reElem);
+			var id = reElem.find('dl').attr('xid');
+			if (id && data[id] && data[id].config.isEmpty || isCall) {
+				var obj_caller = reElem.find('.' + INPUT)[0];
+				if (document.createEventObject) {
+					obj_caller.fireEvent("onchange");
+				} else {
+					var evt = document.createEvent("HTMLEvents");
+					evt.initEvent("input", false, true);
+					obj_caller.dispatchEvent(evt);
+				}
+			}
+		});
+	};
+
+	Common.prototype.ajax = function (id, searchUrl, inputValue, isLinkage, linkageWidth, isSearch) {
+		var _this3 = this;
+
+		var reElem = $('.' + PNAME + ' dl[xid="' + id + '"]').parents('.' + FORM_SELECT);
+		if (!reElem[0] || !searchUrl) {
+			return;
+		}
+
+		var ajaxConfig = ajaxs[id] ? ajaxs[id] : ajax;
+		var ajaxData = $.extend(true, {}, ajaxConfig.data);
+		ajaxData[ajaxConfig.searchName] = inputValue;
+		ajaxData['_'] = Date.now();
+		$.ajax({
+			type: ajaxConfig.type,
+			headers: ajaxConfig.header,
+			url: searchUrl,
+			data: ajaxConfig.dataType == 'json' ? JSON.stringify(ajaxData) : ajaxData,
+			success: function success(res) {
+				if (typeof res == 'string') {
+					res = JSON.parse(res);
+				}
+				ajaxConfig.beforeSuccess && ajaxConfig.beforeSuccess instanceof Function && (res = ajaxConfig.beforeSuccess(id, searchUrl, inputValue, res));
+				if (_this3.isArray(res)) {
+					res = {
+						code: 0,
+						msg: "",
+						data: res
+					};
+				}
+				if (res.code != 0) {
+					reElem.find('dd.' + FORM_NONE).addClass(FORM_EMPTY).text(res.msg);
+				} else {
+					reElem.find('dd.' + FORM_NONE).removeClass(FORM_EMPTY);
+					//获得已选择的values
+					_this3.renderData(id, res.data, isLinkage, linkageWidth, isSearch);
+					data[id].config.isEmpty = res.data.length == 0;
+				}
+				ajaxConfig.success && ajaxConfig.success instanceof Function && ajaxConfig.success(id, searchUrl, inputValue, res);
+			},
+			error: function error(err) {
+				reElem.find('dd[lay-value]:not(.' + FORM_SELECT_TIPS + ')').remove();
+				reElem.find('dd.' + FORM_NONE).addClass(FORM_EMPTY).text('服务异常');
+				ajaxConfig.error && ajaxConfig.error instanceof Function && ajaxConfig.error(id, searchUrl, inputValue, err);
+			}
+		});
+	};
+
+	Common.prototype.renderData = function (id, dataArr, linkage, linkageWidth, isSearch) {
+		var _this4 = this;
+
+		if (linkage) {
+			var _ret = function () {
+				//渲染多级联动
+				var result = [],
+				    index = 0,
+				    temp = { "0": dataArr },
+				    ajaxConfig = ajaxs[id] ? ajaxs[id] : ajax;
+
+				var _loop = function _loop() {
+					var group = result[index++] = [],
+					    _temp = temp;
+					temp = {};
+					$.each(_temp, function (pid, arr) {
+						$.each(arr, function (idx, item) {
+							var val = {
+								pid: pid,
+								name: item[ajaxConfig.keyName],
+								val: item[ajaxConfig.keyVal]
+							};
+							group.push(val);
+							var children = item[ajaxConfig.keyChildren];
+							if (children && children.length) {
+								temp[val.val] = children;
+							}
+						});
+					});
+				};
+
+				do {
+					_loop();
+				} while (Object.getOwnPropertyNames(temp).length);
+
+				var reElem = $('.' + PNAME + ' dl[xid="' + id + '"]').parents('.' + FORM_SELECT);
+				var html = ['<div class="xm-select-linkage">'];
+
+				$.each(result, function (idx, arr) {
+					var groupDiv = ['<div style="left: ' + (linkageWidth - 0) * idx + 'px;" class="xm-select-linkage-group xm-select-linkage-group' + (idx + 1) + ' ' + (idx != 0 ? 'xm-select-linkage-hide' : '') + '">'];
+					$.each(arr, function (idx2, item) {
+						var span = '<li title="' + item.name + '" pid="' + item.pid + '" value="' + item.val + '"><span>' + item.name + '</span></li>';
+						groupDiv.push(span);
+					});
+					groupDiv.push('</div>');
+					html = html.concat(groupDiv);
+				});
+				//			<li class="xm-select-this xm-select-active"><span>123</span></li>
+				html.push('<div style="clear: both; height: 288px;"></div>');
+				html.push('</div>');
+				reElem.find('dl').html(html.join(''));
+				reElem.find('.' + INPUT).css('display', 'none'); //联动暂时不支持搜索
+				return {
+					v: void 0
+				};
+			}();
+
+			if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v;
+		}
+
+		var reElem = $('.' + PNAME + ' dl[xid="' + id + '"]').parents('.' + FORM_SELECT);
+		var ajaxConfig = ajaxs[id] ? ajaxs[id] : ajax;
+		var pcInput = reElem.find('.' + TDIV + ' input');
+
+		var values = [];
+		reElem.find('dl').html(this.renderSelect(id, pcInput.attr('placeholder') || pcInput.attr('back'), dataArr.map(function (item) {
+			if (item[ajaxConfig.keySel]) {
+				values.push({
+					name: item[ajaxConfig.keyName],
+					val: item[ajaxConfig.keyVal]
+				});
+			}
+			return {
+				innerHTML: item[ajaxConfig.keyName],
+				value: item[ajaxConfig.keyVal],
+				sel: item[ajaxConfig.keySel],
+				disabled: item[ajaxConfig.keyDis],
+				type: item.type,
+				name: item.name
+			};
+		})));
+
+		var label = reElem.find('.' + LABEL);
+		var dl = reElem.find('dl[xid]');
+		if (isSearch) {
+			//如果是远程搜索, 这里需要判重
+			var oldVal = data[id].values;
+			oldVal.forEach(function (item, index) {
+				dl.find('dd[lay-value="' + item.val + '"]').addClass(THIS);
+			});
+			values.forEach(function (item, index) {
+				if (_this4.indexOf(oldVal, item) == -1) {
+					_this4.addLabel(id, label, item);
+					dl.find('dd[lay-value="' + item.val + '"]').addClass(THIS);
+					oldVal.push(item);
+				}
+			});
+		} else {
+			values.forEach(function (item, index) {
+				_this4.addLabel(id, label, item);
+				dl.find('dd[lay-value="' + item.val + '"]').addClass(THIS);
+			});
+			data[id].values = values;
+		}
+		this.commonHanler(id, label);
+	};
+
+	Common.prototype.create = function (id, isCreate, inputValue) {
+		if (isCreate && inputValue) {
+			var fs = data[id],
+			    dl = $('[xid="' + id + '"]'),
+			    tips = dl.find('dd.' + FORM_SELECT_TIPS + ':first'),
+			    tdd = null,
+			    temp = dl.find('dd.' + TEMP);
+			dl.find('dd:not(.' + FORM_SELECT_TIPS + '):not(.' + TEMP + ')').each(function (index, item) {
+				if (inputValue == $(item).find('span').text()) {
+					tdd = item;
+				}
+			});
+			if (!tdd) {
+				//如果不存在, 则创建
+				if (temp[0]) {
+					temp.attr('lay-value', inputValue);
+					temp.find('span').text(inputValue);
+					temp.removeClass('layui-hide');
+				} else {
+					tips.after($(this.createDD({
+						innerHTML: inputValue,
+						value: Date.now()
+					}, TEMP + ' ' + CREATE_LONG)));
+				}
+			}
+		} else {
+			$('[xid=' + id + '] dd.' + TEMP).remove();
+		}
+	};
+
+	Common.prototype.createDD = function (item, clz) {
+		return '<dd lay-value="' + item.value + '" class="' + (item.disabled ? DISABLED : '') + ' ' + (clz ? clz : '') + '">\n\t\t\t\t\t<div class="xm-unselect xm-form-checkbox ' + (item.disabled ? 'layui-checkbox-disbaled ' + DISABLED : '') + '" lay-skin="primary">\n\t\t\t\t\t\t<span>' + $.trim(item.innerHTML) + '</span>\n\t\t\t\t\t\t<i class="' + CHECKBOX_YES + '"></i>\n\t\t\t\t\t</div>\n\t\t\t\t</dd>';
+	};
+
+	Common.prototype.createQuickBtn = function (obj, right) {
+		return '<div class="' + CZ + '" method="' + obj.name + '" title="' + obj.name + '" ' + (right ? 'style="margin-right: ' + right + '"' : '') + '><i class="' + obj.icon + '"></i><span>' + obj.name + '</span></div>';
+	};
+
+	Common.prototype.renderBtns = function (id, show, right) {
+		var _this5 = this;
+
+		var quickBtn = [];
+		var dl = $('dl[xid="' + id + '"]');
+		quickBtn.push('<div class="' + CZ_GROUP + '" show="' + show + '" style="max-width: ' + (dl.prev().width() - 54) + 'px;">');
+		$.each(data[id].config.btns, function (index, item) {
+			quickBtn.push(_this5.createQuickBtn(item, right));
+		});
+		quickBtn.push('</div>');
+		quickBtn.push(this.createQuickBtn({ icon: 'iconfont icon-caidan', name: '' }));
+		return quickBtn.join('');
+	};
+
+	Common.prototype.renderSelect = function (id, tips, select) {
+		var _this6 = this;
+
+		var arr = [];
+		if (data[id].config.btns.length) {
+			setTimeout(function () {
+				var dl = $('dl[xid="' + id + '"]');
+				dl.find('.' + CZ_GROUP).css('max-width', dl.prev().width() - 54 + 'px');
+			}, 10);
+			arr.push(['<dd lay-value="" class="' + FORM_SELECT_TIPS + '" style="background-color: #FFF!important;">', this.renderBtns(id, null, '30px'), '</dd>'].join(''));
+		} else {
+			arr.push('<dd lay-value="" class="' + FORM_SELECT_TIPS + '">' + tips + '</dd>');
+		}
+		if (this.isArray(select)) {
+			$(select).each(function (index, item) {
+				if (item.type === 'optgroup') {
+					arr.push('<dt>' + item.name + '</dt>');
+				} else {
+					arr.push(_this6.createDD(item));
+				}
+			});
+		} else {
+			$(select).find('*').each(function (index, item) {
+				if (item.tagName.toLowerCase() == 'option' && index == 0 && !item.value) {
+					return;
+				}
+				if (item.tagName.toLowerCase() === 'optgroup') {
+					arr.push('<dt>' + item.label + '</dt>');
+				} else {
+					arr.push(_this6.createDD(item));
+				}
+			});
+		}
+		arr.push('<dt style="display:none;"> </dt>');
+		arr.push('<dd class="' + FORM_SELECT_TIPS + ' ' + FORM_NONE + ' ' + (arr.length === 2 ? FORM_EMPTY : '') + '">\u6CA1\u6709\u9009\u9879</dd>');
+		return arr.join('');
+	};
+
+	Common.prototype.on = function () {
+		var _this7 = this;
+
+		//事件绑定
+		this.one();
+
+		$(document).on('click', function (e) {
+			if (!$(e.target).parents('.' + FORM_TITLE)[0]) {
+				//清空input中的值
+				$('.' + INPUT).val('');
+				$('.' + PNAME + ' dl .layui-hide').removeClass('layui-hide');
+				$('.' + PNAME + ' dl dd.' + TEMP).remove();
+				_this7.triggerSearch();
+			}
+			$('.' + PNAME + ' .' + FORM_SELECTED).removeClass(FORM_SELECTED);
+		});
+	};
+
+	Common.prototype.one = function (target) {
+		var _this8 = this;
+
+		//一次性事件绑定
+		$(target ? target : document).find('.' + FORM_TITLE).off('click').on('click', function (e) {
+			var othis = $(e.target),
+			    title = othis.is(FORM_TITLE) ? othis : othis.parents('.' + FORM_TITLE),
+			    dl = title.next(),
+			    id = dl.attr('xid');
+
+			//清空非本select的input val
+			$('dl[xid]').not(dl).prev().find('.' + INPUT).val('');
+			$('dl[xid]').not(dl).find('dd.layui-hide').removeClass('layui-hide');
+
+			//如果是disabled select
+			if (title.hasClass(DIS)) {
+				return false;
+			}
+			//如果点击的是右边的三角或者只读的input
+			if (othis.is('.' + SANJIAO) || othis.is('.' + INPUT + '[readonly]')) {
+				_this8.changeShow(title, !title.parents('.' + FORM_SELECT).hasClass(FORM_SELECTED));
+				return false;
+			}
+			//如果点击的是input的右边, focus一下
+			if (title.find('.' + INPUT + ':not(readonly)')[0]) {
+				var input = title.find('.' + INPUT),
+				    epos = { x: e.pageX, y: e.pageY },
+				    pos = _this8.getPosition(title[0]),
+				    width = title.width();
+				while (epos.x > pos.x) {
+					if ($(document.elementFromPoint(epos.x, epos.y)).is(input)) {
+						input.focus();
+						_this8.changeShow(title, true);
+						return false;
+					}
+					epos.x -= 50;
+				}
+			}
+
+			//如果点击的是可搜索的input
+			if (othis.is('.' + INPUT)) {
+				_this8.changeShow(title, true);
+				return false;
+			}
+			//如果点击的是x按钮
+			if (othis.is('i[fsw="' + NAME + '"]')) {
+				var val = {
+					name: othis.prev().text(),
+					val: othis.parent().attr("value")
+				},
+				    dd = dl.find('dd[lay-value=\'' + val.val + '\']');
+				if (dd.hasClass(DISABLED)) {
+					//如果是disabled状态, 不可选, 不可删
+					return false;
+				}
+				_this8.handlerLabel(id, dd, false, val);
+				return false;
+			}
+
+			_this8.changeShow(title, !title.parents('.' + FORM_SELECT).hasClass(FORM_SELECTED));
+			return false;
+		});
+		$(target ? target : document).find('dl.' + DL).off('click').on('click', function (e) {
+			var othis = $(e.target);
+			if (othis.is('.' + LINKAGE) || othis.parents('.' + LINKAGE)[0]) {
+				//linkage的处理
+				othis = othis.is('li') ? othis : othis.parents('li');
+				var _group = othis.parents('.xm-select-linkage-group'),
+				    _id = othis.parents('dl').attr('xid');
+				//激活li
+				_group.find('.xm-select-active').removeClass('xm-select-active');
+				othis.addClass('xm-select-active');
+				//激活下一个group, 激活前显示对应数据
+				_group.nextAll('.xm-select-linkage-group').addClass('xm-select-linkage-hide');
+				var nextGroup = _group.next('.xm-select-linkage-group');
+				nextGroup.find('li').addClass('xm-select-linkage-hide');
+				nextGroup.find('li[pid="' + othis.attr('value') + '"]').removeClass('xm-select-linkage-hide');
+				//如果没有下一个group, 或没有对应的值
+				if (!nextGroup[0] || nextGroup.find('li:not(.xm-select-linkage-hide)').length == 0) {
+					var vals = [],
+					    index = 0,
+					    _isAdd = !othis.hasClass('xm-select-this');
+					if (data[_id].config.radio) {
+						othis.parents('.xm-select-linkage').find('.xm-select-this').removeClass('xm-select-this');
+					}
+					do {
+						vals[index++] = {
+							name: othis.find('span').text(),
+							val: othis.attr('value')
+							/*isAdd ? (
+       	othis.addClass('xm-select-this')
+       ) : (
+       	!othis.parent('.xm-select-linkage-group').next().find(`li[pid="${othis.attr('value')}"].xm-select-this`).length && othis.removeClass('xm-select-this')
+       );*/
+						};othis = othis.parents('.xm-select-linkage-group').prev().find('li[value="' + othis.attr('pid') + '"]');
+					} while (othis.length);
+					vals.reverse();
+					var val = {
+						name: vals.map(function (item) {
+							return item.name;
+						}).join('/'),
+						val: vals.map(function (item) {
+							return item.val;
+						}).join('/')
+					};
+					_this8.handlerLabel(_id, null, _isAdd, val);
+				} else {
+					nextGroup.removeClass('xm-select-linkage-hide');
+				}
+				return false;
+			} //xm-select-this xm-select-active
+
+			if (othis.is('dt') || othis.is('dl')) {
+				return false;
+			}
+			var dd = othis.is('dd') ? othis : othis.parents('dd');
+			var id = dd.parent('dl').attr('xid');
+			if (dd.hasClass(DISABLED)) {
+				//被禁用选项的处理
+				return false;
+			}
+			if (dd.hasClass(FORM_SELECT_TIPS)) {
+				//tips的处理
+				var btn = othis.is('.' + CZ) ? othis : othis.parents('.' + CZ);
+				if (!btn[0]) {
+					return false;
+				}
+				//TODO 快捷操作
+				var method = btn.attr('method');
+				var obj = data[id].config.btns.filter(function (bean) {
+					return bean.name == method;
+				})[0];
+				obj && obj.click && obj.click instanceof Function && obj.click(id, _this8);
+				return false;
+			}
+			var isAdd = !dd.hasClass(THIS);
+			_this8.handlerLabel(id, dd, isAdd);
+			return false;
+		});
+	};
+
+	Common.prototype.linkageAdd = function (id, val) {
+		var dl = $('dl[xid="' + id + '"]');
+		dl.find('.xm-select-active').removeClass('xm-select-active');
+		var vs = val.val.split('/');
+		var pid = void 0,
+		    li = void 0,
+		    index = 0;
+		var lis = [];
+		do {
+			pid = vs[index];
+			li = dl.find('.xm-select-linkage-group' + (index + 1) + ' li[value="' + pid + '"]');
+			li[0] && lis.push(li);
+			index++;
+		} while (li.length && pid != undefined);
+		if (lis.length == vs.length) {
+			$.each(lis, function (idx, item) {
+				item.addClass('xm-select-this');
+			});
+		}
+	};
+
+	Common.prototype.linkageDel = function (id, val) {
+		var dl = $('dl[xid="' + id + '"]');
+		var vs = val.val.split('/');
+		var pid = void 0,
+		    li = void 0,
+		    index = vs.length - 1;
+		do {
+			pid = vs[index];
+			li = dl.find('.xm-select-linkage-group' + (index + 1) + ' li[value="' + pid + '"]');
+			if (!li.parent().next().find('li[pid=' + pid + '].xm-select-this').length) {
+				li.removeClass('xm-select-this');
+			}
+			index--;
+		} while (li.length && pid != undefined);
+	};
+
+	Common.prototype.valToName = function (id, val) {
+		var dl = $('dl[xid="' + id + '"]');
+		var vs = (val + "").split('/');
+		var names = [];
+		$.each(vs, function (idx, item) {
+			var name = dl.find('.xm-select-linkage-group' + (idx + 1) + ' li[value="' + item + '"] span').text();
+			names.push(name);
+		});
+		return names.length == vs.length ? names.join('/') : null;
+	};
+
+	Common.prototype.commonHanler = function (key, label) {
+		//计算input的提示语
+		this.changePlaceHolder(label);
+		//计算高度
+		this.retop(label.parents('.' + FORM_SELECT));
+		this.checkHideSpan(label);
+		this.calcLeft(key, label);
+		//表单默认值
+		label.parents('.' + PNAME).find('.' + HIDE_INPUT).val(data[key].values.map(function (val) {
+			return val.val;
+		}).join(','));
+		//title值
+		label.parents('.' + FORM_TITLE + ' .' + NAME).attr('title', data[key].values.map(function (val) {
+			return val.name;
+		}).join(','));
+	};
+
+	Common.prototype.initVal = function (id) {
+		var _this9 = this;
+
+		var target = {};
+		if (id) {
+			target[id] = data[id];
+		} else {
+			target = data;
+		}
+		$.each(target, function (key, val) {
+			var values = val.values,
+			    div = $('dl[xid="' + key + '"]').parent(),
+			    label = div.find('.' + LABEL),
+			    dl = div.find('dl');
+			dl.find('dd.' + THIS).removeClass(THIS);
+
+			var _vals = values.concat([]);
+			_vals.concat([]).forEach(function (item, index) {
+				_this9.addLabel(key, label, item);
+				dl.find('dd[lay-value="' + item.val + '"]').addClass(THIS);
+			});
+			if (val.config.radio) {
+				_vals.length && values.push(_vals[_vals.length - 1]);
+			}
+			_this9.commonHanler(key, label);
+		});
+	};
+
+	Common.prototype.handlerLabel = function (id, dd, isAdd, oval, notOn) {
+		var div = $('[xid="' + id + '"]').prev().find('.' + LABEL),
+		    val = dd && {
+			name: dd.find('span').text(),
+			val: dd.attr('lay-value')
+		},
+		    vals = data[id].values,
+		    on = data[id].config.on || events.on[id];
+		if (oval) {
+			val = oval;
+		}
+		var fs = data[id];
+		if (isAdd && fs.config.max && fs.values.length >= fs.config.max) {
+			var maxTipsFun = data[id].config.maxTips || events.maxTips[id];
+			maxTipsFun && maxTipsFun(id, vals.concat([]), val, fs.max);
+			return;
+		}
+		if (!notOn) {
+			if (on && on instanceof Function && on(id, vals.concat([]), val, isAdd, dd && dd.hasClass(DISABLED) == false)) {
+				return;
+			}
+		}
+		var dl = $('dl[xid="' + id + '"]');
+		isAdd ? (dd && dd[0] ? (dd.addClass(THIS), dd.removeClass(TEMP)) : dl.find('.xm-select-linkage')[0] && this.linkageAdd(id, val), this.addLabel(id, div, val), vals.push(val)) : (dd && dd[0] ? dd.removeClass(THIS) : dl.find('.xm-select-linkage')[0] && this.linkageDel(id, val), this.delLabel(id, div, val), this.remove(vals, val));
+		if (!div[0]) return;
+		//单选选完后直接关闭选择域
+		if (fs.config.radio) {
+			this.changeShow(div, false);
+		}
+		//移除表单验证的红色边框
+		div.parents('.' + FORM_TITLE).prev().removeClass('layui-form-danger');
+
+		//清空搜索值
+		fs.config.clearInput && div.parents('.' + PNAME).find('.' + INPUT).val('');
+
+		this.commonHanler(id, div);
+	};
+
+	Common.prototype.addLabel = function (id, div, val) {
+		if (!val) return;
+		var tips = 'fsw="' + NAME + '"';
+		var _ref = [$('<span ' + tips + ' value="' + val.val + '"><font ' + tips + '>' + val.name + '</font></span>'), $('<i ' + tips + ' class="xm-icon-close">\xD7</i>')],
+		    $label = _ref[0],
+		    $close = _ref[1];
+
+		$label.append($close);
+		//如果是radio模式
+		var fs = data[id];
+		if (fs.config.radio) {
+			fs.values.length = 0;
+			$('dl[xid="' + id + '"]').find('dd.' + THIS + ':not([lay-value="' + val.val + '"])').removeClass(THIS);
+			div.find('span').remove();
+		}
+		//如果是固定高度
+		if (fs.config.height) {
+			div.append($label);
+		} else {
+			div.find('input').css('width', '50px');
+			div.find('input').before($label);
+		}
+	};
+
+	Common.prototype.delLabel = function (id, div, val) {
+		if (!val) return;
+		div.find('span[value="' + val.val + '"]:first').remove();
+	};
+
+	Common.prototype.calcLeft = function (id, div) {
+		if (data[id].config.height) {
+			var showLastSpan = div.find('span:not(.xm-span-hide):last')[0];
+			div.next().css('left', (showLastSpan ? this.getPosition(showLastSpan).x - this.getPosition(div[0]).x + showLastSpan.offsetWidth + 20 : 10) + 'px');
+		}
+	};
+
+	Common.prototype.checkHideSpan = function (div) {
+		var _this10 = this;
+
+		var parentHeight = div.parents('.' + NAME)[0].offsetHeight + 5;
+		div.find('span.xm-span-hide').removeClass('xm-span-hide');
+		div.find('span').each(function (index, item) {
+			if (item.offsetHeight + item.offsetTop > parentHeight || _this10.getPosition(item).y + item.offsetHeight > _this10.getPosition(div[0]).y + div[0].offsetHeight + 5) {
+				$(item).addClass('xm-span-hide');
+			}
+		});
+	};
+
+	Common.prototype.retop = function (div) {
+		//计算dl显示的位置
+		var dl = div.find('dl'),
+		    top = div.offset().top + div.outerHeight() + 5 - $win.scrollTop(),
+		    dlHeight = dl.outerHeight();
+		var up = div.hasClass('layui-form-selectup') || dl.css('top').indexOf('-') != -1 || top + dlHeight > $win.height() && top >= dlHeight;
+		div = div.find('.' + NAME);
+
+		var fs = data[dl.attr('xid')];
+		var base = dl.parents('.layui-form-pane')[0] && dl.prev()[0].clientHeight > 38 ? 14 : 10;
+		if (fs) {
+			if (fs.config.direction == 'up') {
+				dl.css({
+					top: 'auto',
+					bottom: '42px'
+				});
+				return;
+			}
+			if (fs.direction == 'down') {
+				dl.css({
+					top: div[0].offsetTop + div.height() + base + 'px',
+					bottom: 'auto'
+				});
+				return;
+			}
+		}
+
+		if (up) {
+			dl.css({
+				top: 'auto',
+				bottom: '42px'
+			});
+		} else {
+			dl.css({
+				top: div[0].offsetTop + div.height() + base + 'px',
+				bottom: 'auto'
+			});
+		}
+	};
+
+	Common.prototype.changeShow = function (children, isShow) {
+		//显示于隐藏
+		var top = children.parents('.' + FORM_SELECT);
+		$('.' + PNAME + ' .' + FORM_SELECT).not(top).removeClass(FORM_SELECTED);
+		if (isShow) {
+			this.retop(top);
+			top.addClass(FORM_SELECTED);
+			top.find('.' + INPUT).focus();
+		} else {
+			top.removeClass(FORM_SELECTED);
+			top.find('.' + INPUT).val('');
+			top.find('dl .layui-hide').removeClass('layui-hide');
+			top.find('dl dd.' + TEMP).remove();
+			//计算ajax数据是否为空, 然后重新请求数据
+			var id = top.find('dl').attr('xid');
+			if (id && data[id] && data[id].config.isEmpty) {
+				this.triggerSearch(top);
+			}
+		}
+	};
+
+	Common.prototype.changePlaceHolder = function (div) {
+		//显示于隐藏提示语
+		//调整pane模式下的高度
+		var title = div.parents('.' + FORM_TITLE);
+
+		var id = div.parents('.' + PNAME).find('dl[xid]').attr('xid');
+		if (data[id] && data[id].config.height) {//既然固定高度了, 那就看着办吧
+
+		} else {
+			var height = title.find('.' + NAME)[0].clientHeight;
+			title.css('height', (height > 34 ? height + 4 : height) + 'px');
+			//如果是layui pane模式, 处理label的高度
+			var label = title.parents('.' + PNAME).parent().prev();
+			if (label.is('.layui-form-label') && title.parents('.layui-form-pane')[0]) {
+				height = height > 36 ? height + 4 : height;
+				title.css('height', height + 'px');
+				label.css({
+					height: height + 2 + 'px',
+					lineHeight: height - 18 + 'px'
+				});
+			}
+		}
+
+		var input = title.find('.' + TDIV + ' input'),
+		    isShow = !div.find('span:last')[0] && !title.find('.' + INPUT).val();
+		if (isShow) {
+			var ph = input.attr('back');
+			input.removeAttr('back');
+			input.attr('placeholder', ph);
+		} else {
+			var _ph = input.attr('placeholder');
+			input.removeAttr('placeholder');
+			input.attr('back', _ph);
+		}
+	};
+
+	Common.prototype.indexOf = function (arr, val) {
+		for (var i = 0; i < arr.length; i++) {
+			if (arr[i].val == val || arr[i].val == (val ? val.val : val) || arr[i] == val || JSON.stringify(arr[i]) == JSON.stringify(val)) {
+				return i;
+			}
+		}
+		return -1;
+	};
+
+	Common.prototype.remove = function (arr, val) {
+		var idx = this.indexOf(arr, val ? val.val : val);
+		if (idx > -1) {
+			arr.splice(idx, 1);
+			return true;
+		}
+		return false;
+	};
+
+	Common.prototype.selectAll = function (id, isOn, skipDis) {
+		var _this11 = this;
+
+		var dl = $('[xid="' + id + '"]');
+		if (dl.find('.xm-select-linkage')[0]) {
+			return;
+		}
+		dl.find('dd[lay-value]:not(.' + FORM_SELECT_TIPS + '):not(.' + THIS + ')' + (skipDis ? ':not(.' + DISABLED + ')' : '')).each(function (index, item) {
+			item = $(item);
+			var val = {
+				name: item.find('span').text(),
+				val: item.attr('lay-value')
+			};
+			_this11.handlerLabel(id, dl.find('dd[lay-value="' + val.val + '"]'), true, val, !isOn);
+		});
+	};
+
+	Common.prototype.removeAll = function (id, isOn, skipDis) {
+		var _this12 = this;
+
+		var dl = $('[xid="' + id + '"]');
+		if (dl.find('.xm-select-linkage')[0]) {
+			//针对多级联动的处理
+			data[id].values.concat([]).forEach(function (item, idx) {
+				var vs = item.val.split('/');
+				var pid = void 0,
+				    li = void 0,
+				    index = 0;
+				do {
+					pid = vs[index++];
+					li = dl.find('.xm-select-linkage-group' + index + ':not(.xm-select-linkage-hide) li[value="' + pid + '"]');
+					li.click();
+				} while (li.length && pid != undefined);
+			});
+			return;
+		}
+		data[id].values.concat([]).forEach(function (item, index) {
+			if (skipDis && dl.find('dd[lay-value="' + item.val + '"]').hasClass(DISABLED)) {} else {
+				_this12.handlerLabel(id, dl.find('dd[lay-value="' + item.val + '"]'), false, item, !isOn);
+			}
+		});
+	};
+
+	Common.prototype.reverse = function (id, isOn, skipDis) {
+		var _this13 = this;
+
+		var dl = $('[xid="' + id + '"]');
+		if (dl.find('.xm-select-linkage')[0]) {
+			return;
+		}
+		dl.find('dd[lay-value]:not(.' + FORM_SELECT_TIPS + ')' + (skipDis ? ':not(.' + DISABLED + ')' : '')).each(function (index, item) {
+			item = $(item);
+			var val = {
+				name: item.find('span').text(),
+				val: item.attr('lay-value')
+			};
+			_this13.handlerLabel(id, dl.find('dd[lay-value="' + val.val + '"]'), !item.hasClass(THIS), val, !isOn);
+		});
+	};
+
+	Common.prototype.skin = function (id) {
+		var skins = ['default', 'primary', 'normal', 'warm', 'danger'];
+		var skin = skins[Math.floor(Math.random() * skins.length)];
+		$('dl[xid="' + id + '"]').parents('.' + PNAME).find('.' + FORM_SELECT).attr('xm-select-skin', skin);
+		this.commonHanler(id, $('dl[xid="' + id + '"]').parents('.' + PNAME).find('.' + LABEL));
+	};
+
+	Common.prototype.getPosition = function (e) {
+		var x = 0,
+		    y = 0;
+		while (e != null) {
+			x += e.offsetLeft;
+			y += e.offsetTop;
+			e = e.offsetParent;
+		}
+		return { x: x, y: y };
+	};
+
+	Common.prototype.onreset = function () {
+		//监听reset按钮, 然后重置多选
+		$(document).on('click', '[type=reset]', function (e) {
+			$(e.target).parents('form').find('.' + PNAME + ' dl[xid]').each(function (index, item) {
+				var id = item.getAttribute('xid'),
+				    dl = $(item),
+				    dd = void 0,
+				    temp = {};
+				common.removeAll(id);
+				data[id].config.init.forEach(function (val, idx) {
+					if (val && (!temp[val] || data[id].config.repeat) && (dd = dl.find('dd[lay-value="' + val.val + '"]'))[0]) {
+						common.handlerLabel(id, dd, true);
+						temp[val] = 1;
+					}
+				});
+			});
+		});
+	};
+
+	Common.prototype.loadingCss = function () {
+		var cssStyle = $('<style type="text/css">' + '.xm-select-parent *{margin:0;padding:0;font-family:"Helvetica Neue",Helvetica,"PingFang SC",\u5FAE\u8F6F\u96C5\u9ED1,Tahoma,Arial,sans-serif}.xm-select-parent{text-align:left}.xm-select-parent select{display:none}.xm-select-parent .xm-select-title{position:relative;min-height:36px}.xm-select-parent .xm-input{cursor:pointer;border-radius:2px;border-width:1px;border-style:solid;border-color:#E6E6E6;display:block;width:100%;box-sizing:border-box;background-color:#FFF;height:36px;line-height:1.3;padding-left:10px;outline:0}.xm-select-parent .xm-select-sj{display:inline-block;width:0;height:0;border-style:dashed;border-color:transparent;overflow:hidden;position:absolute;right:10px;top:50%;margin-top:-3px;cursor:pointer;border-width:6px;border-top-color:#C2C2C2;border-top-style:solid;transition:all .3s;-webkit-transition:all .3s}.xm-select-parent .xm-form-selected .xm-select-sj{margin-top:-9px;transform:rotate(180deg)}.xm-select-parent .xm-form-select dl{display:none;position:absolute;left:0;top:42px;padding:5px 0;z-index:999;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;animation-fill-mode:both;-webkit-animation-name:layui-upbit;animation-name:layui-upbit;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both}@-webkit-keyframes layui-upbit{from{-webkit-transform:translate3d(0,30px,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes layui-upbit{from{transform:translate3d(0,30px,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.xm-select-parent .xm-form-selected dl{display:block}.xm-select-parent .xm-form-select dl dd,.xm-select-parent .xm-form-select dl dt{padding:0 10px;line-height:36px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.xm-select-parent .xm-form-select dl dd{cursor:pointer;height:36px}.xm-select-parent .xm-form-select dl dd:hover{background-color:#f2f2f2}.xm-select-parent .xm-form-select dl dt{font-size:12px;color:#999}.layui-select-disabled .xm-dis-disabled{border-color:#eee!important}.xm-select-parent .xm-form-select dl .xm-select-tips{padding-left:10px!important;color:#999;font-size:14px}.xm-unselect{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.xm-form-checkbox{position:relative;display:inline-block;vertical-align:middle;height:30px;line-height:30px;margin-right:10px;padding-right:30px;background-color:#fff;cursor:pointer;font-size:0;-webkit-transition:.1s linear;transition:.1s linear;box-sizing:border-box}.xm-form-checkbox *{display:inline-block;vertical-align:middle}.xm-form-checkbox span{padding:0 10px;height:100%;font-size:14px;border-radius:2px 0 0 2px;background-color:#d2d2d2;color:#fff;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.xm-form-checkbox:hover span{background-color:#c2c2c2}.xm-form-checkbox i{position:absolute;right:0;top:0;width:30px;height:28px;border:1px solid #d2d2d2;border-left:none;border-radius:0 2px 2px 0;color:#fff;font-size:20px;text-align:center}.xm-form-checkbox:hover i{border-color:#c2c2c2;color:#c2c2c2}.xm-form-checkbox[lay-skin=primary]{height:auto!important;line-height:normal!important;border:none!important;margin-right:0;padding-right:0;background:0 0}.xm-form-checkbox[lay-skin=primary] span{float:right;padding-right:15px;line-height:18px;background:0 0;color:#666}.xm-form-checkbox[lay-skin=primary] i{position:relative;top:0;width:16px;height:16px;line-height:16px;border:1px solid #d2d2d2;font-size:12px;border-radius:2px;background-color:#fff;-webkit-transition:.1s linear;transition:.1s linear}.xm-form-checkbox[lay-skin=primary]:hover i{border-color:#5FB878;color:#fff}.xm-icon-yes{width:30px;height:30px;border-radius:4px;background-color:#009688;position:relative}.xm-icon-yes:after{content:\'\';display:inline-block;border:2px solid #fff;border-top-width:0;border-right-width:0;width:9px;height:5px;-webkit-transform:rotate(-50deg);transform:rotate(-50deg);position:absolute;top:2px;left:3px}.xm-dis-disabled,.xm-dis-disabled:hover{color:#d2d2d2!important;cursor:not-allowed!important}.xm-form-select dl dd.xm-dis-disabled{background-color:#fff!important}.xm-form-select dl dd.xm-dis-disabled span{color:#C2C2C2}.xm-form-select dl dd.xm-dis-disabled .xm-icon-yes{border-color:#C2C2C2}.xm-select-parent{position:relative;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none}.xm-select-parent .xm-select{line-height:normal;height:auto;padding:4px 10px 1px 10px;overflow:hidden;min-height:36px;left:0;z-index:99;position:absolute;background:0 0;padding-right:20px}.xm-select-parent .xm-select:hover{border-color:#C0C4CC}.xm-select-parent .xm-select .xm-select-label{display:inline-block;margin:0;vertical-align:middle}.xm-select-parent .xm-select-title div.xm-select-label>span{position:relative;padding:2px 5px;background-color:#009688;border-radius:2px;color:#FFF;display:inline-block;line-height:18px;height:18px;margin:2px 5px 2px 0;cursor:initial;user-select:none;font-size:14px;padding-right:25px}.xm-select-parent .xm-select-title div.xm-select-label>span i{position:absolute;right:5px;top:2px;margin-left:8px;border-radius:20px;font-size:18px;cursor:pointer;display:inline-block;height:14px;line-height:15px;width:12px;vertical-align:top;margin-top:2px}.xm-select-parent .xm-select .xm-select-input{border:none;height:28px;background-color:transparent;padding:0;vertical-align:middle;display:inline-block;width:50px}.xm-select-parent .xm-select--suffix input{border:none}.xm-select-parent dl dd.xm-dis-disabled.xm-select-this i{border-color:#C2C2C2;background-color:#C2C2C2;color:#FFF}.xm-select-parent dl dd.xm-select-this i{background-color:#009688;border-color:#009688}.xm-form-selected .xm-select,.xm-form-selected .xm-select:hover{border-color:#009688!important}.xm-select--suffix+div{position:absolute;top:0;left:0;bottom:0;right:0}.xm-select-dis .xm-select--suffix+div{z-index:100;cursor:no-drop!important;opacity:.2;background-color:#FFF}.xm-select-disabled,.xm-select-disabled:hover{color:#d2d2d2!important;cursor:not-allowed!important;background-color:#fff}.xm-select-none{display:none;margin:5px 0;text-align:center}.xm-select-none:hover{background-color:#FFF!important}.xm-select-empty{display:block}.xm-span-hide{display:none!important}.xm-select-radio .xm-icon-yes{border-radius:20px!important}.xm-select-radio .xm-icon-yes:after{border-radius:20px;background-color:#fff;width:6px;height:6px;border:none;top:5px;left:5px}.layui-form-pane .xm-select,.layui-form-pane .xm-select:hover{border:none!important;top:0}.layui-form-pane .xm-select-title{border:1px solid #e6e6e6!important}div[xm-select-skin] .xm-select-title div.xm-select-label>span{border:1px solid #009688}div[xm-select-skin] .xm-select-title div.xm-select-label>span i:hover{opacity:.8;filter:alpha(opacity=80);cursor:pointer}div[xm-select-skin=default] .xm-select-title div.xm-select-label>span{background-color:#F0F2F5;color:#909399;border:1px solid #F0F2F5}div[xm-select-skin=default] .xm-select-title div.xm-select-label>span i{background-color:#C0C4CC;color:#FFF}div[xm-select-skin=default] dl dd.xm-select-this:not(.xm-dis-disabled) i{background-color:#5FB878;border-color:#5FB878;color:#FFF}div[xm-select-skin=default].xm-form-selected .xm-select,div[xm-select-skin=default].xm-form-selected .xm-select:hover{border-color:#C0C4CC!important}div[xm-select-skin=primary] .xm-select-title div.xm-select-label>span{background-color:#009688;color:#FFF;border:1px solid #009688}div[xm-select-skin=primary] .xm-select-title div.xm-select-label>span i{background-color:#009688;color:#FFF}div[xm-select-skin=primary] dl dd.xm-select-this:not(.xm-dis-disabled) i{background-color:#009688;border-color:#009688;color:#FFF}div[xm-select-skin=primary].xm-form-selected .xm-select,div[xm-select-skin=primary].xm-form-selected .xm-select:hover{border-color:#009688!important}div[xm-select-skin=normal] .xm-select-title div.xm-select-label>span{background-color:#1E9FFF;color:#FFF;border:1px solid #1E9FFF}div[xm-select-skin=normal] .xm-select-title div.xm-select-label>span i{background-color:#1E9FFF;color:#FFF}div[xm-select-skin=normal] dl dd.xm-select-this:not(.xm-dis-disabled) i{background-color:#1E9FFF;border-color:#1E9FFF;color:#FFF}div[xm-select-skin=normal].xm-form-selected .xm-select,div[xm-select-skin=normal].xm-form-selected .xm-select:hover{border-color:#1E9FFF!important}div[xm-select-skin=warm] .xm-select-title div.xm-select-label>span{background-color:#FFB800;color:#FFF;border:1px solid #FFB800}div[xm-select-skin=warm] .xm-select-title div.xm-select-label>span i{background-color:#FFB800;color:#FFF}div[xm-select-skin=warm] dl dd.xm-select-this:not(.xm-dis-disabled) i{background-color:#FFB800;border-color:#FFB800;color:#FFF}div[xm-select-skin=warm].xm-form-selected .xm-select,div[xm-select-skin=warm].xm-form-selected .xm-select:hover{border-color:#FFB800!important}div[xm-select-skin=danger] .xm-select-title div.xm-select-label>span{background-color:#FF5722;color:#FFF;border:1px solid #FF5722}div[xm-select-skin=danger] .xm-select-title div.xm-select-label>span i{background-color:#FF5722;color:#FFF}div[xm-select-skin=danger] dl dd.xm-select-this:not(.xm-dis-disabled) i{background-color:#FF5722;border-color:#FF5722;color:#FFF}div[xm-select-skin=danger].xm-form-selected .xm-select,div[xm-select-skin=danger].xm-form-selected .xm-select:hover{border-color:#FF5722!important}.xm-select-parent .layui-form-danger+.xm-select-title .xm-select{border-color:#FF5722!important}.xm-select-linkage li{padding:10px 0;cursor:pointer}.xm-select-linkage li span{padding-left:20px;padding-right:30px;display:inline-block;height:20px;overflow:hidden;text-overflow:ellipsis}.xm-select-linkage li.xm-select-this span{border-left:5px solid #009688;color:#009688;padding-left:15px}.xm-select-linkage-group{position:absolute;left:0;top:0;right:0;bottom:0;overflow-x:hidden;overflow-y:auto}.xm-select-linkage-group li:hover{border-left:1px solid #009688}.xm-select-linkage-group li:hover span{padding-left:19px}.xm-select-linkage-group li.xm-select-this:hover span{padding-left:15px;border-left-width:4px}.xm-select-linkage-group:nth-child(4n+1){background-color:#EFEFEF;left:0}.xm-select-linkage-group:nth-child(4n+1) li.xm-select-active{background-color:#F5F5F5}.xm-select-linkage-group:nth-child(4n+2){background-color:#F5F5F5;left:100px}.xm-select-linkage-group:nth-child(4n+3) li.xm-select-active{background-color:#FAFAFA}.xm-select-linkage-group:nth-child(4n+3){background-color:#FAFAFA;left:200px}.xm-select-linkage-group:nth-child(4n+3) li.xm-select-active{background-color:#FFF}.xm-select-linkage-group:nth-child(4n+4){background-color:#FFF;left:300px}.xm-select-linkage-group:nth-child(4n+4) li.xm-select-active{background-color:#EFEFEF}.xm-select-linkage li{list-style:none}.xm-select-linkage-hide{display:none}.xm-select-linkage-show{display:block}div[xm-select-skin=default] .xm-select-linkage li.xm-select-this span{border-left-color:#5FB878;color:#5FB878}div[xm-select-skin=default] .xm-select-linkage-group li:hover{border-left-color:#5FB878}div[xm-select-skin=primary] .xm-select-linkage li.xm-select-this span{border-left-color:#1E9FFF;color:#1E9FFF}div[xm-select-skin=primary] .xm-select-linkage-group li:hover{border-left-color:#1E9FFF}div[xm-select-skin=normal] .xm-select-linkage li.xm-select-this span{border-left-color:#1E9FFF;color:#1E9FFF}div[xm-select-skin=normal] .xm-select-linkage-group li:hover{border-left-color:#1E9FFF}div[xm-select-skin=warm] .xm-select-linkage li.xm-select-this span{border-left-color:#FFB800;color:#FFB800}div[xm-select-skin=warm] .xm-select-linkage-group li:hover{border-left-color:#FFB800}div[xm-select-skin=danger] .xm-select-linkage li.xm-select-this span{border-left-color:#FF5722;color:#FF5722}div[xm-select-skin=danger] .xm-select-linkage-group li:hover{border-left-color:#FF5722}.xm-form-checkbox[lay-skin=primary] i{top:9px}.xm-form-checkbox[lay-skin=primary] span{line-height:36px}.xm-select-tips[style]:hover{background-color:#FFF!important}.xm-select-parent dd>.xm-cz{position:absolute;top:5px;right:10px}.xm-select-parent dd>.xm-cz-group{margin-right:30px;border-right:2px solid #ddd;height:16px;margin-top:10px;line-height:16px;overflow:hidden}.xm-select-parent dd>.xm-cz-group .xm-cz{display:inline-block;margin-right:30px}.xm-select-parent dd>.xm-cz-group .xm-cz i{margin-right:10px}.xm-select-parent dd>.xm-cz-group[show=name] .xm-cz i{display:none}.xm-select-parent dd>.xm-cz-group[show=icon] .xm-cz span{display:none}.xm-select-parent dd .xm-cz:hover{color:#009688}div[xm-select-skin=default] dd .xm-cz:hover{color:#C0C4CC}div[xm-select-skin=primary] dd .xm-cz:hover{color:#009688}div[xm-select-skin=normal] dd .xm-cz:hover{color:#1E9FFF}div[xm-select-skin=warm] dd .xm-cz:hover{color:#FFB800}div[xm-select-skin=danger] dd .xm-cz:hover{color:#FF5722}' + '</style>' + '<link rel="stylesheet" type="text/css" href="//at.alicdn.com/t/font_711182_8sv6blqzaw2.css"/>');
+		$('head link:last')[0] && $('head link:last').after(cssStyle) || $('head').append(cssStyle);
+	};
+
+	Common.prototype.listening = function () {
+		//TODO 用于监听dom结构变化, 如果出现新的为渲染select, 则自动进行渲染
+		var flag = false;
+		var index = 0;
+		$(document).on('DOMNodeInserted', function (e) {
+			if (flag) {
+				//避免递归渲染
+				return;
+			}
+			flag = true;
+			//渲染select
+			$('select[' + NAME + ']').each(function (index, select) {
+				var sid = select.getAttribute(NAME);
+				common.init(select);
+				common.one($('dl[xid="' + sid + '"]').parents('.' + PNAME));
+				common.initVal(sid);
+			});
+
+			flag = false;
+		});
+	};
+
+	var Select4 = function Select4() {
+		this.v = v;
+	};
+	var common = new Common();
+
+	Select4.prototype.value = function (id, type, isAppend) {
+		if (typeof id != 'string') {
+			return [];
+		}
+		var fs = data[id];
+		if (!fs) {
+			return [];
+		}
+		if (typeof type == 'string' || type == undefined) {
+			var arr = fs.values.concat([]) || [];
+			if (type == 'val') {
+				return arr.map(function (val) {
+					return val.val;
+				});
+			}
+			if (type == 'valStr') {
+				return arr.map(function (val) {
+					return val.val;
+				}).join(',');
+			}
+			if (type == 'name') {
+				return arr.map(function (val) {
+					return val.name;
+				});
+			}
+			if (type == 'nameStr') {
+				return arr.map(function (val) {
+					return val.name;
+				}).join(',');
+			}
+			return arr;
+		}
+		if (common.isArray(type)) {
+			var dl = $('[xid="' + id + '"]'),
+			    temp = {},
+			    dd = void 0,
+			    isAdd = true;
+			if (isAppend == false) {
+				//删除传入的数组
+				isAdd = false;
+			} else if (isAppend == true) {
+				//追加模式
+				isAdd = true;
+			} else {
+				//删除原有的数据
+				common.removeAll(id);
+			}
+			if (isAdd) {
+				fs.values.forEach(function (val, index) {
+					temp[val.val] = 1;
+				});
+			}
+			type.forEach(function (val, index) {
+				if (val && (!temp[val] || fs.config.repeat)) {
+					if ((dd = dl.find('dd[lay-value="' + val + '"]'))[0]) {
+						common.handlerLabel(id, dd, isAdd, null, true);
+						temp[val] = 1;
+					} else {
+						var name = common.valToName(id, val);
+						if (name) {
+							common.handlerLabel(id, dd, isAdd, {
+								name: name,
+								val: val
+							}, true);
+							temp[val] = 1;
+						}
+					}
+				}
+			});
+		}
+	};
+
+	Common.prototype.bindEvent = function (name, id, fun) {
+		if (id && id instanceof Function) {
+			fun = id;
+			id = null;
+		}
+		if (fun && fun instanceof Function) {
+			if (!id) {
+				$.each(data, function (id, val) {
+					data[id] ? data[id].config[name] = fun : events[name][id] = fun;
+				});
+			} else {
+				data[id] ? data[id].config[name] = fun : events[name][id] = fun;
+			}
+		}
+	};
+
+	Select4.prototype.on = function (id, fun) {
+		common.bindEvent('on', id, fun);
+		return this;
+	};
+
+	Select4.prototype.filter = function (id, fun) {
+		common.bindEvent('filter', id, fun);
+		return this;
+	};
+
+	Select4.prototype.maxTips = function (id, fun) {
+		common.bindEvent('maxTips', id, fun);
+		return this;
+	};
+
+	Select4.prototype.config = function (id, config, isJson) {
+		if (id && (typeof id === 'undefined' ? 'undefined' : _typeof(id)) == 'object') {
+			isJson = config == true;
+			config = id;
+			id = null;
+		}
+		if (config && (typeof config === 'undefined' ? 'undefined' : _typeof(config)) == 'object') {
+			if (isJson) {
+				config.header || (config.header = {});
+				config.header['Content-Type'] = 'application/json; charset=UTF-8';
+				config.dataType = 'json';
+			}
+			id ? (ajaxs[id] = $.extend(true, {}, ajax, config), data[id] && (data[id].config.direction = config.direction), config.searchUrl && data[id] && common.triggerSearch($('.' + PNAME + ' dl[xid="' + id + '"]').parents('.' + FORM_SELECT), true)) : $.extend(true, ajax, config);
+		}
+		return this;
+	};
+
+	Select4.prototype.render = function (id) {
+		var _this14 = this;
+
+		var target = {};
+		id ? data[id] && (target[id] = data[id]) : data;
+
+		if (Object.getOwnPropertyNames(target).length) {
+			$.each(target, function (key, val) {
+				//恢复初始值
+				var dl = $('dl[xid="' + key + '"]'),
+				    vals = [];
+				val.select.find('option[selected]').each(function (index, item) {
+					vals.push(item.value);
+				});
+				//移除创建元素
+				dl.find('.' + CREATE_LONG).remove();
+				//清空INPUT
+				dl.prev().find('.' + INPUT).val('');
+				//触发search
+				common.triggerSearch(dl.parents('.' + FORM_SELECT), true);
+				//移除hidn
+				dl.find('.layui-hide').removeClass('layui-hide');
+				//重新赋值
+				_this14.value(key, vals);
+			});
+		}
+		($('select[' + NAME + '="' + id + '"]')[0] ? $('select[' + NAME + '="' + id + '"]') : $('select[' + NAME + ']')).each(function (index, select) {
+			var sid = select.getAttribute(NAME);
+			common.init(select);
+			common.one($('dl[xid="' + sid + '"]').parents('.' + PNAME));
+			common.initVal(sid);
+		});
+		return this;
+	};
+
+	Select4.prototype.disabled = function (id) {
+		var target = {};
+		id ? data[id] && (target[id] = data[id]) : target = data;
+
+		$.each(target, function (key, val) {
+			$('dl[xid="' + key + '"]').prev().addClass(DIS);
+		});
+		return this;
+	};
+
+	Select4.prototype.undisabled = function (id) {
+		var target = {};
+		id ? data[id] && (target[id] = data[id]) : target = data;
+
+		$.each(target, function (key, val) {
+			$('dl[xid="' + key + '"]').prev().removeClass(DIS);
+		});
+		return this;
+	};
+
+	Select4.prototype.data = function (id, type, config) {
+		if (!id || !type || !config) {
+			return this;
+		}
+		//检测该id是否尚未渲染
+		!data[id] && this.render(id).value(id, []);
+		this.config(id, config);
+		if (type == 'local') {
+			common.renderData(id, config.arr, config.linkage == true, config.linkageWidth ? config.linkageWidth : '100');
+		} else if (type == 'server') {
+			common.ajax(id, config.url, config.keyword, config.linkage == true, config.linkageWidth ? config.linkageWidth : '100');
+		}
+		return this;
+	};
+
+	Select4.prototype.btns = function (id, btns, config) {
+		if (!btns || !common.isArray(btns)) {
+			return this;
+		};
+		var target = {};
+		id ? data[id] && (target[id] = data[id]) : target = data;
+
+		btns = btns.map(function (obj) {
+			if (typeof obj == 'string') {
+				if (obj == 'select') {
+					return quickBtns[0];
+				}
+				if (obj == 'remove') {
+					return quickBtns[1];
+				}
+				if (obj == 'reverse') {
+					return quickBtns[2];
+				}
+				if (obj == 'skin') {
+					return quickBtns[3];
+				}
+			}
+			return obj;
+		});
+
+		$.each(target, function (key, val) {
+			val.config.btns = btns;
+			var dd = $('dl[xid="' + key + '"]').find('.' + FORM_SELECT_TIPS + ':first');
+			if (btns.length) {
+				var show = config && config.show && (config.show == 'name' || config.show == 'icon') ? config.show : '';
+				var html = common.renderBtns(key, show, config && config.space ? config.space : '30px');
+				dd.html(html);
+			} else {
+				var pcInput = dd.parents('.' + FORM_SELECT).find('.' + TDIV + ' input');
+				var _html = pcInput.attr('placeholder') || pcInput.attr('back');
+				dd.html(_html);
+				dd.removeAttr('style');
+			}
+		});
+
+		return this;
+	};
+
+	Select4.prototype.search = function (id, val) {
+		if (id && data[id]) {
+			ajaxs[id] = $.extend(true, {}, ajax, {
+				first: true,
+				searchVal: val
+			});
+			common.triggerSearch($('dl[xid="' + id + '"]').parents('.' + FORM_SELECT), true);
+		}
+		return this;
+	};
+
+	return new Select4();
+});
\ No newline at end of file
diff --git a/src/main/resources/static/custom/module/formSelects/formSelects-v4.css b/src/main/resources/static/custom/module/formSelects/formSelects-v4.css
new file mode 100755
index 0000000..626a4d5
--- /dev/null
+++ b/src/main/resources/static/custom/module/formSelects/formSelects-v4.css
@@ -0,0 +1,156 @@
+/* formSelects多选css */
+.xm-select-parent * {margin: 0;padding: 0;font-family: "Helvetica Neue", Helvetica, "PingFang SC", 微软雅黑, Tahoma, Arial, sans-serif;}
+.xm-select-parent {text-align: left;}
+.xm-select-parent select {display: none;}
+.xm-select-parent .xm-select-title {position: relative;min-height: 36px;}
+.xm-select-parent .xm-input {cursor: pointer;border-radius: 2px;border-width: 1px;border-style: solid;border-color: #E6E6E6;display: block;width: 100%;box-sizing: border-box;background-color: #FFF;height: 36px;line-height: 1.3;padding-left: 10px;outline: 0}
+.xm-select-parent .xm-select-sj {display: inline-block;width: 0;height: 0;border-style: dashed;border-color: transparent;overflow: hidden;position: absolute;right: 10px;top: 50%;margin-top: -3px;cursor: pointer;border-width: 6px;border-top-color: #C2C2C2;border-top-style: solid;transition: all .3s;-webkit-transition: all .3s}
+.xm-select-parent .xm-form-selected .xm-select-sj {margin-top: -9px;transform: rotate(180deg)}
+.xm-select-parent .xm-form-select dl {display: none;position: absolute;left: 0;top: 42px;padding: 5px 0;z-index: 999;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;animation-fill-mode: both;-webkit-animation-name: layui-upbit;animation-name: layui-upbit;-webkit-animation-duration: .3s;animation-duration: .3s;-webkit-animation-fill-mode: both;animation-fill-mode: both}
+@-webkit-keyframes layui-upbit {
+	from {-webkit-transform: translate3d(0, 30px, 0);opacity: .3}
+	to {-webkit-transform: translate3d(0, 0, 0);opacity: 1}
+}
+@keyframes layui-upbit {
+	from {transform: translate3d(0, 30px, 0);opacity: .3}
+	to {transform: translate3d(0, 0, 0);opacity: 1}
+}
+.xm-select-parent .xm-form-selected dl {display: block}
+.xm-select-parent .xm-form-select dl dd,.xm-select-parent .xm-form-select dl dt {padding: 0 10px;line-height: 36px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis}
+.xm-select-parent .xm-form-select dl dd {cursor: pointer;height: 36px;}
+.xm-select-parent .xm-form-select dl dd:hover {background-color: #f2f2f2}
+.xm-select-parent .xm-form-select dl dt {font-size: 12px;color: #999}
+.layui-select-disabled .xm-dis-disabled {border-color: #eee!important}
+.xm-select-parent .xm-form-select dl .xm-select-tips {padding-left: 10px!important;color: #999;font-size: 14px}
+.xm-unselect {-moz-user-select: none;-webkit-user-select: none;-ms-user-select: none}
+.xm-form-checkbox {position: relative;display: inline-block;vertical-align: middle;height: 30px;line-height: 30px;margin-right: 10px;padding-right: 30px;background-color: #fff;cursor: pointer;font-size: 0;-webkit-transition: .1s linear;transition: .1s linear;box-sizing: border-box}
+.xm-form-checkbox * {display: inline-block;vertical-align: middle}
+.xm-form-checkbox span {padding: 0 10px;height: 100%;font-size: 14px;border-radius: 2px 0 0 2px;background-color: #d2d2d2;color: #fff;overflow: hidden;white-space: nowrap;text-overflow: ellipsis}
+.xm-form-checkbox:hover span {background-color: #c2c2c2}
+.xm-form-checkbox i {position: absolute;right: 0;top: 0;width: 30px;height: 28px;border: 1px solid #d2d2d2;border-left: none;border-radius: 0 2px 2px 0;color: #fff;font-size: 20px;text-align: center}
+.xm-form-checkbox:hover i {border-color: #c2c2c2;color: #c2c2c2}
+.xm-form-checkbox[lay-skin=primary] {height: auto!important;line-height: normal!important;border: none!important;margin-right: 0;padding-right: 0;background: 0 0}
+.xm-form-checkbox[lay-skin=primary] span {float: right;padding-right: 15px;line-height: 18px;background: 0 0;color: #666}
+.xm-form-checkbox[lay-skin=primary] i {position: relative;top: 0;width: 16px;height: 16px;line-height: 16px;border: 1px solid #d2d2d2;font-size: 12px;border-radius: 2px;background-color: #fff;-webkit-transition: .1s linear;transition: .1s linear}
+.xm-form-checkbox[lay-skin=primary]:hover i {border-color: #5FB878;color: #fff}
+.xm-icon-yes {width: 30px;height: 30px;border-radius: 4px;background-color: #009688;position: relative}
+.xm-icon-yes:after {content: '';display: inline-block;border: 2px solid #fff;border-top-width: 0;border-right-width: 0;width: 9px;height: 5px;-webkit-transform: rotate(-50deg);transform: rotate(-50deg);position: absolute;top: 2px;left: 3px}
+.xm-dis-disabled,.xm-dis-disabled:hover {color: #d2d2d2!important;cursor: not-allowed!important}
+.xm-form-select dl dd.xm-dis-disabled {background-color: #fff!important}
+.xm-form-select dl dd.xm-dis-disabled span {color: #C2C2C2}
+.xm-form-select dl dd.xm-dis-disabled .xm-icon-yes {border-color: #C2C2C2}
+.xm-select-parent {position: relative;-moz-user-select: none;-ms-user-select: none;-webkit-user-select: none}
+.xm-select-parent .xm-select {line-height: normal;height: auto;padding: 4px 10px 1px 10px;overflow: hidden;min-height: 36px;left: 0;z-index: 99;position: absolute;background: 0 0;padding-right: 20px}
+.xm-select-parent .xm-select:hover {border-color: #C0C4CC}
+.xm-select-parent .xm-select .xm-select-label {display: inline-block;margin: 0;vertical-align: middle}
+.xm-select-parent .xm-select-title div.xm-select-label>span {position: relative;padding: 2px 5px;background-color: #009688;border-radius: 2px;color: #FFF;display: inline-block;line-height: 18px;height: 18px;margin: 2px 5px 2px 0;cursor: initial;user-select: none;font-size: 14px;padding-right: 25px;}
+.xm-select-parent .xm-select-title div.xm-select-label>span i {position: absolute;right: 5px;top: 2px;margin-left: 8px;border-radius: 20px;font-size: 18px;cursor: pointer;display: inline-block;height: 14px;line-height: 15px;width: 12px;vertical-align: top;margin-top: 2px;}
+.xm-select-parent .xm-select .xm-select-input {border: none;height: 28px;background-color: transparent;padding: 0;vertical-align: middle;display: inline-block;width: 50px}
+.xm-select-parent .xm-select--suffix input {border: none}
+.xm-select-parent dl dd.xm-dis-disabled.xm-select-this i {border-color: #C2C2C2;background-color: #C2C2C2;color: #FFF}
+.xm-select-parent dl dd.xm-select-this i {background-color: #009688;border-color: #009688}
+.xm-form-selected .xm-select,.xm-form-selected .xm-select:hover {border-color: #009688!important}
+.xm-select--suffix+div {position: absolute;top: 0;left: 0;bottom: 0;right: 0}
+.xm-select-dis .xm-select--suffix+div {z-index: 100;cursor: no-drop!important;opacity: .2;background-color: #FFF;}
+.xm-select-disabled,.xm-select-disabled:hover {color: #d2d2d2!important;cursor: not-allowed!important;background-color: #fff}
+.xm-select-none {display: none;margin: 5px 0;text-align: center;}
+.xm-select-none:hover {background-color: #FFF!important}
+.xm-select-empty {display: block}
+.xm-span-hide {display: none!important;}
+.xm-select-radio .xm-icon-yes {border-radius: 20px!important;}
+.xm-select-radio .xm-icon-yes:after {border-radius: 20px;background-color: #fff;width: 6px;height: 6px;border: none;top: 5px;left: 5px;}
+.layui-form-pane .xm-select,.layui-form-pane .xm-select:hover {border: none!important;top: 0px}
+.layui-form-pane .xm-select-title {border: 1px solid #e6e6e6!important}
+
+
+/* 颜色相关 */
+div[xm-select-skin] .xm-select-title div.xm-select-label>span {border: 1px solid #009688}
+div[xm-select-skin] .xm-select-title div.xm-select-label>span i:hover {opacity: .8;filter: alpha(opacity=80);cursor: pointer}
+div[xm-select-skin=default] .xm-select-title div.xm-select-label>span {background-color: #F0F2F5;color: #909399;border: 1px solid #F0F2F5}
+div[xm-select-skin=default] .xm-select-title div.xm-select-label>span i {background-color: #C0C4CC;color: #FFF}
+div[xm-select-skin=default] dl dd.xm-select-this:not(.xm-dis-disabled) i {background-color: #5FB878;border-color: #5FB878;color: #FFF}
+div[xm-select-skin=default].xm-form-selected .xm-select,div[xm-select-skin=default].xm-form-selected .xm-select:hover {border-color: #C0C4CC!important}
+div[xm-select-skin=primary] .xm-select-title div.xm-select-label>span {background-color: #009688;color: #FFF;border: 1px solid #009688}
+div[xm-select-skin=primary] .xm-select-title div.xm-select-label>span i {background-color: #009688;color: #FFF}
+div[xm-select-skin=primary] dl dd.xm-select-this:not(.xm-dis-disabled) i {background-color: #009688;border-color: #009688;color: #FFF}
+div[xm-select-skin=primary].xm-form-selected .xm-select,div[xm-select-skin=primary].xm-form-selected .xm-select:hover {border-color: #009688!important}
+div[xm-select-skin=normal] .xm-select-title div.xm-select-label>span {background-color: #1E9FFF;color: #FFF;border: 1px solid #1E9FFF}
+div[xm-select-skin=normal] .xm-select-title div.xm-select-label>span i {background-color: #1E9FFF;color: #FFF}
+div[xm-select-skin=normal] dl dd.xm-select-this:not(.xm-dis-disabled) i {background-color: #1E9FFF;border-color: #1E9FFF;color: #FFF}
+div[xm-select-skin=normal].xm-form-selected .xm-select,div[xm-select-skin=normal].xm-form-selected .xm-select:hover {border-color: #1E9FFF!important}
+div[xm-select-skin=warm] .xm-select-title div.xm-select-label>span {background-color: #FFB800;color: #FFF;border: 1px solid #FFB800}
+div[xm-select-skin=warm] .xm-select-title div.xm-select-label>span i {background-color: #FFB800;color: #FFF}
+div[xm-select-skin=warm] dl dd.xm-select-this:not(.xm-dis-disabled) i {background-color: #FFB800;border-color: #FFB800;color: #FFF}
+div[xm-select-skin=warm].xm-form-selected .xm-select,div[xm-select-skin=warm].xm-form-selected .xm-select:hover {border-color: #FFB800!important}
+div[xm-select-skin=danger] .xm-select-title div.xm-select-label>span {background-color: #FF5722;color: #FFF;border: 1px solid #FF5722}
+div[xm-select-skin=danger] .xm-select-title div.xm-select-label>span i {background-color: #FF5722;color: #FFF}
+div[xm-select-skin=danger] dl dd.xm-select-this:not(.xm-dis-disabled) i {background-color: #FF5722;border-color: #FF5722;color: #FFF}
+div[xm-select-skin=danger].xm-form-selected .xm-select,div[xm-select-skin=danger].xm-form-selected .xm-select:hover {border-color: #FF5722!important}
+
+
+/* 多选联动  */
+.xm-select-parent .layui-form-danger+.xm-select-title .xm-select {border-color: #FF5722 !important;}
+.xm-select-linkage li {padding: 10px 0px;cursor: pointer;}
+.xm-select-linkage li span {padding-left: 20px;padding-right: 30px;display: inline-block;height: 20px;overflow: hidden;text-overflow: ellipsis;}
+.xm-select-linkage li.xm-select-this span {border-left: 5px solid #009688;color: #009688;padding-left: 15px;}
+.xm-select-linkage-group {position: absolute;left: 0;top: 0;right: 0;bottom: 0;overflow-x: hidden;overflow-y: auto;}
+.xm-select-linkage-group li:hover {border-left: 1px solid #009688;}
+.xm-select-linkage-group li:hover span {padding-left: 19px;}
+.xm-select-linkage-group li.xm-select-this:hover span {padding-left: 15px;border-left-width: 4px;}
+.xm-select-linkage-group:nth-child(4n+1){background-color: #EFEFEF; left: 0;}
+.xm-select-linkage-group:nth-child(4n+1) li.xm-select-active{background-color: #F5F5F5;}
+.xm-select-linkage-group:nth-child(4n+2){background-color: #F5F5F5; left: 100px;}
+.xm-select-linkage-group:nth-child(4n+3) li.xm-select-active{background-color: #FAFAFA;}
+.xm-select-linkage-group:nth-child(4n+3){background-color: #FAFAFA; left: 200px;}
+.xm-select-linkage-group:nth-child(4n+3) li.xm-select-active{background-color: #FFFFFF;}
+.xm-select-linkage-group:nth-child(4n+4){background-color: #FFFFFF; left: 300px;}
+.xm-select-linkage-group:nth-child(4n+4) li.xm-select-active{background-color: #EFEFEF;}
+.xm-select-linkage li{list-style: none;}
+.xm-select-linkage-hide {display: none;}
+.xm-select-linkage-show {display: block;}
+
+div[xm-select-skin='default'] .xm-select-linkage li.xm-select-this span {border-left-color: #5FB878;color: #5FB878;}
+div[xm-select-skin='default'] .xm-select-linkage-group li:hover {border-left-color: #5FB878;}
+div[xm-select-skin='primary'] .xm-select-linkage li.xm-select-this span {border-left-color: #1E9FFF;color: #1E9FFF;}
+div[xm-select-skin='primary'] .xm-select-linkage-group li:hover {border-left-color: #1E9FFF;}
+div[xm-select-skin='normal'] .xm-select-linkage li.xm-select-this span {border-left-color: #1E9FFF;color: #1E9FFF;}
+div[xm-select-skin='normal'] .xm-select-linkage-group li:hover {border-left-color: #1E9FFF;}
+div[xm-select-skin='warm'] .xm-select-linkage li.xm-select-this span {border-left-color: #FFB800;color: #FFB800;}
+div[xm-select-skin='warm'] .xm-select-linkage-group li:hover {border-left-color: #FFB800;}
+div[xm-select-skin='danger'] .xm-select-linkage li.xm-select-this span {border-left-color: #FF5722;color: #FF5722;}
+div[xm-select-skin='danger'] .xm-select-linkage-group li:hover {border-left-color: #FF5722;}
+.xm-form-checkbox[lay-skin=primary] i {top: 9px}
+.xm-form-checkbox[lay-skin=primary] span {line-height: 36px;}
+
+
+/* 快捷操作 */
+.xm-select-tips[style]:hover{background-color: #FFF!important;}
+.xm-select-parent dd > .xm-cz{position: absolute; top: 5px; right: 10px;}
+.xm-select-parent dd > .xm-cz-group{margin-right: 30px; border-right: 2px solid #ddd; height: 16px; margin-top: 10px; line-height: 16px; overflow: hidden;}
+.xm-select-parent dd > .xm-cz-group .xm-cz{display: inline-block; margin-right: 30px;}
+.xm-select-parent dd > .xm-cz-group .xm-cz i{margin-right: 10px;}
+.xm-select-parent dd > .xm-cz-group[show='name'] .xm-cz i{display: none;}
+.xm-select-parent dd > .xm-cz-group[show='icon'] .xm-cz span{display: none;}
+.xm-select-parent dd .xm-cz:hover{color: #009688;}
+div[xm-select-skin='default'] dd .xm-cz:hover{color: #C0C4CC;}
+div[xm-select-skin='primary'] dd .xm-cz:hover{color: #009688;}
+div[xm-select-skin='normal'] dd .xm-cz:hover{color: #1E9FFF;}
+div[xm-select-skin='warm'] dd .xm-cz:hover{color: #FFB800;}
+div[xm-select-skin='danger'] dd .xm-cz:hover{color: #FF5722;}
+
+
+
+/* 阿里巴巴矢量图标库 */
+@font-face {
+	font-family: "iconfont";
+	src: url('data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAAkUAAsAAAAADXQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADMAAABCsP6z7U9TLzIAAAE8AAAARAAAAFZXMkouY21hcAAAAYAAAACEAAAB3mzwoL5nbHlmAAACBAAABNwAAAbEQLmyxWhlYWQAAAbgAAAAMQAAADYR3AzwaGhlYQAABxQAAAAgAAAAJAgBA6pobXR4AAAHNAAAABsAAAAcHA3//mxvY2EAAAdQAAAAEAAAABAFDAZgbWF4cAAAB2AAAAAfAAAAIAEXAM9uYW1lAAAHgAAAAUUAAAJtPlT+fXBvc3QAAAjIAAAASwAAAF/pDVOXeJxjYGRgYOBikGPQYWB0cfMJYeBgYGGAAJAMY05meiJQDMoDyrGAaQ4gZoOIAgCKIwNPAHicY2BkYWKcwMDKwMHUyXSGgYGhH0IzvmYwYuRgYGBiYGVmwAoC0lxTGBwYKl6YMzf8b2CIYW5mOAIUZgTJAQDaoQv3eJzFkcsJwzAQRN9GsgkhBBeiu2+uIoeU4BJ8zCmlLu7C2Y/BJA14xBPMIGnFLtABxWhGBfkguN6WSuSFW+SVp/kHVy70LDpo00nnddw2y//9IbE7x3Jf4oUu6vWcJjmv9K/usb925x1ZduyLOiQ+JW2J9Q+dEj+vc+LTXMeE+gUlrx+seJyNVE2IHEUUrlfVVdV/0z3939u70zs9vTudsMmumdndcaNu1h/wBw+RRJNcAlGDEdSDBwMacUGUCB4EDzEoKKIYUfDgwUuEmN1IvAgevIiEFQVzUC/iQXB7fdW7Sm461Lx6/V71V/V9/eoRTsjWD+wiS0lAdpF95C5ykBAQM9BzaAeKan6WzkBU8CgJHVaVVSHL3iy7DZKeCOPB4nw/EVK44EAOw2KwWM3SChbml+ktMIg7AGPj2SF/esJnr4GZVvlL9X30XYgmywl3eW99754D4aAb6Kdt3x/z/Vd1wblOqeY68GQSG9wwRf0ed7Po4uRuOgn2WJXdf6zVHfdPnJ1/qjOdGACrqxCMd50PDniZh+NMFgf+mGy39DRrlVMhnP7JSgO70/+R4E8g11s1wiaIRRJSkgVyNzmGbAvFoywUIygcCOOkWIb5Pmv8YZMFWfUxPwnxKD4AGOix/xGB7+FPP039WvpJQq1m8m8Ibfubt587amSBecput+0LRjBm/sczPZ5OpTjq7yAtU1CmfhkSFUvYQ+eOmPjKKZsx+wNzLKiff+OowjhlUWpdQJz6zLkjGDAet3ZWEFUDL2jAXiRtEpJpsoi6EEAyLjR0BopNJatRMo0iRd62QCNvFioPNYq8HBJUSQXK6dIB6W0XQ7OC/XolGsWXw3AtHkXrQfDH+vra5vv1RqcsO9DtlABlRz1BP4cw3w2wO4frG3kPYDaHqFMA9HL64ZUwVDBrYbgej8Lf19bWrnY79TW1rJcjTAGbG/hm/Uvehwa3R3dwd3ZR319Dnp+zNXYHibHS7ySHkKUi+S/THEaLDddRWeHRi20qyTBSBHcYc6+chQVvfnFU5DCp6gWLXxZKi2XFOk5YJFP9y2NoWrr+jPR1S2xIuXQQYP/M5tbMfjU/gH8K2/7m+YWsLDP4KkMx6tdn9tNXoJvWM2kXcIZv1fyJrl85qiNggohUo/KansqfD+9ZAljaU8PMEuz4sIX+yfo89DK4mil5siVY2vxtB+zrtChSpQXbqrc+0qbYIfIo+YJcJoTjBegr1v2Rh1e6X/XnaH8OMDALo+VGmGU4QBcT1CJWUik7aDKYw/hwoCLxdnISorhpCwrJkzg7MM2xJBZHC94IMRqsaqHZYQ76FV5Al+K+aqlQgSY8B6XsIc5OQuGrQXOqzpN4oTpGMqTfdOvzbt7SfS5AiHbVNuUgMg1bOpwJymNb558Jzx7r9yLhc8cAzdX9LBRGOuFQTdhB28h6U25gv2OYlsmly4E64jGzE3njJlDXdKv6OXjayHTOinHTDVydPWJQzZBmaL6NG7Vv1i2qcSvYNRE6wWRqZwaVwl5xpal/LLiUlk0BqGY6up4MueHwlh1NMcGEOXVY03nQimJ4gjEhLF3eFOuGLdqWiO1kwpT8U+FyQYFRQ7Ntyk1NapRyy2LYIW0OoNutt0zdMoX0HCHjXJy0U+Qt6md5K8HqGwLlmnEcHo4z09Acg52wUE88u2+9aQrAgwmE0tttrlHgJvdsaggNpH5BndxwDcq4bmAxJ/uE0Khw4qi+R0pJGTS9YxV76gp6FvGavkqC0iuiAoaNRX+h8dEmMpGqkWArWV2BlS18b6W+BOSvSzc+1df3nj37z6AEVjCFZvNSjcsIGvrgDQvI3936DLp4nGNgZGBgAGLtNU3b4/ltvjJwszCAwHXflFkw+v+//zYsKszNQC4HAxNIFABGAgv1AAAAeJxjYGRgYG7438AQw6L8/9///ywqDEARFMAOAKazBrJ4nGNhYGBgfsnAwAKkWRihtPL/fyAaACKnAyYAAAAAAAB2AQIBdgH8AyADYnicY2BkYGBgZzjMwMYAAkxAzAWEDAz/wXwGABycAecAeJxlj01OwzAQhV/6B6QSqqhgh+QFYgEo/RGrblhUavdddN+mTpsqiSPHrdQDcB6OwAk4AtyAO/BIJ5s2lsffvHljTwDc4Acejt8t95E9XDI7cg0XuBeuU38QbpBfhJto41W4Rf1N2MczpsJtdGF5g9e4YvaEd2EPHXwI13CNT+E69S/hBvlbuIk7/Aq30PHqwj7mXle4jUcv9sdWL5xeqeVBxaHJIpM5v4KZXu+Sha3S6pxrW8QmU4OgX0lTnWlb3VPs10PnIhVZk6oJqzpJjMqt2erQBRvn8lGvF4kehCblWGP+tsYCjnEFhSUOjDFCGGSIyujoO1Vm9K+xQ8Jee1Y9zed0WxTU/3OFAQL0z1xTurLSeTpPgT1fG1J1dCtuy56UNJFezUkSskJe1rZUQuoBNmVXjhF6XNGJPyhnSP8ACVpuyAAAAHicbcNRCoAgEAXAfWYqdRYPtWXJEqwJSR6/oN8Ghgx9JvrnYTDAYoSDRyD0UBtrf7uVJbHO9yaLcLkkRnvK3kIVzUfRTPQAg/cP1gA=') format('woff');
+}
+.iconfont {font-family:"iconfont" !important; font-size:16px; font-style:normal; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;}
+.icon-quanxuan:before { content: "\e62c"; }
+.icon-caidan:before { content: "\e610"; }
+.icon-fanxuan:before { content: "\e837"; }
+.icon-pifu:before { content: "\e668"; }
+.icon-qingkong:before { content: "\e63e"; }
+
+
+
diff --git a/src/main/resources/static/custom/module/formSelects/formSelects-v4.js b/src/main/resources/static/custom/module/formSelects/formSelects-v4.js
new file mode 100755
index 0000000..f613eec
--- /dev/null
+++ b/src/main/resources/static/custom/module/formSelects/formSelects-v4.js
@@ -0,0 +1,1412 @@
+'use strict';
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+/**
+ * name: formSelects
+ * 基于Layui Select多选
+ * version: 4.0.0.formSelects
+ * http://sun.faysunshine.com/layui/formSelects-v4/dist/formSelects-v4.js
+ */
+(function (layui, window, factory) {
+	if ((typeof exports === 'undefined' ? 'undefined' : _typeof(exports)) === 'object') {
+		// 支持 CommonJS
+		module.exports = factory();
+	} else if (typeof define === 'function' && define.amd) {
+		// 支持 AMD
+		define(factory);
+	} else if (window.layui && layui.define) {
+		//layui加载
+		layui.define(['jquery'], function (exports) {
+			exports('formSelects', factory());
+		});
+	} else {
+		window.formSelects = factory();
+	}
+})(typeof layui == 'undefined' ? null : layui, window, function () {
+	var v = '4.0.0.formSelects',
+	    NAME = 'xm-select',
+	    PNAME = 'xm-select-parent',
+	    INPUT = 'xm-select-input',
+	    TDIV = 'xm-select--suffix',
+	    THIS = 'xm-select-this',
+	    LABEL = 'xm-select-label',
+	    SEARCH = 'xm-select-search',
+	    CREATE = 'xm-select-create',
+	    CREATE_LONG = 'xm-select-create-long',
+	    MAX = 'xm-select-max',
+	    SKIN = 'xm-select-skin',
+	    DIRECTION = "xm-select-direction",
+	    HEIGHT = 'xm-select-height',
+	    DISABLED = 'xm-dis-disabled',
+	    DIS = 'xm-select-dis',
+	    TEMP = 'xm-select-temp',
+	    RADIO = 'xm-select-radio',
+	    LINKAGE = 'xm-select-linkage',
+	    DL = 'xm-select-dl',
+	    HIDE_INPUT = 'xm-hide-input',
+	    SANJIAO = 'xm-select-sj',
+	    ICON_CLOSE = 'xm-icon-close',
+	    FORM_TITLE = 'xm-select-title',
+	    FORM_SELECT = 'xm-form-select',
+	    FORM_SELECTED = 'xm-form-selected',
+	    FORM_NONE = 'xm-select-none',
+	    FORM_EMPTY = 'xm-select-empty',
+	    FORM_INPUT = 'xm-input',
+	    FORM_SELECT_TIPS = 'xm-select-tips',
+	    CHECKBOX_YES = 'xm-icon-yes',
+	    CZ = 'xm-cz',
+	    CZ_GROUP = 'xm-cz-group',
+	    TIPS = '请选择',
+	    data = {},
+	    events = {
+		on: {},
+		filter: {},
+		maxTips: {}
+	},
+	    ajax = {
+		type: 'get',
+		header: {},
+		first: true,
+		data: {},
+		searchUrl: '',
+		searchName: 'keyword',
+		searchVal: null,
+		keyName: 'name',
+		keyVal: 'value',
+		keySel: 'selected',
+		keyDis: 'disabled',
+		keyChildren: 'children',
+		dataType: '',
+		delay: 500,
+		beforeSuccess: null,
+		success: null,
+		error: null,
+		beforeSearch: null,
+		clearInput: false
+	},
+	    quickBtns = [{ icon: 'iconfont icon-quanxuan', name: '全选', click: function click(id, cm) {
+			cm.selectAll(id, true, true);
+		} }, { icon: 'iconfont icon-qingkong', name: '清空', click: function click(id, cm) {
+			cm.removeAll(id, true, true);
+		} }, { icon: 'iconfont icon-fanxuan', name: '反选', click: function click(id, cm) {
+			cm.reverse(id, true, true);
+		} }, { icon: 'iconfont icon-pifu', name: '换肤', click: function click(id, cm) {
+			cm.skin(id);
+		} }],
+	    $ = window.$ || window.layui && window.layui.jquery,
+	    $win = $(window),
+	    ajaxs = {},
+	    FormSelects = function FormSelects(options) {
+		var _this = this;
+
+		this.config = {
+			name: null, //xm-select="xxx"
+			max: null,
+			maxTips: function maxTips(vals, val, max) {
+				var ipt = $('[xid="' + _this.config.name + '"]').prev().find('.' + NAME);
+				if (ipt.parents('.layui-form-item[pane]').length) {
+					ipt = ipt.parents('.layui-form-item[pane]');
+				}
+				ipt.attr('style', 'border-color: red !important');
+				setTimeout(function () {
+					ipt.removeAttr('style');
+				}, 300);
+			},
+			init: null, //初始化的选择值,
+			on: null, //select值发生变化
+			filter: function filter(id, inputVal, val, isDisabled) {
+				return val.name.indexOf(inputVal) == -1;
+			},
+			clearid: -1,
+			direction: 'auto',
+			height: null,
+			isEmpty: false,
+			btns: [quickBtns[0], quickBtns[1], quickBtns[2]]
+		};
+		this.select = null;
+		this.values = [];
+		$.extend(true, this.config, options);
+	};
+
+	//一些简单的处理方法
+	var Common = function Common() {
+		this.loadingCss();
+		this.appender();
+		this.init();
+		this.on();
+		this.initVal();
+		this.onreset();
+		this.listening();
+	};
+
+	Common.prototype.appender = function () {
+		//针对IE做的一些拓展
+		if (!Array.prototype.map) {
+			Array.prototype.map = function (callback, thisArg) {
+				var T,
+				    A,
+				    k,
+				    O = Object(this),
+				    len = O.length >>> 0;
+				if (thisArg) {
+					T = thisArg;
+				}
+				A = new Array(len);
+				k = 0;
+				while (k < len) {
+					var kValue, mappedValue;
+					if (k in O) {
+						kValue = O[k];
+						mappedValue = callback.call(T, kValue, k, O);
+						A[k] = mappedValue;
+					}
+					k++;
+				}
+				return A;
+			};
+		}
+		if (!Array.prototype.forEach) {
+			Array.prototype.forEach = function forEach(callback, thisArg) {
+				var T, k;
+				if (this == null) {
+					throw new TypeError("this is null or not defined");
+				}
+				var O = Object(this);
+				var len = O.length >>> 0;
+				if (typeof callback !== "function") {
+					throw new TypeError(callback + " is not a function");
+				}
+				if (arguments.length > 1) {
+					T = thisArg;
+				}
+				k = 0;
+				while (k < len) {
+					var kValue;
+					if (k in O) {
+
+						kValue = O[k];
+						callback.call(T, kValue, k, O);
+					}
+					k++;
+				}
+			};
+		}
+	};
+
+	Common.prototype.init = function (target) {
+		var _this2 = this;
+
+		//初始化页面上已有的select
+		$(target ? target : 'select[' + NAME + ']').each(function (index, select) {
+			var othis = $(select),
+			    id = othis.attr(NAME),
+			    hasRender = othis.next('.layui-form-select'),
+			    disabled = select.disabled,
+			    max = othis.attr(MAX) - 0,
+			    isSearch = othis.attr(SEARCH) != undefined,
+			    searchUrl = isSearch ? othis.attr(SEARCH) : null,
+			    isCreate = othis.attr(CREATE) != undefined,
+			    isRadio = othis.attr(RADIO) != undefined,
+			    skin = othis.attr(SKIN),
+			    direction = othis.attr(DIRECTION),
+			    optionsFirst = select.options[0],
+			    height = othis.attr(HEIGHT),
+			    formname = othis.attr('name'),
+			    layverify = othis.attr('lay-verify'),
+			    placeholder = optionsFirst ? optionsFirst.value ? TIPS : optionsFirst.innerHTML || TIPS : TIPS,
+			    value = othis.find('option[selected]').toArray().map(function (option) {
+				//获取已选中的数据
+				return {
+					name: option.innerHTML,
+					val: option.value
+				};
+			}),
+			    fs = new FormSelects();
+			data[id] = fs;
+			//先取消layui对select的渲染
+			hasRender[0] && hasRender.remove();
+
+			//包裹一个div
+			othis.wrap('<div class="' + PNAME + '"></div>');
+
+			//构造渲染div
+			var dinfo = _this2.renderSelect(id, placeholder, select);
+			var heightStyle = height ? 'style="height: ' + height + ';"' : '';
+			var inputHtml = height ? ['<div class="' + LABEL + '" style="margin-right: 50px;"></div>', '<input type="text" fsw class="' + FORM_INPUT + ' ' + INPUT + '" ' + (isSearch ? '' : 'style="display: none;"') + ' autocomplete="off" debounce="0" style="position: absolute;right: 10px;top: 3px;"/>'] : ['<div class="' + LABEL + '">', '<input type="text" fsw class="' + FORM_INPUT + ' ' + INPUT + '" ' + (isSearch ? '' : 'style="display: none;"') + ' autocomplete="off" debounce="0" />', '</div>'];
+			var reElem = $('<div class="' + FORM_SELECT + '" ' + SKIN + '="' + skin + '">\n\t\t\t\t\t<input type="hidden" class="' + HIDE_INPUT + '" value="" name="' + formname + '" lay-verify="' + layverify + '"/>\n\t\t\t\t\t<div class="' + FORM_TITLE + ' ' + (disabled ? DIS : '') + '">\n\t\t\t\t\t\t<div class="' + FORM_INPUT + ' ' + NAME + '" ' + heightStyle + '>\n\t\t\t\t\t\t\t' + inputHtml.join('') + '\n\t\t\t\t\t\t\t<i class="' + SANJIAO + '"></i>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="' + TDIV + '">\n\t\t\t\t\t\t\t<input type="text" autocomplete="off" placeholder="' + placeholder + '" readonly="readonly" unselectable="on" class="' + FORM_INPUT + '">\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div></div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<dl xid="' + id + '" class="' + DL + ' ' + (isRadio ? RADIO : '') + '">' + dinfo + '</dl>\n\t\t\t\t</div>');
+			othis.after(reElem);
+			fs.select = othis.remove(); //去掉layui.form.render
+			fs.values = value;
+			fs.config.name = id;
+			fs.config.init = value.concat([]);
+			fs.config.direction = direction;
+			fs.config.height = height;
+			fs.config.radio = isRadio;
+
+			if (max) {
+				//有最大值
+				fs.config.max = max;
+			}
+
+			//如果可搜索, 加上事件
+			if (isSearch) {
+				reElem.find('.' + INPUT).on('input propertychange', function (e) {
+					var input = e.target,
+					    inputValue = $.trim(input.value),
+					    keyCode = e.keyCode;
+					if (keyCode === 9 || keyCode === 13 || keyCode === 37 || keyCode === 38 || keyCode === 39 || keyCode === 40) {
+						return false;
+					}
+
+					//过滤一下tips
+					_this2.changePlaceHolder($(input));
+
+					var ajaxConfig = ajaxs[id] ? ajaxs[id] : ajax;
+					searchUrl = ajaxConfig.searchUrl || searchUrl;
+					//如果开启了远程搜索
+					if (searchUrl) {
+						if (ajaxConfig.searchVal) {
+							inputValue = ajaxConfig.searchVal;
+							ajaxConfig.searchVal = '';
+						}
+						if (!ajaxConfig.beforeSearch || ajaxConfig.beforeSearch && ajaxConfig.beforeSearch instanceof Function && ajaxConfig.beforeSearch(id, searchUrl, inputValue)) {
+							var delay = ajaxConfig.delay;
+							if (ajaxConfig.first) {
+								ajaxConfig.first = false;
+								delay = 10;
+							}
+							clearTimeout(fs.clearid);
+							fs.clearid = setTimeout(function () {
+								reElem.find('dl > *:not(.' + FORM_SELECT_TIPS + ')').remove();
+								reElem.find('dd.' + FORM_NONE).addClass(FORM_EMPTY).text('请求中');
+								_this2.ajax(id, searchUrl, inputValue, false, null, true);
+							}, delay);
+						}
+					} else {
+						reElem.find('dl .layui-hide').removeClass('layui-hide');
+						//遍历选项, 选择可以显示的值
+						reElem.find('dl dd:not(.' + FORM_SELECT_TIPS + ')').each(function (idx, item) {
+							var _item = $(item);
+							var searchFun = data[id].config.filter || events.filter[id];
+							if (searchFun && searchFun(id, inputValue, {
+								name: _item.find('span').text(),
+								val: _item.attr('lay-value')
+							}, _item.hasClass(DISABLED)) == true) {
+								_item.addClass('layui-hide');
+							}
+						});
+						//控制分组名称
+						reElem.find('dl dt').each(function (index, item) {
+							if (!$(item).nextUntil('dt', ':not(.layui-hide)').length) {
+								$(item).addClass('layui-hide');
+							}
+						});
+						//动态创建
+						_this2.create(id, isCreate, inputValue);
+						var shows = reElem.find('dl dd:not(.' + FORM_SELECT_TIPS + '):not(.layui-hide)');
+						if (!shows.length) {
+							reElem.find('dd.' + FORM_NONE).addClass(FORM_EMPTY).text('无匹配项');
+						} else {
+							reElem.find('dd.' + FORM_NONE).removeClass(FORM_EMPTY);
+						}
+					}
+				});
+				if (searchUrl) {
+					//触发第一次请求事件
+					_this2.triggerSearch(reElem, true);
+				}
+			}
+		});
+	};
+
+	Common.prototype.isArray = function (obj) {
+		return Object.prototype.toString.call(obj) == "[object Array]";
+	};
+
+	Common.prototype.triggerSearch = function (div, isCall) {
+		(div ? [div] : $('.' + FORM_SELECT).toArray()).forEach(function (reElem, index) {
+			reElem = $(reElem);
+			var id = reElem.find('dl').attr('xid');
+			if (id && data[id] && data[id].config.isEmpty || isCall) {
+				var obj_caller = reElem.find('.' + INPUT)[0];
+				if (document.createEventObject) {
+					obj_caller.fireEvent("onchange");
+				} else {
+					var evt = document.createEvent("HTMLEvents");
+					evt.initEvent("input", false, true);
+					obj_caller.dispatchEvent(evt);
+				}
+			}
+		});
+	};
+
+	Common.prototype.ajax = function (id, searchUrl, inputValue, isLinkage, linkageWidth, isSearch) {
+		var _this3 = this;
+
+		var reElem = $('.' + PNAME + ' dl[xid="' + id + '"]').parents('.' + FORM_SELECT);
+		if (!reElem[0] || !searchUrl) {
+			return;
+		}
+
+		var ajaxConfig = ajaxs[id] ? ajaxs[id] : ajax;
+		var ajaxData = $.extend(true, {}, ajaxConfig.data);
+		ajaxData[ajaxConfig.searchName] = inputValue;
+		ajaxData['_'] = Date.now();
+		$.ajax({
+			type: ajaxConfig.type,
+			headers: ajaxConfig.header,
+			url: searchUrl,
+			data: ajaxConfig.dataType == 'json' ? JSON.stringify(ajaxData) : ajaxData,
+			success: function success(res) {
+				if (typeof res == 'string') {
+					res = JSON.parse(res);
+				}
+				ajaxConfig.beforeSuccess && ajaxConfig.beforeSuccess instanceof Function && (res = ajaxConfig.beforeSuccess(id, searchUrl, inputValue, res));
+				if (_this3.isArray(res)) {
+					res = {
+						code: 0,
+						msg: "",
+						data: res
+					};
+				}
+				if (res.code != 0) {
+					reElem.find('dd.' + FORM_NONE).addClass(FORM_EMPTY).text(res.msg);
+				} else {
+					reElem.find('dd.' + FORM_NONE).removeClass(FORM_EMPTY);
+					//获得已选择的values
+					_this3.renderData(id, res.data, isLinkage, linkageWidth, isSearch);
+					data[id].config.isEmpty = res.data.length == 0;
+				}
+				ajaxConfig.success && ajaxConfig.success instanceof Function && ajaxConfig.success(id, searchUrl, inputValue, res);
+			},
+			error: function error(err) {
+				reElem.find('dd[lay-value]:not(.' + FORM_SELECT_TIPS + ')').remove();
+				reElem.find('dd.' + FORM_NONE).addClass(FORM_EMPTY).text('服务异常');
+				ajaxConfig.error && ajaxConfig.error instanceof Function && ajaxConfig.error(id, searchUrl, inputValue, err);
+			}
+		});
+	};
+
+	Common.prototype.renderData = function (id, dataArr, linkage, linkageWidth, isSearch) {
+		var _this4 = this;
+
+		if (linkage) {
+			var _ret = function () {
+				//渲染多级联动
+				var result = [],
+				    index = 0,
+				    temp = { "0": dataArr },
+				    ajaxConfig = ajaxs[id] ? ajaxs[id] : ajax;
+
+				var _loop = function _loop() {
+					var group = result[index++] = [],
+					    _temp = temp;
+					temp = {};
+					$.each(_temp, function (pid, arr) {
+						$.each(arr, function (idx, item) {
+							var val = {
+								pid: pid,
+								name: item[ajaxConfig.keyName],
+								val: item[ajaxConfig.keyVal]
+							};
+							group.push(val);
+							var children = item[ajaxConfig.keyChildren];
+							if (children && children.length) {
+								temp[val.val] = children;
+							}
+						});
+					});
+				};
+
+				do {
+					_loop();
+				} while (Object.getOwnPropertyNames(temp).length);
+
+				var reElem = $('.' + PNAME + ' dl[xid="' + id + '"]').parents('.' + FORM_SELECT);
+				var html = ['<div class="xm-select-linkage">'];
+
+				$.each(result, function (idx, arr) {
+					var groupDiv = ['<div style="left: ' + (linkageWidth - 0) * idx + 'px;" class="xm-select-linkage-group xm-select-linkage-group' + (idx + 1) + ' ' + (idx != 0 ? 'xm-select-linkage-hide' : '') + '">'];
+					$.each(arr, function (idx2, item) {
+						var span = '<li title="' + item.name + '" pid="' + item.pid + '" value="' + item.val + '"><span>' + item.name + '</span></li>';
+						groupDiv.push(span);
+					});
+					groupDiv.push('</div>');
+					html = html.concat(groupDiv);
+				});
+				//			<li class="xm-select-this xm-select-active"><span>123</span></li>
+				html.push('<div style="clear: both; height: 288px;"></div>');
+				html.push('</div>');
+				reElem.find('dl').html(html.join(''));
+				reElem.find('.' + INPUT).css('display', 'none'); //联动暂时不支持搜索
+				return {
+					v: void 0
+				};
+			}();
+
+			if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v;
+		}
+
+		var reElem = $('.' + PNAME + ' dl[xid="' + id + '"]').parents('.' + FORM_SELECT);
+		var ajaxConfig = ajaxs[id] ? ajaxs[id] : ajax;
+		var pcInput = reElem.find('.' + TDIV + ' input');
+
+		var values = [];
+		reElem.find('dl').html(this.renderSelect(id, pcInput.attr('placeholder') || pcInput.attr('back'), dataArr.map(function (item) {
+			if (item[ajaxConfig.keySel]) {
+				values.push({
+					name: item[ajaxConfig.keyName],
+					val: item[ajaxConfig.keyVal]
+				});
+			}
+			return {
+				innerHTML: item[ajaxConfig.keyName],
+				value: item[ajaxConfig.keyVal],
+				sel: item[ajaxConfig.keySel],
+				disabled: item[ajaxConfig.keyDis],
+				type: item.type,
+				name: item.name
+			};
+		})));
+
+		var label = reElem.find('.' + LABEL);
+		var dl = reElem.find('dl[xid]');
+		if (isSearch) {
+			//如果是远程搜索, 这里需要判重
+			var oldVal = data[id].values;
+			oldVal.forEach(function (item, index) {
+				dl.find('dd[lay-value="' + item.val + '"]').addClass(THIS);
+			});
+			values.forEach(function (item, index) {
+				if (_this4.indexOf(oldVal, item) == -1) {
+					_this4.addLabel(id, label, item);
+					dl.find('dd[lay-value="' + item.val + '"]').addClass(THIS);
+					oldVal.push(item);
+				}
+			});
+		} else {
+			values.forEach(function (item, index) {
+				_this4.addLabel(id, label, item);
+				dl.find('dd[lay-value="' + item.val + '"]').addClass(THIS);
+			});
+			data[id].values = values;
+		}
+		this.commonHanler(id, label);
+	};
+
+	Common.prototype.create = function (id, isCreate, inputValue) {
+		if (isCreate && inputValue) {
+			var fs = data[id],
+			    dl = $('[xid="' + id + '"]'),
+			    tips = dl.find('dd.' + FORM_SELECT_TIPS + ':first'),
+			    tdd = null,
+			    temp = dl.find('dd.' + TEMP);
+			dl.find('dd:not(.' + FORM_SELECT_TIPS + '):not(.' + TEMP + ')').each(function (index, item) {
+				if (inputValue == $(item).find('span').text()) {
+					tdd = item;
+				}
+			});
+			if (!tdd) {
+				//如果不存在, 则创建
+				if (temp[0]) {
+					temp.attr('lay-value', inputValue);
+					temp.find('span').text(inputValue);
+					temp.removeClass('layui-hide');
+				} else {
+					tips.after($(this.createDD({
+						innerHTML: inputValue,
+						value: Date.now()
+					}, TEMP + ' ' + CREATE_LONG)));
+				}
+			}
+		} else {
+			$('[xid=' + id + '] dd.' + TEMP).remove();
+		}
+	};
+
+	Common.prototype.createDD = function (item, clz) {
+		return '<dd lay-value="' + item.value + '" class="' + (item.disabled ? DISABLED : '') + ' ' + (clz ? clz : '') + '">\n\t\t\t\t\t<div class="xm-unselect xm-form-checkbox ' + (item.disabled ? 'layui-checkbox-disbaled ' + DISABLED : '') + '" lay-skin="primary">\n\t\t\t\t\t\t<span>' + $.trim(item.innerHTML) + '</span>\n\t\t\t\t\t\t<i class="' + CHECKBOX_YES + '"></i>\n\t\t\t\t\t</div>\n\t\t\t\t</dd>';
+	};
+
+	Common.prototype.createQuickBtn = function (obj, right) {
+		return '<div class="' + CZ + '" method="' + obj.name + '" title="' + obj.name + '" ' + (right ? 'style="margin-right: ' + right + '"' : '') + '><i class="' + obj.icon + '"></i><span>' + obj.name + '</span></div>';
+	};
+
+	Common.prototype.renderBtns = function (id, show, right) {
+		var _this5 = this;
+
+		var quickBtn = [];
+		var dl = $('dl[xid="' + id + '"]');
+		quickBtn.push('<div class="' + CZ_GROUP + '" show="' + show + '" style="max-width: ' + (dl.prev().width() - 54) + 'px;">');
+		$.each(data[id].config.btns, function (index, item) {
+			quickBtn.push(_this5.createQuickBtn(item, right));
+		});
+		quickBtn.push('</div>');
+		quickBtn.push(this.createQuickBtn({ icon: 'iconfont icon-caidan', name: '' }));
+		return quickBtn.join('');
+	};
+
+	Common.prototype.renderSelect = function (id, tips, select) {
+		var _this6 = this;
+
+		var arr = [];
+		if (data[id].config.btns.length) {
+			setTimeout(function () {
+				var dl = $('dl[xid="' + id + '"]');
+				dl.find('.' + CZ_GROUP).css('max-width', dl.prev().width() - 54 + 'px');
+			}, 10);
+			arr.push(['<dd lay-value="" class="' + FORM_SELECT_TIPS + '" style="background-color: #FFF!important;">', this.renderBtns(id, null, '30px'), '</dd>'].join(''));
+		} else {
+			arr.push('<dd lay-value="" class="' + FORM_SELECT_TIPS + '">' + tips + '</dd>');
+		}
+		if (this.isArray(select)) {
+			$(select).each(function (index, item) {
+				if (item.type === 'optgroup') {
+					arr.push('<dt>' + item.name + '</dt>');
+				} else {
+					arr.push(_this6.createDD(item));
+				}
+			});
+		} else {
+			$(select).find('*').each(function (index, item) {
+				if (item.tagName.toLowerCase() == 'option' && index == 0 && !item.value) {
+					return;
+				}
+				if (item.tagName.toLowerCase() === 'optgroup') {
+					arr.push('<dt>' + item.label + '</dt>');
+				} else {
+					arr.push(_this6.createDD(item));
+				}
+			});
+		}
+		arr.push('<dt style="display:none;"> </dt>');
+		arr.push('<dd class="' + FORM_SELECT_TIPS + ' ' + FORM_NONE + ' ' + (arr.length === 2 ? FORM_EMPTY : '') + '">\u6CA1\u6709\u9009\u9879</dd>');
+		return arr.join('');
+	};
+
+	Common.prototype.on = function () {
+		var _this7 = this;
+
+		//事件绑定
+		this.one();
+
+		$(document).on('click', function (e) {
+			if (!$(e.target).parents('.' + FORM_TITLE)[0]) {
+				//清空input中的值
+				$('.' + INPUT).val('');
+				$('.' + PNAME + ' dl .layui-hide').removeClass('layui-hide');
+				$('.' + PNAME + ' dl dd.' + TEMP).remove();
+				_this7.triggerSearch();
+			}
+			$('.' + PNAME + ' .' + FORM_SELECTED).removeClass(FORM_SELECTED);
+		});
+	};
+
+	Common.prototype.one = function (target) {
+		var _this8 = this;
+
+		//一次性事件绑定
+		$(target ? target : document).find('.' + FORM_TITLE).off('click').on('click', function (e) {
+			var othis = $(e.target),
+			    title = othis.is(FORM_TITLE) ? othis : othis.parents('.' + FORM_TITLE),
+			    dl = title.next(),
+			    id = dl.attr('xid');
+
+			//清空非本select的input val
+			$('dl[xid]').not(dl).prev().find('.' + INPUT).val('');
+			$('dl[xid]').not(dl).find('dd.layui-hide').removeClass('layui-hide');
+
+			//如果是disabled select
+			if (title.hasClass(DIS)) {
+				return false;
+			}
+			//如果点击的是右边的三角或者只读的input
+			if (othis.is('.' + SANJIAO) || othis.is('.' + INPUT + '[readonly]')) {
+				_this8.changeShow(title, !title.parents('.' + FORM_SELECT).hasClass(FORM_SELECTED));
+				return false;
+			}
+			//如果点击的是input的右边, focus一下
+			if (title.find('.' + INPUT + ':not(readonly)')[0]) {
+				var input = title.find('.' + INPUT),
+				    epos = { x: e.pageX, y: e.pageY },
+				    pos = _this8.getPosition(title[0]),
+				    width = title.width();
+				while (epos.x > pos.x) {
+					if ($(document.elementFromPoint(epos.x, epos.y)).is(input)) {
+						input.focus();
+						_this8.changeShow(title, true);
+						return false;
+					}
+					epos.x -= 50;
+				}
+			}
+
+			//如果点击的是可搜索的input
+			if (othis.is('.' + INPUT)) {
+				_this8.changeShow(title, true);
+				return false;
+			}
+			//如果点击的是x按钮
+			if (othis.is('i[fsw="' + NAME + '"]')) {
+				var val = {
+					name: othis.prev().text(),
+					val: othis.parent().attr("value")
+				},
+				    dd = dl.find('dd[lay-value=\'' + val.val + '\']');
+				if (dd.hasClass(DISABLED)) {
+					//如果是disabled状态, 不可选, 不可删
+					return false;
+				}
+				_this8.handlerLabel(id, dd, false, val);
+				return false;
+			}
+
+			_this8.changeShow(title, !title.parents('.' + FORM_SELECT).hasClass(FORM_SELECTED));
+			return false;
+		});
+		$(target ? target : document).find('dl.' + DL).off('click').on('click', function (e) {
+			var othis = $(e.target);
+			if (othis.is('.' + LINKAGE) || othis.parents('.' + LINKAGE)[0]) {
+				//linkage的处理
+				othis = othis.is('li') ? othis : othis.parents('li');
+				var _group = othis.parents('.xm-select-linkage-group'),
+				    _id = othis.parents('dl').attr('xid');
+				//激活li
+				_group.find('.xm-select-active').removeClass('xm-select-active');
+				othis.addClass('xm-select-active');
+				//激活下一个group, 激活前显示对应数据
+				_group.nextAll('.xm-select-linkage-group').addClass('xm-select-linkage-hide');
+				var nextGroup = _group.next('.xm-select-linkage-group');
+				nextGroup.find('li').addClass('xm-select-linkage-hide');
+				nextGroup.find('li[pid="' + othis.attr('value') + '"]').removeClass('xm-select-linkage-hide');
+				//如果没有下一个group, 或没有对应的值
+				if (!nextGroup[0] || nextGroup.find('li:not(.xm-select-linkage-hide)').length == 0) {
+					var vals = [],
+					    index = 0,
+					    _isAdd = !othis.hasClass('xm-select-this');
+					if (data[_id].config.radio) {
+						othis.parents('.xm-select-linkage').find('.xm-select-this').removeClass('xm-select-this');
+					}
+					do {
+						vals[index++] = {
+							name: othis.find('span').text(),
+							val: othis.attr('value')
+							/*isAdd ? (
+       	othis.addClass('xm-select-this')
+       ) : (
+       	!othis.parent('.xm-select-linkage-group').next().find(`li[pid="${othis.attr('value')}"].xm-select-this`).length && othis.removeClass('xm-select-this')
+       );*/
+						};othis = othis.parents('.xm-select-linkage-group').prev().find('li[value="' + othis.attr('pid') + '"]');
+					} while (othis.length);
+					vals.reverse();
+					var val = {
+						name: vals.map(function (item) {
+							return item.name;
+						}).join('/'),
+						val: vals.map(function (item) {
+							return item.val;
+						}).join('/')
+					};
+					_this8.handlerLabel(_id, null, _isAdd, val);
+				} else {
+					nextGroup.removeClass('xm-select-linkage-hide');
+				}
+				return false;
+			} //xm-select-this xm-select-active
+
+			if (othis.is('dt') || othis.is('dl')) {
+				return false;
+			}
+			var dd = othis.is('dd') ? othis : othis.parents('dd');
+			var id = dd.parent('dl').attr('xid');
+			if (dd.hasClass(DISABLED)) {
+				//被禁用选项的处理
+				return false;
+			}
+			if (dd.hasClass(FORM_SELECT_TIPS)) {
+				//tips的处理
+				var btn = othis.is('.' + CZ) ? othis : othis.parents('.' + CZ);
+				if (!btn[0]) {
+					return false;
+				}
+				//TODO 快捷操作
+				var method = btn.attr('method');
+				var obj = data[id].config.btns.filter(function (bean) {
+					return bean.name == method;
+				})[0];
+				obj && obj.click && obj.click instanceof Function && obj.click(id, _this8);
+				return false;
+			}
+			var isAdd = !dd.hasClass(THIS);
+			_this8.handlerLabel(id, dd, isAdd);
+			return false;
+		});
+	};
+
+	Common.prototype.linkageAdd = function (id, val) {
+		var dl = $('dl[xid="' + id + '"]');
+		dl.find('.xm-select-active').removeClass('xm-select-active');
+		var vs = val.val.split('/');
+		var pid = void 0,
+		    li = void 0,
+		    index = 0;
+		var lis = [];
+		do {
+			pid = vs[index];
+			li = dl.find('.xm-select-linkage-group' + (index + 1) + ' li[value="' + pid + '"]');
+			li[0] && lis.push(li);
+			index++;
+		} while (li.length && pid != undefined);
+		if (lis.length == vs.length) {
+			$.each(lis, function (idx, item) {
+				item.addClass('xm-select-this');
+			});
+		}
+	};
+
+	Common.prototype.linkageDel = function (id, val) {
+		var dl = $('dl[xid="' + id + '"]');
+		var vs = val.val.split('/');
+		var pid = void 0,
+		    li = void 0,
+		    index = vs.length - 1;
+		do {
+			pid = vs[index];
+			li = dl.find('.xm-select-linkage-group' + (index + 1) + ' li[value="' + pid + '"]');
+			if (!li.parent().next().find('li[pid=' + pid + '].xm-select-this').length) {
+				li.removeClass('xm-select-this');
+			}
+			index--;
+		} while (li.length && pid != undefined);
+	};
+
+	Common.prototype.valToName = function (id, val) {
+		var dl = $('dl[xid="' + id + '"]');
+		var vs = (val + "").split('/');
+		var names = [];
+		$.each(vs, function (idx, item) {
+			var name = dl.find('.xm-select-linkage-group' + (idx + 1) + ' li[value="' + item + '"] span').text();
+			names.push(name);
+		});
+		return names.length == vs.length ? names.join('/') : null;
+	};
+
+	Common.prototype.commonHanler = function (key, label) {
+		//计算input的提示语
+		this.changePlaceHolder(label);
+		//计算高度
+		this.retop(label.parents('.' + FORM_SELECT));
+		this.checkHideSpan(label);
+		this.calcLeft(key, label);
+		//表单默认值
+		label.parents('.' + PNAME).find('.' + HIDE_INPUT).val(data[key].values.map(function (val) {
+			return val.val;
+		}).join(','));
+		//title值
+		label.parents('.' + FORM_TITLE + ' .' + NAME).attr('title', data[key].values.map(function (val) {
+			return val.name;
+		}).join(','));
+	};
+
+	Common.prototype.initVal = function (id) {
+		var _this9 = this;
+
+		var target = {};
+		if (id) {
+			target[id] = data[id];
+		} else {
+			target = data;
+		}
+		$.each(target, function (key, val) {
+			var values = val.values,
+			    div = $('dl[xid="' + key + '"]').parent(),
+			    label = div.find('.' + LABEL),
+			    dl = div.find('dl');
+			dl.find('dd.' + THIS).removeClass(THIS);
+
+			var _vals = values.concat([]);
+			_vals.concat([]).forEach(function (item, index) {
+				_this9.addLabel(key, label, item);
+				dl.find('dd[lay-value="' + item.val + '"]').addClass(THIS);
+			});
+			if (val.config.radio) {
+				_vals.length && values.push(_vals[_vals.length - 1]);
+			}
+			_this9.commonHanler(key, label);
+		});
+	};
+
+	Common.prototype.handlerLabel = function (id, dd, isAdd, oval, notOn) {
+		var div = $('[xid="' + id + '"]').prev().find('.' + LABEL),
+		    val = dd && {
+			name: dd.find('span').text(),
+			val: dd.attr('lay-value')
+		},
+		    vals = data[id].values,
+		    on = data[id].config.on || events.on[id];
+		if (oval) {
+			val = oval;
+		}
+		var fs = data[id];
+		if (isAdd && fs.config.max && fs.values.length >= fs.config.max) {
+			var maxTipsFun = data[id].config.maxTips || events.maxTips[id];
+			maxTipsFun && maxTipsFun(id, vals.concat([]), val, fs.max);
+			return;
+		}
+		if (!notOn) {
+			if (on && on instanceof Function && on(id, vals.concat([]), val, isAdd, dd && dd.hasClass(DISABLED) == false)) {
+				return;
+			}
+		}
+		var dl = $('dl[xid="' + id + '"]');
+		isAdd ? (dd && dd[0] ? (dd.addClass(THIS), dd.removeClass(TEMP)) : dl.find('.xm-select-linkage')[0] && this.linkageAdd(id, val), this.addLabel(id, div, val), vals.push(val)) : (dd && dd[0] ? dd.removeClass(THIS) : dl.find('.xm-select-linkage')[0] && this.linkageDel(id, val), this.delLabel(id, div, val), this.remove(vals, val));
+		if (!div[0]) return;
+		//单选选完后直接关闭选择域
+		if (fs.config.radio) {
+			this.changeShow(div, false);
+		}
+		//移除表单验证的红色边框
+		div.parents('.' + FORM_TITLE).prev().removeClass('layui-form-danger');
+
+		//清空搜索值
+		fs.config.clearInput && div.parents('.' + PNAME).find('.' + INPUT).val('');
+
+		this.commonHanler(id, div);
+	};
+
+	Common.prototype.addLabel = function (id, div, val) {
+		if (!val) return;
+		var tips = 'fsw="' + NAME + '"';
+		var _ref = [$('<span ' + tips + ' value="' + val.val + '"><font ' + tips + '>' + val.name + '</font></span>'), $('<i ' + tips + ' class="xm-icon-close">\xD7</i>')],
+		    $label = _ref[0],
+		    $close = _ref[1];
+
+		$label.append($close);
+		//如果是radio模式
+		var fs = data[id];
+		if (fs.config.radio) {
+			fs.values.length = 0;
+			$('dl[xid="' + id + '"]').find('dd.' + THIS + ':not([lay-value="' + val.val + '"])').removeClass(THIS);
+			div.find('span').remove();
+		}
+		//如果是固定高度
+		if (fs.config.height) {
+			div.append($label);
+		} else {
+			div.find('input').css('width', '50px');
+			div.find('input').before($label);
+		}
+	};
+
+	Common.prototype.delLabel = function (id, div, val) {
+		if (!val) return;
+		div.find('span[value="' + val.val + '"]:first').remove();
+	};
+
+	Common.prototype.calcLeft = function (id, div) {
+		if (data[id].config.height) {
+			var showLastSpan = div.find('span:not(.xm-span-hide):last')[0];
+			div.next().css('left', (showLastSpan ? this.getPosition(showLastSpan).x - this.getPosition(div[0]).x + showLastSpan.offsetWidth + 20 : 10) + 'px');
+		}
+	};
+
+	Common.prototype.checkHideSpan = function (div) {
+		var _this10 = this;
+
+		var parentHeight = div.parents('.' + NAME)[0].offsetHeight + 5;
+		div.find('span.xm-span-hide').removeClass('xm-span-hide');
+		div.find('span').each(function (index, item) {
+			if (item.offsetHeight + item.offsetTop > parentHeight || _this10.getPosition(item).y + item.offsetHeight > _this10.getPosition(div[0]).y + div[0].offsetHeight + 5) {
+				$(item).addClass('xm-span-hide');
+			}
+		});
+	};
+
+	Common.prototype.retop = function (div) {
+		//计算dl显示的位置
+		var dl = div.find('dl'),
+		    top = div.offset().top + div.outerHeight() + 5 - $win.scrollTop(),
+		    dlHeight = dl.outerHeight();
+		var up = div.hasClass('layui-form-selectup') || dl.css('top').indexOf('-') != -1 || top + dlHeight > $win.height() && top >= dlHeight;
+		div = div.find('.' + NAME);
+
+		var fs = data[dl.attr('xid')];
+		var base = dl.parents('.layui-form-pane')[0] && dl.prev()[0].clientHeight > 38 ? 14 : 10;
+		if (fs) {
+			if (fs.config.direction == 'up') {
+				dl.css({
+					top: 'auto',
+					bottom: '42px'
+				});
+				return;
+			}
+			if (fs.direction == 'down') {
+				dl.css({
+					top: div[0].offsetTop + div.height() + base + 'px',
+					bottom: 'auto'
+				});
+				return;
+			}
+		}
+
+		if (up) {
+			dl.css({
+				top: 'auto',
+				bottom: '42px'
+			});
+		} else {
+			dl.css({
+				top: div[0].offsetTop + div.height() + base + 'px',
+				bottom: 'auto'
+			});
+		}
+	};
+
+	Common.prototype.changeShow = function (children, isShow) {
+		//显示于隐藏
+		var top = children.parents('.' + FORM_SELECT);
+		$('.' + PNAME + ' .' + FORM_SELECT).not(top).removeClass(FORM_SELECTED);
+		if (isShow) {
+			this.retop(top);
+			top.addClass(FORM_SELECTED);
+			top.find('.' + INPUT).focus();
+		} else {
+			top.removeClass(FORM_SELECTED);
+			top.find('.' + INPUT).val('');
+			top.find('dl .layui-hide').removeClass('layui-hide');
+			top.find('dl dd.' + TEMP).remove();
+			//计算ajax数据是否为空, 然后重新请求数据
+			var id = top.find('dl').attr('xid');
+			if (id && data[id] && data[id].config.isEmpty) {
+				this.triggerSearch(top);
+			}
+		}
+	};
+
+	Common.prototype.changePlaceHolder = function (div) {
+		//显示于隐藏提示语
+		//调整pane模式下的高度
+		var title = div.parents('.' + FORM_TITLE);
+
+		var id = div.parents('.' + PNAME).find('dl[xid]').attr('xid');
+		if (data[id] && data[id].config.height) {//既然固定高度了, 那就看着办吧
+
+		} else {
+			var height = title.find('.' + NAME)[0].clientHeight;
+			title.css('height', (height > 34 ? height + 4 : height) + 'px');
+			//如果是layui pane模式, 处理label的高度
+			var label = title.parents('.' + PNAME).parent().prev();
+			if (label.is('.layui-form-label') && title.parents('.layui-form-pane')[0]) {
+				height = height > 36 ? height + 4 : height;
+				title.css('height', height + 'px');
+				label.css({
+					height: height + 2 + 'px',
+					lineHeight: height - 18 + 'px'
+				});
+			}
+		}
+
+		var input = title.find('.' + TDIV + ' input'),
+		    isShow = !div.find('span:last')[0] && !title.find('.' + INPUT).val();
+		if (isShow) {
+			var ph = input.attr('back');
+			input.removeAttr('back');
+			input.attr('placeholder', ph);
+		} else {
+			var _ph = input.attr('placeholder');
+			input.removeAttr('placeholder');
+			input.attr('back', _ph);
+		}
+	};
+
+	Common.prototype.indexOf = function (arr, val) {
+		for (var i = 0; i < arr.length; i++) {
+			if (arr[i].val == val || arr[i].val == (val ? val.val : val) || arr[i] == val || JSON.stringify(arr[i]) == JSON.stringify(val)) {
+				return i;
+			}
+		}
+		return -1;
+	};
+
+	Common.prototype.remove = function (arr, val) {
+		var idx = this.indexOf(arr, val ? val.val : val);
+		if (idx > -1) {
+			arr.splice(idx, 1);
+			return true;
+		}
+		return false;
+	};
+
+	Common.prototype.selectAll = function (id, isOn, skipDis) {
+		var _this11 = this;
+
+		var dl = $('[xid="' + id + '"]');
+		if (dl.find('.xm-select-linkage')[0]) {
+			return;
+		}
+		dl.find('dd[lay-value]:not(.' + FORM_SELECT_TIPS + '):not(.' + THIS + ')' + (skipDis ? ':not(.' + DISABLED + ')' : '')).each(function (index, item) {
+			item = $(item);
+			var val = {
+				name: item.find('span').text(),
+				val: item.attr('lay-value')
+			};
+			_this11.handlerLabel(id, dl.find('dd[lay-value="' + val.val + '"]'), true, val, !isOn);
+		});
+	};
+
+	Common.prototype.removeAll = function (id, isOn, skipDis) {
+		var _this12 = this;
+
+		var dl = $('[xid="' + id + '"]');
+		if (dl.find('.xm-select-linkage')[0]) {
+			//针对多级联动的处理
+			data[id].values.concat([]).forEach(function (item, idx) {
+				var vs = item.val.split('/');
+				var pid = void 0,
+				    li = void 0,
+				    index = 0;
+				do {
+					pid = vs[index++];
+					li = dl.find('.xm-select-linkage-group' + index + ':not(.xm-select-linkage-hide) li[value="' + pid + '"]');
+					li.click();
+				} while (li.length && pid != undefined);
+			});
+			return;
+		}
+		data[id].values.concat([]).forEach(function (item, index) {
+			if (skipDis && dl.find('dd[lay-value="' + item.val + '"]').hasClass(DISABLED)) {} else {
+				_this12.handlerLabel(id, dl.find('dd[lay-value="' + item.val + '"]'), false, item, !isOn);
+			}
+		});
+	};
+
+	Common.prototype.reverse = function (id, isOn, skipDis) {
+		var _this13 = this;
+
+		var dl = $('[xid="' + id + '"]');
+		if (dl.find('.xm-select-linkage')[0]) {
+			return;
+		}
+		dl.find('dd[lay-value]:not(.' + FORM_SELECT_TIPS + ')' + (skipDis ? ':not(.' + DISABLED + ')' : '')).each(function (index, item) {
+			item = $(item);
+			var val = {
+				name: item.find('span').text(),
+				val: item.attr('lay-value')
+			};
+			_this13.handlerLabel(id, dl.find('dd[lay-value="' + val.val + '"]'), !item.hasClass(THIS), val, !isOn);
+		});
+	};
+
+	Common.prototype.skin = function (id) {
+		var skins = ['default', 'primary', 'normal', 'warm', 'danger'];
+		var skin = skins[Math.floor(Math.random() * skins.length)];
+		$('dl[xid="' + id + '"]').parents('.' + PNAME).find('.' + FORM_SELECT).attr('xm-select-skin', skin);
+		this.commonHanler(id, $('dl[xid="' + id + '"]').parents('.' + PNAME).find('.' + LABEL));
+	};
+
+	Common.prototype.getPosition = function (e) {
+		var x = 0,
+		    y = 0;
+		while (e != null) {
+			x += e.offsetLeft;
+			y += e.offsetTop;
+			e = e.offsetParent;
+		}
+		return { x: x, y: y };
+	};
+
+	Common.prototype.onreset = function () {
+		//监听reset按钮, 然后重置多选
+		$(document).on('click', '[type=reset]', function (e) {
+			$(e.target).parents('form').find('.' + PNAME + ' dl[xid]').each(function (index, item) {
+				var id = item.getAttribute('xid'),
+				    dl = $(item),
+				    dd = void 0,
+				    temp = {};
+				common.removeAll(id);
+				data[id].config.init.forEach(function (val, idx) {
+					if (val && (!temp[val] || data[id].config.repeat) && (dd = dl.find('dd[lay-value="' + val.val + '"]'))[0]) {
+						common.handlerLabel(id, dd, true);
+						temp[val] = 1;
+					}
+				});
+			});
+		});
+	};
+
+	Common.prototype.loadingCss = function () {};
+
+	Common.prototype.listening = function () {
+		//TODO 用于监听dom结构变化, 如果出现新的为渲染select, 则自动进行渲染
+		var flag = false;
+		var index = 0;
+		$(document).on('DOMNodeInserted', function (e) {
+			if (flag) {
+				//避免递归渲染
+				return;
+			}
+			flag = true;
+			//渲染select
+			$('select[' + NAME + ']').each(function (index, select) {
+				var sid = select.getAttribute(NAME);
+				common.init(select);
+				common.one($('dl[xid="' + sid + '"]').parents('.' + PNAME));
+				common.initVal(sid);
+			});
+
+			flag = false;
+		});
+	};
+
+	var Select4 = function Select4() {
+		this.v = v;
+	};
+	var common = new Common();
+
+	Select4.prototype.value = function (id, type, isAppend) {
+		if (typeof id != 'string') {
+			return [];
+		}
+		var fs = data[id];
+		if (!fs) {
+			return [];
+		}
+		if (typeof type == 'string' || type == undefined) {
+			var arr = fs.values.concat([]) || [];
+			if (type == 'val') {
+				return arr.map(function (val) {
+					return val.val;
+				});
+			}
+			if (type == 'valStr') {
+				return arr.map(function (val) {
+					return val.val;
+				}).join(',');
+			}
+			if (type == 'name') {
+				return arr.map(function (val) {
+					return val.name;
+				});
+			}
+			if (type == 'nameStr') {
+				return arr.map(function (val) {
+					return val.name;
+				}).join(',');
+			}
+			return arr;
+		}
+		if (common.isArray(type)) {
+			var dl = $('[xid="' + id + '"]'),
+			    temp = {},
+			    dd = void 0,
+			    isAdd = true;
+			if (isAppend == false) {
+				//删除传入的数组
+				isAdd = false;
+			} else if (isAppend == true) {
+				//追加模式
+				isAdd = true;
+			} else {
+				//删除原有的数据
+				common.removeAll(id);
+			}
+			if (isAdd) {
+				fs.values.forEach(function (val, index) {
+					temp[val.val] = 1;
+				});
+			}
+			type.forEach(function (val, index) {
+				if (val && (!temp[val] || fs.config.repeat)) {
+					if ((dd = dl.find('dd[lay-value="' + val + '"]'))[0]) {
+						common.handlerLabel(id, dd, isAdd, null, true);
+						temp[val] = 1;
+					} else {
+						var name = common.valToName(id, val);
+						if (name) {
+							common.handlerLabel(id, dd, isAdd, {
+								name: name,
+								val: val
+							}, true);
+							temp[val] = 1;
+						}
+					}
+				}
+			});
+		}
+	};
+
+	Common.prototype.bindEvent = function (name, id, fun) {
+		if (id && id instanceof Function) {
+			fun = id;
+			id = null;
+		}
+		if (fun && fun instanceof Function) {
+			if (!id) {
+				$.each(data, function (id, val) {
+					data[id] ? data[id].config[name] = fun : events[name][id] = fun;
+				});
+			} else {
+				data[id] ? data[id].config[name] = fun : events[name][id] = fun;
+			}
+		}
+	};
+
+	Select4.prototype.on = function (id, fun) {
+		common.bindEvent('on', id, fun);
+		return this;
+	};
+
+	Select4.prototype.filter = function (id, fun) {
+		common.bindEvent('filter', id, fun);
+		return this;
+	};
+
+	Select4.prototype.maxTips = function (id, fun) {
+		common.bindEvent('maxTips', id, fun);
+		return this;
+	};
+
+	Select4.prototype.config = function (id, config, isJson) {
+		if (id && (typeof id === 'undefined' ? 'undefined' : _typeof(id)) == 'object') {
+			isJson = config == true;
+			config = id;
+			id = null;
+		}
+		if (config && (typeof config === 'undefined' ? 'undefined' : _typeof(config)) == 'object') {
+			if (isJson) {
+				config.header || (config.header = {});
+				config.header['Content-Type'] = 'application/json; charset=UTF-8';
+				config.dataType = 'json';
+			}
+			id ? (ajaxs[id] = $.extend(true, {}, ajax, config), data[id] && (data[id].config.direction = config.direction), config.searchUrl && data[id] && common.triggerSearch($('.' + PNAME + ' dl[xid="' + id + '"]').parents('.' + FORM_SELECT), true)) : $.extend(true, ajax, config);
+		}
+		return this;
+	};
+
+	Select4.prototype.render = function (id) {
+		var _this14 = this;
+
+		var target = {};
+		id ? data[id] && (target[id] = data[id]) : data;
+
+		if (Object.getOwnPropertyNames(target).length) {
+			$.each(target, function (key, val) {
+				//恢复初始值
+				var dl = $('dl[xid="' + key + '"]'),
+				    vals = [];
+				val.select.find('option[selected]').each(function (index, item) {
+					vals.push(item.value);
+				});
+				//移除创建元素
+				dl.find('.' + CREATE_LONG).remove();
+				//清空INPUT
+				dl.prev().find('.' + INPUT).val('');
+				//触发search
+				common.triggerSearch(dl.parents('.' + FORM_SELECT), true);
+				//移除hidn
+				dl.find('.layui-hide').removeClass('layui-hide');
+				//重新赋值
+				_this14.value(key, vals);
+			});
+		}
+		($('select[' + NAME + '="' + id + '"]')[0] ? $('select[' + NAME + '="' + id + '"]') : $('select[' + NAME + ']')).each(function (index, select) {
+			var sid = select.getAttribute(NAME);
+			common.init(select);
+			common.one($('dl[xid="' + sid + '"]').parents('.' + PNAME));
+			common.initVal(sid);
+		});
+		return this;
+	};
+
+	Select4.prototype.disabled = function (id) {
+		var target = {};
+		id ? data[id] && (target[id] = data[id]) : target = data;
+
+		$.each(target, function (key, val) {
+			$('dl[xid="' + key + '"]').prev().addClass(DIS);
+		});
+		return this;
+	};
+
+	Select4.prototype.undisabled = function (id) {
+		var target = {};
+		id ? data[id] && (target[id] = data[id]) : target = data;
+
+		$.each(target, function (key, val) {
+			$('dl[xid="' + key + '"]').prev().removeClass(DIS);
+		});
+		return this;
+	};
+
+	Select4.prototype.data = function (id, type, config) {
+		if (!id || !type || !config) {
+			return this;
+		}
+		//检测该id是否尚未渲染
+		!data[id] && this.render(id).value(id, []);
+		this.config(id, config);
+		if (type == 'local') {
+			common.renderData(id, config.arr, config.linkage == true, config.linkageWidth ? config.linkageWidth : '100');
+		} else if (type == 'server') {
+			common.ajax(id, config.url, config.keyword, config.linkage == true, config.linkageWidth ? config.linkageWidth : '100');
+		}
+		return this;
+	};
+
+	Select4.prototype.btns = function (id, btns, config) {
+		if (!btns || !common.isArray(btns)) {
+			return this;
+		};
+		var target = {};
+		id ? data[id] && (target[id] = data[id]) : target = data;
+
+		btns = btns.map(function (obj) {
+			if (typeof obj == 'string') {
+				if (obj == 'select') {
+					return quickBtns[0];
+				}
+				if (obj == 'remove') {
+					return quickBtns[1];
+				}
+				if (obj == 'reverse') {
+					return quickBtns[2];
+				}
+				if (obj == 'skin') {
+					return quickBtns[3];
+				}
+			}
+			return obj;
+		});
+
+		$.each(target, function (key, val) {
+			val.config.btns = btns;
+			var dd = $('dl[xid="' + key + '"]').find('.' + FORM_SELECT_TIPS + ':first');
+			if (btns.length) {
+				var show = config && config.show && (config.show == 'name' || config.show == 'icon') ? config.show : '';
+				var html = common.renderBtns(key, show, config && config.space ? config.space : '30px');
+				dd.html(html);
+			} else {
+				var pcInput = dd.parents('.' + FORM_SELECT).find('.' + TDIV + ' input');
+				var _html = pcInput.attr('placeholder') || pcInput.attr('back');
+				dd.html(_html);
+				dd.removeAttr('style');
+			}
+		});
+
+		return this;
+	};
+
+	Select4.prototype.search = function (id, val) {
+		if (id && data[id]) {
+			ajaxs[id] = $.extend(true, {}, ajax, {
+				first: true,
+				searchVal: val
+			});
+			common.triggerSearch($('dl[xid="' + id + '"]').parents('.' + FORM_SELECT), true);
+		}
+		return this;
+	};
+
+	return new Select4();
+});
\ No newline at end of file
diff --git a/src/main/resources/static/custom/module/index.js b/src/main/resources/static/custom/module/index.js
new file mode 100755
index 0000000..1217d02
--- /dev/null
+++ b/src/main/resources/static/custom/module/index.js
@@ -0,0 +1,158 @@
+layui.define(['admin', 'layer', 'element'], function (exports) {
+    var admin = layui.admin;
+    var layer = layui.layer;
+    var element = layui.element;
+
+    var index = {
+        pageTabs: true,  // 是否开启多标签
+        // 路由注册
+        initRouter: function () {
+            // 自动扫描side菜单注册
+            $('.layui-layout-admin .layui-side .layui-nav a[lay-href]').each(function () {
+                var menuName = $(this).text();
+                var menuPath = $(this).attr('lay-href');
+                if ('javascript:;' != menuPath && '' != menuPath) {
+                    var key = menuPath.replace(/[?:=&/]/g, '_');
+                    $(this).attr('href', '#!' + key);
+                    Q.reg(key, function () {
+                        index.loadView({
+                            menuId: key,
+                            menuPath: menuPath,
+                            menuName: menuName
+                        });
+                    });
+                } else {
+                    $(this).attr('href', 'javascript:;');
+                }
+            });
+            // 主页
+            Q.init({
+                index: 'home_console'
+            });
+            // tab选项卡切换监听
+            element.on('tab(admin-pagetabs)', function (data) {
+                var layId = $(this).attr('lay-id');
+                Q.go(layId);
+            });
+        },
+        // 加载主体部分
+        loadView: function (param) {
+            var menuId = param.menuId;
+            var menuPath = param.menuPath;
+            var menuName = param.menuName;
+            var flag;  // 选项卡是否已添加
+            var contentBody = '.layui-layout-admin .layui-body';
+            // 判断是否开启了选项卡功能
+            if (index.pageTabs) {
+                $('.layui-layout-admin .layui-body .layui-tab .layui-tab-title>li').each(function () {
+                    if ($(this).attr('lay-id') === menuId) {
+                        flag = true;
+                        return false;
+                    }
+                });
+                if (!flag) {
+                    element.tabAdd('admin-pagetabs', {
+                        title: menuName,
+                        id: menuId,
+                        content: '<div id="' + menuId + '"></div>'
+                    });
+                }
+                contentBody = '#' + menuId;
+                element.tabChange('admin-pagetabs', menuId);
+                admin.rollPage('auto');
+                // 切换tab关闭表格内浮窗
+                $('.layui-table-tips-c').trigger('click');
+                admin.removeLoading('.layui-layout-admin .layui-body');
+                // 解决切换tab滚动条时而消失的问题
+                var $iframe = $('.layui-layout-admin .layui-body .layui-tab-content .layui-tab-item.layui-show .admin-iframe')[0];
+                if ($iframe) {
+                    $iframe.style.height = "99%";
+                    $iframe.scrollWidth;
+                    $iframe.style.height = "100%";
+                }
+            } else {
+                $('.layui-body.admin-iframe-body').removeClass('admin-iframe-body');
+            }
+            if (!flag || admin.isRefresh) {
+                admin.showLoading('.layui-layout-admin .layui-body');
+                admin.ajax({
+                    url: menuPath,
+                    type: 'GET',
+                    dataType: 'html',
+                    success: function (result, status, xhr) {
+                        $(contentBody).html(result);
+                        admin.isRefresh = false;
+                        element.render('breadcrumb');
+                        admin.removeLoading('.layui-layout-admin .layui-body');
+                    }
+                });
+            }
+            admin.activeNav(Q.lash);
+            // 移动设备切换页面隐藏侧导航
+            if (document.body.clientWidth <= 750) {
+                admin.flexible(true);
+            }
+        },
+        // 检查多标签功能是否开启
+        checkPageTabs: function () {
+            if (index.pageTabs) {
+                $('.layui-layout-admin').addClass('open-tab');
+                // 如果开启多标签先加载主页
+                element.tabAdd('admin-pagetabs', {
+                    id: 'home_console',
+                    title: '<i class="layui-icon layui-icon-home"></i>',
+                    content: '<div id="home_console"></div>'
+                });
+                $('#home_console').load('home/console');
+            } else {
+                $('.layui-layout-admin').removeClass('open-tab');
+            }
+        },
+        // 打开新页面
+        openNewTab: function (param) {
+            var menuId = param.menuId;
+            var url = param.url;
+            var title = param.title;
+
+            Q.reg(menuId, function () {
+                index.loadView({
+                    menuId: menuId,
+                    menuPath: url,
+                    menuName: title
+                });
+            });
+
+            Q.go(menuId);
+        },
+        // 关闭选项卡
+        closeTab: function (menuId) {
+            element.tabDelete('admin-pagetabs', menuId);
+        },
+        // 绑定事件监听
+        bindEvent: function () {
+            // 退出登录点击事件
+            $('#btnLogout').click(function () {
+                layer.confirm('确定退出登录?', function () {
+                    location.replace('logout');
+                });
+            });
+
+            // 修改密码点击事件
+            $('#setPsw').click(function () {
+                admin.popupRight('home/password');
+            });
+
+            // 个人信息点击事件
+            $('#setInfo').click(function () {
+
+            });
+
+            // 消息点击事件
+            $('#btnMessage').click(function () {
+                admin.popupRight('home/message');
+            });
+        }
+    };
+
+    exports('index', index);
+});
diff --git a/src/main/resources/static/custom/module/treetable-lay/treetable.css b/src/main/resources/static/custom/module/treetable-lay/treetable.css
new file mode 100755
index 0000000..ca2922d
--- /dev/null
+++ b/src/main/resources/static/custom/module/treetable-lay/treetable.css
@@ -0,0 +1,17 @@
+.treeTable-empty {
+    width: 20px;
+    display: inline-block;
+}
+
+.treeTable-icon {
+    cursor: pointer;
+}
+
+.treeTable-icon .layui-icon-triangle-d:before {
+    content: "\e623";
+}
+
+.treeTable-icon.open .layui-icon-triangle-d:before {
+    content: "\e625";
+}
+
diff --git a/src/main/resources/static/custom/module/treetable-lay/treetable.js b/src/main/resources/static/custom/module/treetable-lay/treetable.js
new file mode 100755
index 0000000..35efdcf
--- /dev/null
+++ b/src/main/resources/static/custom/module/treetable-lay/treetable.js
@@ -0,0 +1,198 @@
+layui.define(['layer', 'table'], function (exports) {
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var table = layui.table;
+
+    var treetable = {
+        // 渲染树形表格
+        render: function (param) {
+            // 检查参数
+            if (!treetable.checkParam(param)) {
+                return;
+            }
+            var doneCallback = param.done;
+            // 获取数据
+            var mData = [];
+            $.getJSON(param.url, param.where, function (res) {
+                var tNodes = res.data;
+                // 补上id和pid字段
+                for (var i = 0; i < tNodes.length; i++) {
+                    var tt = tNodes[i];
+                    if (!tt.id) {
+                        if (!param.treeIdName) {
+                            layer.msg('参数treeIdName不能为空', {icon: 5});
+                            return;
+                        }
+                        tt.id = tt[param.treeIdName];
+                    }
+                    if (!tt.pid) {
+                        if (!param.treePidName) {
+                            layer.msg('参数treePidName不能为空', {icon: 5});
+                            return;
+                        }
+                        tt.pid = tt[param.treePidName];
+                    }
+                }
+
+                // 对数据进行排序
+                var sort = function (s_pid, data) {
+                    for (var i = 0; i < data.length; i++) {
+                        if (data[i].pid == s_pid) {
+                            var len = mData.length;
+                            if (len > 0 && mData[len - 1].id == s_pid) {
+                                mData[len - 1].isParent = true;
+                            }
+                            mData.push(data[i]);
+                            sort(data[i].id, data);
+                        }
+                    }
+                };
+                sort(param.treeSpid, tNodes);
+
+                // 重写参数
+                param.url = undefined;
+                param.data = mData;
+                param.page = {
+                    count: param.data.length,
+                    limit: param.data.length
+                };
+                param.cols[0][param.treeColIndex].templet = function (d) {
+                    var mId = d.id;
+                    var mPid = d.pid;
+                    var isDir = d.isParent;
+                    var emptyNum = treetable.getEmptyNum(mPid, mData);
+                    var iconHtml = '';
+                    for (var i = 0; i < emptyNum; i++) {
+                        iconHtml += '<span class="treeTable-empty"></span>';
+                    }
+                    if (isDir) {
+                        iconHtml += '<i class="layui-icon layui-icon-triangle-d"></i> <i class="layui-icon layui-icon-layer"></i>';
+                    } else {
+                        iconHtml += '<i class="layui-icon layui-icon-file"></i>';
+                    }
+                    iconHtml += '&nbsp;&nbsp;';
+                    var ttype = isDir ? 'dir' : 'file';
+                    var vg = '<span class="treeTable-icon open" lay-tid="' + mId + '" lay-tpid="' + mPid + '" lay-ttype="' + ttype + '">';
+                    return vg + iconHtml + d[param.cols[0][param.treeColIndex].field] + '</span>'
+                };
+
+                param.done = function (res, curr, count) {
+                    $(param.elem).next().addClass('treeTable');
+                    $('.treeTable .layui-table-page').css('display', 'none');
+                    $(param.elem).next().attr('treeLinkage', param.treeLinkage);
+                    // 绑定事件换成对body绑定
+                    /*$('.treeTable .treeTable-icon').click(function () {
+                        treetable.toggleRows($(this), param.treeLinkage);
+                    });*/
+                    if (param.treeDefaultClose) {
+                        treetable.foldAll(param.elem);
+                    }
+                    if (doneCallback) {
+                        doneCallback(res, curr, count);
+                    }
+                };
+
+                // 渲染表格
+                table.render(param);
+            });
+        },
+        // 计算缩进的数量
+        getEmptyNum: function (pid, data) {
+            var num = 0;
+            if (!pid) {
+                return num;
+            }
+            var tPid;
+            for (var i = 0; i < data.length; i++) {
+                if (pid == data[i].id) {
+                    num += 1;
+                    tPid = data[i].pid;
+                    break;
+                }
+            }
+            return num + treetable.getEmptyNum(tPid, data);
+        },
+        // 展开/折叠行
+        toggleRows: function ($dom, linkage) {
+            var type = $dom.attr('lay-ttype');
+            if ('file' == type) {
+                return;
+            }
+            var mId = $dom.attr('lay-tid');
+            var isOpen = $dom.hasClass('open');
+            if (isOpen) {
+                $dom.removeClass('open');
+            } else {
+                $dom.addClass('open');
+            }
+            $dom.closest('tbody').find('tr').each(function () {
+                var $ti = $(this).find('.treeTable-icon');
+                var pid = $ti.attr('lay-tpid');
+                var ttype = $ti.attr('lay-ttype');
+                var tOpen = $ti.hasClass('open');
+                if (mId == pid) {
+                    if (isOpen) {
+                        $(this).hide();
+                        if ('dir' == ttype && tOpen == isOpen) {
+                            $ti.trigger('click');
+                        }
+                    } else {
+                        $(this).show();
+                        if (linkage && 'dir' == ttype && tOpen == isOpen) {
+                            $ti.trigger('click');
+                        }
+                    }
+                }
+            });
+        },
+        // 检查参数
+        checkParam: function (param) {
+            if (!param.treeSpid && param.treeSpid != 0) {
+                layer.msg('参数treeSpid不能为空', {icon: 5});
+                return false;
+            }
+
+            if (!param.treeColIndex && param.treeColIndex != 0) {
+                layer.msg('参数treeColIndex不能为空', {icon: 5});
+                return false;
+            }
+            return true;
+        },
+        // 展开所有
+        expandAll: function (dom) {
+            $(dom).next('.treeTable').find('.layui-table-body tbody tr').each(function () {
+                var $ti = $(this).find('.treeTable-icon');
+                var ttype = $ti.attr('lay-ttype');
+                var tOpen = $ti.hasClass('open');
+                if ('dir' == ttype && !tOpen) {
+                    $ti.trigger('click');
+                }
+            });
+        },
+        // 折叠所有
+        foldAll: function (dom) {
+            $(dom).next('.treeTable').find('.layui-table-body tbody tr').each(function () {
+                var $ti = $(this).find('.treeTable-icon');
+                var ttype = $ti.attr('lay-ttype');
+                var tOpen = $ti.hasClass('open');
+                if ('dir' == ttype && tOpen) {
+                    $ti.trigger('click');
+                }
+            });
+        }
+    };
+
+    layui.link(layui.cache.base + 'treetable-lay/treetable.css');
+
+    // 给图标列绑定事件
+    $('body').on('click', '.treeTable .treeTable-icon', function () {
+        var treeLinkage = $(this).parents('.treeTable').attr('treeLinkage');
+        if ('true' == treeLinkage) {
+            treetable.toggleRows($(this), true);
+        } else {
+            treetable.toggleRows($(this), false);
+        }
+    });
+
+    exports('treetable', treetable);
+});
diff --git a/src/main/resources/static/libs/q.js b/src/main/resources/static/libs/q.js
new file mode 100755
index 0000000..a809434
--- /dev/null
+++ b/src/main/resources/static/libs/q.js
@@ -0,0 +1,100 @@
+/**
+ * 路由组件
+ * q.js-1.2 <https://github.com/itorr/q.js>
+ */
+var Q = function (W, D, HTML, hash, view, arg, _arg, i, index, Regex, key, Q) {
+    HTML = D.documentElement;
+    Regex = [];
+    key = '!';
+    onhashchange = function () {
+        Q.hash = hash = location.hash.substring(key.length + 1);
+
+        arg = hash.split(/\?/g).shift();
+
+        arg = arg.split('/');
+
+        i = Regex.length;
+        while (i--)
+            if (_arg = hash.match(Regex[i])) {
+                arg = _arg;
+                arg[0] = Regex[i];
+                break;
+            }
+
+
+        if (!Q[arg[0]]) // default
+            arg[0] = index;
+
+        if (Q.pop)
+            Q.pop.apply(W, arg);
+
+        Q.lash = view = arg.shift();
+
+        HTML.setAttribute('view', view);
+
+        Q[view].apply(W, arg);
+    };
+
+    if (!'onhashchange' in W) {
+        Q.path = location.hash;
+        setInterval(function () {
+            if (Q.path != location.hash) {
+                onhashchange();
+                Q.path = location.hash;
+            }
+        }, 100);
+    }
+
+    Q = {
+        init: function (o) {
+
+            if (o.key !== undefined)
+                key = o.key;
+
+            index = o.index || 'V';
+
+            if (o.pop && typeof o.pop == 'function')
+                Q.pop = o.pop;
+
+            onhashchange();
+
+            return this
+        },
+        reg: function (r, u) {
+            if (!r)
+                return;
+
+            if (u == undefined)
+                u = function () {
+                };
+
+            if (r instanceof RegExp) { //正则注册
+                Q[r] = u;
+                Regex.push(r);
+            } else if (r instanceof Array) { //数组注册
+                for (var i in r) {
+                    this.reg.apply(this, [].concat(r[i]).concat(u));
+                }
+            } else if (typeof r == 'string') { //关键字注册
+                if (typeof u == 'function')
+                    Q[r] = u;
+                else if (typeof u == 'string' && Q[u])
+                    Q[r] = Q[u];
+            }
+
+            return this
+        },
+        V: function () {
+            console.log('q.js <https://github.com/itorr/q.js> 2014/12/28');
+            return this
+        },
+        go: function (u) {
+            location.hash = '#' + key + u;
+            return this
+        },
+        refresh: function () {
+            onhashchange();
+        }
+    };
+    return Q;
+}(this, document);
diff --git a/src/main/resources/static/libs/zTree/css/metroStyle/img/line_conn.png b/src/main/resources/static/libs/zTree/css/metroStyle/img/line_conn.png
new file mode 100755
index 0000000..b211da2
--- /dev/null
+++ b/src/main/resources/static/libs/zTree/css/metroStyle/img/line_conn.png
Binary files differ
diff --git a/src/main/resources/static/libs/zTree/css/metroStyle/img/loading.gif b/src/main/resources/static/libs/zTree/css/metroStyle/img/loading.gif
new file mode 100755
index 0000000..e8c2892
--- /dev/null
+++ b/src/main/resources/static/libs/zTree/css/metroStyle/img/loading.gif
Binary files differ
diff --git a/src/main/resources/static/libs/zTree/css/metroStyle/img/metro.gif b/src/main/resources/static/libs/zTree/css/metroStyle/img/metro.gif
new file mode 100755
index 0000000..664b969
--- /dev/null
+++ b/src/main/resources/static/libs/zTree/css/metroStyle/img/metro.gif
Binary files differ
diff --git a/src/main/resources/static/libs/zTree/css/metroStyle/img/metro.png b/src/main/resources/static/libs/zTree/css/metroStyle/img/metro.png
new file mode 100755
index 0000000..e9e58a3
--- /dev/null
+++ b/src/main/resources/static/libs/zTree/css/metroStyle/img/metro.png
Binary files differ
diff --git a/src/main/resources/static/libs/zTree/css/metroStyle/metroStyle.css b/src/main/resources/static/libs/zTree/css/metroStyle/metroStyle.css
new file mode 100755
index 0000000..e20c37d
--- /dev/null
+++ b/src/main/resources/static/libs/zTree/css/metroStyle/metroStyle.css
@@ -0,0 +1,96 @@
+/*-------------------------------------
+zTree Style
+
+version:    3.4
+author:     Hunter.z
+email:      hunter.z@263.net
+website:    http://code.google.com/p/jquerytree/
+
+-------------------------------------*/
+
+.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:17px; 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.png) 0 0 repeat-y;}
+
+.ztree li a {padding-right:3px; margin:0; cursor:pointer; height:21px; 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:#e5e5e5; color:black; height:21px; opacity:0.8;}
+.ztree li a.curSelectedNode_Edit {padding-top:0px; background-color:#e5e5e5; color:black; height:21px; border:1px #666 solid; opacity:0.8;}
+.ztree li a.tmpTargetNode_inner {padding-top:0px; background-color:#aaa; color:white; height:21px; border:1px #666 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 #585956 solid; *border:0px}
+.ztree li span {line-height:21px; margin-right:2px}
+.ztree li span.button {line-height:0; margin:0; padding: 0; width:21px; height:21px; 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/metro.png"); *background-image:url("./img/metro.gif")}
+
+.ztree li span.button.chk {width:13px; height:13px; margin:0 2px; cursor: auto}
+.ztree li span.button.chk.checkbox_false_full {background-position: -5px -5px;}
+.ztree li span.button.chk.checkbox_false_full_focus {background-position: -5px -26px;}
+.ztree li span.button.chk.checkbox_false_part {background-position: -5px -48px;}
+.ztree li span.button.chk.checkbox_false_part_focus {background-position: -5px -68px;}
+.ztree li span.button.chk.checkbox_false_disable {background-position: -5px -89px;}
+.ztree li span.button.chk.checkbox_true_full {background-position: -26px -5px;}
+.ztree li span.button.chk.checkbox_true_full_focus {background-position: -26px -26px;}
+.ztree li span.button.chk.checkbox_true_part {background-position: -26px -48px;}
+.ztree li span.button.chk.checkbox_true_part_focus {background-position: -26px -68px;}
+.ztree li span.button.chk.checkbox_true_disable {background-position: -26px -89px;}
+.ztree li span.button.chk.radio_false_full {background-position: -47px -5px;}
+.ztree li span.button.chk.radio_false_full_focus {background-position: -47px -26px;}
+.ztree li span.button.chk.radio_false_part {background-position: -47px -47px;}
+.ztree li span.button.chk.radio_false_part_focus {background-position: -47px -68px;}
+.ztree li span.button.chk.radio_false_disable {background-position: -47px -89px;}
+.ztree li span.button.chk.radio_true_full {background-position: -68px -5px;}
+.ztree li span.button.chk.radio_true_full_focus {background-position: -68px -26px;}
+.ztree li span.button.chk.radio_true_part {background-position: -68px -47px;}
+.ztree li span.button.chk.radio_true_part_focus {background-position: -68px -68px;}
+.ztree li span.button.chk.radio_true_disable {background-position: -68px -89px;}
+
+.ztree li span.button.switch {width:21px; height:21px}
+.ztree li span.button.root_open{background-position:-105px -63px}
+.ztree li span.button.root_close{background-position:-126px -63px}
+.ztree li span.button.roots_open{background-position: -105px 0;}
+.ztree li span.button.roots_close{background-position: -126px 0;}
+.ztree li span.button.center_open{background-position: -105px -21px;}
+.ztree li span.button.center_close{background-position: -126px -21px;}
+.ztree li span.button.bottom_open{background-position: -105px -42px;}
+.ztree li span.button.bottom_close{background-position: -126px -42px;}
+.ztree li span.button.noline_open{background-position: -105px -84px;}
+.ztree li span.button.noline_close{background-position: -126px -84px;}
+.ztree li span.button.root_docu{ background:none;}
+.ztree li span.button.roots_docu{background-position: -84px 0;}
+.ztree li span.button.center_docu{background-position: -84px -21px;}
+.ztree li span.button.bottom_docu{background-position: -84px -42px;}
+.ztree li span.button.noline_docu{ background:none;}
+
+.ztree li span.button.ico_open{margin-right:2px; background-position: -147px -21px; vertical-align:top; *vertical-align:middle}
+.ztree li span.button.ico_close{margin-right:2px; margin-right:2px; background-position: -147px 0; vertical-align:top; *vertical-align:middle}
+.ztree li span.button.ico_docu{margin-right:2px; background-position: -147px -42px; vertical-align:top; *vertical-align:middle}
+.ztree li span.button.edit {margin-left:2px; margin-right: -1px; background-position: -189px -21px; vertical-align:top; *vertical-align:middle}
+.ztree li span.button.edit:hover {
+  background-position: -168px -21px;
+}
+.ztree li span.button.remove {margin-left:2px; margin-right: -1px; background-position: -189px -42px; vertical-align:top; *vertical-align:middle}
+.ztree li span.button.remove:hover {
+  background-position: -168px -42px;
+}
+.ztree li span.button.add {margin-left:2px; margin-right: -1px; background-position: -189px 0; vertical-align:top; *vertical-align:middle}
+.ztree li span.button.add:hover {
+  background-position: -168px 0;
+}
+.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:21px; 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:-168px -84px; background-image:url("./img/metro.png"); *background-image:url("./img/metro.gif")}
+
+ul.ztreeul.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}
diff --git a/src/main/resources/static/libs/zTree/css/zTreeStyle/img/line_conn.gif b/src/main/resources/static/libs/zTree/css/zTreeStyle/img/line_conn.gif
new file mode 100755
index 0000000..d561d36
--- /dev/null
+++ b/src/main/resources/static/libs/zTree/css/zTreeStyle/img/line_conn.gif
Binary files differ
diff --git a/src/main/resources/static/libs/zTree/css/zTreeStyle/img/loading.gif b/src/main/resources/static/libs/zTree/css/zTreeStyle/img/loading.gif
new file mode 100755
index 0000000..e8c2892
--- /dev/null
+++ b/src/main/resources/static/libs/zTree/css/zTreeStyle/img/loading.gif
Binary files differ
diff --git a/src/main/resources/static/libs/zTree/css/zTreeStyle/img/zTreeStandard.gif b/src/main/resources/static/libs/zTree/css/zTreeStyle/img/zTreeStandard.gif
new file mode 100755
index 0000000..50c94fd
--- /dev/null
+++ b/src/main/resources/static/libs/zTree/css/zTreeStyle/img/zTreeStandard.gif
Binary files differ
diff --git a/src/main/resources/static/libs/zTree/css/zTreeStyle/img/zTreeStandard.png b/src/main/resources/static/libs/zTree/css/zTreeStyle/img/zTreeStandard.png
new file mode 100755
index 0000000..ffda01e
--- /dev/null
+++ b/src/main/resources/static/libs/zTree/css/zTreeStyle/img/zTreeStandard.png
Binary files differ
diff --git a/src/main/resources/static/libs/zTree/css/zTreeStyle/zTreeStyle.css b/src/main/resources/static/libs/zTree/css/zTreeStyle/zTreeStyle.css
new file mode 100755
index 0000000..a6845a4
--- /dev/null
+++ b/src/main/resources/static/libs/zTree/css/zTreeStyle/zTreeStyle.css
@@ -0,0 +1,97 @@
+/*-------------------------------------
+zTree Style
+
+version:	3.5.17
+author:		Hunter.z
+email:		hunter.z@263.net
+website:	http://code.google.com/p/jquerytree/
+
+-------------------------------------*/
+
+.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}
+
+/* level style*/
+/*.ztree li span.button.level0 {
+	display:none;
+}
+.ztree li ul.level0 {
+	padding:0;
+	background:none;
+}*/
\ No newline at end of file
diff --git a/src/main/resources/static/libs/zTree/js/jquery.ztree.all-3.5.min.js b/src/main/resources/static/libs/zTree/js/jquery.ztree.all-3.5.min.js
new file mode 100755
index 0000000..8ff9481
--- /dev/null
+++ b/src/main/resources/static/libs/zTree/js/jquery.ztree.all-3.5.min.js
@@ -0,0 +1,161 @@
+
+/*
+ * JQuery zTree common v3.5.18
+ * http://zTree.me/
+ *
+ * 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: 2015-06-18
+ */
+(function(p){var G,H,I,J,K,L,r={},u={},v={},M={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:{children:"children",name:"name",title:"",url:"url"},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",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}},w=[function(b){var a=b.treeObj,c=e.event;a.bind(c.NODECREATED,function(a,c,g){j.apply(b.callback.onNodeCreated,
+[a,c,g])});a.bind(c.CLICK,function(a,c,g,l,h){j.apply(b.callback.onClick,[c,g,l,h])});a.bind(c.EXPAND,function(a,c,g){j.apply(b.callback.onExpand,[a,c,g])});a.bind(c.COLLAPSE,function(a,c,g){j.apply(b.callback.onCollapse,[a,c,g])});a.bind(c.ASYNC_SUCCESS,function(a,c,g,l){j.apply(b.callback.onAsyncSuccess,[a,c,g,l])});a.bind(c.ASYNC_ERROR,function(a,c,g,l,h,e){j.apply(b.callback.onAsyncError,[a,c,g,l,h,e])});a.bind(c.REMOVE,function(a,c,g){j.apply(b.callback.onRemove,[a,c,g])});a.bind(c.SELECTED,
+function(a,c,g,l){j.apply(b.callback.onSelected,[c,g,l])});a.bind(c.UNSELECTED,function(a,c,g,l){j.apply(b.callback.onUnSelected,[c,g,l])})}],x=[function(b){var a=e.event;b.treeObj.unbind(a.NODECREATED).unbind(a.CLICK).unbind(a.EXPAND).unbind(a.COLLAPSE).unbind(a.ASYNC_SUCCESS).unbind(a.ASYNC_ERROR).unbind(a.REMOVE).unbind(a.SELECTED).unbind(a.UNSELECTED)}],y=[function(b){var a=h.getCache(b);a||(a={},h.setCache(b,a));a.nodes=[];a.doms=[]}],z=[function(b,a,c,d,f,g){if(c){var l=h.getRoot(b),e=b.data.key.children;
+c.level=a;c.tId=b.treeId+"_"+ ++l.zId;c.parentTId=d?d.tId:null;c.open=typeof c.open=="string"?j.eqs(c.open,"true"):!!c.open;c[e]&&c[e].length>0?(c.isParent=!0,c.zAsync=!0):(c.isParent=typeof c.isParent=="string"?j.eqs(c.isParent,"true"):!!c.isParent,c.open=c.isParent&&!b.async.enable?c.open:!1,c.zAsync=!c.isParent);c.isFirstNode=f;c.isLastNode=g;c.getParentNode=function(){return h.getNodeCache(b,c.parentTId)};c.getPreNode=function(){return h.getPreNode(b,c)};c.getNextNode=function(){return h.getNextNode(b,
+c)};c.isAjaxing=!1;h.fixPIdKeyValue(b,c)}}],s=[function(b){var a=b.target,c=h.getSetting(b.data.treeId),d="",f=null,g="",l="",i=null,o=null,k=null;if(j.eqs(b.type,"mousedown"))l="mousedown";else if(j.eqs(b.type,"mouseup"))l="mouseup";else if(j.eqs(b.type,"contextmenu"))l="contextmenu";else if(j.eqs(b.type,"click"))if(j.eqs(a.tagName,"span")&&a.getAttribute("treeNode"+e.id.SWITCH)!==null)d=j.getNodeMainDom(a).id,g="switchNode";else{if(k=j.getMDom(c,a,[{tagName:"a",attrName:"treeNode"+e.id.A}]))d=j.getNodeMainDom(k).id,
+g="clickNode"}else if(j.eqs(b.type,"dblclick")&&(l="dblclick",k=j.getMDom(c,a,[{tagName:"a",attrName:"treeNode"+e.id.A}])))d=j.getNodeMainDom(k).id,g="switchNode";if(l.length>0&&d.length==0&&(k=j.getMDom(c,a,[{tagName:"a",attrName:"treeNode"+e.id.A}])))d=j.getNodeMainDom(k).id;if(d.length>0)switch(f=h.getNodeCache(c,d),g){case "switchNode":f.isParent?j.eqs(b.type,"click")||j.eqs(b.type,"dblclick")&&j.apply(c.view.dblClickExpand,[c.treeId,f],c.view.dblClickExpand)?i=G:g="":g="";break;case "clickNode":i=
+H}switch(l){case "mousedown":o=I;break;case "mouseup":o=J;break;case "dblclick":o=K;break;case "contextmenu":o=L}return{stop:!1,node:f,nodeEventType:g,nodeEventCallback:i,treeEventType:l,treeEventCallback:o}}],A=[function(b){var a=h.getRoot(b);a||(a={},h.setRoot(b,a));a[b.data.key.children]=[];a.expandTriggerFlag=!1;a.curSelectedList=[];a.noSelection=!0;a.createdNodes=[];a.zId=0;a._ver=(new Date).getTime()}],B=[],C=[],D=[],E=[],F=[],h={addNodeCache:function(b,a){h.getCache(b).nodes[h.getNodeCacheId(a.tId)]=
+a},getNodeCacheId:function(b){return b.substring(b.lastIndexOf("_")+1)},addAfterA:function(b){C.push(b)},addBeforeA:function(b){B.push(b)},addInnerAfterA:function(b){E.push(b)},addInnerBeforeA:function(b){D.push(b)},addInitBind:function(b){w.push(b)},addInitUnBind:function(b){x.push(b)},addInitCache:function(b){y.push(b)},addInitNode:function(b){z.push(b)},addInitProxy:function(b,a){a?s.splice(0,0,b):s.push(b)},addInitRoot:function(b){A.push(b)},addNodesData:function(b,a,c){var d=b.data.key.children;
+a[d]||(a[d]=[]);if(a[d].length>0)a[d][a[d].length-1].isLastNode=!1,i.setNodeLineIcos(b,a[d][a[d].length-1]);a.isParent=!0;a[d]=a[d].concat(c)},addSelectedNode:function(b,a){var c=h.getRoot(b);h.isSelectedNode(b,a)||c.curSelectedList.push(a)},addCreatedNode:function(b,a){(b.callback.onNodeCreated||b.view.addDiyDom)&&h.getRoot(b).createdNodes.push(a)},addZTreeTools:function(b){F.push(b)},exSetting:function(b){p.extend(!0,M,b)},fixPIdKeyValue:function(b,a){b.data.simpleData.enable&&(a[b.data.simpleData.pIdKey]=
+a.parentTId?a.getParentNode()[b.data.simpleData.idKey]:b.data.simpleData.rootPId)},getAfterA:function(b,a,c){for(var d=0,f=C.length;d<f;d++)C[d].apply(this,arguments)},getBeforeA:function(b,a,c){for(var d=0,f=B.length;d<f;d++)B[d].apply(this,arguments)},getInnerAfterA:function(b,a,c){for(var d=0,f=E.length;d<f;d++)E[d].apply(this,arguments)},getInnerBeforeA:function(b,a,c){for(var d=0,f=D.length;d<f;d++)D[d].apply(this,arguments)},getCache:function(b){return v[b.treeId]},getNextNode:function(b,a){if(!a)return null;
+for(var c=b.data.key.children,d=a.parentTId?a.getParentNode():h.getRoot(b),f=0,g=d[c].length-1;f<=g;f++)if(d[c][f]===a)return f==g?null:d[c][f+1];return null},getNodeByParam:function(b,a,c,d){if(!a||!c)return null;for(var f=b.data.key.children,g=0,l=a.length;g<l;g++){if(a[g][c]==d)return a[g];var e=h.getNodeByParam(b,a[g][f],c,d);if(e)return e}return null},getNodeCache:function(b,a){if(!a)return null;var c=v[b.treeId].nodes[h.getNodeCacheId(a)];return c?c:null},getNodeName:function(b,a){return""+
+a[b.data.key.name]},getNodeTitle:function(b,a){return""+a[b.data.key.title===""?b.data.key.name:b.data.key.title]},getNodes:function(b){return h.getRoot(b)[b.data.key.children]},getNodesByParam:function(b,a,c,d){if(!a||!c)return[];for(var f=b.data.key.children,g=[],l=0,e=a.length;l<e;l++)a[l][c]==d&&g.push(a[l]),g=g.concat(h.getNodesByParam(b,a[l][f],c,d));return g},getNodesByParamFuzzy:function(b,a,c,d){if(!a||!c)return[];for(var f=b.data.key.children,g=[],d=d.toLowerCase(),l=0,e=a.length;l<e;l++)typeof a[l][c]==
+"string"&&a[l][c].toLowerCase().indexOf(d)>-1&&g.push(a[l]),g=g.concat(h.getNodesByParamFuzzy(b,a[l][f],c,d));return g},getNodesByFilter:function(b,a,c,d,f){if(!a)return d?null:[];for(var g=b.data.key.children,e=d?null:[],i=0,o=a.length;i<o;i++){if(j.apply(c,[a[i],f],!1)){if(d)return a[i];e.push(a[i])}var k=h.getNodesByFilter(b,a[i][g],c,d,f);if(d&&k)return k;e=d?k:e.concat(k)}return e},getPreNode:function(b,a){if(!a)return null;for(var c=b.data.key.children,d=a.parentTId?a.getParentNode():h.getRoot(b),
+f=0,g=d[c].length;f<g;f++)if(d[c][f]===a)return f==0?null:d[c][f-1];return null},getRoot:function(b){return b?u[b.treeId]:null},getRoots:function(){return u},getSetting:function(b){return r[b]},getSettings:function(){return r},getZTreeTools:function(b){return(b=this.getRoot(this.getSetting(b)))?b.treeTools:null},initCache:function(b){for(var a=0,c=y.length;a<c;a++)y[a].apply(this,arguments)},initNode:function(b,a,c,d,f,g){for(var e=0,h=z.length;e<h;e++)z[e].apply(this,arguments)},initRoot:function(b){for(var a=
+0,c=A.length;a<c;a++)A[a].apply(this,arguments)},isSelectedNode:function(b,a){for(var c=h.getRoot(b),d=0,f=c.curSelectedList.length;d<f;d++)if(a===c.curSelectedList[d])return!0;return!1},removeNodeCache:function(b,a){var c=b.data.key.children;if(a[c])for(var d=0,f=a[c].length;d<f;d++)arguments.callee(b,a[c][d]);h.getCache(b).nodes[h.getNodeCacheId(a.tId)]=null},removeSelectedNode:function(b,a){for(var c=h.getRoot(b),d=0,f=c.curSelectedList.length;d<f;d++)if(a===c.curSelectedList[d]||!h.getNodeCache(b,
+c.curSelectedList[d].tId))c.curSelectedList.splice(d,1),d--,f--},setCache:function(b,a){v[b.treeId]=a},setRoot:function(b,a){u[b.treeId]=a},setZTreeTools:function(b,a){for(var c=0,d=F.length;c<d;c++)F[c].apply(this,arguments)},transformToArrayFormat:function(b,a){if(!a)return[];var c=b.data.key.children,d=[];if(j.isArray(a))for(var f=0,g=a.length;f<g;f++)d.push(a[f]),a[f][c]&&(d=d.concat(h.transformToArrayFormat(b,a[f][c])));else d.push(a),a[c]&&(d=d.concat(h.transformToArrayFormat(b,a[c])));return d},
+transformTozTreeFormat:function(b,a){var c,d,f=b.data.simpleData.idKey,g=b.data.simpleData.pIdKey,e=b.data.key.children;if(!f||f==""||!a)return[];if(j.isArray(a)){var h=[],i=[];for(c=0,d=a.length;c<d;c++)i[a[c][f]]=a[c];for(c=0,d=a.length;c<d;c++)i[a[c][g]]&&a[c][f]!=a[c][g]?(i[a[c][g]][e]||(i[a[c][g]][e]=[]),i[a[c][g]][e].push(a[c])):h.push(a[c]);return h}else return[a]}},m={bindEvent:function(b){for(var a=0,c=w.length;a<c;a++)w[a].apply(this,arguments)},unbindEvent:function(b){for(var a=0,c=x.length;a<
+c;a++)x[a].apply(this,arguments)},bindTree:function(b){var a={treeId:b.treeId},c=b.treeObj;b.view.txtSelectedEnable||c.bind("selectstart",function(a){a=a.originalEvent.srcElement.nodeName.toLowerCase();return a==="input"||a==="textarea"}).css({"-moz-user-select":"-moz-none"});c.bind("click",a,m.proxy);c.bind("dblclick",a,m.proxy);c.bind("mouseover",a,m.proxy);c.bind("mouseout",a,m.proxy);c.bind("mousedown",a,m.proxy);c.bind("mouseup",a,m.proxy);c.bind("contextmenu",a,m.proxy)},unbindTree:function(b){b.treeObj.unbind("click",
+m.proxy).unbind("dblclick",m.proxy).unbind("mouseover",m.proxy).unbind("mouseout",m.proxy).unbind("mousedown",m.proxy).unbind("mouseup",m.proxy).unbind("contextmenu",m.proxy)},doProxy:function(b){for(var a=[],c=0,d=s.length;c<d;c++){var f=s[c].apply(this,arguments);a.push(f);if(f.stop)break}return a},proxy:function(b){var a=h.getSetting(b.data.treeId);if(!j.uCanDo(a,b))return!0;for(var a=m.doProxy(b),c=!0,d=0,f=a.length;d<f;d++){var g=a[d];g.nodeEventCallback&&(c=g.nodeEventCallback.apply(g,[b,g.node])&&
+c);g.treeEventCallback&&(c=g.treeEventCallback.apply(g,[b,g.node])&&c)}return c}};G=function(b,a){var c=h.getSetting(b.data.treeId);if(a.open){if(j.apply(c.callback.beforeCollapse,[c.treeId,a],!0)==!1)return!0}else if(j.apply(c.callback.beforeExpand,[c.treeId,a],!0)==!1)return!0;h.getRoot(c).expandTriggerFlag=!0;i.switchNode(c,a);return!0};H=function(b,a){var c=h.getSetting(b.data.treeId),d=c.view.autoCancelSelected&&(b.ctrlKey||b.metaKey)&&h.isSelectedNode(c,a)?0:c.view.autoCancelSelected&&(b.ctrlKey||
+b.metaKey)&&c.view.selectedMulti?2:1;if(j.apply(c.callback.beforeClick,[c.treeId,a,d],!0)==!1)return!0;d===0?i.cancelPreSelectedNode(c,a):i.selectNode(c,a,d===2);c.treeObj.trigger(e.event.CLICK,[b,c.treeId,a,d]);return!0};I=function(b,a){var c=h.getSetting(b.data.treeId);j.apply(c.callback.beforeMouseDown,[c.treeId,a],!0)&&j.apply(c.callback.onMouseDown,[b,c.treeId,a]);return!0};J=function(b,a){var c=h.getSetting(b.data.treeId);j.apply(c.callback.beforeMouseUp,[c.treeId,a],!0)&&j.apply(c.callback.onMouseUp,
+[b,c.treeId,a]);return!0};K=function(b,a){var c=h.getSetting(b.data.treeId);j.apply(c.callback.beforeDblClick,[c.treeId,a],!0)&&j.apply(c.callback.onDblClick,[b,c.treeId,a]);return!0};L=function(b,a){var c=h.getSetting(b.data.treeId);j.apply(c.callback.beforeRightClick,[c.treeId,a],!0)&&j.apply(c.callback.onRightClick,[b,c.treeId,a]);return typeof c.callback.onRightClick!="function"};var j={apply:function(b,a,c){return typeof b=="function"?b.apply(N,a?a:[]):c},canAsync:function(b,a){var c=b.data.key.children;
+return b.async.enable&&a&&a.isParent&&!(a.zAsync||a[c]&&a[c].length>0)},clone:function(b){if(b===null)return null;var a=j.isArray(b)?[]:{},c;for(c in b)a[c]=b[c]instanceof Date?new Date(b[c].getTime()):typeof b[c]==="object"?arguments.callee(b[c]):b[c];return a},eqs:function(b,a){return b.toLowerCase()===a.toLowerCase()},isArray:function(b){return Object.prototype.toString.apply(b)==="[object Array]"},$:function(b,a,c){a&&typeof a!="string"&&(c=a,a="");return typeof b=="string"?p(b,c?c.treeObj.get(0).ownerDocument:
+null):p("#"+b.tId+a,c?c.treeObj:null)},getMDom:function(b,a,c){if(!a)return null;for(;a&&a.id!==b.treeId;){for(var d=0,f=c.length;a.tagName&&d<f;d++)if(j.eqs(a.tagName,c[d].tagName)&&a.getAttribute(c[d].attrName)!==null)return a;a=a.parentNode}return null},getNodeMainDom:function(b){return p(b).parent("li").get(0)||p(b).parentsUntil("li").parent().get(0)},isChildOrSelf:function(b,a){return p(b).closest("#"+a).length>0},uCanDo:function(){return!0}},i={addNodes:function(b,a,c,d){if(!b.data.keep.leaf||
+!a||a.isParent)if(j.isArray(c)||(c=[c]),b.data.simpleData.enable&&(c=h.transformTozTreeFormat(b,c)),a){var f=k(a,e.id.SWITCH,b),g=k(a,e.id.ICON,b),l=k(a,e.id.UL,b);if(!a.open)i.replaceSwitchClass(a,f,e.folder.CLOSE),i.replaceIcoClass(a,g,e.folder.CLOSE),a.open=!1,l.css({display:"none"});h.addNodesData(b,a,c);i.createNodes(b,a.level+1,c,a);d||i.expandCollapseParentNode(b,a,!0)}else h.addNodesData(b,h.getRoot(b),c),i.createNodes(b,0,c,null)},appendNodes:function(b,a,c,d,f,g){if(!c)return[];for(var e=
+[],j=b.data.key.children,k=0,m=c.length;k<m;k++){var n=c[k];if(f){var t=(d?d:h.getRoot(b))[j].length==c.length&&k==0;h.initNode(b,a,n,d,t,k==c.length-1,g);h.addNodeCache(b,n)}t=[];n[j]&&n[j].length>0&&(t=i.appendNodes(b,a+1,n[j],n,f,g&&n.open));g&&(i.makeDOMNodeMainBefore(e,b,n),i.makeDOMNodeLine(e,b,n),h.getBeforeA(b,n,e),i.makeDOMNodeNameBefore(e,b,n),h.getInnerBeforeA(b,n,e),i.makeDOMNodeIcon(e,b,n),h.getInnerAfterA(b,n,e),i.makeDOMNodeNameAfter(e,b,n),h.getAfterA(b,n,e),n.isParent&&n.open&&i.makeUlHtml(b,
+n,e,t.join("")),i.makeDOMNodeMainAfter(e,b,n),h.addCreatedNode(b,n))}return e},appendParentULDom:function(b,a){var c=[],d=k(a,b);!d.get(0)&&a.parentTId&&(i.appendParentULDom(b,a.getParentNode()),d=k(a,b));var f=k(a,e.id.UL,b);f.get(0)&&f.remove();f=i.appendNodes(b,a.level+1,a[b.data.key.children],a,!1,!0);i.makeUlHtml(b,a,c,f.join(""));d.append(c.join(""))},asyncNode:function(b,a,c,d){var f,g;if(a&&!a.isParent)return j.apply(d),!1;else if(a&&a.isAjaxing)return!1;else if(j.apply(b.callback.beforeAsync,
+[b.treeId,a],!0)==!1)return j.apply(d),!1;if(a)a.isAjaxing=!0,k(a,e.id.ICON,b).attr({style:"","class":e.className.BUTTON+" "+e.className.ICO_LOADING});var l={};for(f=0,g=b.async.autoParam.length;a&&f<g;f++){var q=b.async.autoParam[f].split("="),o=q;q.length>1&&(o=q[1],q=q[0]);l[o]=a[q]}if(j.isArray(b.async.otherParam))for(f=0,g=b.async.otherParam.length;f<g;f+=2)l[b.async.otherParam[f]]=b.async.otherParam[f+1];else for(var m in b.async.otherParam)l[m]=b.async.otherParam[m];var n=h.getRoot(b)._ver;
+p.ajax({contentType:b.async.contentType,cache:!1,type:b.async.type,url:j.apply(b.async.url,[b.treeId,a],b.async.url),data:l,dataType:b.async.dataType,success:function(f){if(n==h.getRoot(b)._ver){var g=[];try{g=!f||f.length==0?[]:typeof f=="string"?eval("("+f+")"):f}catch(l){g=f}if(a)a.isAjaxing=null,a.zAsync=!0;i.setNodeLineIcos(b,a);g&&g!==""?(g=j.apply(b.async.dataFilter,[b.treeId,a,g],g),i.addNodes(b,a,g?j.clone(g):[],!!c)):i.addNodes(b,a,[],!!c);b.treeObj.trigger(e.event.ASYNC_SUCCESS,[b.treeId,
+a,f]);j.apply(d)}},error:function(c,d,f){if(n==h.getRoot(b)._ver){if(a)a.isAjaxing=null;i.setNodeLineIcos(b,a);b.treeObj.trigger(e.event.ASYNC_ERROR,[b.treeId,a,c,d,f])}}});return!0},cancelPreSelectedNode:function(b,a,c){var d=h.getRoot(b).curSelectedList,f,g;for(f=d.length-1;f>=0;f--)if(g=d[f],a===g||!a&&(!c||c!==g))if(k(g,e.id.A,b).removeClass(e.node.CURSELECTED),a){h.removeSelectedNode(b,a);b.treeObj.trigger(e.event.UNSELECTED,[m,b.treeId,g]);break}else d.splice(f,1),b.treeObj.trigger(e.event.UNSELECTED,
+[m,b.treeId,g])},createNodeCallback:function(b){if(b.callback.onNodeCreated||b.view.addDiyDom)for(var a=h.getRoot(b);a.createdNodes.length>0;){var c=a.createdNodes.shift();j.apply(b.view.addDiyDom,[b.treeId,c]);b.callback.onNodeCreated&&b.treeObj.trigger(e.event.NODECREATED,[b.treeId,c])}},createNodes:function(b,a,c,d){if(c&&c.length!=0){var f=h.getRoot(b),g=b.data.key.children,g=!d||d.open||!!k(d[g][0],b).get(0);f.createdNodes=[];a=i.appendNodes(b,a,c,d,!0,g);d?(d=k(d,e.id.UL,b),d.get(0)&&d.append(a.join(""))):
+b.treeObj.append(a.join(""));i.createNodeCallback(b)}},destroy:function(b){b&&(h.initCache(b),h.initRoot(b),m.unbindTree(b),m.unbindEvent(b),b.treeObj.empty(),delete r[b.treeId])},expandCollapseNode:function(b,a,c,d,f){var g=h.getRoot(b),l=b.data.key.children;if(a){if(g.expandTriggerFlag){var q=f,f=function(){q&&q();a.open?b.treeObj.trigger(e.event.EXPAND,[b.treeId,a]):b.treeObj.trigger(e.event.COLLAPSE,[b.treeId,a])};g.expandTriggerFlag=!1}if(!a.open&&a.isParent&&(!k(a,e.id.UL,b).get(0)||a[l]&&a[l].length>
+0&&!k(a[l][0],b).get(0)))i.appendParentULDom(b,a),i.createNodeCallback(b);if(a.open==c)j.apply(f,[]);else{var c=k(a,e.id.UL,b),g=k(a,e.id.SWITCH,b),o=k(a,e.id.ICON,b);a.isParent?(a.open=!a.open,a.iconOpen&&a.iconClose&&o.attr("style",i.makeNodeIcoStyle(b,a)),a.open?(i.replaceSwitchClass(a,g,e.folder.OPEN),i.replaceIcoClass(a,o,e.folder.OPEN),d==!1||b.view.expandSpeed==""?(c.show(),j.apply(f,[])):a[l]&&a[l].length>0?c.slideDown(b.view.expandSpeed,f):(c.show(),j.apply(f,[]))):(i.replaceSwitchClass(a,
+g,e.folder.CLOSE),i.replaceIcoClass(a,o,e.folder.CLOSE),d==!1||b.view.expandSpeed==""||!(a[l]&&a[l].length>0)?(c.hide(),j.apply(f,[])):c.slideUp(b.view.expandSpeed,f))):j.apply(f,[])}}else j.apply(f,[])},expandCollapseParentNode:function(b,a,c,d,f){a&&(a.parentTId?(i.expandCollapseNode(b,a,c,d),a.parentTId&&i.expandCollapseParentNode(b,a.getParentNode(),c,d,f)):i.expandCollapseNode(b,a,c,d,f))},expandCollapseSonNode:function(b,a,c,d,f){var g=h.getRoot(b),e=b.data.key.children,g=a?a[e]:g[e],e=a?!1:
+d,j=h.getRoot(b).expandTriggerFlag;h.getRoot(b).expandTriggerFlag=!1;if(g)for(var k=0,m=g.length;k<m;k++)g[k]&&i.expandCollapseSonNode(b,g[k],c,e);h.getRoot(b).expandTriggerFlag=j;i.expandCollapseNode(b,a,c,d,f)},isSelectedNode:function(b,a){if(!a)return!1;var c=h.getRoot(b).curSelectedList,d;for(d=c.length-1;d>=0;d--)if(a===c[d])return!0;return!1},makeDOMNodeIcon:function(b,a,c){var d=h.getNodeName(a,c),d=a.view.nameIsHTML?d:d.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");b.push("<span id='",
+c.tId,e.id.ICON,"' title='' treeNode",e.id.ICON," class='",i.makeNodeIcoClass(a,c),"' style='",i.makeNodeIcoStyle(a,c),"'></span><span id='",c.tId,e.id.SPAN,"'>",d,"</span>")},makeDOMNodeLine:function(b,a,c){b.push("<span id='",c.tId,e.id.SWITCH,"' title='' class='",i.makeNodeLineClass(a,c),"' treeNode",e.id.SWITCH,"></span>")},makeDOMNodeMainAfter:function(b){b.push("</li>")},makeDOMNodeMainBefore:function(b,a,c){b.push("<li id='",c.tId,"' class='",e.className.LEVEL,c.level,"' tabindex='0' hidefocus='true' treenode>")},
+makeDOMNodeNameAfter:function(b){b.push("</a>")},makeDOMNodeNameBefore:function(b,a,c){var d=h.getNodeTitle(a,c),f=i.makeNodeUrl(a,c),g=i.makeNodeFontCss(a,c),l=[],k;for(k in g)l.push(k,":",g[k],";");b.push("<a id='",c.tId,e.id.A,"' class='",e.className.LEVEL,c.level,"' treeNode",e.id.A,' onclick="',c.click||"",'" ',f!=null&&f.length>0?"href='"+f+"'":""," target='",i.makeNodeTarget(c),"' style='",l.join(""),"'");j.apply(a.view.showTitle,[a.treeId,c],a.view.showTitle)&&d&&b.push("title='",d.replace(/'/g,
+"&#39;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),"'");b.push(">")},makeNodeFontCss:function(b,a){var c=j.apply(b.view.fontCss,[b.treeId,a],b.view.fontCss);return c&&typeof c!="function"?c:{}},makeNodeIcoClass:function(b,a){var c=["ico"];a.isAjaxing||(c[0]=(a.iconSkin?a.iconSkin+"_":"")+c[0],a.isParent?c.push(a.open?e.folder.OPEN:e.folder.CLOSE):c.push(e.folder.DOCU));return e.className.BUTTON+" "+c.join("_")},makeNodeIcoStyle:function(b,a){var c=[];if(!a.isAjaxing){var d=a.isParent&&a.iconOpen&&
+a.iconClose?a.open?a.iconOpen:a.iconClose:a.icon;d&&c.push("background:url(",d,") 0 0 no-repeat;");(b.view.showIcon==!1||!j.apply(b.view.showIcon,[b.treeId,a],!0))&&c.push("width:0px;height:0px;")}return c.join("")},makeNodeLineClass:function(b,a){var c=[];b.view.showLine?a.level==0&&a.isFirstNode&&a.isLastNode?c.push(e.line.ROOT):a.level==0&&a.isFirstNode?c.push(e.line.ROOTS):a.isLastNode?c.push(e.line.BOTTOM):c.push(e.line.CENTER):c.push(e.line.NOLINE);a.isParent?c.push(a.open?e.folder.OPEN:e.folder.CLOSE):
+c.push(e.folder.DOCU);return i.makeNodeLineClassEx(a)+c.join("_")},makeNodeLineClassEx:function(b){return e.className.BUTTON+" "+e.className.LEVEL+b.level+" "+e.className.SWITCH+" "},makeNodeTarget:function(b){return b.target||"_blank"},makeNodeUrl:function(b,a){var c=b.data.key.url;return a[c]?a[c]:null},makeUlHtml:function(b,a,c,d){c.push("<ul id='",a.tId,e.id.UL,"' class='",e.className.LEVEL,a.level," ",i.makeUlLineClass(b,a),"' style='display:",a.open?"block":"none","'>");c.push(d);c.push("</ul>")},
+makeUlLineClass:function(b,a){return b.view.showLine&&!a.isLastNode?e.line.LINE:""},removeChildNodes:function(b,a){if(a){var c=b.data.key.children,d=a[c];if(d){for(var f=0,g=d.length;f<g;f++)h.removeNodeCache(b,d[f]);h.removeSelectedNode(b);delete a[c];b.data.keep.parent?k(a,e.id.UL,b).empty():(a.isParent=!1,a.open=!1,c=k(a,e.id.SWITCH,b),d=k(a,e.id.ICON,b),i.replaceSwitchClass(a,c,e.folder.DOCU),i.replaceIcoClass(a,d,e.folder.DOCU),k(a,e.id.UL,b).remove())}}},setFirstNode:function(b,a){var c=b.data.key.children;
+if(a[c].length>0)a[c][0].isFirstNode=!0},setLastNode:function(b,a){var c=b.data.key.children,d=a[c].length;if(d>0)a[c][d-1].isLastNode=!0},removeNode:function(b,a){var c=h.getRoot(b),d=b.data.key.children,f=a.parentTId?a.getParentNode():c;a.isFirstNode=!1;a.isLastNode=!1;a.getPreNode=function(){return null};a.getNextNode=function(){return null};if(h.getNodeCache(b,a.tId)){k(a,b).remove();h.removeNodeCache(b,a);h.removeSelectedNode(b,a);for(var g=0,l=f[d].length;g<l;g++)if(f[d][g].tId==a.tId){f[d].splice(g,
+1);break}i.setFirstNode(b,f);i.setLastNode(b,f);var j,g=f[d].length;if(!b.data.keep.parent&&g==0)f.isParent=!1,f.open=!1,g=k(f,e.id.UL,b),l=k(f,e.id.SWITCH,b),j=k(f,e.id.ICON,b),i.replaceSwitchClass(f,l,e.folder.DOCU),i.replaceIcoClass(f,j,e.folder.DOCU),g.css("display","none");else if(b.view.showLine&&g>0){var o=f[d][g-1],g=k(o,e.id.UL,b),l=k(o,e.id.SWITCH,b);j=k(o,e.id.ICON,b);f==c?f[d].length==1?i.replaceSwitchClass(o,l,e.line.ROOT):(c=k(f[d][0],e.id.SWITCH,b),i.replaceSwitchClass(f[d][0],c,e.line.ROOTS),
+i.replaceSwitchClass(o,l,e.line.BOTTOM)):i.replaceSwitchClass(o,l,e.line.BOTTOM);g.removeClass(e.line.LINE)}}},replaceIcoClass:function(b,a,c){if(a&&!b.isAjaxing&&(b=a.attr("class"),b!=void 0)){b=b.split("_");switch(c){case e.folder.OPEN:case e.folder.CLOSE:case e.folder.DOCU:b[b.length-1]=c}a.attr("class",b.join("_"))}},replaceSwitchClass:function(b,a,c){if(a){var d=a.attr("class");if(d!=void 0){d=d.split("_");switch(c){case e.line.ROOT:case e.line.ROOTS:case e.line.CENTER:case e.line.BOTTOM:case e.line.NOLINE:d[0]=
+i.makeNodeLineClassEx(b)+c;break;case e.folder.OPEN:case e.folder.CLOSE:case e.folder.DOCU:d[1]=c}a.attr("class",d.join("_"));c!==e.folder.DOCU?a.removeAttr("disabled"):a.attr("disabled","disabled")}}},selectNode:function(b,a,c){c||i.cancelPreSelectedNode(b,null,a);k(a,e.id.A,b).addClass(e.node.CURSELECTED);h.addSelectedNode(b,a);b.treeObj.trigger(e.event.SELECTED,[m,b.treeId,a])},setNodeFontCss:function(b,a){var c=k(a,e.id.A,b),d=i.makeNodeFontCss(b,a);d&&c.css(d)},setNodeLineIcos:function(b,a){if(a){var c=
+k(a,e.id.SWITCH,b),d=k(a,e.id.UL,b),f=k(a,e.id.ICON,b),g=i.makeUlLineClass(b,a);g.length==0?d.removeClass(e.line.LINE):d.addClass(g);c.attr("class",i.makeNodeLineClass(b,a));a.isParent?c.removeAttr("disabled"):c.attr("disabled","disabled");f.removeAttr("style");f.attr("style",i.makeNodeIcoStyle(b,a));f.attr("class",i.makeNodeIcoClass(b,a))}},setNodeName:function(b,a){var c=h.getNodeTitle(b,a),d=k(a,e.id.SPAN,b);d.empty();b.view.nameIsHTML?d.html(h.getNodeName(b,a)):d.text(h.getNodeName(b,a));j.apply(b.view.showTitle,
+[b.treeId,a],b.view.showTitle)&&k(a,e.id.A,b).attr("title",!c?"":c)},setNodeTarget:function(b,a){k(a,e.id.A,b).attr("target",i.makeNodeTarget(a))},setNodeUrl:function(b,a){var c=k(a,e.id.A,b),d=i.makeNodeUrl(b,a);d==null||d.length==0?c.removeAttr("href"):c.attr("href",d)},switchNode:function(b,a){a.open||!j.canAsync(b,a)?i.expandCollapseNode(b,a,!a.open):b.async.enable?i.asyncNode(b,a)||i.expandCollapseNode(b,a,!a.open):a&&i.expandCollapseNode(b,a,!a.open)}};p.fn.zTree={consts:{className:{BUTTON:"button",
+LEVEL:"level",ICO_LOADING:"ico_loading",SWITCH:"switch"},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:j,view:i,event:m,data:h},getZTreeObj:function(b){return(b=h.getZTreeTools(b))?b:null},destroy:function(b){if(b&&b.length>0)i.destroy(h.getSetting(b));else for(var a in r)i.destroy(r[a])},init:function(b,a,c){var d=j.clone(M);p.extend(!0,d,a);d.treeId=b.attr("id");d.treeObj=b;d.treeObj.empty();r[d.treeId]=d;if(typeof document.body.style.maxHeight==="undefined")d.view.expandSpeed="";h.initRoot(d);b=h.getRoot(d);a=d.data.key.children;c=c?j.clone(j.isArray(c)?
+c:[c]):[];b[a]=d.data.simpleData.enable?h.transformTozTreeFormat(d,c):c;h.initCache(d);m.unbindTree(d);m.bindTree(d);m.unbindEvent(d);m.bindEvent(d);c={setting:d,addNodes:function(a,b,c){function e(){i.addNodes(d,a,h,c==!0)}if(!b)return null;a||(a=null);if(a&&!a.isParent&&d.data.keep.leaf)return null;var h=j.clone(j.isArray(b)?b:[b]);j.canAsync(d,a)?i.asyncNode(d,a,c,e):e();return h},cancelSelectedNode:function(a){i.cancelPreSelectedNode(d,a)},destroy:function(){i.destroy(d)},expandAll:function(a){a=
+!!a;i.expandCollapseSonNode(d,null,a,!0);return a},expandNode:function(a,b,c,e,m){if(!a||!a.isParent)return null;b!==!0&&b!==!1&&(b=!a.open);if((m=!!m)&&b&&j.apply(d.callback.beforeExpand,[d.treeId,a],!0)==!1)return null;else if(m&&!b&&j.apply(d.callback.beforeCollapse,[d.treeId,a],!0)==!1)return null;b&&a.parentTId&&i.expandCollapseParentNode(d,a.getParentNode(),b,!1);if(b===a.open&&!c)return null;h.getRoot(d).expandTriggerFlag=m;if(!j.canAsync(d,a)&&c)i.expandCollapseSonNode(d,a,b,!0,function(){if(e!==
+!1)try{k(a,d).focus().blur()}catch(b){}});else if(a.open=!b,i.switchNode(this.setting,a),e!==!1)try{k(a,d).focus().blur()}catch(p){}return b},getNodes:function(){return h.getNodes(d)},getNodeByParam:function(a,b,c){return!a?null:h.getNodeByParam(d,c?c[d.data.key.children]:h.getNodes(d),a,b)},getNodeByTId:function(a){return h.getNodeCache(d,a)},getNodesByParam:function(a,b,c){return!a?null:h.getNodesByParam(d,c?c[d.data.key.children]:h.getNodes(d),a,b)},getNodesByParamFuzzy:function(a,b,c){return!a?
+null:h.getNodesByParamFuzzy(d,c?c[d.data.key.children]:h.getNodes(d),a,b)},getNodesByFilter:function(a,b,c,e){b=!!b;return!a||typeof a!="function"?b?null:[]:h.getNodesByFilter(d,c?c[d.data.key.children]:h.getNodes(d),a,b,e)},getNodeIndex:function(a){if(!a)return null;for(var b=d.data.key.children,c=a.parentTId?a.getParentNode():h.getRoot(d),e=0,i=c[b].length;e<i;e++)if(c[b][e]==a)return e;return-1},getSelectedNodes:function(){for(var a=[],b=h.getRoot(d).curSelectedList,c=0,e=b.length;c<e;c++)a.push(b[c]);
+return a},isSelectedNode:function(a){return h.isSelectedNode(d,a)},reAsyncChildNodes:function(a,b,c){if(this.setting.async.enable){var j=!a;j&&(a=h.getRoot(d));if(b=="refresh"){for(var b=this.setting.data.key.children,m=0,p=a[b]?a[b].length:0;m<p;m++)h.removeNodeCache(d,a[b][m]);h.removeSelectedNode(d);a[b]=[];j?this.setting.treeObj.empty():k(a,e.id.UL,d).empty()}i.asyncNode(this.setting,j?null:a,!!c)}},refresh:function(){this.setting.treeObj.empty();var a=h.getRoot(d),b=a[d.data.key.children];h.initRoot(d);
+a[d.data.key.children]=b;h.initCache(d);i.createNodes(d,0,a[d.data.key.children])},removeChildNodes:function(a){if(!a)return null;var b=a[d.data.key.children];i.removeChildNodes(d,a);return b?b:null},removeNode:function(a,b){a&&(b=!!b,b&&j.apply(d.callback.beforeRemove,[d.treeId,a],!0)==!1||(i.removeNode(d,a),b&&this.setting.treeObj.trigger(e.event.REMOVE,[d.treeId,a])))},selectNode:function(a,b){if(a&&j.uCanDo(d)){b=d.view.selectedMulti&&b;if(a.parentTId)i.expandCollapseParentNode(d,a.getParentNode(),
+!0,!1,function(){try{k(a,d).focus().blur()}catch(b){}});else try{k(a,d).focus().blur()}catch(c){}i.selectNode(d,a,b)}},transformTozTreeNodes:function(a){return h.transformTozTreeFormat(d,a)},transformToArray:function(a){return h.transformToArrayFormat(d,a)},updateNode:function(a){a&&k(a,d).get(0)&&j.uCanDo(d)&&(i.setNodeName(d,a),i.setNodeTarget(d,a),i.setNodeUrl(d,a),i.setNodeLineIcos(d,a),i.setNodeFontCss(d,a))}};b.treeTools=c;h.setZTreeTools(d,c);b[a]&&b[a].length>0?i.createNodes(d,0,b[a]):d.async.enable&&
+d.async.url&&d.async.url!==""&&i.asyncNode(d);return c}};var N=p.fn.zTree,k=j.$,e=N.consts})(jQuery);
+
+/*
+ * JQuery zTree excheck v3.5.18
+ * http://zTree.me/
+ *
+ * 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: 2015-06-18
+ */
+(function(m){var p,q,r,o={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"}},v={check:{enable:!1,autoCheckTrigger:!1,chkStyle:o.checkbox.STYLE,nocheckInherit:!1,chkDisabledInherit:!1,radioType:o.radio.TYPE_LEVEL,chkboxType:{Y:"ps",N:"ps"}},data:{key:{checked:"checked"}},callback:{beforeCheck:null,onCheck:null}};p=function(c,
+a){if(a.chkDisabled===!0)return!1;var b=f.getSetting(c.data.treeId),d=b.data.key.checked;if(k.apply(b.callback.beforeCheck,[b.treeId,a],!0)==!1)return!0;a[d]=!a[d];e.checkNodeRelation(b,a);d=n(a,j.id.CHECK,b);e.setChkClass(b,d,a);e.repairParentChkClassWithSelf(b,a);b.treeObj.trigger(j.event.CHECK,[c,b.treeId,a]);return!0};q=function(c,a){if(a.chkDisabled===!0)return!1;var b=f.getSetting(c.data.treeId),d=n(a,j.id.CHECK,b);a.check_Focus=!0;e.setChkClass(b,d,a);return!0};r=function(c,a){if(a.chkDisabled===
+!0)return!1;var b=f.getSetting(c.data.treeId),d=n(a,j.id.CHECK,b);a.check_Focus=!1;e.setChkClass(b,d,a);return!0};m.extend(!0,m.fn.zTree.consts,o);m.extend(!0,m.fn.zTree._z,{tools:{},view:{checkNodeRelation:function(c,a){var b,d,h,i=c.data.key.children,l=c.data.key.checked;b=j.radio;if(c.check.chkStyle==b.STYLE){var g=f.getRadioCheckedList(c);if(a[l])if(c.check.radioType==b.TYPE_ALL){for(d=g.length-1;d>=0;d--)b=g[d],b[l]&&b!=a&&(b[l]=!1,g.splice(d,1),e.setChkClass(c,n(b,j.id.CHECK,c),b),b.parentTId!=
+a.parentTId&&e.repairParentChkClassWithSelf(c,b));g.push(a)}else{g=a.parentTId?a.getParentNode():f.getRoot(c);for(d=0,h=g[i].length;d<h;d++)b=g[i][d],b[l]&&b!=a&&(b[l]=!1,e.setChkClass(c,n(b,j.id.CHECK,c),b))}else if(c.check.radioType==b.TYPE_ALL)for(d=0,h=g.length;d<h;d++)if(a==g[d]){g.splice(d,1);break}}else a[l]&&(!a[i]||a[i].length==0||c.check.chkboxType.Y.indexOf("s")>-1)&&e.setSonNodeCheckBox(c,a,!0),!a[l]&&(!a[i]||a[i].length==0||c.check.chkboxType.N.indexOf("s")>-1)&&e.setSonNodeCheckBox(c,
+a,!1),a[l]&&c.check.chkboxType.Y.indexOf("p")>-1&&e.setParentNodeCheckBox(c,a,!0),!a[l]&&c.check.chkboxType.N.indexOf("p")>-1&&e.setParentNodeCheckBox(c,a,!1)},makeChkClass:function(c,a){var b=c.data.key.checked,d=j.checkbox,h=j.radio,i="",i=a.chkDisabled===!0?d.DISABLED:a.halfCheck?d.PART:c.check.chkStyle==h.STYLE?a.check_Child_State<1?d.FULL:d.PART:a[b]?a.check_Child_State===2||a.check_Child_State===-1?d.FULL:d.PART:a.check_Child_State<1?d.FULL:d.PART,b=c.check.chkStyle+"_"+(a[b]?d.TRUE:d.FALSE)+
+"_"+i,b=a.check_Focus&&a.chkDisabled!==!0?b+"_"+d.FOCUS:b;return j.className.BUTTON+" "+d.DEFAULT+" "+b},repairAllChk:function(c,a){if(c.check.enable&&c.check.chkStyle===j.checkbox.STYLE)for(var b=c.data.key.checked,d=c.data.key.children,h=f.getRoot(c),i=0,l=h[d].length;i<l;i++){var g=h[d][i];g.nocheck!==!0&&g.chkDisabled!==!0&&(g[b]=a);e.setSonNodeCheckBox(c,g,a)}},repairChkClass:function(c,a){if(a&&(f.makeChkFlag(c,a),a.nocheck!==!0)){var b=n(a,j.id.CHECK,c);e.setChkClass(c,b,a)}},repairParentChkClass:function(c,
+a){if(a&&a.parentTId){var b=a.getParentNode();e.repairChkClass(c,b);e.repairParentChkClass(c,b)}},repairParentChkClassWithSelf:function(c,a){if(a){var b=c.data.key.children;a[b]&&a[b].length>0?e.repairParentChkClass(c,a[b][0]):e.repairParentChkClass(c,a)}},repairSonChkDisabled:function(c,a,b,d){if(a){var h=c.data.key.children;if(a.chkDisabled!=b)a.chkDisabled=b;e.repairChkClass(c,a);if(a[h]&&d)for(var i=0,l=a[h].length;i<l;i++)e.repairSonChkDisabled(c,a[h][i],b,d)}},repairParentChkDisabled:function(c,
+a,b,d){if(a){if(a.chkDisabled!=b&&d)a.chkDisabled=b;e.repairChkClass(c,a);e.repairParentChkDisabled(c,a.getParentNode(),b,d)}},setChkClass:function(c,a,b){a&&(b.nocheck===!0?a.hide():a.show(),a.attr("class",e.makeChkClass(c,b)))},setParentNodeCheckBox:function(c,a,b,d){var h=c.data.key.children,i=c.data.key.checked,l=n(a,j.id.CHECK,c);d||(d=a);f.makeChkFlag(c,a);a.nocheck!==!0&&a.chkDisabled!==!0&&(a[i]=b,e.setChkClass(c,l,a),c.check.autoCheckTrigger&&a!=d&&c.treeObj.trigger(j.event.CHECK,[null,c.treeId,
+a]));if(a.parentTId){l=!0;if(!b)for(var h=a.getParentNode()[h],g=0,k=h.length;g<k;g++)if(h[g].nocheck!==!0&&h[g].chkDisabled!==!0&&h[g][i]||(h[g].nocheck===!0||h[g].chkDisabled===!0)&&h[g].check_Child_State>0){l=!1;break}l&&e.setParentNodeCheckBox(c,a.getParentNode(),b,d)}},setSonNodeCheckBox:function(c,a,b,d){if(a){var h=c.data.key.children,i=c.data.key.checked,l=n(a,j.id.CHECK,c);d||(d=a);var g=!1;if(a[h])for(var k=0,m=a[h].length;k<m&&a.chkDisabled!==!0;k++){var o=a[h][k];e.setSonNodeCheckBox(c,
+o,b,d);o.chkDisabled===!0&&(g=!0)}if(a!=f.getRoot(c)&&a.chkDisabled!==!0){g&&a.nocheck!==!0&&f.makeChkFlag(c,a);if(a.nocheck!==!0&&a.chkDisabled!==!0){if(a[i]=b,!g)a.check_Child_State=a[h]&&a[h].length>0?b?2:0:-1}else a.check_Child_State=-1;e.setChkClass(c,l,a);c.check.autoCheckTrigger&&a!=d&&a.nocheck!==!0&&a.chkDisabled!==!0&&c.treeObj.trigger(j.event.CHECK,[null,c.treeId,a])}}}},event:{},data:{getRadioCheckedList:function(c){for(var a=f.getRoot(c).radioCheckedList,b=0,d=a.length;b<d;b++)f.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=c.data.key.checked;return{checked:a[b],half:a.halfCheck?a.halfCheck:c.check.chkStyle==j.radio.STYLE?a.check_Child_State===2:a[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 h=c.data.key.children,i=c.data.key.checked,e=b&&c.check.chkStyle==j.radio.STYLE&&c.check.radioType==j.radio.TYPE_ALL,
+d=!d?[]:d,g=0,k=a.length;g<k;g++){if(a[g].nocheck!==!0&&a[g].chkDisabled!==!0&&a[g][i]==b&&(d.push(a[g]),e))break;f.getTreeCheckedNodes(c,a[g][h],b,d);if(e&&d.length>0)break}return d},getTreeChangeCheckedNodes:function(c,a,b){if(!a)return[];for(var d=c.data.key.children,h=c.data.key.checked,b=!b?[]:b,i=0,e=a.length;i<e;i++)a[i].nocheck!==!0&&a[i].chkDisabled!==!0&&a[i][h]!=a[i].checkedOld&&b.push(a[i]),f.getTreeChangeCheckedNodes(c,a[i][d],b);return b},makeChkFlag:function(c,a){if(a){var b=c.data.key.children,
+d=c.data.key.checked,h=-1;if(a[b])for(var i=0,e=a[b].length;i<e;i++){var g=a[b][i],f=-1;if(c.check.chkStyle==j.radio.STYLE)if(f=g.nocheck===!0||g.chkDisabled===!0?g.check_Child_State:g.halfCheck===!0?2:g[d]?2:g.check_Child_State>0?2:0,f==2){h=2;break}else f==0&&(h=0);else if(c.check.chkStyle==j.checkbox.STYLE)if(f=g.nocheck===!0||g.chkDisabled===!0?g.check_Child_State:g.halfCheck===!0?1:g[d]?g.check_Child_State===-1||g.check_Child_State===2?2:1:g.check_Child_State>0?1:0,f===1){h=1;break}else if(f===
+2&&h>-1&&i>0&&f!==h){h=1;break}else if(h===2&&f>-1&&f<2){h=1;break}else f>-1&&(h=f)}a.check_Child_State=h}}}});var m=m.fn.zTree,k=m._z.tools,j=m.consts,e=m._z.view,f=m._z.data,n=k.$;f.exSetting(v);f.addInitBind(function(c){c.treeObj.bind(j.event.CHECK,function(a,b,d,h){a.srcEvent=b;k.apply(c.callback.onCheck,[a,d,h])})});f.addInitUnBind(function(c){c.treeObj.unbind(j.event.CHECK)});f.addInitCache(function(){});f.addInitNode(function(c,a,b,d){if(b){a=c.data.key.checked;typeof b[a]=="string"&&(b[a]=
+k.eqs(b[a],"true"));b[a]=!!b[a];b.checkedOld=b[a];if(typeof b.nocheck=="string")b.nocheck=k.eqs(b.nocheck,"true");b.nocheck=!!b.nocheck||c.check.nocheckInherit&&d&&!!d.nocheck;if(typeof b.chkDisabled=="string")b.chkDisabled=k.eqs(b.chkDisabled,"true");b.chkDisabled=!!b.chkDisabled||c.check.chkDisabledInherit&&d&&!!d.chkDisabled;if(typeof b.halfCheck=="string")b.halfCheck=k.eqs(b.halfCheck,"true");b.halfCheck=!!b.halfCheck;b.check_Child_State=-1;b.check_Focus=!1;b.getCheckStatus=function(){return f.getCheckStatus(c,
+b)};c.check.chkStyle==j.radio.STYLE&&c.check.radioType==j.radio.TYPE_ALL&&b[a]&&f.getRoot(c).radioCheckedList.push(b)}});f.addInitProxy(function(c){var a=c.target,b=f.getSetting(c.data.treeId),d="",h=null,e="",l=null;if(k.eqs(c.type,"mouseover")){if(b.check.enable&&k.eqs(a.tagName,"span")&&a.getAttribute("treeNode"+j.id.CHECK)!==null)d=k.getNodeMainDom(a).id,e="mouseoverCheck"}else if(k.eqs(c.type,"mouseout")){if(b.check.enable&&k.eqs(a.tagName,"span")&&a.getAttribute("treeNode"+j.id.CHECK)!==null)d=
+k.getNodeMainDom(a).id,e="mouseoutCheck"}else if(k.eqs(c.type,"click")&&b.check.enable&&k.eqs(a.tagName,"span")&&a.getAttribute("treeNode"+j.id.CHECK)!==null)d=k.getNodeMainDom(a).id,e="checkNode";if(d.length>0)switch(h=f.getNodeCache(b,d),e){case "checkNode":l=p;break;case "mouseoverCheck":l=q;break;case "mouseoutCheck":l=r}return{stop:e==="checkNode",node:h,nodeEventType:e,nodeEventCallback:l,treeEventType:"",treeEventCallback:null}},!0);f.addInitRoot(function(c){f.getRoot(c).radioCheckedList=[]});
+f.addBeforeA(function(c,a,b){c.check.enable&&(f.makeChkFlag(c,a),b.push("<span ID='",a.tId,j.id.CHECK,"' class='",e.makeChkClass(c,a),"' treeNode",j.id.CHECK,a.nocheck===!0?" style='display:none;'":"","></span>"))});f.addZTreeTools(function(c,a){a.checkNode=function(a,b,c,f){var g=this.setting.data.key.checked;if(a.chkDisabled!==!0&&(b!==!0&&b!==!1&&(b=!a[g]),f=!!f,(a[g]!==b||c)&&!(f&&k.apply(this.setting.callback.beforeCheck,[this.setting.treeId,a],!0)==!1)&&k.uCanDo(this.setting)&&this.setting.check.enable&&
+a.nocheck!==!0))a[g]=b,b=n(a,j.id.CHECK,this.setting),(c||this.setting.check.chkStyle===j.radio.STYLE)&&e.checkNodeRelation(this.setting,a),e.setChkClass(this.setting,b,a),e.repairParentChkClassWithSelf(this.setting,a),f&&this.setting.treeObj.trigger(j.event.CHECK,[null,this.setting.treeId,a])};a.checkAllNodes=function(a){e.repairAllChk(this.setting,!!a)};a.getCheckedNodes=function(a){var b=this.setting.data.key.children;return f.getTreeCheckedNodes(this.setting,f.getRoot(this.setting)[b],a!==!1)};
+a.getChangeCheckedNodes=function(){var a=this.setting.data.key.children;return f.getTreeChangeCheckedNodes(this.setting,f.getRoot(this.setting)[a])};a.setChkDisabled=function(a,b,c,f){b=!!b;c=!!c;e.repairSonChkDisabled(this.setting,a,b,!!f);e.repairParentChkDisabled(this.setting,a.getParentNode(),b,c)};var b=a.updateNode;a.updateNode=function(c,f){b&&b.apply(a,arguments);if(c&&this.setting.check.enable&&n(c,this.setting).get(0)&&k.uCanDo(this.setting)){var i=n(c,j.id.CHECK,this.setting);(f==!0||this.setting.check.chkStyle===
+j.radio.STYLE)&&e.checkNodeRelation(this.setting,c);e.setChkClass(this.setting,i,c);e.repairParentChkClassWithSelf(this.setting,c)}}});var s=e.createNodes;e.createNodes=function(c,a,b,d){s&&s.apply(e,arguments);b&&e.repairParentChkClassWithSelf(c,d)};var t=e.removeNode;e.removeNode=function(c,a){var b=a.getParentNode();t&&t.apply(e,arguments);a&&b&&(e.repairChkClass(c,b),e.repairParentChkClass(c,b))};var u=e.appendNodes;e.appendNodes=function(c,a,b,d,h,i){var j="";u&&(j=u.apply(e,arguments));d&&f.makeChkFlag(c,
+d);return j}})(jQuery);
+
+/*
+ * JQuery zTree exedit v3.5.18
+ * http://zTree.me/
+ *
+ * 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: 2015-06-18
+ */
+(function(w){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"}},x={onHoverOverNode:function(b,a){var c=m.getSetting(b.data.treeId),d=m.getRoot(c);if(d.curHoverNode!=a)x.onHoverOutNode(b);d.curHoverNode=a;f.addHoverDom(c,a)},onHoverOutNode:function(b){var b=
+m.getSetting(b.data.treeId),a=m.getRoot(b);if(a.curHoverNode&&!m.isSelectedNode(b,a.curHoverNode))f.removeTreeDom(b,a.curHoverNode),a.curHoverNode=null},onMousedownNode:function(b,a){function c(b){if(C.dragFlag==0&&Math.abs(N-b.clientX)<e.edit.drag.minMoveSize&&Math.abs(O-b.clientY)<e.edit.drag.minMoveSize)return!0;var a,c,n,k,i;i=e.data.key.children;M.css("cursor","pointer");if(C.dragFlag==0){if(g.apply(e.callback.beforeDrag,[e.treeId,l],!0)==!1)return r(b),!0;for(a=0,c=l.length;a<c;a++){if(a==0)C.dragNodeShowBefore=
+[];n=l[a];n.isParent&&n.open?(f.expandCollapseNode(e,n,!n.open),C.dragNodeShowBefore[n.tId]=!0):C.dragNodeShowBefore[n.tId]=!1}C.dragFlag=1;t.showHoverDom=!1;g.showIfameMask(e,!0);n=!0;k=-1;if(l.length>1){var j=l[0].parentTId?l[0].getParentNode()[i]:m.getNodes(e);i=[];for(a=0,c=j.length;a<c;a++)if(C.dragNodeShowBefore[j[a].tId]!==void 0&&(n&&k>-1&&k+1!==a&&(n=!1),i.push(j[a]),k=a),l.length===i.length){l=i;break}}n&&(H=l[0].getPreNode(),R=l[l.length-1].getNextNode());D=o("<ul class='zTreeDragUL'></ul>",
+e);for(a=0,c=l.length;a<c;a++)n=l[a],n.editNameFlag=!1,f.selectNode(e,n,a>0),f.removeTreeDom(e,n),a>e.edit.drag.maxShowNodeNum-1||(k=o("<li id='"+n.tId+"_tmp'></li>",e),k.append(o(n,d.id.A,e).clone()),k.css("padding","0"),k.children("#"+n.tId+d.id.A).removeClass(d.node.CURSELECTED),D.append(k),a==e.edit.drag.maxShowNodeNum-1&&(k=o("<li id='"+n.tId+"_moretmp'><a>  ...  </a></li>",e),D.append(k)));D.attr("id",l[0].tId+d.id.UL+"_tmp");D.addClass(e.treeObj.attr("class"));D.appendTo(M);B=o("<span class='tmpzTreeMove_arrow'></span>",
+e);B.attr("id","zTreeMove_arrow_tmp");B.appendTo(M);e.treeObj.trigger(d.event.DRAG,[b,e.treeId,l])}if(C.dragFlag==1){s&&B.attr("id")==b.target.id&&u&&b.clientX+F.scrollLeft()+2>w("#"+u+d.id.A,s).offset().left?(n=w("#"+u+d.id.A,s),b.target=n.length>0?n.get(0):b.target):s&&(s.removeClass(d.node.TMPTARGET_TREE),u&&w("#"+u+d.id.A,s).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));
+u=s=null;J=!1;h=e;n=m.getSettings();for(var y in n)if(n[y].treeId&&n[y].edit.enable&&n[y].treeId!=e.treeId&&(b.target.id==n[y].treeId||w(b.target).parents("#"+n[y].treeId).length>0))J=!0,h=n[y];y=F.scrollTop();k=F.scrollLeft();i=h.treeObj.offset();a=h.treeObj.get(0).scrollHeight;n=h.treeObj.get(0).scrollWidth;c=b.clientY+y-i.top;var p=h.treeObj.height()+i.top-b.clientY-y,q=b.clientX+k-i.left,x=h.treeObj.width()+i.left-b.clientX-k;i=c<e.edit.drag.borderMax&&c>e.edit.drag.borderMin;var j=p<e.edit.drag.borderMax&&
+p>e.edit.drag.borderMin,K=q<e.edit.drag.borderMax&&q>e.edit.drag.borderMin,G=x<e.edit.drag.borderMax&&x>e.edit.drag.borderMin,p=c>e.edit.drag.borderMin&&p>e.edit.drag.borderMin&&q>e.edit.drag.borderMin&&x>e.edit.drag.borderMin,q=i&&h.treeObj.scrollTop()<=0,x=j&&h.treeObj.scrollTop()+h.treeObj.height()+10>=a,P=K&&h.treeObj.scrollLeft()<=0,Q=G&&h.treeObj.scrollLeft()+h.treeObj.width()+10>=n;if(b.target&&g.isChildOrSelf(b.target,h.treeId)){for(var E=b.target;E&&E.tagName&&!g.eqs(E.tagName,"li")&&E.id!=
+h.treeId;)E=E.parentNode;var S=!0;for(a=0,c=l.length;a<c;a++)if(n=l[a],E.id===n.tId){S=!1;break}else if(o(n,e).find("#"+E.id).length>0){S=!1;break}if(S&&b.target&&g.isChildOrSelf(b.target,E.id+d.id.A))s=w(E),u=E.id}n=l[0];if(p&&g.isChildOrSelf(b.target,h.treeId)){if(!s&&(b.target.id==h.treeId||q||x||P||Q)&&(J||!J&&n.parentTId))s=h.treeObj;i?h.treeObj.scrollTop(h.treeObj.scrollTop()-10):j&&h.treeObj.scrollTop(h.treeObj.scrollTop()+10);K?h.treeObj.scrollLeft(h.treeObj.scrollLeft()-10):G&&h.treeObj.scrollLeft(h.treeObj.scrollLeft()+
+10);s&&s!=h.treeObj&&s.offset().left<h.treeObj.offset().left&&h.treeObj.scrollLeft(h.treeObj.scrollLeft()+s.offset().left-h.treeObj.offset().left)}D.css({top:b.clientY+y+3+"px",left:b.clientX+k+3+"px"});i=a=0;if(s&&s.attr("id")!=h.treeId){var z=u==null?null:m.getNodeCache(h,u);c=(b.ctrlKey||b.metaKey)&&e.edit.drag.isMove&&e.edit.drag.isCopy||!e.edit.drag.isMove&&e.edit.drag.isCopy;a=!!(H&&u===H.tId);i=!!(R&&u===R.tId);k=n.parentTId&&n.parentTId==u;n=(c||!i)&&g.apply(h.edit.drag.prev,[h.treeId,l,z],
+!!h.edit.drag.prev);a=(c||!a)&&g.apply(h.edit.drag.next,[h.treeId,l,z],!!h.edit.drag.next);G=(c||!k)&&!(h.data.keep.leaf&&!z.isParent)&&g.apply(h.edit.drag.inner,[h.treeId,l,z],!!h.edit.drag.inner);if(!n&&!a&&!G){if(s=null,u="",v=d.move.TYPE_INNER,B.css({display:"none"}),window.zTreeMoveTimer)clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=null}else{c=w("#"+u+d.id.A,s);i=z.isLastNode?null:w("#"+z.getNextNode().tId+d.id.A,s.next());j=c.offset().top;k=c.offset().left;K=n?G?0.25:a?
+0.5:1:-1;G=a?G?0.75:n?0.5:0:-1;y=(b.clientY+y-j)/c.height();(K==1||y<=K&&y>=-0.2)&&n?(a=1-B.width(),i=j-B.height()/2,v=d.move.TYPE_PREV):(G==0||y>=G&&y<=1.2)&&a?(a=1-B.width(),i=i==null||z.isParent&&z.open?j+c.height()-B.height()/2:i.offset().top-B.height()/2,v=d.move.TYPE_NEXT):(a=5-B.width(),i=j,v=d.move.TYPE_INNER);B.css({display:"block",top:i+"px",left:k+a+"px"});c.addClass(d.node.TMPTARGET_NODE+"_"+v);if(T!=u||U!=v)L=(new Date).getTime();if(z&&z.isParent&&v==d.move.TYPE_INNER&&(y=!0,window.zTreeMoveTimer&&
+window.zTreeMoveTargetNodeTId!==z.tId?(clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=null):window.zTreeMoveTimer&&window.zTreeMoveTargetNodeTId===z.tId&&(y=!1),y))window.zTreeMoveTimer=setTimeout(function(){v==d.move.TYPE_INNER&&z&&z.isParent&&!z.open&&(new Date).getTime()-L>h.edit.drag.autoOpenTime&&g.apply(h.callback.beforeDragOpen,[h.treeId,z],!0)&&(f.switchNode(h,z),h.edit.drag.autoExpandTrigger&&h.treeObj.trigger(d.event.EXPAND,[h.treeId,z]))},h.edit.drag.autoOpenTime+50),
+window.zTreeMoveTargetNodeTId=z.tId}}else if(v=d.move.TYPE_INNER,s&&g.apply(h.edit.drag.inner,[h.treeId,l,null],!!h.edit.drag.inner)?s.addClass(d.node.TMPTARGET_TREE):s=null,B.css({display:"none"}),window.zTreeMoveTimer)clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=null;T=u;U=v;e.treeObj.trigger(d.event.DRAGMOVE,[b,e.treeId,l])}return!1}function r(b){if(window.zTreeMoveTimer)clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=null;U=T=null;F.unbind("mousemove",c);
+F.unbind("mouseup",r);F.unbind("selectstart",k);M.css("cursor","auto");s&&(s.removeClass(d.node.TMPTARGET_TREE),u&&w("#"+u+d.id.A,s).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));g.showIfameMask(e,!1);t.showHoverDom=!0;if(C.dragFlag!=0){C.dragFlag=0;var a,i,j;for(a=0,i=l.length;a<i;a++)j=l[a],j.isParent&&C.dragNodeShowBefore[j.tId]&&!j.open&&(f.expandCollapseNode(e,j,!j.open),
+delete C.dragNodeShowBefore[j.tId]);D&&D.remove();B&&B.remove();var p=(b.ctrlKey||b.metaKey)&&e.edit.drag.isMove&&e.edit.drag.isCopy||!e.edit.drag.isMove&&e.edit.drag.isCopy;!p&&s&&u&&l[0].parentTId&&u==l[0].parentTId&&v==d.move.TYPE_INNER&&(s=null);if(s){var q=u==null?null:m.getNodeCache(h,u);if(g.apply(e.callback.beforeDrop,[h.treeId,l,q,v,p],!0)==!1)f.selectNodes(x,l);else{var A=p?g.clone(l):l;a=function(){if(J){if(!p)for(var a=0,c=l.length;a<c;a++)f.removeNode(e,l[a]);if(v==d.move.TYPE_INNER)f.addNodes(h,
+q,A);else if(f.addNodes(h,q.getParentNode(),A),v==d.move.TYPE_PREV)for(a=0,c=A.length;a<c;a++)f.moveNode(h,q,A[a],v,!1);else for(a=-1,c=A.length-1;a<c;c--)f.moveNode(h,q,A[c],v,!1)}else if(p&&v==d.move.TYPE_INNER)f.addNodes(h,q,A);else if(p&&f.addNodes(h,q.getParentNode(),A),v!=d.move.TYPE_NEXT)for(a=0,c=A.length;a<c;a++)f.moveNode(h,q,A[a],v,!1);else for(a=-1,c=A.length-1;a<c;c--)f.moveNode(h,q,A[c],v,!1);f.selectNodes(h,A);o(A[0],e).focus().blur();e.treeObj.trigger(d.event.DROP,[b,h.treeId,A,q,
+v,p])};v==d.move.TYPE_INNER&&g.canAsync(h,q)?f.asyncNode(h,q,!1,a):a()}}else f.selectNodes(x,l),e.treeObj.trigger(d.event.DROP,[b,e.treeId,l,null,null,null])}}function k(){return!1}var i,j,e=m.getSetting(b.data.treeId),C=m.getRoot(e),t=m.getRoots();if(b.button==2||!e.edit.enable||!e.edit.drag.isCopy&&!e.edit.drag.isMove)return!0;var p=b.target,q=m.getRoot(e).curSelectedList,l=[];if(m.isSelectedNode(e,a))for(i=0,j=q.length;i<j;i++){if(q[i].editNameFlag&&g.eqs(p.tagName,"input")&&p.getAttribute("treeNode"+
+d.id.INPUT)!==null)return!0;l.push(q[i]);if(l[0].parentTId!==q[i].parentTId){l=[a];break}}else l=[a];f.editNodeBlur=!0;f.cancelCurEditNode(e);var F=w(e.treeObj.get(0).ownerDocument),M=w(e.treeObj.get(0).ownerDocument.body),D,B,s,J=!1,h=e,x=e,H,R,T=null,U=null,u=null,v=d.move.TYPE_INNER,N=b.clientX,O=b.clientY,L=(new Date).getTime();g.uCanDo(e)&&F.bind("mousemove",c);F.bind("mouseup",r);F.bind("selectstart",k);b.preventDefault&&b.preventDefault();return!0}};w.extend(!0,w.fn.zTree.consts,I);w.extend(!0,
+w.fn.zTree._z,{tools:{getAbs:function(b){b=b.getBoundingClientRect();return[b.left+(document.body.scrollLeft+document.documentElement.scrollLeft),b.top+(document.body.scrollTop+document.documentElement.scrollTop)]},inputFocus:function(b){b.get(0)&&(b.focus(),g.setCursorPosition(b.get(0),b.val().length))},inputSelect:function(b){b.get(0)&&(b.focus(),b.select())},setCursorPosition:function(b,a){if(b.setSelectionRange)b.focus(),b.setSelectionRange(a,a);else if(b.createTextRange){var c=b.createTextRange();
+c.collapse(!0);c.moveEnd("character",a);c.moveStart("character",a);c.select()}},showIfameMask:function(b,a){for(var c=m.getRoot(b);c.dragMaskList.length>0;)c.dragMaskList[0].remove(),c.dragMaskList.shift();if(a)for(var d=o("iframe",b),f=0,i=d.length;f<i;f++){var j=d.get(f),e=g.getAbs(j),j=o("<div id='zTreeMask_"+f+"' class='zTreeMask' style='top:"+e[1]+"px; left:"+e[0]+"px; width:"+j.offsetWidth+"px; height:"+j.offsetHeight+"px;'></div>",b);j.appendTo(o("body",b));c.dragMaskList.push(j)}}},view:{addEditBtn:function(b,
+a){if(!(a.editNameFlag||o(a,d.id.EDIT,b).length>0)&&g.apply(b.edit.showRenameBtn,[b.treeId,a],b.edit.showRenameBtn)){var c=o(a,d.id.A,b),r="<span class='"+d.className.BUTTON+" edit' id='"+a.tId+d.id.EDIT+"' title='"+g.apply(b.edit.renameTitle,[b.treeId,a],b.edit.renameTitle)+"' treeNode"+d.id.EDIT+" style='display:none;'></span>";c.append(r);o(a,d.id.EDIT,b).bind("click",function(){if(!g.uCanDo(b)||g.apply(b.callback.beforeEditName,[b.treeId,a],!0)==!1)return!1;f.editNode(b,a);return!1}).show()}},
+addRemoveBtn:function(b,a){if(!(a.editNameFlag||o(a,d.id.REMOVE,b).length>0)&&g.apply(b.edit.showRemoveBtn,[b.treeId,a],b.edit.showRemoveBtn)){var c=o(a,d.id.A,b),r="<span class='"+d.className.BUTTON+" remove' id='"+a.tId+d.id.REMOVE+"' title='"+g.apply(b.edit.removeTitle,[b.treeId,a],b.edit.removeTitle)+"' treeNode"+d.id.REMOVE+" style='display:none;'></span>";c.append(r);o(a,d.id.REMOVE,b).bind("click",function(){if(!g.uCanDo(b)||g.apply(b.callback.beforeRemove,[b.treeId,a],!0)==!1)return!1;f.removeNode(b,
+a);b.treeObj.trigger(d.event.REMOVE,[b.treeId,a]);return!1}).bind("mousedown",function(){return!0}).show()}},addHoverDom:function(b,a){if(m.getRoots().showHoverDom)a.isHover=!0,b.edit.enable&&(f.addEditBtn(b,a),f.addRemoveBtn(b,a)),g.apply(b.view.addHoverDom,[b.treeId,a])},cancelCurEditNode:function(b,a,c){var r=m.getRoot(b),k=b.data.key.name,i=r.curEditNode;if(i){var j=r.curEditInput,a=a?a:c?i[k]:j.val();if(g.apply(b.callback.beforeRename,[b.treeId,i,a,c],!0)===!1)return!1;i[k]=a;o(i,d.id.A,b).removeClass(d.node.CURSELECTED_EDIT);
+j.unbind();f.setNodeName(b,i);i.editNameFlag=!1;r.curEditNode=null;r.curEditInput=null;f.selectNode(b,i,!1);b.treeObj.trigger(d.event.RENAME,[b.treeId,i,c])}return r.noSelection=!0},editNode:function(b,a){var c=m.getRoot(b);f.editNodeBlur=!1;if(m.isSelectedNode(b,a)&&c.curEditNode==a&&a.editNameFlag)setTimeout(function(){g.inputFocus(c.curEditInput)},0);else{var r=b.data.key.name;a.editNameFlag=!0;f.removeTreeDom(b,a);f.cancelCurEditNode(b);f.selectNode(b,a,!1);o(a,d.id.SPAN,b).html("<input type=text class='rename' id='"+
+a.tId+d.id.INPUT+"' treeNode"+d.id.INPUT+" >");var k=o(a,d.id.INPUT,b);k.attr("value",a[r]);b.edit.editNameSelectAll?g.inputSelect(k):g.inputFocus(k);k.bind("blur",function(){f.editNodeBlur||f.cancelCurEditNode(b)}).bind("keydown",function(a){a.keyCode=="13"?(f.editNodeBlur=!0,f.cancelCurEditNode(b)):a.keyCode=="27"&&f.cancelCurEditNode(b,null,!0)}).bind("click",function(){return!1}).bind("dblclick",function(){return!1});o(a,d.id.A,b).addClass(d.node.CURSELECTED_EDIT);c.curEditInput=k;c.noSelection=
+!1;c.curEditNode=a}},moveNode:function(b,a,c,r,k,i){var j=m.getRoot(b),e=b.data.key.children;if(a!=c&&(!b.data.keep.leaf||!a||a.isParent||r!=d.move.TYPE_INNER)){var g=c.parentTId?c.getParentNode():j,t=a===null||a==j;t&&a===null&&(a=j);if(t)r=d.move.TYPE_INNER;j=a.parentTId?a.getParentNode():j;if(r!=d.move.TYPE_PREV&&r!=d.move.TYPE_NEXT)r=d.move.TYPE_INNER;if(r==d.move.TYPE_INNER)if(t)c.parentTId=null;else{if(!a.isParent)a.isParent=!0,a.open=!!a.open,f.setNodeLineIcos(b,a);c.parentTId=a.tId}var p;
+t?p=t=b.treeObj:(!i&&r==d.move.TYPE_INNER?f.expandCollapseNode(b,a,!0,!1):i||f.expandCollapseNode(b,a.getParentNode(),!0,!1),t=o(a,b),p=o(a,d.id.UL,b),t.get(0)&&!p.get(0)&&(p=[],f.makeUlHtml(b,a,p,""),t.append(p.join(""))),p=o(a,d.id.UL,b));var q=o(c,b);q.get(0)?t.get(0)||q.remove():q=f.appendNodes(b,c.level,[c],null,!1,!0).join("");p.get(0)&&r==d.move.TYPE_INNER?p.append(q):t.get(0)&&r==d.move.TYPE_PREV?t.before(q):t.get(0)&&r==d.move.TYPE_NEXT&&t.after(q);var l=-1,w=0,x=null,t=null,D=c.level;if(c.isFirstNode){if(l=
+0,g[e].length>1)x=g[e][1],x.isFirstNode=!0}else if(c.isLastNode)l=g[e].length-1,x=g[e][l-1],x.isLastNode=!0;else for(p=0,q=g[e].length;p<q;p++)if(g[e][p].tId==c.tId){l=p;break}l>=0&&g[e].splice(l,1);if(r!=d.move.TYPE_INNER)for(p=0,q=j[e].length;p<q;p++)j[e][p].tId==a.tId&&(w=p);if(r==d.move.TYPE_INNER){a[e]||(a[e]=[]);if(a[e].length>0)t=a[e][a[e].length-1],t.isLastNode=!1;a[e].splice(a[e].length,0,c);c.isLastNode=!0;c.isFirstNode=a[e].length==1}else a.isFirstNode&&r==d.move.TYPE_PREV?(j[e].splice(w,
+0,c),t=a,t.isFirstNode=!1,c.parentTId=a.parentTId,c.isFirstNode=!0,c.isLastNode=!1):a.isLastNode&&r==d.move.TYPE_NEXT?(j[e].splice(w+1,0,c),t=a,t.isLastNode=!1,c.parentTId=a.parentTId,c.isFirstNode=!1,c.isLastNode=!0):(r==d.move.TYPE_PREV?j[e].splice(w,0,c):j[e].splice(w+1,0,c),c.parentTId=a.parentTId,c.isFirstNode=!1,c.isLastNode=!1);m.fixPIdKeyValue(b,c);m.setSonNodeLevel(b,c.getParentNode(),c);f.setNodeLineIcos(b,c);f.repairNodeLevelClass(b,c,D);!b.data.keep.parent&&g[e].length<1?(g.isParent=!1,
+g.open=!1,a=o(g,d.id.UL,b),r=o(g,d.id.SWITCH,b),e=o(g,d.id.ICON,b),f.replaceSwitchClass(g,r,d.folder.DOCU),f.replaceIcoClass(g,e,d.folder.DOCU),a.css("display","none")):x&&f.setNodeLineIcos(b,x);t&&f.setNodeLineIcos(b,t);b.check&&b.check.enable&&f.repairChkClass&&(f.repairChkClass(b,g),f.repairParentChkClassWithSelf(b,g),g!=c.parent&&f.repairParentChkClassWithSelf(b,c));i||f.expandCollapseParentNode(b,c.getParentNode(),!0,k)}},removeEditBtn:function(b,a){o(a,d.id.EDIT,b).unbind().remove()},removeRemoveBtn:function(b,
+a){o(a,d.id.REMOVE,b).unbind().remove()},removeTreeDom:function(b,a){a.isHover=!1;f.removeEditBtn(b,a);f.removeRemoveBtn(b,a);g.apply(b.view.removeHoverDom,[b.treeId,a])},repairNodeLevelClass:function(b,a,c){if(c!==a.level){var f=o(a,b),g=o(a,d.id.A,b),b=o(a,d.id.UL,b),c=d.className.LEVEL+c,a=d.className.LEVEL+a.level;f.removeClass(c);f.addClass(a);g.removeClass(c);g.addClass(a);b.removeClass(c);b.addClass(a)}},selectNodes:function(b,a){for(var c=0,d=a.length;c<d;c++)f.selectNode(b,a[c],c>0)}},event:{},
+data:{setSonNodeLevel:function(b,a,c){if(c){var d=b.data.key.children;c.level=a?a.level+1:0;if(c[d])for(var a=0,f=c[d].length;a<f;a++)c[d][a]&&m.setSonNodeLevel(b,c,c[d][a])}}}});var H=w.fn.zTree,g=H._z.tools,d=H.consts,f=H._z.view,m=H._z.data,o=g.$;m.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}});m.addInitBind(function(b){var a=b.treeObj,c=d.event;a.bind(c.RENAME,function(a,c,d,f){g.apply(b.callback.onRename,[a,c,d,f])});a.bind(c.DRAG,function(a,c,d,f){g.apply(b.callback.onDrag,[c,d,f])});a.bind(c.DRAGMOVE,function(a,c,d,f){g.apply(b.callback.onDragMove,[c,d,f])});a.bind(c.DROP,
+function(a,c,d,f,e,m,o){g.apply(b.callback.onDrop,[c,d,f,e,m,o])})});m.addInitUnBind(function(b){var b=b.treeObj,a=d.event;b.unbind(a.RENAME);b.unbind(a.DRAG);b.unbind(a.DRAGMOVE);b.unbind(a.DROP)});m.addInitCache(function(){});m.addInitNode(function(b,a,c){if(c)c.isHover=!1,c.editNameFlag=!1});m.addInitProxy(function(b){var a=b.target,c=m.getSetting(b.data.treeId),f=b.relatedTarget,k="",i=null,j="",e=null,o=null;if(g.eqs(b.type,"mouseover")){if(o=g.getMDom(c,a,[{tagName:"a",attrName:"treeNode"+d.id.A}]))k=
+g.getNodeMainDom(o).id,j="hoverOverNode"}else if(g.eqs(b.type,"mouseout"))o=g.getMDom(c,f,[{tagName:"a",attrName:"treeNode"+d.id.A}]),o||(k="remove",j="hoverOutNode");else if(g.eqs(b.type,"mousedown")&&(o=g.getMDom(c,a,[{tagName:"a",attrName:"treeNode"+d.id.A}])))k=g.getNodeMainDom(o).id,j="mousedownNode";if(k.length>0)switch(i=m.getNodeCache(c,k),j){case "mousedownNode":e=x.onMousedownNode;break;case "hoverOverNode":e=x.onHoverOverNode;break;case "hoverOutNode":e=x.onHoverOutNode}return{stop:!1,
+node:i,nodeEventType:j,nodeEventCallback:e,treeEventType:"",treeEventCallback:null}});m.addInitRoot(function(b){var b=m.getRoot(b),a=m.getRoots();b.curEditNode=null;b.curEditInput=null;b.curHoverNode=null;b.dragFlag=0;b.dragNodeShowBefore=[];b.dragMaskList=[];a.showHoverDom=!0});m.addZTreeTools(function(b,a){a.cancelEditName=function(a){m.getRoot(this.setting).curEditNode&&f.cancelCurEditNode(this.setting,a?a:null,!0)};a.copyNode=function(a,b,k,i){if(!b)return null;if(a&&!a.isParent&&this.setting.data.keep.leaf&&
+k===d.move.TYPE_INNER)return null;var j=this,e=g.clone(b);if(!a)a=null,k=d.move.TYPE_INNER;k==d.move.TYPE_INNER?(b=function(){f.addNodes(j.setting,a,[e],i)},g.canAsync(this.setting,a)?f.asyncNode(this.setting,a,i,b):b()):(f.addNodes(this.setting,a.parentNode,[e],i),f.moveNode(this.setting,a,e,k,!1,i));return e};a.editName=function(a){a&&a.tId&&a===m.getNodeCache(this.setting,a.tId)&&(a.parentTId&&f.expandCollapseParentNode(this.setting,a.getParentNode(),!0),f.editNode(this.setting,a))};a.moveNode=
+function(a,b,k,i){function j(){f.moveNode(e.setting,a,b,k,!1,i)}if(!b)return b;if(a&&!a.isParent&&this.setting.data.keep.leaf&&k===d.move.TYPE_INNER)return null;else if(a&&(b.parentTId==a.tId&&k==d.move.TYPE_INNER||o(b,this.setting).find("#"+a.tId).length>0))return null;else a||(a=null);var e=this;g.canAsync(this.setting,a)&&k===d.move.TYPE_INNER?f.asyncNode(this.setting,a,i,j):j();return b};a.setEditable=function(a){this.setting.edit.enable=a;return this.refresh()}});var N=f.cancelPreSelectedNode;
+f.cancelPreSelectedNode=function(b,a){for(var c=m.getRoot(b).curSelectedList,d=0,g=c.length;d<g;d++)if(!a||a===c[d])if(f.removeTreeDom(b,c[d]),a)break;N&&N.apply(f,arguments)};var O=f.createNodes;f.createNodes=function(b,a,c,d){O&&O.apply(f,arguments);c&&f.repairParentChkClassWithSelf&&f.repairParentChkClassWithSelf(b,d)};var V=f.makeNodeUrl;f.makeNodeUrl=function(b,a){return b.edit.enable?null:V.apply(f,arguments)};var L=f.removeNode;f.removeNode=function(b,a){var c=m.getRoot(b);if(c.curEditNode===
+a)c.curEditNode=null;L&&L.apply(f,arguments)};var P=f.selectNode;f.selectNode=function(b,a,c){var d=m.getRoot(b);if(m.isSelectedNode(b,a)&&d.curEditNode==a&&a.editNameFlag)return!1;P&&P.apply(f,arguments);f.addHoverDom(b,a);return!0};var Q=g.uCanDo;g.uCanDo=function(b,a){var c=m.getRoot(b);if(a&&(g.eqs(a.type,"mouseover")||g.eqs(a.type,"mouseout")||g.eqs(a.type,"mousedown")||g.eqs(a.type,"mouseup")))return!0;if(c.curEditNode)f.editNodeBlur=!1,c.curEditInput.focus();return!c.curEditNode&&(Q?Q.apply(f,
+arguments):!0)}})(jQuery);
+
diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html
index eedff07..95f2dee 100755
--- a/src/main/resources/templates/index.html
+++ b/src/main/resources/templates/index.html
@@ -1,472 +1,156 @@
 <!DOCTYPE html>

 <html xmlns:th="http://www.thymeleaf.org">

+

 <head>

-  <meta charset="utf-8">

-  <title>支付中心</title>

-  <meta name="renderer" content="webkit">

-  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

-  <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">

-  <link rel="stylesheet" type="text/css" th:href="@{/static/libs/layui/css/layui.css}" media="all"/>

-  <link rel="stylesheet" type="text/css"  th:href="@{/static/style/admin.css}" media="all"/>

+    <title>首页</title>

 

+    <meta charset="utf-8"/>

+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">

+    <link rel="stylesheet" th:href="@{/static/libs/layui/css/layui.css}"/>

+    <link rel="stylesheet" th:href="@{/static/libs/zTree/css/zTreeStyle/zTreeStyle.css}"/>

+    <link rel="stylesheet" th:href="@{/static/custom/module/formSelects/formSelects-v4.css}"/>

+    <link rel="stylesheet" th:href="@{/static/custom/css/admin.css}"/>

+    <link th:if="${session.theme != null}" rel="stylesheet" th:href="@{/static/custom/css/theme-blue.css}"/>

 </head>

+

 <body class="layui-layout-body">

-  

-  <div id="LAY_app">

-    <div class="layui-layout layui-layout-admin">

-      <div class="layui-header">

-        <!-- 头部区域 -->

+<div class="layui-layout layui-layout-admin">

+    <!-- 头部 -->

+    <div class="layui-header">

+        <div class="layui-logo">

+            <img th:src="@{/static/custom/images/logo.png}"/>

+            <cite>支付中心</cite>

+        </div>

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

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

-            <a href="javascript:;" layadmin-event="flexible" title="侧边伸缩">

-              <i class="layui-icon layui-icon-shrink-right" id="LAY_app_flexible"></i>

-            </a>

-          </li>

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

-            <a href="http://www.layui.com/admin/" target="_blank" title="前台">

-              <i class="layui-icon layui-icon-website"></i>

-            </a>

-          </li>

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

-            <a href="javascript:;" layadmin-event="refresh" title="刷新">

-              <i class="layui-icon layui-icon-refresh-3"></i>

-            </a>

-          </li>

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

-            <input type="text" placeholder="搜索..." autocomplete="off" class="layui-input layui-input-search" layadmin-event="serach" lay-action="template/search.html?keywords="> 

-          </li>

-        </ul>

-        <ul class="layui-nav layui-layout-right" lay-filter="layadmin-layout-right">

-          

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

-            <a lay-href="app/message/index.html" layadmin-event="message" lay-text="消息中心">

-              <i class="layui-icon layui-icon-notice"></i>  

-              

-              <!-- 如果有新消息,则显示小圆点 -->

-              <span class="layui-badge-dot"></span>

-            </a>

-          </li>

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

-            <a href="javascript:;" layadmin-event="theme">

-              <i class="layui-icon layui-icon-theme"></i>

-            </a>

-          </li>

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

-            <a href="javascript:;" layadmin-event="note">

-              <i class="layui-icon layui-icon-note"></i>

-            </a>

-          </li>

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

-            <a href="javascript:;" layadmin-event="fullscreen">

-              <i class="layui-icon layui-icon-screen-full"></i>

-            </a>

-          </li>

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

-            <a href="javascript:;">

-              <cite>贤心</cite>

-            </a>

-            <dl class="layui-nav-child">

-              <dd><a lay-href="set/user/info.html">基本资料</a></dd>

-              <dd><a lay-href="set/user/password.html">修改密码</a></dd>

-              <hr>

-              <dd layadmin-event="logout" style="text-align: center;"><a>退出</a></dd>

-            </dl>

-          </li>

-          

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

-            <a href="javascript:;" layadmin-event="about"><i class="layui-icon layui-icon-more-vertical"></i></a>

-          </li>

-          <li class="layui-nav-item layui-show-xs-inline-block layui-hide-sm" lay-unselect>

-            <a href="javascript:;" layadmin-event="more"><i class="layui-icon layui-icon-more-vertical"></i></a>

-          </li>

-        </ul>

-      </div>

-      

-      <!-- 侧边菜单 -->

-      <div class="layui-side layui-side-menu">

-        <div class="layui-side-scroll">

-          <div class="layui-logo" lay-href="home/console.html">

-            <span>layuiAdmin</span>

-          </div>

-          

-          <ul class="layui-nav layui-nav-tree" lay-shrink="all" id="LAY-system-side-menu" lay-filter="layadmin-system-side-menu">

-            <li data-name="home" class="layui-nav-item layui-nav-itemed">

-              <a href="javascript:;" lay-tips="主页" lay-direction="2">

-                <i class="layui-icon layui-icon-home"></i>

-                <cite>主页</cite>

-              </a>

-              <dl class="layui-nav-child">

-                <dd data-name="console" class="layui-this">

-                  <a lay-href="home/console.html">控制台</a>

-                </dd>

-                <dd data-name="console">

-                  <a lay-href="home/homepage1.html">主页一</a>

-                </dd>

-                <dd data-name="console">

-                  <a lay-href="home/homepage2.html">主页二</a>

-                </dd>

-              </dl>

-            </li>

-            <li data-name="component" class="layui-nav-item">

-              <a href="javascript:;" lay-tips="组件" lay-direction="2">

-                <i class="layui-icon layui-icon-component"></i>

-                <cite>组件</cite>

-              </a>

-              <dl class="layui-nav-child">

-                <dd data-name="grid">

-                  <a href="javascript:;">栅格</a>

-                  <dl class="layui-nav-child">

-                    <dd data-name="list"><a lay-href="component/grid/list.html">等比例列表排列</a></dd>

-                    <dd data-name="mobile"><a lay-href="component/grid/mobile.html">按移动端排列</a></dd>

-                    <dd data-name="mobile-pc"><a lay-href="component/grid/mobile-pc.html">移动桌面端组合</a></dd>

-                    <dd data-name="all"><a lay-href="component/grid/all.html">全端复杂组合</a></dd>

-                    <dd data-name="stack"><a lay-href="component/grid/stack.html">低于桌面堆叠排列</a></dd>

-                    <dd data-name="speed-dial"><a lay-href="component/grid/speed-dial.html">九宫格</a></dd>

-                  </dl>

-                </dd>

-                <dd data-name="button">

-                  <a lay-href="component/button/index.html">按钮</a>

-                </dd>

-                <dd data-name="form">

-                  <a href="javascript:;">表单</a>

-                  <dl class="layui-nav-child">

-                    <dd><a lay-href="component/form/element.html">表单元素</a></dd>

-                    <dd><a lay-href="component/form/group.html">表单组合</a></dd>

-                  </dl>

-                </dd>

-                <dd data-name="nav">

-                  <a lay-href="component/nav/index.html">导航</a>

-                </dd>

-                <dd data-name="tabs">

-                  <a lay-href="component/tabs/index.html">选项卡</a>

-                </dd>

-                <dd data-name="progress">

-                  <a lay-href="component/progress/index.html">进度条</a>

-                </dd>

-                <dd data-name="panel"> 

-                  <a lay-href="component/panel/index.html">面板</a>  

-                </dd>

-                <dd data-name="badge"> 

-                  <a lay-href="component/badge/index.html">徽章</a>  

-                </dd>

-                <dd data-name="timeline"> 

-                  <a lay-href="component/timeline/index.html">时间线</a>  

-                </dd>

-                <dd data-name="anim"> 

-                  <a lay-href="component/anim/index.html">动画</a>  

-                </dd>

-                <dd data-name="auxiliar"> 

-                  <a lay-href="component/auxiliar/index.html">辅助</a>  

-                </dd>

-                <dd data-name="layer"> 

-                  <a href="javascript:;">通用弹层<span class="layui-nav-more"></span></a>  

-                  <dl class="layui-nav-child">  

-                    <dd data-name="list"> 

-                      <a lay-href="component/layer/list.html" lay-text="layer 功能演示">功能演示</a> 

-                    </dd>  

-                    <dd data-name="special-demo"> 

-                      <a lay-href="component/layer/special-demo.html" lay-text="layer 特殊示例">特殊示例</a> 

-                    </dd>  

-                    <dd data-name="theme"> 

-                      <a lay-href="component/layer/theme.html" lay-text="layer 风格定制">风格定制</a> 

-                    </dd>  

-                  </dl>  

-                </dd>

-                <dd data-name="laydate"> 

-                  <a href="javascript:;">日期时间</a>

-                  <dl class="layui-nav-child">  

-                    <dd data-name="demo1"> 

-                      <a lay-href="component/laydate/demo1.html" lay-text="layDate 功能演示一">功能演示一</a> 

-                    </dd>

-                    <dd data-name="demo2"> 

-                      <a lay-href="component/laydate/demo2.html" lay-text="layDate 功能演示二">功能演示二</a> 

-                    </dd>

-                    <dd data-name="theme"> 

-                      <a lay-href="component/laydate/theme.html" lay-text="layDate 设定主题">设定主题</a> 

-                    </dd>

-                    <dd data-name="special-demo"> 

-                      <a lay-href="component/laydate/special-demo.html" lay-text="layDate 特殊示例">特殊示例</a> 

-                    </dd>  

-                  </dl>  

-                </dd>

-                <dd data-name="table-static"> 

-                  <a lay-href="component/table/static.html">静态表格</a>

-                </dd>

-                <dd data-name="table"> 

-                  <a href="javascript:;">数据表格</a>

-                  <dl class="layui-nav-child">  

-                    <dd data-name="simple"> 

-                      <a lay-href="component/table/simple.html" lay-text="">简单数据表格</a> 

-                    </dd>

-                    <dd data-name="auto"> 

-                      <a lay-href="component/table/auto.html" lay-text="">列宽自动分配</a> 

-                    </dd>

-                    <dd data-name="data"> 

-                      <a lay-href="component/table/data.html" lay-text="">赋值已知数据</a> 

-                    </dd>

-                    <dd data-name="tostatic"> 

-                      <a lay-href="component/table/tostatic.html" lay-text="">转化静态表格</a> 

-                    </dd>

-                    <dd data-name="page"> 

-                      <a lay-href="component/table/page.html" lay-text="">开启分页</a> 

-                    </dd>

-                    <dd data-name="resetPage"> 

-                      <a lay-href="component/table/resetPage.html" lay-text="">自定义分页</a> 

-                    </dd>

-                    <dd data-name="toolbar"> 

-                      <a lay-href="component/table/toolbar.html" lay-text="">开启头部工具栏</a> 

-                    </dd>

-                    <dd data-name="totalRow"> 

-                      <a lay-href="component/table/totalRow.html" lay-text="">开启合计行</a> 

-                    </dd>

-                    <dd data-name="height"> 

-                      <a lay-href="component/table/height.html" lay-text="">高度最大适应</a> 

-                    </dd>

-                    <dd data-name="checkbox"> 

-                      <a lay-href="component/table/checkbox.html" lay-text="">开启复选框</a> 

-                    </dd>

-                    <dd data-name="radio"> 

-                      <a lay-href="component/table/radio.html" lay-text="">开启单选框</a> 

-                    </dd>

-                    <dd data-name="cellEdit"> 

-                      <a lay-href="component/table/cellEdit.html" lay-text="">开启单元格编辑</a> 

-                    </dd>

-                    <dd data-name="form"> 

-                      <a lay-href="component/table/form.html" lay-text="">加入表单元素</a> 

-                    </dd>

-                    <dd data-name="style"> 

-                      <a lay-href="component/table/style.html" lay-text="">设置单元格样式</a> 

-                    </dd>

-                    <dd data-name="fixed"> 

-                      <a lay-href="component/table/fixed.html" lay-text="">固定列</a> 

-                    </dd>

-                    <dd data-name="operate"> 

-                      <a lay-href="component/table/operate.html" lay-text="">数据操作</a> 

-                    </dd>

-                    <dd data-name="parseData"> 

-                      <a lay-href="component/table/parseData.html" lay-text="">解析任意数据格式</a> 

-                    </dd>

-                    <dd data-name="onrow"> 

-                      <a lay-href="component/table/onrow.html" lay-text="">监听行事件</a> 

-                    </dd>

-                    <dd data-name="reload">

-                      <a lay-href="component/table/reload.html" lay-text="">数据表格的重载</a> 

-                    </dd>

-                    <dd data-name="initSort"> 

-                      <a lay-href="component/table/initSort.html" lay-text="">设置初始排序</a> 

-                    </dd>

-                    <dd data-name="cellEvent"> 

-                      <a lay-href="component/table/cellEvent.html" lay-text="">监听单元格事件</a> 

-                    </dd>

-                    <dd data-name="thead"> 

-                      <a lay-href="component/table/thead.html" lay-text="">复杂表头</a> 

-                    </dd>

-                  </dl>

-                </dd>

-                <dd data-name="laypage"> 

-                  <a href="javascript:;">分页</a>  

-                  <dl class="layui-nav-child">  

-                    <dd data-name="demo1"> 

-                      <a lay-href="component/laypage/demo1.html" lay-text="layPage 功能演示一">功能演示一</a> 

-                    </dd>

-                    <dd data-name="demo2"> 

-                      <a lay-href="component/laypage/demo2.html" lay-text="layPage 功能演示二">功能演示二</a> 

-                    </dd> 

-                  </dl>  

-                </dd>

-                <dd data-name="upload"> 

-                  <a href="javascript:;">上传</a>  

-                  <dl class="layui-nav-child">  

-                    <dd data-name="demo1"> 

-                      <a lay-href="component/upload/demo1.html" lay-text="上传功能演示一">功能演示一</a> 

-                    </dd>

-                    <dd data-name="demo2"> 

-                      <a lay-href="component/upload/demo2.html" lay-text="上传功能演示二">功能演示二</a> 

-                    </dd> 

-                  </dl>  

-                </dd>

-                <dd data-name="colorpicker">

-                  <a lay-href="component/colorpicker/index.html">颜色选择器</a>

-                </dd>

-                <dd data-name="slider">

-                  <a lay-href="component/slider/index.html">滑块组件</a>

-                </dd>

-                <dd data-name="rate">

-                  <a lay-href="component/rate/index.html">评分</a>

-                </dd>

-                <dd data-name="carousel"> 

-                  <a lay-href="component/carousel/index.html">轮播</a>  

-                </dd>

-                <dd data-name="flow"> 

-                  <a lay-href="component/flow/index.html">流加载</a>  

-                </dd>

-                <dd data-name="util"> 

-                  <a lay-href="component/util/index.html">工具</a>  

-                </dd>

-                <dd data-name="code"> 

-                  <a lay-href="component/code/index.html">代码修饰</a> 

-                </dd>

-              </dl>

-            </li>

-            <li data-name="template" class="layui-nav-item">

-              <a href="javascript:;" lay-tips="页面" lay-direction="2">

-                <i class="layui-icon layui-icon-template"></i>

-                <cite>页面</cite>

-              </a>

-              <dl class="layui-nav-child">

-                <dd><a lay-href="template/personalpage.html">个人主页</a></dd>

-                <dd><a lay-href="template/addresslist.html">通讯录</a></dd>

-                <dd><a lay-href="template/caller.html">客户列表</a></dd>

-                <dd><a lay-href="template/goodslist.html">商品列表</a></dd>

-                <dd><a lay-href="template/msgboard.html">留言板</a></dd>

-                <dd><a lay-href="template/search.html">搜索结果</a></dd>

-                <dd><a href="user/reg.html" target="_blank">注册</a></dd>

-                <dd><a href="user/login.html" target="_blank">登入</a></dd>

-                <dd><a href="user/forget.html" target="_blank">忘记密码</a></dd>

-                <dd><a lay-href="template/tips/404.html">404页面不存在</a></dd>

-                <dd><a lay-href="template/tips/error.html">错误提示</a></dd>

-                <dd><a lay-href="//www.baidu.com/">百度一下</a></dd>

-                <dd><a lay-href="//www.layui.com/">layui官网</a></dd>

-                <dd><a lay-href="//www.layui.com/admin/">layuiAdmin官网</a></dd>

-              </dl>

-            </li>

-            <li data-name="app" class="layui-nav-item">

-              <a href="javascript:;" lay-tips="应用" lay-direction="2">

-                <i class="layui-icon layui-icon-app"></i>

-                <cite>应用</cite>

-              </a>

-              <dl class="layui-nav-child">

-                

-                <dd data-name="content">

-                  <a href="javascript:;">内容系统</a>

-                  <dl class="layui-nav-child">

-                    <dd data-name="list"><a lay-href="app/content/list.html">文章列表</a></dd>

-                    <dd data-name="tags"><a lay-href="app/content/tags.html">分类管理</a></dd>

-                    <dd data-name="comment"><a lay-href="app/content/comment.html">评论管理</a></dd>

-                  </dl>

-                </dd>

-                <dd data-name="forum">

-                  <a href="javascript:;">社区系统</a>

-                  <dl class="layui-nav-child">

-                    <dd data-name="list"><a lay-href="app/forum/list.html">帖子列表</a></dd>

-                    <dd data-name="replys"><a lay-href="app/forum/replys.html">回帖列表</a></dd>

-                  </dl>

-                </dd>

-                <dd>

-                  <a lay-href="app/message/index.html">消息中心</a>

-                </dd>

-                <dd data-name="workorder">

-                  <a lay-href="app/workorder/list.html">工单系统</a>

-                </dd>

-              </dl>

-            </li>

-            <li data-name="senior" class="layui-nav-item">

-              <a href="javascript:;" lay-tips="高级" lay-direction="2">

-                <i class="layui-icon layui-icon-senior"></i>

-                <cite>高级</cite>

-              </a>

-              <dl class="layui-nav-child">

-                <dd>

-                  <a layadmin-event="im">LayIM 通讯系统</a>  

-                </dd>

-                <dd data-name="echarts">

-                  <a href="javascript:;">Echarts集成</a>

-                  <dl class="layui-nav-child">

-                    <dd><a lay-href="senior/echarts/line.html">折线图</a></dd>

-                    <dd><a lay-href="senior/echarts/bar.html">柱状图</a></dd>

-                    <dd><a lay-href="senior/echarts/map.html">地图</a></dd>

-                  </dl>

-                </dd>

-              </dl>

-            </li>

-            <li data-name="user" class="layui-nav-item">

-              <a href="javascript:;" lay-tips="用户" lay-direction="2">

-                <i class="layui-icon layui-icon-user"></i>

-                <cite>用户</cite>

-              </a>

-              <dl class="layui-nav-child">

-                <dd>

-                  <a lay-href="user/user/list.html">网站用户</a>

-                </dd>

-                <dd>

-                  <a lay-href="user/administrators/list.html">后台管理员</a>

-                </dd>

-                <dd>

-                  <a lay-href="user/administrators/role.html">角色管理</a>

-                </dd>

-              </dl>

-            </li>

-            <li data-name="set" class="layui-nav-item">

-              <a href="javascript:;" lay-tips="设置" lay-direction="2">

-                <i class="layui-icon layui-icon-set"></i>

-                <cite>设置</cite>

-              </a>

-              <dl class="layui-nav-child">

-                <dd class="layui-nav-itemed">

-                  <a href="javascript:;">系统设置</a>

-                  <dl class="layui-nav-child">

-                    <dd><a lay-href="set/system/website.html">网站设置</a></dd>

-                    <dd><a lay-href="set/system/email.html">邮件服务</a></dd>

-                  </dl>

-                </dd>

-                <dd class="layui-nav-itemed">

-                  <a href="javascript:;">我的设置</a>

-                  <dl class="layui-nav-child">

-                    <dd><a lay-href="set/user/info.html">基本资料</a></dd>

-                    <dd><a lay-href="set/user/password.html">修改密码</a></dd>

-                  </dl>

-                </dd>

-              </dl>

-            </li>

-            <li data-name="get" class="layui-nav-item">

-              <a href="javascript:;" lay-href="//www.layui.com/admin/#get" lay-tips="授权" lay-direction="2">

-                <i class="layui-icon layui-icon-auz"></i>

-                <cite>授权</cite>

-              </a>

-            </li>

-          </ul>

-        </div>

-      </div>

-

-      <!-- 页面标签 -->

-      <div class="layadmin-pagetabs" id="LAY_app_tabs">

-        <div class="layui-icon layadmin-tabs-control layui-icon-prev" layadmin-event="leftPage"></div>

-        <div class="layui-icon layadmin-tabs-control layui-icon-next" layadmin-event="rightPage"></div>

-        <div class="layui-icon layadmin-tabs-control layui-icon-down">

-          <ul class="layui-nav layadmin-tabs-select" lay-filter="layadmin-pagetabs-nav">

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

-              <a href="javascript:;"></a>

-              <dl class="layui-nav-child layui-anim-fadein">

-                <dd layadmin-event="closeThisTabs"><a href="javascript:;">关闭当前标签页</a></dd>

-                <dd layadmin-event="closeOtherTabs"><a href="javascript:;">关闭其它标签页</a></dd>

-                <dd layadmin-event="closeAllTabs"><a href="javascript:;">关闭全部标签页</a></dd>

-              </dl>

+                <a ew-event="flexible" title="侧边伸缩"><i class="layui-icon layui-icon-shrink-right"></i></a>

             </li>

-          </ul>

-        </div>

-        <div class="layui-tab" lay-unauto lay-allowClose="true" lay-filter="layadmin-layout-tabs">

-          <ul class="layui-tab-title" id="LAY_app_tabsheader">

-            <li lay-id="home/console.html" lay-attr="home/console.html" class="layui-this"><i class="layui-icon layui-icon-home"></i></li>

-          </ul>

-        </div>

-      </div>

-      

-      

-      <!-- 主体内容 -->

-      <div class="layui-body" id="LAY_app_body">

-        <div class="layadmin-tabsbody-item layui-show">

-          <iframe src="home/console.html" frameborder="0" class="layadmin-iframe"></iframe>

-        </div>

-      </div>

-      

-      <!-- 辅助元素,一般用于移动设备下遮罩 -->

-      <div class="layadmin-body-shade" layadmin-event="shade"></div>

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

+                <a ew-event="refresh" title="刷新"><i class="layui-icon layui-icon-refresh-3"></i></a>

+            </li>

+        </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>

+            </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>

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

+                <a>

+                    <img th:src="@{/static/custom/images/head.png}" class="layui-nav-img">

+                    <cite>[[${loginOper.opername}]]</cite>

+                </a>

+                <dl class="layui-nav-child">

+                    <dd lay-unselect>

+                        <a id="setInfo">个人信息</a>

+                    </dd>

+                    <dd lay-unselect>

+                        <a id="setPsw">修改密码</a>

+                    </dd>

+                    <hr>

+                    <dd lay-unselect>

+                        <a id="btnLogout">退出</a>

+                    </dd>

+                </dl>

+            </li>

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

+                <a ew-event="theme" title="主题"><i class="layui-icon layui-icon-more-vertical"></i></a>

+            </li>

+        </ul>

     </div>

-  </div>

 

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

+    <!-- 侧边栏 -->

+    <div class="layui-side">

+        <div class="layui-side-scroll">

+            <ul class="layui-nav layui-nav-tree" style="margin-top: 15px;">

+                <li class="layui-nav-item" th:each="menu : ${menus}">

+                    <a th:lay-href="${menu.menuUrl}"><i th:class="'layui-icon '+${menu.menuIcon}"></i>&emsp;<cite>[[${menu.menuName}]]</cite></a>

+                    <dl class="layui-nav-child" th:if="${menu.subMenus.size()} > 0">

+                        <dd th:each="subMenu : ${menu.subMenus}">

+                            <a th:lay-href="${subMenu.menuUrl}">[[${subMenu.menuName}]]</a>

+                            <dl class="layui-nav-child" th:if="${subMenu.subMenus.size()} > 0">

+                                <dd th:each="temp : ${subMenu.subMenus}"><a th:lay-href="${temp.menuUrl}">[[${temp.menuName}]]</a>

+                                </dd>

+                            </dl>

+                        </dd>

+                    </dl>

+                </li>

 

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

+                    <!--<a href="javascript:;"><i class="layui-icon layui-icon-unlink"></i>&emsp;<cite>多级菜单</cite></a>-->

+                    <!--<dl class="layui-nav-child">-->

+                        <!--<dd>-->

+                            <!--<a href="javascript:;">二级菜单</a>-->

+                            <!--<dl class="layui-nav-child">-->

+                                <!--<dd><a href="javascript:;">三级菜单</a></dd>-->

+                                <!--<dd><a href="javascript:;">三级菜单</a></dd>-->

+                            <!--</dl>-->

+                        <!--</dd>-->

+                    <!--</dl>-->

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

+            </ul>

+        </div>

+    </div>

+

+

+    <!-- 主体部分 -->

+    <div class="layui-body">

+        <div class="layui-tab" lay-allowClose="true" lay-filter="admin-pagetabs">

+            <ul class="layui-tab-title">

+            </ul>

+            <div class="layui-tab-content">

+            </div>

+        </div>

+        <div class="layui-icon admin-tabs-control layui-icon-prev" ew-event="leftPage"></div>

+        <div class="layui-icon admin-tabs-control layui-icon-next" ew-event="rightPage"></div>

+        <div class="layui-icon admin-tabs-control layui-icon-down">

+            <ul class="layui-nav admin-tabs-select" lay-filter="admin-pagetabs-nav">

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

+                    <a href="javascript:;"></a>

+                    <dl class="layui-nav-child layui-anim-fadein">

+                        <dd ew-event="closeThisTabs" lay-unselect><a href="javascript:;">关闭当前标签页</a></dd>

+                        <dd ew-event="closeOtherTabs" lay-unselect><a href="javascript:;">关闭其它标签页</a></dd>

+                        <dd ew-event="closeAllTabs" lay-unselect><a href="javascript:;">关闭全部标签页</a></dd>

+                    </dl>

+                </li>

+            </ul>

+        </div>

+    </div>

+

+    <!-- 底部 -->

+    <div class="layui-footer">Copyright © 2018 supwisdom All rights reserved. <span class="pull-right" th:text="${payapiVersion}">Version 1.0</span>

+    </div>

+

+    <!-- 手机屏幕遮罩层 -->

+    <div class="site-mobile-shade"></div>

+</div>

+

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

+<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>

+    layui.config({

+        base: 'static/custom/module/'

+    }).extend({

+        formSelects: 'formSelects/formSelects-v4',

+        treetable: 'treetable-lay/treetable'

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

+        var admin = layui.admin;

+    });

+</script>

+

+

+<script>

+    layui.use(['index'], function () {

+        var index = layui.index;

+        index.checkPageTabs(true);  // 检查多标签是否开启

+        index.initRouter();  // 导航栏和tab联动

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

+    });

+</script>

 </body>

-</html>

 

-

+</html>
\ No newline at end of file
diff --git a/src/main/resources/templates/login.html b/src/main/resources/templates/login.html
index 919d862..81e8471 100644
--- a/src/main/resources/templates/login.html
+++ b/src/main/resources/templates/login.html
@@ -8,13 +8,13 @@
     <!-- default header name is X-CSRF-TOKEN -->
     <meta name="_csrf_header" th:content="${_csrf.headerName}" />
     <link rel="stylesheet" type="text/css"  th:href="@{/static/libs/layui/css/layui.css}"   />
-    <link rel="stylesheet" type="text/css"  th:href="@{/static/payapi/css/login.css}"  />
+    <link rel="stylesheet" type="text/css"  th:href="@{/static/custom/css/login.css}"  />
 </head>
 <body>
 <div class="login-wrapper">
 
     <div class="login-header">
-        <img th:src="@{/static/payapi/images/logo.png}"> logo
+        <img th:src="@{/static/custom/images/logo.png}"> logo
     </div>
 
     <div class=" login-body">
@@ -84,7 +84,7 @@
 <script type="text/javascript"  th:src="@{/static/libs/layui/layui.js}" ></script>
 <script>
     layui.config({
-        base: 'payapi/module/'
+        base: 'custom/module/'
     }).use(['form'], function () {
         var $ = layui.jquery;
         var form = layui.form;