主功能菜单
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 += ' ';
+ 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,"&").replace(/</g,"<").replace(/>/g,">");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,
+"'").replace(/</g,"<").replace(/>/g,">"),"'");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> <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> <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;