diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index 87b738c..f6b961f 100644
--- a/gradle/wrapper/gradle-wrapper.jar
+++ b/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 7e5d2a8..bf3de21 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,5 @@
-#Tue Mar 26 15:30:49 CST 2019
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-bin.zip
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
diff --git a/gradlew b/gradlew
index af6708f..cccdd3d 100755
--- a/gradlew
+++ b/gradlew
@@ -28,7 +28,7 @@
 APP_BASE_NAME=`basename "$0"`
 
 # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS='"-Xmx64m"'
+DEFAULT_JVM_OPTS=""
 
 # Use the maximum available, or set MAX_FD != -1 to use that value.
 MAX_FD="maximum"
diff --git a/gradlew.bat b/gradlew.bat
index 0f8d593..e95643d 100644
--- a/gradlew.bat
+++ b/gradlew.bat
@@ -14,7 +14,7 @@
 set APP_HOME=%DIRNAME%
 
 @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS="-Xmx64m"
+set DEFAULT_JVM_OPTS=
 
 @rem Find java.exe
 if defined JAVA_HOME goto findJavaFromJavaHome
diff --git a/src/main/java/com/supwisdom/dlpay/AppPreparedEvent.java b/src/main/java/com/supwisdom/dlpay/AppPreparedEvent.java
new file mode 100644
index 0000000..304379c
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/AppPreparedEvent.java
@@ -0,0 +1,21 @@
+package com.supwisdom.dlpay;
+
+import com.supwisdom.dlpay.system.common.DictPool;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.context.event.ApplicationReadyEvent;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.event.EventListener;
+
+@Configuration
+public class AppPreparedEvent {
+  private final DictPool dictPool;
+
+  public AppPreparedEvent(@Autowired DictPool dictPool) {
+    this.dictPool = dictPool;
+  }
+
+  @EventListener(ApplicationReadyEvent.class)
+  public void setupDictPool() {
+    dictPool.init(); //初始化字典
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/device/dao/DeviceGroupDao.java b/src/main/java/com/supwisdom/dlpay/device/dao/DeviceGroupDao.java
deleted file mode 100644
index 446deda..0000000
--- a/src/main/java/com/supwisdom/dlpay/device/dao/DeviceGroupDao.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.supwisdom.dlpay.device.dao;
-
-import com.supwisdom.dlpay.device.domain.TDeviceGroup;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Modifying;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.query.Param;
-import org.springframework.transaction.annotation.Transactional;
-
-
-public interface DeviceGroupDao  extends  JpaRepository<TDeviceGroup, Integer> {
-
-/*    @Modifying
-    @Transactional
-    @Query("delete from TDeviceGroup where devgroupid =:id or pid=:id")
-    int deleteByQuery(@Param("id") Integer id);*/
-
-    int deleteByDevgroupid(Integer Devgroupid);
-
-
-    Integer countByPid(Integer Devgroupid);
-}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/ApiClientDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/ApiClientDao.java
index e5ca834..738658a 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/ApiClientDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/ApiClientDao.java
@@ -1,8 +1,12 @@
 package com.supwisdom.dlpay.framework.dao;
 
 import com.supwisdom.dlpay.framework.domain.TApiClient;
-import org.springframework.data.repository.CrudRepository;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.repository.JpaRepository;
 
-public interface ApiClientDao extends CrudRepository<TApiClient, String> {
+public interface ApiClientDao extends JpaRepository<TApiClient, String> {
   TApiClient findByAppid(String appid);
+
+  Page<TApiClient> findByAppidContaining(String appid, Pageable pageable);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/domain/TApiClient.java b/src/main/java/com/supwisdom/dlpay/framework/domain/TApiClient.java
index 385bff9..c7aeb26 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/domain/TApiClient.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/domain/TApiClient.java
@@ -1,5 +1,7 @@
 package com.supwisdom.dlpay.framework.domain;
 
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.Id;
@@ -21,6 +23,13 @@
   @Column(name = "roles", length = 300)
   private String roles;
 
+  @Column(name = "BCRYPT_SECRET", nullable = false, length = 64)
+  private String bcryptSecret;
+
+  @Column(name = "THIRDURL", length = 200)
+  private String thirdurl;
+
+
   public String getAppid() {
     return appid;
   }
@@ -35,6 +44,7 @@
 
   public void setSecret(String secret) {
     this.secret = secret;
+    this.bcryptSecret = new BCryptPasswordEncoder().encode(secret);
   }
 
   public String getStatus() {
@@ -52,4 +62,16 @@
   public void setRoles(String roles) {
     this.roles = roles;
   }
+
+  public String getBcryptSecret() {
+    return bcryptSecret;
+  }
+
+  public String getThirdurl() {
+    return thirdurl;
+  }
+
+  public void setThirdurl(String thirdurl) {
+    this.thirdurl = thirdurl;
+  }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/area/bean/AreaSearchBean.java b/src/main/java/com/supwisdom/dlpay/restaurant/bean/AreaSearchBean.java
similarity index 86%
rename from src/main/java/com/supwisdom/dlpay/area/bean/AreaSearchBean.java
rename to src/main/java/com/supwisdom/dlpay/restaurant/bean/AreaSearchBean.java
index b3c4509..2ca4e47 100644
--- a/src/main/java/com/supwisdom/dlpay/area/bean/AreaSearchBean.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/bean/AreaSearchBean.java
@@ -1,4 +1,4 @@
-package com.supwisdom.dlpay.area.bean;
+package com.supwisdom.dlpay.restaurant.bean;
 
 import com.supwisdom.dlpay.system.bean.PageBean;
 
diff --git a/src/main/java/com/supwisdom/dlpay/device/bean/DeviceSearchBean.java b/src/main/java/com/supwisdom/dlpay/restaurant/bean/DeviceSearchBean.java
similarity index 95%
rename from src/main/java/com/supwisdom/dlpay/device/bean/DeviceSearchBean.java
rename to src/main/java/com/supwisdom/dlpay/restaurant/bean/DeviceSearchBean.java
index 7b03fa2..24dc7e3 100644
--- a/src/main/java/com/supwisdom/dlpay/device/bean/DeviceSearchBean.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/bean/DeviceSearchBean.java
@@ -1,4 +1,4 @@
-package com.supwisdom.dlpay.device.bean;
+package com.supwisdom.dlpay.restaurant.bean;
 
 import com.supwisdom.dlpay.system.bean.PageBean;
 
diff --git a/src/main/java/com/supwisdom/dlpay/area/controller/AreaController.java b/src/main/java/com/supwisdom/dlpay/restaurant/controller/AreaController.java
similarity index 90%
rename from src/main/java/com/supwisdom/dlpay/area/controller/AreaController.java
rename to src/main/java/com/supwisdom/dlpay/restaurant/controller/AreaController.java
index 4c4baf1..283f74c 100644
--- a/src/main/java/com/supwisdom/dlpay/area/controller/AreaController.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/controller/AreaController.java
@@ -1,11 +1,11 @@
-package com.supwisdom.dlpay.area.controller;
+package com.supwisdom.dlpay.restaurant.controller;
 
 
 import com.google.gson.Gson;
 import com.supwisdom.dlpay.api.bean.JsonResult;
-import com.supwisdom.dlpay.area.bean.AreaSearchBean;
-import com.supwisdom.dlpay.area.domain.TArea;
-import com.supwisdom.dlpay.area.service.AreaService;
+import com.supwisdom.dlpay.restaurant.bean.AreaSearchBean;
+import com.supwisdom.dlpay.restaurant.domain.TArea;
+import com.supwisdom.dlpay.restaurant.service.AreaService;
 import com.supwisdom.dlpay.framework.util.PageResult;
 import com.supwisdom.dlpay.framework.util.WebConstant;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -36,7 +36,7 @@
         Gson gson = new Gson();
         String gsonString = gson.toJson(map);
         model.put("areaList", gsonString);
-        return "area/index";
+        return "restaurant/area/index";
     }
 
     @RequestMapping("/list")
@@ -65,7 +65,7 @@
     public String loadadd(Model model) {
         List<TArea> list = areaService.findAll();
         model.addAttribute("arealist", list);
-        return "area/form";
+        return "restaurant/area/form";
     }
 
     @PostMapping("/add")
diff --git a/src/main/java/com/supwisdom/dlpay/device/controller/DeviceController.java b/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceController.java
similarity index 86%
rename from src/main/java/com/supwisdom/dlpay/device/controller/DeviceController.java
rename to src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceController.java
index 61d958d..8ea5883 100644
--- a/src/main/java/com/supwisdom/dlpay/device/controller/DeviceController.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceController.java
@@ -1,15 +1,10 @@
-package com.supwisdom.dlpay.device.controller;
+package com.supwisdom.dlpay.restaurant.controller;
 
 
-import com.google.gson.Gson;
-import com.supwisdom.dlpay.api.bean.BaseResp;
 import com.supwisdom.dlpay.api.bean.JsonResult;
-import com.supwisdom.dlpay.area.bean.AreaSearchBean;
-import com.supwisdom.dlpay.area.domain.TArea;
-import com.supwisdom.dlpay.area.service.AreaService;
-import com.supwisdom.dlpay.device.bean.DeviceSearchBean;
-import com.supwisdom.dlpay.device.domain.TDevice;
-import com.supwisdom.dlpay.device.service.DeviceService;
+import com.supwisdom.dlpay.restaurant.bean.DeviceSearchBean;
+import com.supwisdom.dlpay.restaurant.domain.TDevice;
+import com.supwisdom.dlpay.restaurant.service.DeviceService;
 import com.supwisdom.dlpay.framework.util.ExportExcel;
 import com.supwisdom.dlpay.framework.util.PageResult;
 import com.supwisdom.dlpay.framework.util.WebConstant;
@@ -23,9 +18,6 @@
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
 
 @Controller
 @RequestMapping("/device")
@@ -37,7 +29,7 @@
     @RequestMapping("/index")
     public String indexView(ModelMap model) {
 
-        return "device/index";
+        return "restaurant/device/index";
     }
 
     @RequestMapping("/list")
@@ -64,7 +56,7 @@
     @GetMapping("/loadadd")
     @PreAuthorize("hasPermission('/device/loadadd','')")
     public String loadadd(Model model) {
-        return "device/form";
+        return "restaurant/device/form";
     }
 
     @PostMapping("/add")
@@ -92,7 +84,7 @@
     @GetMapping("/loadimport")
    /* @PreAuthorize("hasPermission('/device/loadimport','')")*/
     public String loadimport(Model model) {
-        return "device/import";
+        return "restaurant/device/import";
     }
 
 
diff --git a/src/main/java/com/supwisdom/dlpay/device/controller/DeviceGroupController.java b/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceGroupController.java
similarity index 86%
rename from src/main/java/com/supwisdom/dlpay/device/controller/DeviceGroupController.java
rename to src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceGroupController.java
index 1b1923c..197f709 100644
--- a/src/main/java/com/supwisdom/dlpay/device/controller/DeviceGroupController.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceGroupController.java
@@ -1,12 +1,12 @@
-package com.supwisdom.dlpay.device.controller;
+package com.supwisdom.dlpay.restaurant.controller;
 
 
 import com.supwisdom.dlpay.api.bean.JsonResult;
-import com.supwisdom.dlpay.device.bean.DeviceSearchBean;
-import com.supwisdom.dlpay.device.domain.TDevice;
-import com.supwisdom.dlpay.device.domain.TDeviceGroup;
-import com.supwisdom.dlpay.device.service.DeviceGroupService;
-import com.supwisdom.dlpay.device.service.DeviceService;
+import com.supwisdom.dlpay.restaurant.bean.DeviceSearchBean;
+import com.supwisdom.dlpay.restaurant.domain.TDevice;
+import com.supwisdom.dlpay.restaurant.domain.TDeviceGroup;
+import com.supwisdom.dlpay.restaurant.service.DeviceGroupService;
+import com.supwisdom.dlpay.restaurant.service.DeviceService;
 import com.supwisdom.dlpay.framework.util.PageResult;
 import com.supwisdom.dlpay.framework.util.WebConstant;
 import com.supwisdom.dlpay.system.bean.ZTreeNode;
@@ -31,7 +31,7 @@
     @RequestMapping("/index")
     public String indexView(ModelMap model) {
 
-        return "devicegroup/index";
+        return "restaurant/devicegroup/index";
     }
 
     @RequestMapping("/listDevice")
@@ -74,7 +74,7 @@
         List<TDeviceGroup> list=groupService.findAll();
         model.addAttribute("grouplist",list);
 
-        return "devicegroup/form";
+        return "restaurant/devicegroup/form";
     }
 
     @PostMapping("/add")
diff --git a/src/main/java/com/supwisdom/dlpay/device/controller/DeviceManageController.java b/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceManageController.java
similarity index 84%
rename from src/main/java/com/supwisdom/dlpay/device/controller/DeviceManageController.java
rename to src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceManageController.java
index 8b875c7..898052d 100644
--- a/src/main/java/com/supwisdom/dlpay/device/controller/DeviceManageController.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceManageController.java
@@ -1,11 +1,10 @@
-package com.supwisdom.dlpay.device.controller;
+package com.supwisdom.dlpay.restaurant.controller;
 
 
 import com.supwisdom.dlpay.api.bean.JsonResult;
-import com.supwisdom.dlpay.device.bean.DeviceSearchBean;
-import com.supwisdom.dlpay.device.domain.TDevice;
-import com.supwisdom.dlpay.device.service.DeviceService;
-import com.supwisdom.dlpay.framework.util.ExportExcel;
+import com.supwisdom.dlpay.restaurant.bean.DeviceSearchBean;
+import com.supwisdom.dlpay.restaurant.domain.TDevice;
+import com.supwisdom.dlpay.restaurant.service.DeviceService;
 import com.supwisdom.dlpay.framework.util.PageResult;
 import com.supwisdom.dlpay.framework.util.WebConstant;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -14,10 +13,6 @@
 import org.springframework.ui.Model;
 import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
 
 @Controller
 @RequestMapping("/devicemanage")
@@ -29,7 +24,7 @@
     @RequestMapping("/index")
     public String indexView(ModelMap model) {
 
-        return "devicemanage/index";
+        return "restaurant/devicemanage/index";
     }
 
     @RequestMapping("/list")
@@ -62,7 +57,7 @@
     @GetMapping("/loadupdate")
     @PreAuthorize("hasPermission('/devicemanage/loadupdate','')")
     public String loadadd(Model model) {
-        return "device/form";
+        return "restaurant/device/form";
     }
 
 
diff --git a/src/main/java/com/supwisdom/dlpay/shopmanagement/ShopManageController.java b/src/main/java/com/supwisdom/dlpay/restaurant/controller/ShopManageController.java
similarity index 99%
rename from src/main/java/com/supwisdom/dlpay/shopmanagement/ShopManageController.java
rename to src/main/java/com/supwisdom/dlpay/restaurant/controller/ShopManageController.java
index 3fcc576..0f25e53 100644
--- a/src/main/java/com/supwisdom/dlpay/shopmanagement/ShopManageController.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/controller/ShopManageController.java
@@ -1,4 +1,4 @@
-package com.supwisdom.dlpay.shopmanagement;
+package com.supwisdom.dlpay.restaurant.controller;
 
 import com.supwisdom.dlpay.api.bean.JsonResult;
 import com.supwisdom.dlpay.framework.domain.TOperLog;
diff --git a/src/main/java/com/supwisdom/dlpay/area/dao/AreaDao.java b/src/main/java/com/supwisdom/dlpay/restaurant/dao/AreaDao.java
similarity index 80%
rename from src/main/java/com/supwisdom/dlpay/area/dao/AreaDao.java
rename to src/main/java/com/supwisdom/dlpay/restaurant/dao/AreaDao.java
index 0b7a308..b24da89 100644
--- a/src/main/java/com/supwisdom/dlpay/area/dao/AreaDao.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/dao/AreaDao.java
@@ -1,7 +1,7 @@
-package com.supwisdom.dlpay.area.dao;
+package com.supwisdom.dlpay.restaurant.dao;
 
 
-import com.supwisdom.dlpay.area.domain.TArea;
+import com.supwisdom.dlpay.restaurant.domain.TArea;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/src/main/java/com/supwisdom/dlpay/device/dao/DeviceDao.java b/src/main/java/com/supwisdom/dlpay/restaurant/dao/DeviceDao.java
similarity index 89%
rename from src/main/java/com/supwisdom/dlpay/device/dao/DeviceDao.java
rename to src/main/java/com/supwisdom/dlpay/restaurant/dao/DeviceDao.java
index 5c3f38e..897e6ed 100644
--- a/src/main/java/com/supwisdom/dlpay/device/dao/DeviceDao.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/dao/DeviceDao.java
@@ -1,7 +1,7 @@
-package com.supwisdom.dlpay.device.dao;
+package com.supwisdom.dlpay.restaurant.dao;
 
 
-import com.supwisdom.dlpay.device.domain.TDevice;
+import com.supwisdom.dlpay.restaurant.domain.TDevice;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/dao/DeviceGroupDao.java b/src/main/java/com/supwisdom/dlpay/restaurant/dao/DeviceGroupDao.java
new file mode 100644
index 0000000..7f90450
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/dao/DeviceGroupDao.java
@@ -0,0 +1,18 @@
+package com.supwisdom.dlpay.restaurant.dao;
+
+import com.supwisdom.dlpay.restaurant.domain.TDeviceGroup;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+
+public interface DeviceGroupDao  extends  JpaRepository<TDeviceGroup, Integer> {
+
+/*    @Modifying
+    @Transactional
+    @Query("delete from TDeviceGroup where devgroupid =:id or pid=:id")
+    int deleteByQuery(@Param("id") Integer id);*/
+
+    int deleteByDevgroupid(Integer Devgroupid);
+
+
+    Integer countByPid(Integer Devgroupid);
+}
diff --git a/src/main/java/com/supwisdom/dlpay/device/dao/ShopDeviceDao.java b/src/main/java/com/supwisdom/dlpay/restaurant/dao/ShopDeviceDao.java
similarity index 75%
rename from src/main/java/com/supwisdom/dlpay/device/dao/ShopDeviceDao.java
rename to src/main/java/com/supwisdom/dlpay/restaurant/dao/ShopDeviceDao.java
index 095a1bf..707e530 100644
--- a/src/main/java/com/supwisdom/dlpay/device/dao/ShopDeviceDao.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/dao/ShopDeviceDao.java
@@ -1,6 +1,6 @@
-package com.supwisdom.dlpay.device.dao;
+package com.supwisdom.dlpay.restaurant.dao;
 
-import com.supwisdom.dlpay.device.domain.TShopDevice;
+import com.supwisdom.dlpay.restaurant.domain.TShopDevice;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.stereotype.Repository;
diff --git a/src/main/java/com/supwisdom/dlpay/area/domain/TArea.java b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TArea.java
similarity index 97%
rename from src/main/java/com/supwisdom/dlpay/area/domain/TArea.java
rename to src/main/java/com/supwisdom/dlpay/restaurant/domain/TArea.java
index 2148783..b1b1e93 100644
--- a/src/main/java/com/supwisdom/dlpay/area/domain/TArea.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TArea.java
@@ -1,4 +1,4 @@
-package com.supwisdom.dlpay.area.domain;
+package com.supwisdom.dlpay.restaurant.domain;
 
 import javax.persistence.*;
 
diff --git a/src/main/java/com/supwisdom/dlpay/device/domain/TDevice.java b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TDevice.java
similarity index 97%
rename from src/main/java/com/supwisdom/dlpay/device/domain/TDevice.java
rename to src/main/java/com/supwisdom/dlpay/restaurant/domain/TDevice.java
index fd23fcb..040fcdc 100644
--- a/src/main/java/com/supwisdom/dlpay/device/domain/TDevice.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TDevice.java
@@ -1,4 +1,4 @@
-package com.supwisdom.dlpay.device.domain;
+package com.supwisdom.dlpay.restaurant.domain;
 
 import javax.persistence.*;
 @Entity
diff --git a/src/main/java/com/supwisdom/dlpay/device/domain/TDeviceGroup.java b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TDeviceGroup.java
similarity index 95%
rename from src/main/java/com/supwisdom/dlpay/device/domain/TDeviceGroup.java
rename to src/main/java/com/supwisdom/dlpay/restaurant/domain/TDeviceGroup.java
index 4218ffd..5588eec 100644
--- a/src/main/java/com/supwisdom/dlpay/device/domain/TDeviceGroup.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TDeviceGroup.java
@@ -1,4 +1,4 @@
-package com.supwisdom.dlpay.device.domain;
+package com.supwisdom.dlpay.restaurant.domain;
 
 
 import javax.persistence.*;
diff --git a/src/main/java/com/supwisdom/dlpay/device/domain/TShopDevice.java b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TShopDevice.java
similarity index 94%
rename from src/main/java/com/supwisdom/dlpay/device/domain/TShopDevice.java
rename to src/main/java/com/supwisdom/dlpay/restaurant/domain/TShopDevice.java
index 28980e9..06ea652 100644
--- a/src/main/java/com/supwisdom/dlpay/device/domain/TShopDevice.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TShopDevice.java
@@ -1,4 +1,4 @@
-package com.supwisdom.dlpay.device.domain;
+package com.supwisdom.dlpay.restaurant.domain;
 
 import javax.persistence.Column;
 import javax.persistence.Entity;
diff --git a/src/main/java/com/supwisdom/dlpay/area/service/AreaService.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/AreaService.java
similarity index 83%
rename from src/main/java/com/supwisdom/dlpay/area/service/AreaService.java
rename to src/main/java/com/supwisdom/dlpay/restaurant/service/AreaService.java
index 9bee95d..f6a655b 100644
--- a/src/main/java/com/supwisdom/dlpay/area/service/AreaService.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/AreaService.java
@@ -1,8 +1,8 @@
-package com.supwisdom.dlpay.area.service;
+package com.supwisdom.dlpay.restaurant.service;
 
 import com.supwisdom.dlpay.api.bean.JsonResult;
-import com.supwisdom.dlpay.area.bean.AreaSearchBean;
-import com.supwisdom.dlpay.area.domain.TArea;
+import com.supwisdom.dlpay.restaurant.bean.AreaSearchBean;
+import com.supwisdom.dlpay.restaurant.domain.TArea;
 import com.supwisdom.dlpay.framework.util.PageResult;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
diff --git a/src/main/java/com/supwisdom/dlpay/device/service/DeviceGroupService.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/DeviceGroupService.java
similarity index 87%
rename from src/main/java/com/supwisdom/dlpay/device/service/DeviceGroupService.java
rename to src/main/java/com/supwisdom/dlpay/restaurant/service/DeviceGroupService.java
index 5d914eb..9265b95 100644
--- a/src/main/java/com/supwisdom/dlpay/device/service/DeviceGroupService.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/DeviceGroupService.java
@@ -1,7 +1,7 @@
-package com.supwisdom.dlpay.device.service;
+package com.supwisdom.dlpay.restaurant.service;
 
 import com.supwisdom.dlpay.api.bean.JsonResult;
-import com.supwisdom.dlpay.device.domain.TDeviceGroup;
+import com.supwisdom.dlpay.restaurant.domain.TDeviceGroup;
 import com.supwisdom.dlpay.framework.util.PageResult;
 import com.supwisdom.dlpay.system.bean.ZTreeNode;
 import org.springframework.transaction.annotation.Propagation;
diff --git a/src/main/java/com/supwisdom/dlpay/device/service/DeviceService.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/DeviceService.java
similarity index 87%
rename from src/main/java/com/supwisdom/dlpay/device/service/DeviceService.java
rename to src/main/java/com/supwisdom/dlpay/restaurant/service/DeviceService.java
index 5a15d0a..6fc0d98 100644
--- a/src/main/java/com/supwisdom/dlpay/device/service/DeviceService.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/DeviceService.java
@@ -1,9 +1,8 @@
-package com.supwisdom.dlpay.device.service;
+package com.supwisdom.dlpay.restaurant.service;
 
 import com.supwisdom.dlpay.api.bean.JsonResult;
-import com.supwisdom.dlpay.area.bean.AreaSearchBean;
-import com.supwisdom.dlpay.device.bean.DeviceSearchBean;
-import com.supwisdom.dlpay.device.domain.TDevice;
+import com.supwisdom.dlpay.restaurant.bean.DeviceSearchBean;
+import com.supwisdom.dlpay.restaurant.domain.TDevice;
 import com.supwisdom.dlpay.framework.util.PageResult;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
diff --git a/src/main/java/com/supwisdom/dlpay/area/service/impl/AreaServiceImpl.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/AreaServiceImpl.java
similarity index 84%
rename from src/main/java/com/supwisdom/dlpay/area/service/impl/AreaServiceImpl.java
rename to src/main/java/com/supwisdom/dlpay/restaurant/service/impl/AreaServiceImpl.java
index 6b19406..9d34df1 100644
--- a/src/main/java/com/supwisdom/dlpay/area/service/impl/AreaServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/AreaServiceImpl.java
@@ -1,10 +1,10 @@
-package com.supwisdom.dlpay.area.service.impl;
+package com.supwisdom.dlpay.restaurant.service.impl;
 
 import com.supwisdom.dlpay.api.bean.JsonResult;
-import com.supwisdom.dlpay.area.bean.AreaSearchBean;
-import com.supwisdom.dlpay.area.dao.AreaDao;
-import com.supwisdom.dlpay.area.domain.TArea;
-import com.supwisdom.dlpay.area.service.AreaService;
+import com.supwisdom.dlpay.restaurant.bean.AreaSearchBean;
+import com.supwisdom.dlpay.restaurant.dao.AreaDao;
+import com.supwisdom.dlpay.restaurant.domain.TArea;
+import com.supwisdom.dlpay.restaurant.service.AreaService;
 import com.supwisdom.dlpay.framework.util.PageResult;
 import com.supwisdom.dlpay.framework.util.StringUtil;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/main/java/com/supwisdom/dlpay/device/service/impl/DeviceGroupServiceImpl.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeviceGroupServiceImpl.java
similarity index 86%
rename from src/main/java/com/supwisdom/dlpay/device/service/impl/DeviceGroupServiceImpl.java
rename to src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeviceGroupServiceImpl.java
index b8770b7..7565003 100644
--- a/src/main/java/com/supwisdom/dlpay/device/service/impl/DeviceGroupServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeviceGroupServiceImpl.java
@@ -1,10 +1,10 @@
-package com.supwisdom.dlpay.device.service.impl;
+package com.supwisdom.dlpay.restaurant.service.impl;
 
 import com.supwisdom.dlpay.api.bean.JsonResult;
-import com.supwisdom.dlpay.device.dao.DeviceDao;
-import com.supwisdom.dlpay.device.dao.DeviceGroupDao;
-import com.supwisdom.dlpay.device.domain.TDeviceGroup;
-import com.supwisdom.dlpay.device.service.DeviceGroupService;
+import com.supwisdom.dlpay.restaurant.dao.DeviceDao;
+import com.supwisdom.dlpay.restaurant.dao.DeviceGroupDao;
+import com.supwisdom.dlpay.restaurant.domain.TDeviceGroup;
+import com.supwisdom.dlpay.restaurant.service.DeviceGroupService;
 import com.supwisdom.dlpay.framework.util.PageResult;
 import com.supwisdom.dlpay.system.bean.ZTreeNode;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/main/java/com/supwisdom/dlpay/device/service/impl/DeviceServiceImpl.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeviceServiceImpl.java
similarity index 94%
rename from src/main/java/com/supwisdom/dlpay/device/service/impl/DeviceServiceImpl.java
rename to src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeviceServiceImpl.java
index b2104a6..0ba218d 100644
--- a/src/main/java/com/supwisdom/dlpay/device/service/impl/DeviceServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeviceServiceImpl.java
@@ -1,12 +1,12 @@
-package com.supwisdom.dlpay.device.service.impl;
+package com.supwisdom.dlpay.restaurant.service.impl;
 
 import com.supwisdom.dlpay.api.bean.JsonResult;
-import com.supwisdom.dlpay.device.bean.DeviceSearchBean;
-import com.supwisdom.dlpay.device.dao.DeviceDao;
-import com.supwisdom.dlpay.device.dao.ShopDeviceDao;
-import com.supwisdom.dlpay.device.domain.TDevice;
-import com.supwisdom.dlpay.device.domain.TShopDevice;
-import com.supwisdom.dlpay.device.service.DeviceService;
+import com.supwisdom.dlpay.restaurant.bean.DeviceSearchBean;
+import com.supwisdom.dlpay.restaurant.dao.DeviceDao;
+import com.supwisdom.dlpay.restaurant.dao.ShopDeviceDao;
+import com.supwisdom.dlpay.restaurant.domain.TDevice;
+import com.supwisdom.dlpay.restaurant.domain.TShopDevice;
+import com.supwisdom.dlpay.restaurant.service.DeviceService;
 import com.supwisdom.dlpay.framework.dao.ShopSettlementDao;
 import com.supwisdom.dlpay.framework.security.OperUtil;
 import com.supwisdom.dlpay.framework.util.ImportExcelUtil;
diff --git a/src/main/java/com/supwisdom/dlpay/system/common/DictPool.java b/src/main/java/com/supwisdom/dlpay/system/common/DictPool.java
new file mode 100644
index 0000000..c8b6fb5
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/system/common/DictPool.java
@@ -0,0 +1,35 @@
+package com.supwisdom.dlpay.system.common;
+
+import com.supwisdom.dlpay.system.service.DictionaryDataService;
+import com.supwisdom.dlpay.util.ConstantUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@Component("dictPool")
+@Scope("singleton")
+public class DictPool {
+  private static HashMap<String, Object> dictmap = new HashMap<>();
+
+  @Autowired
+  private DictionaryDataService dictionaryDataService;
+
+  public static HashMap<Object, Object> getDictMap(String key) {
+    synchronized (dictmap) {
+      return (HashMap<Object, Object>) dictmap.get(key);
+    }
+  }
+
+  public static void updateDict(String dictType, Map<String, String> value) {
+    synchronized (dictmap) {
+      dictmap.put(dictType, value);
+    }
+  }
+
+  public void init() {
+
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/system/controller/DictPoolAction.java b/src/main/java/com/supwisdom/dlpay/system/controller/DictPoolAction.java
new file mode 100644
index 0000000..ca616de
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/system/controller/DictPoolAction.java
@@ -0,0 +1,31 @@
+package com.supwisdom.dlpay.system.controller;
+
+import com.supwisdom.dlpay.api.bean.JsonResult;
+import com.supwisdom.dlpay.system.common.DictPool;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.FormParam;
+import java.util.Map;
+
+@RestController
+public class DictPoolAction {
+  @Autowired
+  private DictPool dictPool;
+
+  @GetMapping("/dictpool")
+  public Map getDictDataByDicttype(@FormParam("dicttype") String dictType, HttpServletRequest request) {
+    dictType = request.getParameter("dicttype");
+    Map res = DictPool.getDictMap(dictType);
+    return res;
+  }
+
+  @GetMapping("/dictrefresh")
+  public JsonResult refreshDict() {
+    dictPool.init();
+    return JsonResult.ok();
+  }
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/system/controller/OperatorController.java b/src/main/java/com/supwisdom/dlpay/system/controller/OperatorController.java
index 3b57620..a727ed8 100644
--- a/src/main/java/com/supwisdom/dlpay/system/controller/OperatorController.java
+++ b/src/main/java/com/supwisdom/dlpay/system/controller/OperatorController.java
@@ -1,12 +1,13 @@
 package com.supwisdom.dlpay.system.controller;
 
 import com.supwisdom.dlpay.api.bean.JsonResult;
-import com.supwisdom.dlpay.framework.domain.*;
+import com.supwisdom.dlpay.framework.domain.TOperLog;
+import com.supwisdom.dlpay.framework.domain.TOperRole;
+import com.supwisdom.dlpay.framework.domain.TOperator;
 import com.supwisdom.dlpay.framework.security.OperUtil;
 import com.supwisdom.dlpay.framework.util.PageResult;
 import com.supwisdom.dlpay.framework.util.StringUtil;
 import com.supwisdom.dlpay.framework.util.WebConstant;
-import com.supwisdom.dlpay.system.bean.FunctionSearchBean;
 import com.supwisdom.dlpay.system.bean.LogBean;
 import com.supwisdom.dlpay.system.bean.OperatorSearchBean;
 import com.supwisdom.dlpay.system.service.OperatorService;
@@ -33,7 +34,6 @@
     @GetMapping("/index")
     @PreAuthorize("hasPermission('/operator/index','')")
     public String indexView(Model model) {
-        System.out.println("here is index");
         return "system/operator/index";
     }
 
diff --git a/src/main/java/com/supwisdom/dlpay/system/controller/ParamController.java b/src/main/java/com/supwisdom/dlpay/system/controller/ParamController.java
index 1224c6e..110d2b8 100644
--- a/src/main/java/com/supwisdom/dlpay/system/controller/ParamController.java
+++ b/src/main/java/com/supwisdom/dlpay/system/controller/ParamController.java
@@ -1,19 +1,20 @@
 package com.supwisdom.dlpay.system.controller;
 
 import com.supwisdom.dlpay.api.bean.JsonResult;
+import com.supwisdom.dlpay.framework.domain.TApiClient;
 import com.supwisdom.dlpay.framework.domain.TBusinesspara;
 import com.supwisdom.dlpay.framework.domain.TSyspara;
 import com.supwisdom.dlpay.framework.service.SystemUtilService;
-import com.supwisdom.dlpay.framework.util.PageResult;
-import com.supwisdom.dlpay.framework.util.WebConstant;
+import com.supwisdom.dlpay.framework.util.*;
 import com.supwisdom.dlpay.system.service.ParamService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.HashMap;
+import java.util.Map;
 
 @Controller
 public class ParamController {
@@ -71,14 +72,14 @@
       }
     } catch (Exception e) {
       e.printStackTrace();
-      return JsonResult.error("系统处理异常");
+      return JsonResult.error("系统处理异常").put("exception", e);
     }
   }
 
 
   /**
    * ====================================================
-   *              业务参数配置
+   * 业务参数配置
    * ====================================================
    */
   @GetMapping("/param/businesspara")
@@ -86,12 +87,12 @@
     return "system/param/businesspara";
   }
 
-  @PostMapping("/param/businessparalist")
+  @GetMapping("/param/businessparalist")
   @PreAuthorize("hasPermission('/param/businesspara','')")
   @ResponseBody
-  public PageResult<TBusinesspara> getDataList(@RequestParam("page") Integer pageNo,
-                                               @RequestParam("limit") Integer pageSize,
-                                               @RequestParam(value = "paraname", required = false) String paraname) {
+  public PageResult<TBusinesspara> getBusinessDataList(@RequestParam("page") Integer pageNo,
+                                                       @RequestParam("limit") Integer pageSize,
+                                                       @RequestParam(value = "paraname", required = false) String paraname) {
     try {
       if (null == pageNo || pageNo < 1) pageNo = WebConstant.PAGENO_DEFAULT;
       if (null == pageSize || pageSize < 1) pageSize = WebConstant.PAGESIZE_DEFAULT;
@@ -102,5 +103,243 @@
     }
   }
 
+  @PostMapping("/param/deletebusinesspara")
+  @PreAuthorize("hasPermission('/param/deletebusinesspara','')")
+  @ResponseBody
+  public JsonResult deleteBusinesspara(@RequestParam("parakey") String parakey) {
+    try {
+      if (StringUtil.isEmpty(parakey)) {
+        return JsonResult.error("参数名为空");
+      }
+      TBusinesspara businesspara = paramService.getBusinessparaByParakey(parakey);
+      if (null == businesspara) {
+        return JsonResult.error("业务参数[" + parakey + "]不存在！");
+      }
+      if (paramService.deleteBusinesspara(businesspara)) {
+        return JsonResult.ok("删除成功！");
+      } else {
+        return JsonResult.error("删除失败！");
+      }
+    } catch (Exception e) {
+      e.printStackTrace();
+      return JsonResult.error("系统处理异常").put("exception", e);
+    }
+  }
 
+  @PostMapping("/param/businessparaupdate")
+  @PreAuthorize("hasPermission('/param/businessparaupdate','')")
+  @ResponseBody
+  public JsonResult updateBusinesspara(@RequestParam("parakey") String parakey, @RequestParam("paraval") String paraval) {
+    try {
+      if (StringUtil.isEmpty(parakey) || null == paraval) {
+        return JsonResult.error("参数传递错误");
+      }
+      TBusinesspara businesspara = paramService.getBusinessparaByParakey(parakey);
+      if (null == businesspara) {
+        return JsonResult.error("业务参数[" + parakey + "]不存在！");
+      }
+      businesspara.setParaval(paraval);
+      if (paramService.saveOrUpdateBusinesspara(businesspara)) {
+        return JsonResult.ok("修改成功！");
+      } else {
+        return JsonResult.error("修改失败！");
+      }
+    } catch (Exception e) {
+      e.printStackTrace();
+      return JsonResult.error("系统处理异常").put("exception", e);
+    }
+  }
+
+  @GetMapping("/param/load4addbuspara")
+  @PreAuthorize("hasPermission('/param/load4addbuspara','')")
+  public String loadadd() {
+    return "system/param/busparaform";
+  }
+
+  @GetMapping("/param/checkbusname")
+  @ResponseBody
+  public JsonResult checkname(@RequestParam("parakey") String parakey) {
+    TBusinesspara businesspara = paramService.getBusinessparaByParakey(parakey);
+    if (businesspara == null) {
+      return JsonResult.ok();
+    } else {
+      return JsonResult.error("参数名重复");
+    }
+  }
+
+  @PostMapping("/param/addbusinesspara")
+  @PreAuthorize("hasPermission('/param/addbusinesspara','')")
+  @ResponseBody
+  public JsonResult addBusinesspara(@RequestParam("parakey") String parakey, @RequestParam("paraval") String paraval) {
+    if (StringUtil.isEmpty(parakey) || null == paraval) {
+      return JsonResult.error("参数传递错误");
+    }
+    try {
+      TBusinesspara businesspara = paramService.getBusinessparaByParakey(parakey);
+      if (null != businesspara) {
+        return JsonResult.error("参数名重复");
+      }
+      businesspara = new TBusinesspara();
+      businesspara.setParakey(parakey.trim());
+      businesspara.setParaval(paraval.trim());
+      if (paramService.saveOrUpdateBusinesspara(businesspara)) {
+        return JsonResult.ok("新增成功！");
+      } else {
+        return JsonResult.error("新增失败！");
+      }
+    } catch (Exception e) {
+      e.printStackTrace();
+      return JsonResult.error("系统处理异常").put("exception", e);
+    }
+  }
+
+
+  /**
+   * ====================================================
+   * APPID应用权限参数管理
+   * ====================================================
+   */
+  @GetMapping("/param/apiclientpara")
+  public String appidParaView() {
+    return "system/param/apiclientpara";
+  }
+
+  @GetMapping("/param/apiclientparalist")
+  @PreAuthorize("hasPermission('/param/apiclientpara','')")
+  @ResponseBody
+  public PageResult<TApiClient> getApiclientDataList(@RequestParam("page") Integer pageNo,
+                                                     @RequestParam("limit") Integer pageSize,
+                                                     @RequestParam(value = "appid", required = false) String appid) {
+    try {
+      if (null == pageNo || pageNo < 1) pageNo = WebConstant.PAGENO_DEFAULT;
+      if (null == pageSize || pageSize < 1) pageSize = WebConstant.PAGESIZE_DEFAULT;
+      return paramService.getApiClientparaPage(appid, pageNo, pageSize);
+    } catch (Exception e) {
+      e.printStackTrace();
+      return new PageResult<>(99, "系统查询错误");
+    }
+  }
+
+  @GetMapping("/param/load4addapiclient")
+  @PreAuthorize("hasPermission('/param/load4addapiclient','')")
+  public String load4AddApiclientPara(Model model) {
+    Map<String, String> roles = new HashMap<>(0);
+    roles.put("ROLE_THIRD_COMMON", "ROLE_THIRD_COMMON");
+    roles.put("ROLE_THIRD_CONSUME", "ROLE_THIRD_CONSUME");
+    roles.put("ROLE_THIRD_DEPOSIT", "ROLE_THIRD_DEPOSIT");
+    roles.put("ROLE_THIRD_SHOP", "ROLE_THIRD_SHOP");
+    roles.put("ROLE_THIRD_ADMIN", "ROLE_THIRD_ADMIN");
+    model.addAttribute("rolelist", roles);
+    return "system/param/apiclientform";
+  }
+
+  @PostMapping("/param/updateapiclientstate")
+  @PreAuthorize("hasPermission('/param/updateapiclientstate','')")
+  @ResponseBody
+  public JsonResult updateApiclientState(@RequestParam("appid") String appid, @RequestParam("state") String state) {
+    if (StringUtil.isEmpty(appid) || (!TradeDict.STATUS_NORMAL.equals(state) && !TradeDict.STATUS_CLOSED.equals(state))) {
+      return JsonResult.error("参数传递错误");
+    }
+    try {
+      TApiClient apiClient = paramService.getApiClientByAppid(appid);
+      if (null == apiClient) {
+        return JsonResult.error("应用参数不存在");
+      } else if (state.equals(apiClient.getStatus())) {
+        return JsonResult.error("状态修改错误，请刷新查询");
+      }
+      apiClient.setStatus(state);
+      if (paramService.saveOrUpdateApiClient(apiClient)) {
+        return JsonResult.ok(TradeDict.STATUS_NORMAL.equals(state) ? "启用成功" : "关闭成功");
+      } else {
+        return JsonResult.error(TradeDict.STATUS_NORMAL.equals(state) ? "启用失败" : "关闭失败");
+      }
+    } catch (Exception e) {
+      e.printStackTrace();
+      return JsonResult.error("系统处理异常").put("exception", e);
+    }
+  }
+
+  @PostMapping("/param/deleteapiclient")
+  @PreAuthorize("hasPermission('/param/deleteapiclient','')")
+  @ResponseBody
+  public JsonResult deleteApiclientParam(@RequestParam("appid") String appid) {
+    if (StringUtil.isEmpty(appid)) {
+      return JsonResult.error("参数传递错误");
+    }
+    try {
+      TApiClient apiClient = paramService.getApiClientByAppid(appid);
+      if (null == apiClient) {
+        return JsonResult.error("应用参数不存在");
+      }
+
+      if (paramService.deleteApiClient(apiClient)) {
+        return JsonResult.ok("删除成功");
+      } else {
+        return JsonResult.error("删除失败");
+      }
+    } catch (Exception e) {
+      e.printStackTrace();
+      return JsonResult.error("系统处理异常").put("exception", e);
+    }
+  }
+
+  @PostMapping("/param/updateapiclientpara")
+  @PreAuthorize("hasPermission('/param/updateapiclientpara','')")
+  @ResponseBody
+  public JsonResult updateApiclientSecret(@RequestParam("appid") String appid,
+                                          @RequestParam(value = "secret", required = false) String secret,
+                                          @RequestParam(value = "roles", required = false) String roles) {
+    if (StringUtil.isEmpty(appid) || (StringUtil.isEmpty(secret) && StringUtil.isEmpty(roles))) {
+      return JsonResult.error("参数传递错误");
+    }
+    try {
+      TApiClient apiClient = paramService.getApiClientByAppid(appid);
+      if (null == apiClient) {
+        return JsonResult.error("应用参数不存在");
+      }
+      if (!StringUtil.isEmpty(secret)) {
+        apiClient.setSecret(secret);
+      }
+      if (!StringUtil.isEmpty(roles)) {
+        apiClient.setRoles(roles.replaceAll(",",";"));
+      }
+      if (paramService.saveOrUpdateApiClient(apiClient)) {
+        return JsonResult.ok("修改成功");
+      } else {
+        return JsonResult.error("修改失败");
+      }
+    } catch (Exception e) {
+      e.printStackTrace();
+      return JsonResult.error("系统处理异常").put("exception", e);
+    }
+  }
+
+  @PostMapping("/param/addapiclientpara")
+  @PreAuthorize("hasPermission('/param/addapiclientpara','')")
+  @ResponseBody
+  public JsonResult addApiclientPara(@RequestParam("appid") String appid,
+                                     @RequestParam("roles") String roles) {
+    if (StringUtil.isEmpty(appid) || StringUtil.isEmpty(roles)) {
+      return JsonResult.error("参数传递错误");
+    }
+    try {
+      TApiClient apiClient = paramService.getApiClientByAppid(appid);
+      if (null != apiClient) {
+        return JsonResult.error("APPID重复");
+      }
+      apiClient = new TApiClient();
+      apiClient.setAppid(appid.trim());
+      apiClient.setSecret(RandomUtils.getUUIDStr());
+      apiClient.setStatus(TradeDict.STATUS_NORMAL);
+      apiClient.setRoles(roles.replaceAll(",",";"));
+      if (paramService.saveOrUpdateApiClient(apiClient)) {
+        return JsonResult.ok("新增成功");
+      } else {
+        return JsonResult.error("新增失败");
+      }
+    } catch (Exception e) {
+      e.printStackTrace();
+      return JsonResult.error("系统处理异常").put("exception", e);
+    }
+  }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/system/controller/RoleController.java b/src/main/java/com/supwisdom/dlpay/system/controller/RoleController.java
index e8e4eb7..584953c 100644
--- a/src/main/java/com/supwisdom/dlpay/system/controller/RoleController.java
+++ b/src/main/java/com/supwisdom/dlpay/system/controller/RoleController.java
@@ -44,7 +44,6 @@
     }
 
     @GetMapping("/role/loadadd")
-    @PreAuthorize("hasPermission('/role/loadadd','')")
     public String loadadd() {
         return "system/role/form";
     }
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/DictionaryDataService.java b/src/main/java/com/supwisdom/dlpay/system/service/DictionaryDataService.java
new file mode 100644
index 0000000..752db9d
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/system/service/DictionaryDataService.java
@@ -0,0 +1,7 @@
+package com.supwisdom.dlpay.system.service;
+
+import java.util.HashMap;
+
+public interface DictionaryDataService {
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/ParamService.java b/src/main/java/com/supwisdom/dlpay/system/service/ParamService.java
index a255c4c..3097754 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/ParamService.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/ParamService.java
@@ -1,5 +1,6 @@
 package com.supwisdom.dlpay.system.service;
 
+import com.supwisdom.dlpay.framework.domain.TApiClient;
 import com.supwisdom.dlpay.framework.domain.TBusinesspara;
 import com.supwisdom.dlpay.framework.domain.TSyspara;
 import com.supwisdom.dlpay.framework.util.PageResult;
@@ -19,4 +20,26 @@
 
   @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
   PageResult<TBusinesspara> getBusinessparaPage(String paraname, int pageNo, int pageSize);
+
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
+  TBusinesspara getBusinessparaByParakey(String parakey);
+
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+  boolean deleteBusinesspara(TBusinesspara businesspara);
+
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+  boolean saveOrUpdateBusinesspara(TBusinesspara businesspara);
+
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
+  PageResult<TApiClient> getApiClientparaPage(String appid, int pageNo, int pageSize);
+
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
+  TApiClient getApiClientByAppid(String appid);
+
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+  boolean saveOrUpdateApiClient(TApiClient apiClient);
+
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+  boolean deleteApiClient(TApiClient apiClient);
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/impl/DictionaryDataServiceImpl.java b/src/main/java/com/supwisdom/dlpay/system/service/impl/DictionaryDataServiceImpl.java
new file mode 100644
index 0000000..dae1a04
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/system/service/impl/DictionaryDataServiceImpl.java
@@ -0,0 +1,10 @@
+package com.supwisdom.dlpay.system.service.impl;
+
+import com.supwisdom.dlpay.system.service.DictionaryDataService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class DictionaryDataServiceImpl implements DictionaryDataService {
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/impl/ParamServiceImpl.java b/src/main/java/com/supwisdom/dlpay/system/service/impl/ParamServiceImpl.java
index 199682b..8d63932 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/impl/ParamServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/impl/ParamServiceImpl.java
@@ -1,7 +1,9 @@
 package com.supwisdom.dlpay.system.service.impl;
 
+import com.supwisdom.dlpay.framework.dao.ApiClientDao;
 import com.supwisdom.dlpay.framework.dao.BusinessparaDao;
 import com.supwisdom.dlpay.framework.dao.SysparaDao;
+import com.supwisdom.dlpay.framework.domain.TApiClient;
 import com.supwisdom.dlpay.framework.domain.TBusinesspara;
 import com.supwisdom.dlpay.framework.domain.TSyspara;
 import com.supwisdom.dlpay.framework.util.PageResult;
@@ -30,6 +32,8 @@
   private SysparaDao sysparaDao;
   @Autowired
   private BusinessparaDao businessparaDao;
+  @Autowired
+  private ApiClientDao apiClientDao;
 
   @Override
   public PageResult<TSyspara> getSysparaPage(Integer paraid, String paraname, int pageNo, int pageSize) {
@@ -74,4 +78,65 @@
     return new PageResult<>(businessparaDao.findAll(pageable));
   }
 
+  @Override
+  public TBusinesspara getBusinessparaByParakey(String parakey) {
+    if (!StringUtil.isEmpty(parakey)) {
+      return businessparaDao.findByParakey(parakey.trim());
+    }
+    return null;
+  }
+
+  @Override
+  public boolean deleteBusinesspara(TBusinesspara businesspara) {
+    if (null != businesspara) {
+      businessparaDao.delete(businesspara);
+      return true;
+    }
+    return false;
+  }
+
+  @Override
+  public boolean saveOrUpdateBusinesspara(TBusinesspara businesspara) {
+    if (null != businesspara) {
+      businessparaDao.save(businesspara);
+      return true;
+    }
+    return false;
+  }
+
+  @Override
+  public PageResult<TApiClient> getApiClientparaPage(String appid, int pageNo, int pageSize) {
+    Pageable pageable = PageRequest.of(pageNo - 1, pageSize, Sort.by("appid"));
+    if (!StringUtil.isEmpty(appid)) {
+      return new PageResult<>(apiClientDao.findByAppidContaining(appid.trim(), pageable));
+    }
+    return new PageResult<>(apiClientDao.findAll(pageable));
+  }
+
+  @Override
+  public TApiClient getApiClientByAppid(String appid) {
+    if (!StringUtil.isEmpty(appid)) {
+      return apiClientDao.findByAppid(appid.trim());
+    }
+    return null;
+  }
+
+  @Override
+  public boolean saveOrUpdateApiClient(TApiClient apiClient){
+    if(null!=apiClient){
+      apiClientDao.save(apiClient);
+      return true;
+    }
+    return false;
+  }
+
+  @Override
+  public boolean deleteApiClient(TApiClient apiClient) {
+    if (null != apiClient) {
+      apiClientDao.delete(apiClient);
+      return true;
+    }
+    return false;
+  }
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/util/ConstantUtil.java b/src/main/java/com/supwisdom/dlpay/util/ConstantUtil.java
index 1bf5ac2..de5cbd3 100644
--- a/src/main/java/com/supwisdom/dlpay/util/ConstantUtil.java
+++ b/src/main/java/com/supwisdom/dlpay/util/ConstantUtil.java
@@ -26,4 +26,7 @@
     public static final String FEETYPE_MEALER = "mealer";
     public static final String FEETYPE_DISCOUNT = "discount";
     public static final String[] FEETYPE_DICTS = {"none", "mealer", "discount"}; //联动
+
+
+
 }
diff --git a/src/main/resources/db/migration/V1.0__init_data.sql b/src/main/resources/db/migration/V1.0__init_data.sql
index 8fb41a7..911888b 100644
--- a/src/main/resources/db/migration/V1.0__init_data.sql
+++ b/src/main/resources/db/migration/V1.0__init_data.sql
@@ -1,180 +1,179 @@
-
-INSERT INTO "tb_apiclient" VALUES ('200001', 'ROLE_THIRD_CONSUME,ROLE_THIRD_COMMON', 'oUw2NmA09ficiVWD4TUQLDOkPyzQa3VzbjjsW0B2qTk=', 'normal');
-INSERT INTO "tb_apiclient" VALUES ('100001', 'ROLE_THIRD_ADMIN', 'oUw2NmA09ficiVWD4TUQLDOkPyzQa3VzbjjsW0B2qTk=', 'normal');
-
-INSERT INTO "tb_function" VALUES (1, NULL, 0, NULL, 'layui-icon-home', '#', '主页', 1, -1);
-INSERT INTO "tb_function" VALUES (2, NULL, 1, NULL, 'layui-icon-home', '/home/console', '控制台', 1, 1);
-INSERT INTO "tb_function" VALUES (3, NULL, 0, NULL, 'layui-icon-set', '#', '系统中心', 2, -1);
-INSERT INTO "tb_function" VALUES (5, NULL, 1, NULL, 'layui-icon-set', '/role/index', '角色管理', 2, 3);
-INSERT INTO "tb_function" VALUES (6, NULL, 1, NULL, 'layui-icon-set', '/operator/index', '操作员管理', 4, 3);
-INSERT INTO "tb_function" VALUES (4, NULL, 1, NULL, 'layui-icon-set', '/function/index', '功能维护', 1, 3);
-INSERT INTO "tb_function" VALUES (7, NULL, 0, NULL, 'layui-icon-release', '#', '商户中心', 4, -1);
-INSERT INTO "tb_function" VALUES (9, NULL, 1, NULL, '', '/operator/logs', '操作日志', 4, 3);
-INSERT INTO "tb_function" VALUES (10, NULL, 0, NULL, 'layui-icon-util', '#', '参数管理', 3, -1);
-INSERT INTO "tb_function" VALUES (11, NULL, 1, NULL, 'layui-icon-util', '/param/syspara', '全局参数配置', 1, 10);
-INSERT INTO "tb_function" VALUES (12, NULL, 1, NULL, 'layui-icon-util', '/param/businesspara', '业务参数配置', 2, 10);
-INSERT INTO "tb_function" VALUES (17, NULL, 1, NULL, 'layui-icon-util', '/param/apiclientpara', '应用参数配置', 3, 10);
-INSERT INTO "tb_function" VALUES (18, NULL, 1, NULL, 'layui-icon-util', '/param/paytype', '支付能力配置', 4, 10);
-INSERT INTO "tb_function" VALUES (8, NULL, 0, NULL, 'layui-icon-home', '#', '区域管理', 23, -1);
-INSERT INTO "tb_function" VALUES (13, NULL, 1, NULL, 'layui-icon-home', '/area/index', '地区管理', 1, 8);
-INSERT INTO "tb_function" VALUES (14, NULL, 0, NULL, 'layui-icon-app', '#', '设备管理', 8, -1);
-INSERT INTO "tb_function" VALUES (15, NULL, 1, NULL, 'layui-icon-app', '/device/index', '注册设备', 1, 14);
-INSERT INTO "tb_function" VALUES (16, NULL, 1, NULL, 'layui-icon-home', '/devicegroup/index', '设备组管理', 2, 14);
-INSERT INTO "tb_oper_role" VALUES ('2c9cab836a90185f016a901b005f001b', '402882816a8fe884016a8fe8c0530000', '2c9cab836a8af5d5016a8af6ece20000');
-INSERT INTO "tb_oper_role" VALUES ('ff8080816aaf2ec3016aaf30c1b60007', 'LOR2IwRkbOjp+sVG9KR2BpHZbwGKepS4', 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_oper_role" VALUES ('ff8080816ab96daf016ab9743dc60050', '2c9cab836a9666e0016a96694bbb0004', 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_operator" VALUES ('2c9cab836a9666e0016a96694bbb0004', NULL, '', '', '20190508', 'test1', 'test1', '$2a$10$lkfzdX.0ioX9FU2BmPzHz.tv2DTR8XvaZzA0vpkEYV5vx/IDtIsGy', 'oper', 'normal', 'male');
-INSERT INTO "tb_operator" VALUES ('402882816a8fe884016a8fe8c0530000', NULL, '', '', '20190507', 'test', '11112', '$2a$10$Xa/UKDQ/WkiKVQAyv5Hu4eiqt6HtwVK3YA0Glg1/y1uiEsXnG7ZeS', 'oper', 'normal', 'male');
-INSERT INTO "tb_operator" VALUES ('LOR2IwRkbOjp+sVG9KR2BpHZbwGKepS4', '20500101', '', '', '20190101', 'system', '系统管理员', '$2a$10$Ex9xp11.vCaD8D0a7ahiUOKqDij1TcCUBwRAmrqXeDvAkmzLibn4.', 'oper', 'normal', 'male');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb088a000f', 16, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb088b0010', 17, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb088b0011', 19, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb088b0012', 20, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb088b0013', 21, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb088c0015', 6, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb088c0016', 7, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb088c0017', 8, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb088d0018', 9, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb088d0019', 22, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb088e001b', 4, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb088e001c', 5, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb088e001d', 10, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb088e001e', 11, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb088e001f', 12, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb088f0020', 13, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb088f0021', 14, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb088f0022', 15, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb08900024', 24, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb08900028', 26, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb08900029', 27, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb0891002b', 28, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb0891002c', 29, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb0891002d', 30, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb0891002e', 32, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb0891002f', 33, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb08920031', 34, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb08920032', 35, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb08920033', 36, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb08920034', 37, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb08920035', 39, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb08920036', 40, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb08930038', 41, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaa80085', 16, NULL, '2c9cab836a8af5d5016a8af6ece20000');
-INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaa80086', 17, NULL, '2c9cab836a8af5d5016a8af6ece20000');
-INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaa90087', 19, NULL, '2c9cab836a8af5d5016a8af6ece20000');
-INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaa90088', 20, NULL, '2c9cab836a8af5d5016a8af6ece20000');
-INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaa90089', 21, NULL, '2c9cab836a8af5d5016a8af6ece20000');
-INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaa9008b', 6, NULL, '2c9cab836a8af5d5016a8af6ece20000');
-INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaa9008c', 7, NULL, '2c9cab836a8af5d5016a8af6ece20000');
-INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaa9008d', 8, NULL, '2c9cab836a8af5d5016a8af6ece20000');
-INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaa9008e', 9, NULL, '2c9cab836a8af5d5016a8af6ece20000');
-INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaa9008f', 22, NULL, '2c9cab836a8af5d5016a8af6ece20000');
-INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaa90091', 4, NULL, '2c9cab836a8af5d5016a8af6ece20000');
-INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaaa0092', 5, NULL, '2c9cab836a8af5d5016a8af6ece20000');
-INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaaa0093', 10, NULL, '2c9cab836a8af5d5016a8af6ece20000');
-INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaaa0094', 11, NULL, '2c9cab836a8af5d5016a8af6ece20000');
-INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaaa0095', 12, NULL, '2c9cab836a8af5d5016a8af6ece20000');
-INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaaa0096', 13, NULL, '2c9cab836a8af5d5016a8af6ece20000');
-INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaaa0097', 14, NULL, '2c9cab836a8af5d5016a8af6ece20000');
-INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaaa0098', 15, NULL, '2c9cab836a8af5d5016a8af6ece20000');
-INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaaa009a', 24, NULL, '2c9cab836a8af5d5016a8af6ece20000');
-INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaab009e', 26, NULL, '2c9cab836a8af5d5016a8af6ece20000');
-INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaac009f', 27, NULL, '2c9cab836a8af5d5016a8af6ece20000');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb0893003b', 1, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb0893003c', 2, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb0894003d', 3, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb0894003e', 18, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb08950041', 23, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb08950042', 25, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb08950043', 31, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb08950044', 38, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb08950045', 42, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb08950046', 43, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb08960047', 44, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb08960049', 45, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb0896004a', 46, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb0897004b', 47, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb0897004c', 48, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb0897004d', 49, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_resource" VALUES (4, '1', 4, '添加功能', '/function/add');
-INSERT INTO "tb_resource" VALUES (5, '', 4, '添加父功能', '/function/loadadd');
-INSERT INTO "tb_resource" VALUES (6, '1', 6, '查询', '/operator/index');
-INSERT INTO "tb_resource" VALUES (7, '', 6, '添加查询', '/operator/load4add');
-INSERT INTO "tb_resource" VALUES (8, '', 6, '添加和修改', '/operator/add');
-INSERT INTO "tb_resource" VALUES (9, '', 6, '重置密码', '/operator/resetpwd');
-INSERT INTO "tb_resource" VALUES (10, '', 4, '查询', '/function/index');
-INSERT INTO "tb_resource" VALUES (11, '', 4, '删除', '/function/delfunc');
-INSERT INTO "tb_resource" VALUES (12, '', 4, '添加子功能', '/function/loadsubadd');
-INSERT INTO "tb_resource" VALUES (13, '', 4, '维护资源', '/function/loadres');
-INSERT INTO "tb_resource" VALUES (14, '', 4, '添加资源', '/function/addres');
-INSERT INTO "tb_resource" VALUES (15, '', 4, '删除资源', '/function/delres');
-INSERT INTO "tb_resource" VALUES (16, '', 5, '查询', '/role/index');
-INSERT INTO "tb_resource" VALUES (17, '', 5, '添加', '/role/add');
-INSERT INTO "tb_resource" VALUES (19, '', 5, '分配功能', '/role/addfunc');
-INSERT INTO "tb_resource" VALUES (20, '', 5, '加载分配功能', '/role/loadfunc');
-INSERT INTO "tb_resource" VALUES (21, '', 5, '删除角色', '/role/del');
-INSERT INTO "tb_resource" VALUES (22, '', 6, '修改状态', '/operator/updatestate');
-INSERT INTO "tb_resource" VALUES (24, '', 9, '查询', '/operator/logslist');
-INSERT INTO "tb_resource" VALUES (26, '', 11, '修改', '/param/sysparaupdate');
-INSERT INTO "tb_resource" VALUES (27, '', 11, '查询', '/param/syspara');
-INSERT INTO "tb_resource" VALUES (28, '', 12, '查询', '/param/businesspara');
-INSERT INTO "tb_resource" VALUES (29, '', 12, '删除', '/param/deletebusinesspara');
-INSERT INTO "tb_resource" VALUES (30, '', 12, '修改', '/param/businessparaupdate');
-INSERT INTO "tb_resource" VALUES (32, '', 12, '新增', '/param/addbusinesspara');
-INSERT INTO "tb_resource" VALUES (33, '', 12, '新增跳转', '/param/load4addbuspara');
-INSERT INTO "tb_resource" VALUES (34, '', 17, '查询', '/param/apiclientpara');
-INSERT INTO "tb_resource" VALUES (35, '', 17, '新增修改跳转', '/param/load4addapiclient');
-INSERT INTO "tb_resource" VALUES (36, '', 17, '修改状态', '/param/updateapiclientstate');
-INSERT INTO "tb_resource" VALUES (37, '', 17, '删除', '/param/deleteapiclient');
-INSERT INTO "tb_resource" VALUES (39, '', 17, '修改', '/param/updateapiclientpara');
-INSERT INTO "tb_resource" VALUES (40, '', 17, '新增', '/param/addapiclientpara');
-INSERT INTO "tb_resource" VALUES (41, '', 18, '查询', '/param/paytype');
-INSERT INTO "tb_resource" VALUES (1, '', 13, '查询', '/area/index');
-INSERT INTO "tb_resource" VALUES (2, '', 13, '添加页面', '/area/loadadd');
-INSERT INTO "tb_resource" VALUES (3, '', 13, '添加', '/area/add');
-INSERT INTO "tb_resource" VALUES (18, '', 13, '删除', '/area/delete');
-INSERT INTO "tb_resource" VALUES (23, '', 15, '查询', '/device/index');
-INSERT INTO "tb_resource" VALUES (25, '', 15, '添加页面', '/device/loadadd');
-INSERT INTO "tb_resource" VALUES (31, '', 15, '添加', '/device/add');
-INSERT INTO "tb_resource" VALUES (38, '', 15, '修改状态', '/device/updatestate');
-INSERT INTO "tb_resource" VALUES (42, '', 15, '导入页面', '/device/loadimport');
-INSERT INTO "tb_resource" VALUES (43, '', 15, '下载模板', '/device/download');
-INSERT INTO "tb_resource" VALUES (44, '', 15, '导入', '/device/import');
-INSERT INTO "tb_resource" VALUES (45, '', 16, '查询', '/devicegroup/listDevice');
-INSERT INTO "tb_resource" VALUES (46, '', 16, '展示树', '/devicegroup/listTree');
-INSERT INTO "tb_resource" VALUES (47, '', 16, '显示添加', '/devicegroup/loadadd');
-INSERT INTO "tb_resource" VALUES (48, '', 16, '添加', '/devicegroup/add');
-INSERT INTO "tb_resource" VALUES (49, '', 16, '删除', '/devicegroup/delete');
-INSERT INTO "tb_role" VALUES ('d1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '20190101000000', 0, '', 'ROLE_ADMIN', '超级管理员', '超级管理员');
-INSERT INTO "tb_role" VALUES ('2c9cab836a8af5d5016a8af6ece20000', '20190506102639', 1, '', 'ROLE_ADMIN', '系统管理员', '系统管理员');
-INSERT INTO "tb_role_function" VALUES ('ff8080816aaf2ec3016aaf4edaa80081', 1, NULL, '2c9cab836a8af5d5016a8af6ece20000');
-INSERT INTO "tb_role_function" VALUES ('ff8080816aaf2ec3016aaf4edaa80082', 2, NULL, '2c9cab836a8af5d5016a8af6ece20000');
-INSERT INTO "tb_role_function" VALUES ('ff8080816aaf2ec3016aaf4edaa80083', 3, NULL, '2c9cab836a8af5d5016a8af6ece20000');
-INSERT INTO "tb_role_function" VALUES ('ff8080816aaf2ec3016aaf4edaa80084', 5, NULL, '2c9cab836a8af5d5016a8af6ece20000');
-INSERT INTO "tb_role_function" VALUES ('ff8080816aaf2ec3016aaf4edaa9008a', 6, NULL, '2c9cab836a8af5d5016a8af6ece20000');
-INSERT INTO "tb_role_function" VALUES ('ff8080816aaf2ec3016aaf4edaa90090', 4, NULL, '2c9cab836a8af5d5016a8af6ece20000');
-INSERT INTO "tb_role_function" VALUES ('ff8080816aaf2ec3016aaf4edaaa0099', 9, NULL, '2c9cab836a8af5d5016a8af6ece20000');
-INSERT INTO "tb_role_function" VALUES ('ff8080816aaf2ec3016aaf4edaaa009b', 7, NULL, '2c9cab836a8af5d5016a8af6ece20000');
-INSERT INTO "tb_role_function" VALUES ('ff8080816aaf2ec3016aaf4edaab009c', 10, NULL, '2c9cab836a8af5d5016a8af6ece20000');
-INSERT INTO "tb_role_function" VALUES ('ff8080816aaf2ec3016aaf4edaab009d', 11, NULL, '2c9cab836a8af5d5016a8af6ece20000');
-INSERT INTO "tb_role_function" VALUES ('297e0a7e6b6ef212016b6efb0885000b', 1, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_role_function" VALUES ('297e0a7e6b6ef212016b6efb0885000c', 2, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_role_function" VALUES ('297e0a7e6b6ef212016b6efb0886000d', 3, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_role_function" VALUES ('297e0a7e6b6ef212016b6efb0886000e', 5, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_role_function" VALUES ('297e0a7e6b6ef212016b6efb088b0014', 6, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_role_function" VALUES ('297e0a7e6b6ef212016b6efb088d001a', 4, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_role_function" VALUES ('297e0a7e6b6ef212016b6efb088f0023', 9, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_role_function" VALUES ('297e0a7e6b6ef212016b6efb08900025', 7, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_role_function" VALUES ('297e0a7e6b6ef212016b6efb08900026', 10, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_role_function" VALUES ('297e0a7e6b6ef212016b6efb08900027', 11, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_role_function" VALUES ('297e0a7e6b6ef212016b6efb0891002a', 12, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_role_function" VALUES ('297e0a7e6b6ef212016b6efb08910030', 17, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_role_function" VALUES ('297e0a7e6b6ef212016b6efb08930037', 18, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_role_function" VALUES ('297e0a7e6b6ef212016b6efb08930039', 8, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_role_function" VALUES ('297e0a7e6b6ef212016b6efb0893003a', 13, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_role_function" VALUES ('297e0a7e6b6ef212016b6efb0894003f', 14, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_role_function" VALUES ('297e0a7e6b6ef212016b6efb08940040', 15, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_role_function" VALUES ('297e0a7e6b6ef212016b6efb08960048', 16, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-
-INSERT INTO "tb_area" VALUES (1, '地区1', 1, '', 0, NULL);
-commit;
+-- INSERT INTO "tb_apiclient" VALUES ('200001', 'ROLE_THIRD_CONSUME,ROLE_THIRD_COMMON', 'oUw2NmA09ficiVWD4TUQLDOkPyzQa3VzbjjsW0B2qTk=', 'normal');
+-- INSERT INTO "tb_apiclient" VALUES ('100001', 'ROLE_THIRD_ADMIN', 'oUw2NmA09ficiVWD4TUQLDOkPyzQa3VzbjjsW0B2qTk=', 'normal');
+--
+-- INSERT INTO "tb_function" VALUES (1, NULL, 0, NULL, 'layui-icon-home', '#', '主页', 1, -1);
+-- INSERT INTO "tb_function" VALUES (2, NULL, 1, NULL, 'layui-icon-home', '/home/console', '控制台', 1, 1);
+-- INSERT INTO "tb_function" VALUES (3, NULL, 0, NULL, 'layui-icon-set', '#', '系统中心', 2, -1);
+-- INSERT INTO "tb_function" VALUES (5, NULL, 1, NULL, 'layui-icon-set', '/role/index', '角色管理', 2, 3);
+-- INSERT INTO "tb_function" VALUES (6, NULL, 1, NULL, 'layui-icon-set', '/operator/index', '操作员管理', 4, 3);
+-- INSERT INTO "tb_function" VALUES (4, NULL, 1, NULL, 'layui-icon-set', '/function/index', '功能维护', 1, 3);
+-- INSERT INTO "tb_function" VALUES (7, NULL, 0, NULL, 'layui-icon-release', '#', '商户中心', 4, -1);
+-- INSERT INTO "tb_function" VALUES (9, NULL, 1, NULL, '', '/operator/logs', '操作日志', 4, 3);
+-- INSERT INTO "tb_function" VALUES (10, NULL, 0, NULL, 'layui-icon-util', '#', '参数管理', 3, -1);
+-- INSERT INTO "tb_function" VALUES (11, NULL, 1, NULL, 'layui-icon-util', '/param/syspara', '全局参数配置', 1, 10);
+-- INSERT INTO "tb_function" VALUES (12, NULL, 1, NULL, 'layui-icon-util', '/param/businesspara', '业务参数配置', 2, 10);
+-- INSERT INTO "tb_function" VALUES (17, NULL, 1, NULL, 'layui-icon-util', '/param/apiclientpara', '应用参数配置', 3, 10);
+-- INSERT INTO "tb_function" VALUES (18, NULL, 1, NULL, 'layui-icon-util', '/param/paytype', '支付能力配置', 4, 10);
+-- INSERT INTO "tb_function" VALUES (8, NULL, 0, NULL, 'layui-icon-home', '#', '区域管理', 23, -1);
+-- INSERT INTO "tb_function" VALUES (13, NULL, 1, NULL, 'layui-icon-home', '/area/index', '地区管理', 1, 8);
+-- INSERT INTO "tb_function" VALUES (14, NULL, 0, NULL, 'layui-icon-app', '#', '设备管理', 8, -1);
+-- INSERT INTO "tb_function" VALUES (15, NULL, 1, NULL, 'layui-icon-app', '/device/index', '注册设备', 1, 14);
+-- INSERT INTO "tb_function" VALUES (16, NULL, 1, NULL, 'layui-icon-home', '/devicegroup/index', '设备组管理', 2, 14);
+-- INSERT INTO "tb_oper_role" VALUES ('2c9cab836a90185f016a901b005f001b', '402882816a8fe884016a8fe8c0530000', '2c9cab836a8af5d5016a8af6ece20000');
+-- INSERT INTO "tb_oper_role" VALUES ('ff8080816aaf2ec3016aaf30c1b60007', 'LOR2IwRkbOjp+sVG9KR2BpHZbwGKepS4', 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_oper_role" VALUES ('ff8080816ab96daf016ab9743dc60050', '2c9cab836a9666e0016a96694bbb0004', 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_operator" VALUES ('2c9cab836a9666e0016a96694bbb0004', NULL, '', '', '20190508', 'test1', 'test1', '$2a$10$lkfzdX.0ioX9FU2BmPzHz.tv2DTR8XvaZzA0vpkEYV5vx/IDtIsGy', 'oper', 'normal', 'male');
+-- INSERT INTO "tb_operator" VALUES ('402882816a8fe884016a8fe8c0530000', NULL, '', '', '20190507', 'test', '11112', '$2a$10$Xa/UKDQ/WkiKVQAyv5Hu4eiqt6HtwVK3YA0Glg1/y1uiEsXnG7ZeS', 'oper', 'normal', 'male');
+-- INSERT INTO "tb_operator" VALUES ('LOR2IwRkbOjp+sVG9KR2BpHZbwGKepS4', '20500101', '', '', '20190101', 'system', '系统管理员', '$2a$10$Ex9xp11.vCaD8D0a7ahiUOKqDij1TcCUBwRAmrqXeDvAkmzLibn4.', 'oper', 'normal', 'male');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb088a000f', 16, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb088b0010', 17, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb088b0011', 19, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb088b0012', 20, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb088b0013', 21, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb088c0015', 6, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb088c0016', 7, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb088c0017', 8, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb088d0018', 9, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb088d0019', 22, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb088e001b', 4, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb088e001c', 5, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb088e001d', 10, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb088e001e', 11, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb088e001f', 12, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb088f0020', 13, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb088f0021', 14, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb088f0022', 15, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb08900024', 24, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb08900028', 26, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb08900029', 27, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb0891002b', 28, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb0891002c', 29, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb0891002d', 30, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb0891002e', 32, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb0891002f', 33, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb08920031', 34, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb08920032', 35, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb08920033', 36, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb08920034', 37, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb08920035', 39, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb08920036', 40, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb08930038', 41, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaa80085', 16, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+-- INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaa80086', 17, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+-- INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaa90087', 19, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+-- INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaa90088', 20, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+-- INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaa90089', 21, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+-- INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaa9008b', 6, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+-- INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaa9008c', 7, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+-- INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaa9008d', 8, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+-- INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaa9008e', 9, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+-- INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaa9008f', 22, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+-- INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaa90091', 4, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+-- INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaaa0092', 5, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+-- INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaaa0093', 10, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+-- INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaaa0094', 11, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+-- INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaaa0095', 12, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+-- INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaaa0096', 13, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+-- INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaaa0097', 14, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+-- INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaaa0098', 15, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+-- INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaaa009a', 24, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+-- INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaab009e', 26, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+-- INSERT INTO "tb_permission" VALUES ('ff8080816aaf2ec3016aaf4edaac009f', 27, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb0893003b', 1, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb0893003c', 2, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb0894003d', 3, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb0894003e', 18, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb08950041', 23, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb08950042', 25, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb08950043', 31, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb08950044', 38, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb08950045', 42, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb08950046', 43, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb08960047', 44, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb08960049', 45, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb0896004a', 46, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb0897004b', 47, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb0897004c', 48, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_permission" VALUES ('297e0a7e6b6ef212016b6efb0897004d', 49, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_resource" VALUES (4, '1', 4, '添加功能', '/function/add');
+-- INSERT INTO "tb_resource" VALUES (5, '', 4, '添加父功能', '/function/loadadd');
+-- INSERT INTO "tb_resource" VALUES (6, '1', 6, '查询', '/operator/index');
+-- INSERT INTO "tb_resource" VALUES (7, '', 6, '添加查询', '/operator/load4add');
+-- INSERT INTO "tb_resource" VALUES (8, '', 6, '添加和修改', '/operator/add');
+-- INSERT INTO "tb_resource" VALUES (9, '', 6, '重置密码', '/operator/resetpwd');
+-- INSERT INTO "tb_resource" VALUES (10, '', 4, '查询', '/function/index');
+-- INSERT INTO "tb_resource" VALUES (11, '', 4, '删除', '/function/delfunc');
+-- INSERT INTO "tb_resource" VALUES (12, '', 4, '添加子功能', '/function/loadsubadd');
+-- INSERT INTO "tb_resource" VALUES (13, '', 4, '维护资源', '/function/loadres');
+-- INSERT INTO "tb_resource" VALUES (14, '', 4, '添加资源', '/function/addres');
+-- INSERT INTO "tb_resource" VALUES (15, '', 4, '删除资源', '/function/delres');
+-- INSERT INTO "tb_resource" VALUES (16, '', 5, '查询', '/role/index');
+-- INSERT INTO "tb_resource" VALUES (17, '', 5, '添加', '/role/add');
+-- INSERT INTO "tb_resource" VALUES (19, '', 5, '分配功能', '/role/addfunc');
+-- INSERT INTO "tb_resource" VALUES (20, '', 5, '加载分配功能', '/role/loadfunc');
+-- INSERT INTO "tb_resource" VALUES (21, '', 5, '删除角色', '/role/del');
+-- INSERT INTO "tb_resource" VALUES (22, '', 6, '修改状态', '/operator/updatestate');
+-- INSERT INTO "tb_resource" VALUES (24, '', 9, '查询', '/operator/logslist');
+-- INSERT INTO "tb_resource" VALUES (26, '', 11, '修改', '/param/sysparaupdate');
+-- INSERT INTO "tb_resource" VALUES (27, '', 11, '查询', '/param/syspara');
+-- INSERT INTO "tb_resource" VALUES (28, '', 12, '查询', '/param/businesspara');
+-- INSERT INTO "tb_resource" VALUES (29, '', 12, '删除', '/param/deletebusinesspara');
+-- INSERT INTO "tb_resource" VALUES (30, '', 12, '修改', '/param/businessparaupdate');
+-- INSERT INTO "tb_resource" VALUES (32, '', 12, '新增', '/param/addbusinesspara');
+-- INSERT INTO "tb_resource" VALUES (33, '', 12, '新增跳转', '/param/load4addbuspara');
+-- INSERT INTO "tb_resource" VALUES (34, '', 17, '查询', '/param/apiclientpara');
+-- INSERT INTO "tb_resource" VALUES (35, '', 17, '新增修改跳转', '/param/load4addapiclient');
+-- INSERT INTO "tb_resource" VALUES (36, '', 17, '修改状态', '/param/updateapiclientstate');
+-- INSERT INTO "tb_resource" VALUES (37, '', 17, '删除', '/param/deleteapiclient');
+-- INSERT INTO "tb_resource" VALUES (39, '', 17, '修改', '/param/updateapiclientpara');
+-- INSERT INTO "tb_resource" VALUES (40, '', 17, '新增', '/param/addapiclientpara');
+-- INSERT INTO "tb_resource" VALUES (41, '', 18, '查询', '/param/paytype');
+-- INSERT INTO "tb_resource" VALUES (1, '', 13, '查询', '/area/index');
+-- INSERT INTO "tb_resource" VALUES (2, '', 13, '添加页面', '/area/loadadd');
+-- INSERT INTO "tb_resource" VALUES (3, '', 13, '添加', '/area/add');
+-- INSERT INTO "tb_resource" VALUES (18, '', 13, '删除', '/area/delete');
+-- INSERT INTO "tb_resource" VALUES (23, '', 15, '查询', '/device/index');
+-- INSERT INTO "tb_resource" VALUES (25, '', 15, '添加页面', '/device/loadadd');
+-- INSERT INTO "tb_resource" VALUES (31, '', 15, '添加', '/device/add');
+-- INSERT INTO "tb_resource" VALUES (38, '', 15, '修改状态', '/device/updatestate');
+-- INSERT INTO "tb_resource" VALUES (42, '', 15, '导入页面', '/device/loadimport');
+-- INSERT INTO "tb_resource" VALUES (43, '', 15, '下载模板', '/device/download');
+-- INSERT INTO "tb_resource" VALUES (44, '', 15, '导入', '/device/import');
+-- INSERT INTO "tb_resource" VALUES (45, '', 16, '查询', '/devicegroup/listDevice');
+-- INSERT INTO "tb_resource" VALUES (46, '', 16, '展示树', '/devicegroup/listTree');
+-- INSERT INTO "tb_resource" VALUES (47, '', 16, '显示添加', '/devicegroup/loadadd');
+-- INSERT INTO "tb_resource" VALUES (48, '', 16, '添加', '/devicegroup/add');
+-- INSERT INTO "tb_resource" VALUES (49, '', 16, '删除', '/devicegroup/delete');
+-- INSERT INTO "tb_role" VALUES ('d1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '20190101000000', 0, '', 'ROLE_ADMIN', '超级管理员', '超级管理员');
+-- INSERT INTO "tb_role" VALUES ('2c9cab836a8af5d5016a8af6ece20000', '20190506102639', 1, '', 'ROLE_ADMIN', '系统管理员', '系统管理员');
+-- INSERT INTO "tb_role_function" VALUES ('ff8080816aaf2ec3016aaf4edaa80081', 1, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+-- INSERT INTO "tb_role_function" VALUES ('ff8080816aaf2ec3016aaf4edaa80082', 2, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+-- INSERT INTO "tb_role_function" VALUES ('ff8080816aaf2ec3016aaf4edaa80083', 3, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+-- INSERT INTO "tb_role_function" VALUES ('ff8080816aaf2ec3016aaf4edaa80084', 5, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+-- INSERT INTO "tb_role_function" VALUES ('ff8080816aaf2ec3016aaf4edaa9008a', 6, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+-- INSERT INTO "tb_role_function" VALUES ('ff8080816aaf2ec3016aaf4edaa90090', 4, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+-- INSERT INTO "tb_role_function" VALUES ('ff8080816aaf2ec3016aaf4edaaa0099', 9, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+-- INSERT INTO "tb_role_function" VALUES ('ff8080816aaf2ec3016aaf4edaaa009b', 7, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+-- INSERT INTO "tb_role_function" VALUES ('ff8080816aaf2ec3016aaf4edaab009c', 10, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+-- INSERT INTO "tb_role_function" VALUES ('ff8080816aaf2ec3016aaf4edaab009d', 11, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+-- INSERT INTO "tb_role_function" VALUES ('297e0a7e6b6ef212016b6efb0885000b', 1, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_role_function" VALUES ('297e0a7e6b6ef212016b6efb0885000c', 2, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_role_function" VALUES ('297e0a7e6b6ef212016b6efb0886000d', 3, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_role_function" VALUES ('297e0a7e6b6ef212016b6efb0886000e', 5, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_role_function" VALUES ('297e0a7e6b6ef212016b6efb088b0014', 6, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_role_function" VALUES ('297e0a7e6b6ef212016b6efb088d001a', 4, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_role_function" VALUES ('297e0a7e6b6ef212016b6efb088f0023', 9, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_role_function" VALUES ('297e0a7e6b6ef212016b6efb08900025', 7, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_role_function" VALUES ('297e0a7e6b6ef212016b6efb08900026', 10, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_role_function" VALUES ('297e0a7e6b6ef212016b6efb08900027', 11, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_role_function" VALUES ('297e0a7e6b6ef212016b6efb0891002a', 12, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_role_function" VALUES ('297e0a7e6b6ef212016b6efb08910030', 17, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_role_function" VALUES ('297e0a7e6b6ef212016b6efb08930037', 18, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_role_function" VALUES ('297e0a7e6b6ef212016b6efb08930039', 8, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_role_function" VALUES ('297e0a7e6b6ef212016b6efb0893003a', 13, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_role_function" VALUES ('297e0a7e6b6ef212016b6efb0894003f', 14, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_role_function" VALUES ('297e0a7e6b6ef212016b6efb08940040', 15, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+-- INSERT INTO "tb_role_function" VALUES ('297e0a7e6b6ef212016b6efb08960048', 16, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+--
+-- INSERT INTO "tb_area" VALUES (1, '地区1', 1, '', 0, NULL);
+-- commit;
\ No newline at end of file
diff --git a/src/main/resources/db/migration/V1.1__init_paytype.sql b/src/main/resources/db/migration/V1.1__init_paytype.sql
index e618e16..93093a2 100644
--- a/src/main/resources/db/migration/V1.1__init_paytype.sql
+++ b/src/main/resources/db/migration/V1.1__init_paytype.sql
@@ -1,7 +1,7 @@
--- 支付方式
---Insert into TB_PAYTYPE (PAYTYPE,DPS_ENABLE,ENABLE,REVERSE_ENABLE) values ('yktpay','no','yes','yes');
-
-Insert into TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE) values ('yktpay','appid',null,'100005');
-Insert into TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE) values ('yktpay','appkey',null,'adc4ac6822fd462780f878b86cb94688');
-Insert into TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE) values ('yktpay','orderurl',null,'http://172.28.201.101:9116/epayapi/services/thirdparty/common/pay');
-Insert into TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE) values ('yktpay','reverseurl',null,'http://172.28.201.101:9116/epayapi/services/thirdparty/common/payreverse');
+-- -- 支付方式
+-- --Insert into TB_PAYTYPE (PAYTYPE,DPS_ENABLE,ENABLE,REVERSE_ENABLE) values ('yktpay','no','yes','yes');
+--
+-- Insert into TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE) values ('yktpay','appid',null,'100005');
+-- Insert into TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE) values ('yktpay','appkey',null,'adc4ac6822fd462780f878b86cb94688');
+-- Insert into TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE) values ('yktpay','orderurl',null,'http://172.28.201.101:9116/epayapi/services/thirdparty/common/pay');
+-- Insert into TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE) values ('yktpay','reverseurl',null,'http://172.28.201.101:9116/epayapi/services/thirdparty/common/payreverse');
diff --git a/src/main/resources/db/migration/V1.2__init_data.sql b/src/main/resources/db/migration/V1.2__init_data.sql
index 37ee13c..8cb7ed5 100644
--- a/src/main/resources/db/migration/V1.2__init_data.sql
+++ b/src/main/resources/db/migration/V1.2__init_data.sql
@@ -1,64 +1,64 @@
--- 资产类
-Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('1001','库存现金',1,1,null,1,1,null,'y');
-Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('1002','银行存款',1,1,null,1,1,null,'y');
-
-Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('1121','应收票据',1,1,null,1,0,null,'y');
-Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('112101','支票',1,1,'1121',2,1,null,'y');
-Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('112102','经费本',1,1,'1121',2,1,null,'y');
-
-Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('1122','应收账款',1,1,null,1,0,null,'y');
-Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('112201','现金充值款',1,1,'1122',2,1,null,'y');
-
-Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('112210','支付宝充值款',1,1,'1122',2,1,null,'y');
-Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('112211','微信充值款',1,1,'1122',2,1,null,'y');
-Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('112212','银联充值款',1,1,'1122',2,1,null,'y');
-Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('112213','一卡通充值款',1,1,'1122',2,1,null,'y');
-
-Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('112230','支付宝支付款',1,1,'1122',2,1,null,'y');
-Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('112231','微信支付款',1,1,'1122',2,1,null,'y');
-Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('112232','银联支付款',1,1,'1122',2,1,null,'y');
-Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('112233','一卡通支付款',1,1,'1122',2,1,null,'y');
-
--- 负债类
-Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('2001','用户押金',2,2,null,1,1,null,'y');
-Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('2004','商户营业款',2,2,null,1,1,null,'y');
-
-Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('2202','应付账款',2,2,null,1,0,null,'y');
-Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('220201','个人存款',2,2,'2202',2,1,null,'y');
-Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('220211','销户退款',2,2,'2202',2,1,null,'y');
-
--- 损益类
-Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('6021','手续费收入',6,2,null,1,0,null,'y');
-Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('602101','支付宝充值手续费',6,2,'6021',2,1,null,'y');
-Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('602102','微信充值手续费',6,2,'6021',2,1,null,'y');
-Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('602103','银联充值手续费',6,2,'6021',2,1,null,'y');
-
-Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('6601','销售费用',6,2,null,1,0,null,'y');
-Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('660101','折扣优惠款',6,2,'6601',2,1,null,'y');
-Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('660102','积分抵扣款',6,2,'6601',2,1,null,'y');
-
-Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('6602','管理费收入',6,2,null,1,1,null,'y');
--- -- oracle --
--- update TB_SUBJECT set opendate = to_char(sysdate,'yyyyMMdd');
-update TB_SUBJECT set opendate = to_number(to_char(CURRENT_TIMESTAMP,'yyyymmdd'),'99999999');
-commit;
-
-
- -- oracle --
-/*
-insert into TB_SETTLECTL(BOOKSETNO,PERIODYEAR,PERIODMONTH,STATDATE,SETTLEDATE,STATUS,updtime)
-values (1,to_number(to_char(sysdate,'yyyy')),to_number(to_char(sysdate,'MM')),to_number(to_char(sysdate,'yyyyMMdd')),to_number(to_char(sysdate,'yyyyMMdd')),0,to_char(sysdate,'yyyyMMddhh24miss'));
-
-insert into TB_VOUCHERNOCTL(VOUCHERTYPE,PERIODMONTH,VOUCHERNO)
-values (1,to_number(to_char(sysdate,'MM')),0);
-
-commit;
-*/
-
--- --pg--
-insert into TB_SETTLECTL(BOOKSETNO,PERIODYEAR,PERIODMONTH,STATDATE,SETTLEDATE,STATUS,updtime)
-values (1,to_number(to_char(CURRENT_TIMESTAMP,'yyyy'),'9999'),to_number(to_char(CURRENT_TIMESTAMP,'MM'),'99'),to_number(to_char(CURRENT_TIMESTAMP,'yyyyMMdd'),'99999999'),to_number(to_char(CURRENT_TIMESTAMP,'yyyyMMdd'),'99999999'),0,to_char(CURRENT_TIMESTAMP,'yyyyMMddhh24miss'));
-
-insert into TB_VOUCHERNOCTL(VOUCHERTYPE,PERIODMONTH,VOUCHERNO)
-values (1,to_number(to_char(CURRENT_TIMESTAMP,'MM'),'99'),0);
-commit;
+-- -- 资产类
+-- Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('1001','库存现金',1,1,null,1,1,null,'y');
+-- Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('1002','银行存款',1,1,null,1,1,null,'y');
+--
+-- Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('1121','应收票据',1,1,null,1,0,null,'y');
+-- Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('112101','支票',1,1,'1121',2,1,null,'y');
+-- Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('112102','经费本',1,1,'1121',2,1,null,'y');
+--
+-- Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('1122','应收账款',1,1,null,1,0,null,'y');
+-- Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('112201','现金充值款',1,1,'1122',2,1,null,'y');
+--
+-- Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('112210','支付宝充值款',1,1,'1122',2,1,null,'y');
+-- Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('112211','微信充值款',1,1,'1122',2,1,null,'y');
+-- Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('112212','银联充值款',1,1,'1122',2,1,null,'y');
+-- Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('112213','一卡通充值款',1,1,'1122',2,1,null,'y');
+--
+-- Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('112230','支付宝支付款',1,1,'1122',2,1,null,'y');
+-- Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('112231','微信支付款',1,1,'1122',2,1,null,'y');
+-- Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('112232','银联支付款',1,1,'1122',2,1,null,'y');
+-- Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('112233','一卡通支付款',1,1,'1122',2,1,null,'y');
+--
+-- -- 负债类
+-- Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('2001','用户押金',2,2,null,1,1,null,'y');
+-- Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('2004','商户营业款',2,2,null,1,1,null,'y');
+--
+-- Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('2202','应付账款',2,2,null,1,0,null,'y');
+-- Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('220201','个人存款',2,2,'2202',2,1,null,'y');
+-- Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('220211','销户退款',2,2,'2202',2,1,null,'y');
+--
+-- -- 损益类
+-- Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('6021','手续费收入',6,2,null,1,0,null,'y');
+-- Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('602101','支付宝充值手续费',6,2,'6021',2,1,null,'y');
+-- Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('602102','微信充值手续费',6,2,'6021',2,1,null,'y');
+-- Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('602103','银联充值手续费',6,2,'6021',2,1,null,'y');
+--
+-- Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('6601','销售费用',6,2,null,1,0,null,'y');
+-- Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('660101','折扣优惠款',6,2,'6601',2,1,null,'y');
+-- Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('660102','积分抵扣款',6,2,'6601',2,1,null,'y');
+--
+-- Insert into TB_SUBJECT (SUBJNO,SUBJNAME,SUBJTYPE,BALFLAG,FSUBJNO,SUBJLEVEL,ENDFLAG,OPENDATE,DISPLAYFLAG) values ('6602','管理费收入',6,2,null,1,1,null,'y');
+-- -- -- oracle --
+-- -- update TB_SUBJECT set opendate = to_char(sysdate,'yyyyMMdd');
+-- update TB_SUBJECT set opendate = to_number(to_char(CURRENT_TIMESTAMP,'yyyymmdd'),'99999999');
+-- commit;
+--
+--
+--  -- oracle --
+-- /*
+-- insert into TB_SETTLECTL(BOOKSETNO,PERIODYEAR,PERIODMONTH,STATDATE,SETTLEDATE,STATUS,updtime)
+-- values (1,to_number(to_char(sysdate,'yyyy')),to_number(to_char(sysdate,'MM')),to_number(to_char(sysdate,'yyyyMMdd')),to_number(to_char(sysdate,'yyyyMMdd')),0,to_char(sysdate,'yyyyMMddhh24miss'));
+--
+-- insert into TB_VOUCHERNOCTL(VOUCHERTYPE,PERIODMONTH,VOUCHERNO)
+-- values (1,to_number(to_char(sysdate,'MM')),0);
+--
+-- commit;
+-- */
+--
+-- -- --pg--
+-- insert into TB_SETTLECTL(BOOKSETNO,PERIODYEAR,PERIODMONTH,STATDATE,SETTLEDATE,STATUS,updtime)
+-- values (1,to_number(to_char(CURRENT_TIMESTAMP,'yyyy'),'9999'),to_number(to_char(CURRENT_TIMESTAMP,'MM'),'99'),to_number(to_char(CURRENT_TIMESTAMP,'yyyyMMdd'),'99999999'),to_number(to_char(CURRENT_TIMESTAMP,'yyyyMMdd'),'99999999'),0,to_char(CURRENT_TIMESTAMP,'yyyyMMddhh24miss'));
+--
+-- insert into TB_VOUCHERNOCTL(VOUCHERTYPE,PERIODMONTH,VOUCHERNO)
+-- values (1,to_number(to_char(CURRENT_TIMESTAMP,'MM'),'99'),0);
+-- commit;
diff --git a/src/main/resources/static/custom/module/admin.js b/src/main/resources/static/custom/module/admin.js
index e9b34ef..e15cfdf 100755
--- a/src/main/resources/static/custom/module/admin.js
+++ b/src/main/resources/static/custom/module/admin.js
@@ -1,6 +1,7 @@
 layui.define(['layer'], function (exports) {
     var layer = layui.layer;
     var popupRightIndex, popupCenterIndex, popupCenterParam;
+    var baseUrl = window.location.pathname;
 
     var admin = {
         isRefresh: false,
@@ -228,6 +229,19 @@
                 default:
                     return str;
             }
+        },
+        errorBack: function (err) {
+            layer.closeAll('loading');
+            if (403 == err.status) {
+                layer.msg("无资源权限！", {icon: 2, time: 1500});
+                return;
+            }
+            if (200 == err.status) {
+                layer.msg("请求异常，请刷新页面重新操作", {icon: 2, time: 1500});
+                return;
+            } else {
+                layer.msg("请求服务器失败！", {icon: 2});
+            }
         }
     };
 
@@ -248,7 +262,7 @@
         },
         // 设置主题
         theme: function () {
-            admin.popupRight('home/theme');
+            admin.popupRight(baseUrl+'home/theme');
         },
         // 全屏
         fullScreen: function (e) {
@@ -304,6 +318,29 @@
         // 关闭所有弹窗
         closeDialog: function () {
             layer.closeAll('page');
+        },
+        //刷新字典
+        refreshDict: function (){
+            layer.confirm('确定要刷新数据字典吗?', {
+                    btn: ['确定', '取消']
+                }, function (index, layero) {
+                    layer.closeAll('dialog');  //加入这个信息点击确定 会关闭这个消息框
+                    admin.dgo(baseUrl+"dictrefresh", {}, function (data) {
+                        if (data.code == 200) {
+                            layer.msg("刷新数据字典成功！", {icon: 1, time: 1000});
+                            DictPoolToolkit().initAll(baseUrl+"dictpool");
+                        } else if (data.code == 401) {
+                            layer.msg(data.msg, {icon: 2, time: 1500}, function () {
+                                location.replace('/login');
+                            }, 1000);
+                            return;
+                        } else {
+                            layer.msg(data.msg, {icon: 2, time: 1500});
+                        }
+                    }, function () {
+                        layer.msg("数据字典刷新失败，访问服务器失败！", {icon: 2, time: 1500});
+                    });
+                });
         }
     };
 
diff --git a/src/main/resources/static/custom/module/index.js b/src/main/resources/static/custom/module/index.js
index 6b49296..df14f67 100755
--- a/src/main/resources/static/custom/module/index.js
+++ b/src/main/resources/static/custom/module/index.js
@@ -2,6 +2,7 @@
     var admin = layui.admin;
     var layer = layui.layer;
     var element = layui.element;
+    var baseUrl = window.location.pathname;
 
     var index = {
         pageTabs: true,  // 是否开启多标签
@@ -11,10 +12,15 @@
             $('.layui-layout-admin  .layui-nav a[lay-href]').each(function () {
                 var menuName = $(this).text();
                 var menuPath = $(this).attr('lay-href');
-                console.log(menuPath,menuName);
                 if ('javascript:;' != menuPath && '' != menuPath) {
                     var key = menuPath.replace(/[?:=&/]/g, '_');
                     $(this).attr('href', '#!' + key);
+                    if (menuPath.startsWith("/")) {
+                        menuPath = baseUrl + menuPath.substring(1);
+                    } else {
+                        menuPath = baseUrl + menuPath;
+                    }
+                    console.log(menuPath);
                     Q.reg(key, function () {
                         index.loadView({
                             menuId: key,
@@ -29,7 +35,7 @@
 
             // 主页
             Q.init({
-                index: 'home_console'
+                index: '_home_console'
             });
             // tab选项卡切换监听
             element.on('tab(admin-pagetabs)', function (data) {
@@ -135,7 +141,7 @@
             // 退出登录点击事件
             $('#btnLogout').click(function () {
                 layer.confirm('确定退出登录？', function () {
-                    location.replace('logout');
+                    location.replace(baseUrl+'logout');
                 });
             });
         }
diff --git a/src/main/resources/static/custom/module/treeSelect/treeSelect.js b/src/main/resources/static/custom/module/treeSelect/treeSelect.js
new file mode 100755
index 0000000..5e20c18
--- /dev/null
+++ b/src/main/resources/static/custom/module/treeSelect/treeSelect.js
@@ -0,0 +1,597 @@
+
+layui.define(['form', 'jquery'], function (exports) { //提示：模块也可以依赖其它模块，如：layui.define('layer', callback);
+  var jQuery = layui.jquery,
+      $ = jQuery,
+      form = layui.form,
+      _MOD = 'treeSelect',
+      trss = {},
+      TreeSelect = function () {
+        this.v = '1.0.5';
+      };
+
+
+
+/*
+ * JQuery zTree core v3.5.37
+ * http://treejs.cn/
+ *
+ * Copyright (c) 2010 Hunter.z
+ *
+ * Licensed same as jquery - MIT License
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ * email: hunter.z@263.net
+ * Date: 2018-08-21
+ */
+(function(r){var J,K,L,M,N,O,v,t={},w={},x={},P={treeId:"",treeObj:null,view:{addDiyDom:null,autoCancelSelected:!0,dblClickExpand:!0,expandSpeed:"fast",fontCss:{},nameIsHTML:!1,selectedMulti:!0,showIcon:!0,showLine:!0,showTitle:!0,txtSelectedEnable:!1},data:{key:{isParent:"isParent",children:"children",name:"name",title:"",url:"url",icon:"icon"},simpleData:{enable:!1,idKey:"id",pIdKey:"pId",rootPId:null},keep:{parent:!1,leaf:!1}},async:{enable:!1,contentType:"application/x-www-form-urlencoded",type:"post",
+dataType:"text",headers:{},xhrFields:{},url:"",autoParam:[],otherParam:[],dataFilter:null},callback:{beforeAsync:null,beforeClick:null,beforeDblClick:null,beforeRightClick:null,beforeMouseDown:null,beforeMouseUp:null,beforeExpand:null,beforeCollapse:null,beforeRemove:null,onAsyncError:null,onAsyncSuccess:null,onNodeCreated:null,onClick:null,onDblClick:null,onRightClick:null,onMouseDown:null,onMouseUp:null,onExpand:null,onCollapse:null,onRemove:null}},y=[function(a){var b=a.treeObj,c=g.event;b.bind(c.NODECREATED,
+function(b,c,i){h.apply(a.callback.onNodeCreated,[b,c,i])});b.bind(c.CLICK,function(b,c,i,e,k){h.apply(a.callback.onClick,[c,i,e,k])});b.bind(c.EXPAND,function(b,c,i){h.apply(a.callback.onExpand,[b,c,i])});b.bind(c.COLLAPSE,function(b,c,i){h.apply(a.callback.onCollapse,[b,c,i])});b.bind(c.ASYNC_SUCCESS,function(b,c,i,e){h.apply(a.callback.onAsyncSuccess,[b,c,i,e])});b.bind(c.ASYNC_ERROR,function(b,c,i,e,k,g){h.apply(a.callback.onAsyncError,[b,c,i,e,k,g])});b.bind(c.REMOVE,function(b,c,i){h.apply(a.callback.onRemove,
+[b,c,i])});b.bind(c.SELECTED,function(b,c,i){h.apply(a.callback.onSelected,[c,i])});b.bind(c.UNSELECTED,function(b,c,i){h.apply(a.callback.onUnSelected,[c,i])})}],z=[function(a){var b=g.event;a.treeObj.unbind(b.NODECREATED).unbind(b.CLICK).unbind(b.EXPAND).unbind(b.COLLAPSE).unbind(b.ASYNC_SUCCESS).unbind(b.ASYNC_ERROR).unbind(b.REMOVE).unbind(b.SELECTED).unbind(b.UNSELECTED)}],A=[function(a){var b=e.getCache(a);b||(b={},e.setCache(a,b));b.nodes=[];b.doms=[]}],B=[function(a,b,c,d,f,i){if(c){var m=
+e.getRoot(a),k=e.nodeChildren(a,c);c.level=b;c.tId=a.treeId+"_"+ ++m.zId;c.parentTId=d?d.tId:null;c.open=typeof c.open=="string"?h.eqs(c.open,"true"):!!c.open;b=e.nodeIsParent(a,c);h.isArray(k)&&!(b===!1||typeof b=="string"&&h.eqs(b,"false"))?(e.nodeIsParent(a,c,!0),c.zAsync=!0):(b=e.nodeIsParent(a,c,b),c.open=b&&!a.async.enable?c.open:!1,c.zAsync=!b);c.isFirstNode=f;c.isLastNode=i;c.getParentNode=function(){return e.getNodeCache(a,c.parentTId)};c.getPreNode=function(){return e.getPreNode(a,c)};c.getNextNode=
+function(){return e.getNextNode(a,c)};c.getIndex=function(){return e.getNodeIndex(a,c)};c.getPath=function(){return e.getNodePath(a,c)};c.isAjaxing=!1;e.fixPIdKeyValue(a,c)}}],u=[function(a){var b=a.target,c=e.getSetting(a.data.treeId),d="",f=null,i="",m="",k=null,j=null,o=null;if(h.eqs(a.type,"mousedown"))m="mousedown";else if(h.eqs(a.type,"mouseup"))m="mouseup";else if(h.eqs(a.type,"contextmenu"))m="contextmenu";else if(h.eqs(a.type,"click"))if(h.eqs(b.tagName,"span")&&b.getAttribute("treeNode"+
+g.id.SWITCH)!==null)d=h.getNodeMainDom(b).id,i="switchNode";else{if(o=h.getMDom(c,b,[{tagName:"a",attrName:"treeNode"+g.id.A}]))d=h.getNodeMainDom(o).id,i="clickNode"}else if(h.eqs(a.type,"dblclick")&&(m="dblclick",o=h.getMDom(c,b,[{tagName:"a",attrName:"treeNode"+g.id.A}])))d=h.getNodeMainDom(o).id,i="switchNode";if(m.length>0&&d.length==0&&(o=h.getMDom(c,b,[{tagName:"a",attrName:"treeNode"+g.id.A}])))d=h.getNodeMainDom(o).id;if(d.length>0)switch(f=e.getNodeCache(c,d),i){case "switchNode":e.nodeIsParent(c,
+f)?h.eqs(a.type,"click")||h.eqs(a.type,"dblclick")&&h.apply(c.view.dblClickExpand,[c.treeId,f],c.view.dblClickExpand)?k=J:i="":i="";break;case "clickNode":k=K}switch(m){case "mousedown":j=L;break;case "mouseup":j=M;break;case "dblclick":j=N;break;case "contextmenu":j=O}return{stop:!1,node:f,nodeEventType:i,nodeEventCallback:k,treeEventType:m,treeEventCallback:j}}],C=[function(a){var b=e.getRoot(a);b||(b={},e.setRoot(a,b));e.nodeChildren(a,b,[]);b.expandTriggerFlag=!1;b.curSelectedList=[];b.noSelection=
+!0;b.createdNodes=[];b.zId=0;b._ver=(new Date).getTime()}],D=[],E=[],F=[],G=[],H=[],e={addNodeCache:function(a,b){e.getCache(a).nodes[e.getNodeCacheId(b.tId)]=b},getNodeCacheId:function(a){return a.substring(a.lastIndexOf("_")+1)},addAfterA:function(a){E.push(a)},addBeforeA:function(a){D.push(a)},addInnerAfterA:function(a){G.push(a)},addInnerBeforeA:function(a){F.push(a)},addInitBind:function(a){y.push(a)},addInitUnBind:function(a){z.push(a)},addInitCache:function(a){A.push(a)},addInitNode:function(a){B.push(a)},
+addInitProxy:function(a,b){b?u.splice(0,0,a):u.push(a)},addInitRoot:function(a){C.push(a)},addNodesData:function(a,b,c,d){var f=e.nodeChildren(a,b);f?c>=f.length&&(c=-1):(f=e.nodeChildren(a,b,[]),c=-1);if(f.length>0&&c===0)f[0].isFirstNode=!1,j.setNodeLineIcos(a,f[0]);else if(f.length>0&&c<0)f[f.length-1].isLastNode=!1,j.setNodeLineIcos(a,f[f.length-1]);e.nodeIsParent(a,b,!0);c<0?e.nodeChildren(a,b,f.concat(d)):(a=[c,0].concat(d),f.splice.apply(f,a))},addSelectedNode:function(a,b){var c=e.getRoot(a);
+e.isSelectedNode(a,b)||c.curSelectedList.push(b)},addCreatedNode:function(a,b){(a.callback.onNodeCreated||a.view.addDiyDom)&&e.getRoot(a).createdNodes.push(b)},addZTreeTools:function(a){H.push(a)},exSetting:function(a){r.extend(!0,P,a)},fixPIdKeyValue:function(a,b){a.data.simpleData.enable&&(b[a.data.simpleData.pIdKey]=b.parentTId?b.getParentNode()[a.data.simpleData.idKey]:a.data.simpleData.rootPId)},getAfterA:function(a,b,c){for(var d=0,e=E.length;d<e;d++)E[d].apply(this,arguments)},getBeforeA:function(a,
+b,c){for(var d=0,e=D.length;d<e;d++)D[d].apply(this,arguments)},getInnerAfterA:function(a,b,c){for(var d=0,e=G.length;d<e;d++)G[d].apply(this,arguments)},getInnerBeforeA:function(a,b,c){for(var d=0,e=F.length;d<e;d++)F[d].apply(this,arguments)},getCache:function(a){return x[a.treeId]},getNodeIndex:function(a,b){if(!b)return null;for(var c=b.parentTId?b.getParentNode():e.getRoot(a),c=e.nodeChildren(a,c),d=0,f=c.length-1;d<=f;d++)if(c[d]===b)return d;return-1},getNextNode:function(a,b){if(!b)return null;
+for(var c=b.parentTId?b.getParentNode():e.getRoot(a),c=e.nodeChildren(a,c),d=0,f=c.length-1;d<=f;d++)if(c[d]===b)return d==f?null:c[d+1];return null},getNodeByParam:function(a,b,c,d){if(!b||!c)return null;for(var f=0,i=b.length;f<i;f++){var m=b[f];if(m[c]==d)return b[f];m=e.nodeChildren(a,m);if(m=e.getNodeByParam(a,m,c,d))return m}return null},getNodeCache:function(a,b){if(!b)return null;var c=x[a.treeId].nodes[e.getNodeCacheId(b)];return c?c:null},getNodePath:function(a,b){if(!b)return null;var c;
+(c=b.parentTId?b.getParentNode().getPath():[])&&c.push(b);return c},getNodes:function(a){return e.nodeChildren(a,e.getRoot(a))},getNodesByParam:function(a,b,c,d){if(!b||!c)return[];for(var f=[],i=0,m=b.length;i<m;i++){var k=b[i];k[c]==d&&f.push(k);k=e.nodeChildren(a,k);f=f.concat(e.getNodesByParam(a,k,c,d))}return f},getNodesByParamFuzzy:function(a,b,c,d){if(!b||!c)return[];for(var f=[],d=d.toLowerCase(),i=0,m=b.length;i<m;i++){var k=b[i];typeof k[c]=="string"&&b[i][c].toLowerCase().indexOf(d)>-1&&
+f.push(k);k=e.nodeChildren(a,k);f=f.concat(e.getNodesByParamFuzzy(a,k,c,d))}return f},getNodesByFilter:function(a,b,c,d,f){if(!b)return d?null:[];for(var i=d?null:[],m=0,k=b.length;m<k;m++){var g=b[m];if(h.apply(c,[g,f],!1)){if(d)return g;i.push(g)}g=e.nodeChildren(a,g);g=e.getNodesByFilter(a,g,c,d,f);if(d&&g)return g;i=d?g:i.concat(g)}return i},getPreNode:function(a,b){if(!b)return null;for(var c=b.parentTId?b.getParentNode():e.getRoot(a),c=e.nodeChildren(a,c),d=0,f=c.length;d<f;d++)if(c[d]===b)return d==
+0?null:c[d-1];return null},getRoot:function(a){return a?w[a.treeId]:null},getRoots:function(){return w},getSetting:function(a){return t[a]},getSettings:function(){return t},getZTreeTools:function(a){return(a=this.getRoot(this.getSetting(a)))?a.treeTools:null},initCache:function(a){for(var b=0,c=A.length;b<c;b++)A[b].apply(this,arguments)},initNode:function(a,b,c,d,e,i){for(var m=0,g=B.length;m<g;m++)B[m].apply(this,arguments)},initRoot:function(a){for(var b=0,c=C.length;b<c;b++)C[b].apply(this,arguments)},
+isSelectedNode:function(a,b){for(var c=e.getRoot(a),d=0,f=c.curSelectedList.length;d<f;d++)if(b===c.curSelectedList[d])return!0;return!1},nodeChildren:function(a,b,c){if(!b)return null;a=a.data.key.children;typeof c!=="undefined"&&(b[a]=c);return b[a]},nodeIsParent:function(a,b,c){if(!b)return!1;a=a.data.key.isParent;typeof c!=="undefined"&&(typeof c==="string"&&(c=h.eqs(c,"true")),b[a]=!!c);return b[a]},nodeName:function(a,b,c){a=a.data.key.name;typeof c!=="undefined"&&(b[a]=c);return""+b[a]},nodeTitle:function(a,
+b){return""+b[a.data.key.title===""?a.data.key.name:a.data.key.title]},removeNodeCache:function(a,b){var c=e.nodeChildren(a,b);if(c)for(var d=0,f=c.length;d<f;d++)e.removeNodeCache(a,c[d]);e.getCache(a).nodes[e.getNodeCacheId(b.tId)]=null},removeSelectedNode:function(a,b){for(var c=e.getRoot(a),d=0,f=c.curSelectedList.length;d<f;d++)if(b===c.curSelectedList[d]||!e.getNodeCache(a,c.curSelectedList[d].tId))c.curSelectedList.splice(d,1),a.treeObj.trigger(g.event.UNSELECTED,[a.treeId,b]),d--,f--},setCache:function(a,
+b){x[a.treeId]=b},setRoot:function(a,b){w[a.treeId]=b},setZTreeTools:function(a,b){for(var c=0,d=H.length;c<d;c++)H[c].apply(this,arguments)},transformToArrayFormat:function(a,b){function c(b){d.push(b);(b=e.nodeChildren(a,b))&&(d=d.concat(e.transformToArrayFormat(a,b)))}if(!b)return[];var d=[];if(h.isArray(b))for(var f=0,i=b.length;f<i;f++)c(b[f]);else c(b);return d},transformTozTreeFormat:function(a,b){var c,d,f=a.data.simpleData.idKey,i=a.data.simpleData.pIdKey;if(!f||f==""||!b)return[];if(h.isArray(b)){var g=
+[],k={};for(c=0,d=b.length;c<d;c++)k[b[c][f]]=b[c];for(c=0,d=b.length;c<d;c++){var j=k[b[c][i]];if(j&&b[c][f]!=b[c][i]){var o=e.nodeChildren(a,j);o||(o=e.nodeChildren(a,j,[]));o.push(b[c])}else g.push(b[c])}return g}else return[b]}},n={bindEvent:function(a){for(var b=0,c=y.length;b<c;b++)y[b].apply(this,arguments)},unbindEvent:function(a){for(var b=0,c=z.length;b<c;b++)z[b].apply(this,arguments)},bindTree:function(a){var b={treeId:a.treeId},c=a.treeObj;a.view.txtSelectedEnable||c.bind("selectstart",
+v).css({"-moz-user-select":"-moz-none"});c.bind("click",b,n.proxy);c.bind("dblclick",b,n.proxy);c.bind("mouseover",b,n.proxy);c.bind("mouseout",b,n.proxy);c.bind("mousedown",b,n.proxy);c.bind("mouseup",b,n.proxy);c.bind("contextmenu",b,n.proxy)},unbindTree:function(a){a.treeObj.unbind("selectstart",v).unbind("click",n.proxy).unbind("dblclick",n.proxy).unbind("mouseover",n.proxy).unbind("mouseout",n.proxy).unbind("mousedown",n.proxy).unbind("mouseup",n.proxy).unbind("contextmenu",n.proxy)},doProxy:function(a){for(var b=
+[],c=0,d=u.length;c<d;c++){var e=u[c].apply(this,arguments);b.push(e);if(e.stop)break}return b},proxy:function(a){var b=e.getSetting(a.data.treeId);if(!h.uCanDo(b,a))return!0;for(var b=n.doProxy(a),c=!0,d=0,f=b.length;d<f;d++){var i=b[d];i.nodeEventCallback&&(c=i.nodeEventCallback.apply(i,[a,i.node])&&c);i.treeEventCallback&&(c=i.treeEventCallback.apply(i,[a,i.node])&&c)}return c}};J=function(a,b){var c=e.getSetting(a.data.treeId);if(b.open){if(h.apply(c.callback.beforeCollapse,[c.treeId,b],!0)==
+!1)return!0}else if(h.apply(c.callback.beforeExpand,[c.treeId,b],!0)==!1)return!0;e.getRoot(c).expandTriggerFlag=!0;j.switchNode(c,b);return!0};K=function(a,b){var c=e.getSetting(a.data.treeId),d=c.view.autoCancelSelected&&(a.ctrlKey||a.metaKey)&&e.isSelectedNode(c,b)?0:c.view.autoCancelSelected&&(a.ctrlKey||a.metaKey)&&c.view.selectedMulti?2:1;if(h.apply(c.callback.beforeClick,[c.treeId,b,d],!0)==!1)return!0;d===0?j.cancelPreSelectedNode(c,b):j.selectNode(c,b,d===2);c.treeObj.trigger(g.event.CLICK,
+[a,c.treeId,b,d]);return!0};L=function(a,b){var c=e.getSetting(a.data.treeId);h.apply(c.callback.beforeMouseDown,[c.treeId,b],!0)&&h.apply(c.callback.onMouseDown,[a,c.treeId,b]);return!0};M=function(a,b){var c=e.getSetting(a.data.treeId);h.apply(c.callback.beforeMouseUp,[c.treeId,b],!0)&&h.apply(c.callback.onMouseUp,[a,c.treeId,b]);return!0};N=function(a,b){var c=e.getSetting(a.data.treeId);h.apply(c.callback.beforeDblClick,[c.treeId,b],!0)&&h.apply(c.callback.onDblClick,[a,c.treeId,b]);return!0};
+O=function(a,b){var c=e.getSetting(a.data.treeId);h.apply(c.callback.beforeRightClick,[c.treeId,b],!0)&&h.apply(c.callback.onRightClick,[a,c.treeId,b]);return typeof c.callback.onRightClick!="function"};v=function(a){a=a.originalEvent.srcElement.nodeName.toLowerCase();return a==="input"||a==="textarea"};var h={apply:function(a,b,c){return typeof a=="function"?a.apply(Q,b?b:[]):c},canAsync:function(a,b){var c=e.nodeChildren(a,b),d=e.nodeIsParent(a,b);return a.async.enable&&b&&d&&!(b.zAsync||c&&c.length>
+0)},clone:function(a){if(a===null)return null;var b=h.isArray(a)?[]:{},c;for(c in a)b[c]=a[c]instanceof Date?new Date(a[c].getTime()):typeof a[c]==="object"?h.clone(a[c]):a[c];return b},eqs:function(a,b){return a.toLowerCase()===b.toLowerCase()},isArray:function(a){return Object.prototype.toString.apply(a)==="[object Array]"},isElement:function(a){return typeof HTMLElement==="object"?a instanceof HTMLElement:a&&typeof a==="object"&&a!==null&&a.nodeType===1&&typeof a.nodeName==="string"},$:function(a,
+b,c){b&&typeof b!="string"&&(c=b,b="");return typeof a=="string"?r(a,c?c.treeObj.get(0).ownerDocument:null):r("#"+a.tId+b,c?c.treeObj:null)},getMDom:function(a,b,c){if(!b)return null;for(;b&&b.id!==a.treeId;){for(var d=0,e=c.length;b.tagName&&d<e;d++)if(h.eqs(b.tagName,c[d].tagName)&&b.getAttribute(c[d].attrName)!==null)return b;b=b.parentNode}return null},getNodeMainDom:function(a){return r(a).parent("li").get(0)||r(a).parentsUntil("li").parent().get(0)},isChildOrSelf:function(a,b){return r(a).closest("#"+
+b).length>0},uCanDo:function(){return!0}},j={addNodes:function(a,b,c,d,f){var i=e.nodeIsParent(a,b);if(!a.data.keep.leaf||!b||i)if(h.isArray(d)||(d=[d]),a.data.simpleData.enable&&(d=e.transformTozTreeFormat(a,d)),b){var i=l(b,g.id.SWITCH,a),m=l(b,g.id.ICON,a),k=l(b,g.id.UL,a);if(!b.open)j.replaceSwitchClass(b,i,g.folder.CLOSE),j.replaceIcoClass(b,m,g.folder.CLOSE),b.open=!1,k.css({display:"none"});e.addNodesData(a,b,c,d);j.createNodes(a,b.level+1,d,b,c);f||j.expandCollapseParentNode(a,b,!0)}else e.addNodesData(a,
+e.getRoot(a),c,d),j.createNodes(a,0,d,null,c)},appendNodes:function(a,b,c,d,f,i,g){if(!c)return[];var k=[],h=d?d:e.getRoot(a),h=e.nodeChildren(a,h),o,l;if(!h||f>=h.length-c.length)f=-1;for(var s=0,n=c.length;s<n;s++){var p=c[s];i&&(o=(f===0||h.length==c.length)&&s==0,l=f<0&&s==c.length-1,e.initNode(a,b,p,d,o,l,g),e.addNodeCache(a,p));o=e.nodeIsParent(a,p);l=[];var I=e.nodeChildren(a,p);I&&I.length>0&&(l=j.appendNodes(a,b+1,I,p,-1,i,g&&p.open));g&&(j.makeDOMNodeMainBefore(k,a,p),j.makeDOMNodeLine(k,
+a,p),e.getBeforeA(a,p,k),j.makeDOMNodeNameBefore(k,a,p),e.getInnerBeforeA(a,p,k),j.makeDOMNodeIcon(k,a,p),e.getInnerAfterA(a,p,k),j.makeDOMNodeNameAfter(k,a,p),e.getAfterA(a,p,k),o&&p.open&&j.makeUlHtml(a,p,k,l.join("")),j.makeDOMNodeMainAfter(k,a,p),e.addCreatedNode(a,p))}return k},appendParentULDom:function(a,b){var c=[],d=l(b,a);!d.get(0)&&b.parentTId&&(j.appendParentULDom(a,b.getParentNode()),d=l(b,a));var f=l(b,g.id.UL,a);f.get(0)&&f.remove();f=e.nodeChildren(a,b);f=j.appendNodes(a,b.level+1,
+f,b,-1,!1,!0);j.makeUlHtml(a,b,c,f.join(""));d.append(c.join(""))},asyncNode:function(a,b,c,d){var f,i;f=e.nodeIsParent(a,b);if(b&&!f)return h.apply(d),!1;else if(b&&b.isAjaxing)return!1;else if(h.apply(a.callback.beforeAsync,[a.treeId,b],!0)==!1)return h.apply(d),!1;if(b)b.isAjaxing=!0,l(b,g.id.ICON,a).attr({style:"","class":g.className.BUTTON+" "+g.className.ICO_LOADING});var m={},k=h.apply(a.async.autoParam,[a.treeId,b],a.async.autoParam);for(f=0,i=k.length;b&&f<i;f++){var q=k[f].split("="),o=
+q;q.length>1&&(o=q[1],q=q[0]);m[o]=b[q]}k=h.apply(a.async.otherParam,[a.treeId,b],a.async.otherParam);if(h.isArray(k))for(f=0,i=k.length;f<i;f+=2)m[k[f]]=k[f+1];else for(var n in k)m[n]=k[n];var s=e.getRoot(a)._ver;r.ajax({contentType:a.async.contentType,cache:!1,type:a.async.type,url:h.apply(a.async.url,[a.treeId,b],a.async.url),data:a.async.contentType.indexOf("application/json")>-1?JSON.stringify(m):m,dataType:a.async.dataType,headers:a.async.headers,xhrFields:a.async.xhrFields,success:function(i){if(s==
+e.getRoot(a)._ver){var f=[];try{f=!i||i.length==0?[]:typeof i=="string"?eval("("+i+")"):i}catch(k){f=i}if(b)b.isAjaxing=null,b.zAsync=!0;j.setNodeLineIcos(a,b);f&&f!==""?(f=h.apply(a.async.dataFilter,[a.treeId,b,f],f),j.addNodes(a,b,-1,f?h.clone(f):[],!!c)):j.addNodes(a,b,-1,[],!!c);a.treeObj.trigger(g.event.ASYNC_SUCCESS,[a.treeId,b,i]);h.apply(d)}},error:function(c,d,i){if(s==e.getRoot(a)._ver){if(b)b.isAjaxing=null;j.setNodeLineIcos(a,b);a.treeObj.trigger(g.event.ASYNC_ERROR,[a.treeId,b,c,d,i])}}});
+return!0},cancelPreSelectedNode:function(a,b,c){var d=e.getRoot(a).curSelectedList,f,i;for(f=d.length-1;f>=0;f--)if(i=d[f],b===i||!b&&(!c||c!==i))if(l(i,g.id.A,a).removeClass(g.node.CURSELECTED),b){e.removeSelectedNode(a,b);break}else d.splice(f,1),a.treeObj.trigger(g.event.UNSELECTED,[a.treeId,i])},createNodeCallback:function(a){if(a.callback.onNodeCreated||a.view.addDiyDom)for(var b=e.getRoot(a);b.createdNodes.length>0;){var c=b.createdNodes.shift();h.apply(a.view.addDiyDom,[a.treeId,c]);a.callback.onNodeCreated&&
+a.treeObj.trigger(g.event.NODECREATED,[a.treeId,c])}},createNodes:function(a,b,c,d,f){if(c&&c.length!=0){var i=e.getRoot(a),m=!d||d.open||!!l(e.nodeChildren(a,d)[0],a).get(0);i.createdNodes=[];var b=j.appendNodes(a,b,c,d,f,!0,m),k,h;d?(d=l(d,g.id.UL,a),d.get(0)&&(k=d)):k=a.treeObj;k&&(f>=0&&(h=k.children()[f]),f>=0&&h?r(h).before(b.join("")):k.append(b.join("")));j.createNodeCallback(a)}},destroy:function(a){a&&(e.initCache(a),e.initRoot(a),n.unbindTree(a),n.unbindEvent(a),a.treeObj.empty(),delete t[a.treeId])},
+expandCollapseNode:function(a,b,c,d,f){var i=e.getRoot(a),m;if(b){var k=e.nodeChildren(a,b),q=e.nodeIsParent(a,b);if(i.expandTriggerFlag)m=f,f=function(){m&&m();b.open?a.treeObj.trigger(g.event.EXPAND,[a.treeId,b]):a.treeObj.trigger(g.event.COLLAPSE,[a.treeId,b])},i.expandTriggerFlag=!1;if(!b.open&&q&&(!l(b,g.id.UL,a).get(0)||k&&k.length>0&&!l(k[0],a).get(0)))j.appendParentULDom(a,b),j.createNodeCallback(a);if(b.open==c)h.apply(f,[]);else{var c=l(b,g.id.UL,a),i=l(b,g.id.SWITCH,a),o=l(b,g.id.ICON,
+a);q?(b.open=!b.open,b.iconOpen&&b.iconClose&&o.attr("style",j.makeNodeIcoStyle(a,b)),b.open?(j.replaceSwitchClass(b,i,g.folder.OPEN),j.replaceIcoClass(b,o,g.folder.OPEN),d==!1||a.view.expandSpeed==""?(c.show(),h.apply(f,[])):k&&k.length>0?c.slideDown(a.view.expandSpeed,f):(c.show(),h.apply(f,[]))):(j.replaceSwitchClass(b,i,g.folder.CLOSE),j.replaceIcoClass(b,o,g.folder.CLOSE),d==!1||a.view.expandSpeed==""||!(k&&k.length>0)?(c.hide(),h.apply(f,[])):c.slideUp(a.view.expandSpeed,f))):h.apply(f,[])}}else h.apply(f,
+[])},expandCollapseParentNode:function(a,b,c,d,e){b&&(b.parentTId?(j.expandCollapseNode(a,b,c,d),b.parentTId&&j.expandCollapseParentNode(a,b.getParentNode(),c,d,e)):j.expandCollapseNode(a,b,c,d,e))},expandCollapseSonNode:function(a,b,c,d,f){var i=e.getRoot(a),i=b?e.nodeChildren(a,b):e.nodeChildren(a,i),g=b?!1:d,k=e.getRoot(a).expandTriggerFlag;e.getRoot(a).expandTriggerFlag=!1;if(i)for(var h=0,l=i.length;h<l;h++)i[h]&&j.expandCollapseSonNode(a,i[h],c,g);e.getRoot(a).expandTriggerFlag=k;j.expandCollapseNode(a,
+b,c,d,f)},isSelectedNode:function(a,b){if(!b)return!1;var c=e.getRoot(a).curSelectedList,d;for(d=c.length-1;d>=0;d--)if(b===c[d])return!0;return!1},makeDOMNodeIcon:function(a,b,c){var d=e.nodeName(b,c),d=b.view.nameIsHTML?d:d.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");a.push("<span id='",c.tId,g.id.ICON,"' title='' treeNode",g.id.ICON," class='",j.makeNodeIcoClass(b,c),"' style='",j.makeNodeIcoStyle(b,c),"'></span><span id='",c.tId,g.id.SPAN,"' class='",g.className.NAME,"'>",
+d,"</span>")},makeDOMNodeLine:function(a,b,c){a.push("<span id='",c.tId,g.id.SWITCH,"' title='' class='",j.makeNodeLineClass(b,c),"' treeNode",g.id.SWITCH,"></span>")},makeDOMNodeMainAfter:function(a){a.push("</li>")},makeDOMNodeMainBefore:function(a,b,c){a.push("<li id='",c.tId,"' class='",g.className.LEVEL,c.level,"' tabindex='0' hidefocus='true' treenode>")},makeDOMNodeNameAfter:function(a){a.push("</a>")},makeDOMNodeNameBefore:function(a,b,c){var d=e.nodeTitle(b,c),f=j.makeNodeUrl(b,c),i=j.makeNodeFontCss(b,
+c),m=[],k;for(k in i)m.push(k,":",i[k],";");a.push("<a id='",c.tId,g.id.A,"' class='",g.className.LEVEL,c.level,"' treeNode",g.id.A,' onclick="',c.click||"",'" ',f!=null&&f.length>0?"href='"+f+"'":""," target='",j.makeNodeTarget(c),"' style='",m.join(""),"'");h.apply(b.view.showTitle,[b.treeId,c],b.view.showTitle)&&d&&a.push("title='",d.replace(/'/g,"&#39;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),"'");a.push(">")},makeNodeFontCss:function(a,b){var c=h.apply(a.view.fontCss,[a.treeId,b],a.view.fontCss);
+return c&&typeof c!="function"?c:{}},makeNodeIcoClass:function(a,b){var c=["ico"];if(!b.isAjaxing){var d=e.nodeIsParent(a,b);c[0]=(b.iconSkin?b.iconSkin+"_":"")+c[0];d?c.push(b.open?g.folder.OPEN:g.folder.CLOSE):c.push(g.folder.DOCU)}return g.className.BUTTON+" "+c.join("_")},makeNodeIcoStyle:function(a,b){var c=[];if(!b.isAjaxing){var d=e.nodeIsParent(a,b)&&b.iconOpen&&b.iconClose?b.open?b.iconOpen:b.iconClose:b[a.data.key.icon];d&&c.push("background:url(",d,") 0 0 no-repeat;");(a.view.showIcon==
+!1||!h.apply(a.view.showIcon,[a.treeId,b],!0))&&c.push("width:0px;height:0px;")}return c.join("")},makeNodeLineClass:function(a,b){var c=[];a.view.showLine?b.level==0&&b.isFirstNode&&b.isLastNode?c.push(g.line.ROOT):b.level==0&&b.isFirstNode?c.push(g.line.ROOTS):b.isLastNode?c.push(g.line.BOTTOM):c.push(g.line.CENTER):c.push(g.line.NOLINE);e.nodeIsParent(a,b)?c.push(b.open?g.folder.OPEN:g.folder.CLOSE):c.push(g.folder.DOCU);return j.makeNodeLineClassEx(b)+c.join("_")},makeNodeLineClassEx:function(a){return g.className.BUTTON+
+" "+g.className.LEVEL+a.level+" "+g.className.SWITCH+" "},makeNodeTarget:function(a){return a.target||"_blank"},makeNodeUrl:function(a,b){var c=a.data.key.url;return b[c]?b[c]:null},makeUlHtml:function(a,b,c,d){c.push("<ul id='",b.tId,g.id.UL,"' class='",g.className.LEVEL,b.level," ",j.makeUlLineClass(a,b),"' style='display:",b.open?"block":"none","'>");c.push(d);c.push("</ul>")},makeUlLineClass:function(a,b){return a.view.showLine&&!b.isLastNode?g.line.LINE:""},removeChildNodes:function(a,b){if(b){var c=
+e.nodeChildren(a,b);if(c){for(var d=0,f=c.length;d<f;d++)e.removeNodeCache(a,c[d]);e.removeSelectedNode(a);delete b[a.data.key.children];a.data.keep.parent?l(b,g.id.UL,a).empty():(e.nodeIsParent(a,b,!1),b.open=!1,c=l(b,g.id.SWITCH,a),d=l(b,g.id.ICON,a),j.replaceSwitchClass(b,c,g.folder.DOCU),j.replaceIcoClass(b,d,g.folder.DOCU),l(b,g.id.UL,a).remove())}}},scrollIntoView:function(a,b){if(b)if(typeof Element==="undefined"){var c=a.treeObj.get(0).getBoundingClientRect(),d=b.getBoundingClientRect();(d.top<
+c.top||d.bottom>c.bottom||d.right>c.right||d.left<c.left)&&b.scrollIntoView()}else{if(!Element.prototype.scrollIntoViewIfNeeded)Element.prototype.scrollIntoViewIfNeeded=function(a){function b(a,c){return{start:a,length:c,end:a+c}}function c(b,d){return!1===a||d.start<b.end&&b.start<d.end?Math.max(b.end-d.length,Math.min(d.start,b.start)):(b.start+b.end-d.length)/2}function d(a,b){return{x:a,y:b,translate:function(c,i){return d(a+c,b+i)}}}function e(a,b){for(;a;)b=b.translate(a.offsetLeft,a.offsetTop),
+a=a.offsetParent;return b}for(var g=e(this,d(0,0)),j=d(this.offsetWidth,this.offsetHeight),h=this.parentNode,l;h instanceof HTMLElement;)l=e(h,d(h.clientLeft,h.clientTop)),h.scrollLeft=c(b(g.x-l.x,j.x),b(h.scrollLeft,h.clientWidth)),h.scrollTop=c(b(g.y-l.y,j.y),b(h.scrollTop,h.clientHeight)),g=g.translate(-h.scrollLeft,-h.scrollTop),h=h.parentNode};b.scrollIntoViewIfNeeded()}},setFirstNode:function(a,b){var c=e.nodeChildren(a,b);if(c.length>0)c[0].isFirstNode=!0},setLastNode:function(a,b){var c=e.nodeChildren(a,
+b);if(c.length>0)c[c.length-1].isLastNode=!0},removeNode:function(a,b){var c=e.getRoot(a),d=b.parentTId?b.getParentNode():c;b.isFirstNode=!1;b.isLastNode=!1;b.getPreNode=function(){return null};b.getNextNode=function(){return null};if(e.getNodeCache(a,b.tId)){l(b,a).remove();e.removeNodeCache(a,b);e.removeSelectedNode(a,b);for(var f=e.nodeChildren(a,d),i=0,h=f.length;i<h;i++)if(f[i].tId==b.tId){f.splice(i,1);break}j.setFirstNode(a,d);j.setLastNode(a,d);var k,i=f.length;if(!a.data.keep.parent&&i==
+0)e.nodeIsParent(a,d,!1),d.open=!1,delete d[a.data.key.children],i=l(d,g.id.UL,a),h=l(d,g.id.SWITCH,a),k=l(d,g.id.ICON,a),j.replaceSwitchClass(d,h,g.folder.DOCU),j.replaceIcoClass(d,k,g.folder.DOCU),i.css("display","none");else if(a.view.showLine&&i>0){var q=f[i-1],i=l(q,g.id.UL,a),h=l(q,g.id.SWITCH,a);k=l(q,g.id.ICON,a);d==c?f.length==1?j.replaceSwitchClass(q,h,g.line.ROOT):(c=l(f[0],g.id.SWITCH,a),j.replaceSwitchClass(f[0],c,g.line.ROOTS),j.replaceSwitchClass(q,h,g.line.BOTTOM)):j.replaceSwitchClass(q,
+h,g.line.BOTTOM);i.removeClass(g.line.LINE)}}},replaceIcoClass:function(a,b,c){if(b&&!a.isAjaxing&&(a=b.attr("class"),a!=void 0)){a=a.split("_");switch(c){case g.folder.OPEN:case g.folder.CLOSE:case g.folder.DOCU:a[a.length-1]=c}b.attr("class",a.join("_"))}},replaceSwitchClass:function(a,b,c){if(b){var d=b.attr("class");if(d!=void 0){d=d.split("_");switch(c){case g.line.ROOT:case g.line.ROOTS:case g.line.CENTER:case g.line.BOTTOM:case g.line.NOLINE:d[0]=j.makeNodeLineClassEx(a)+c;break;case g.folder.OPEN:case g.folder.CLOSE:case g.folder.DOCU:d[1]=
+c}b.attr("class",d.join("_"));c!==g.folder.DOCU?b.removeAttr("disabled"):b.attr("disabled","disabled")}}},selectNode:function(a,b,c){c||j.cancelPreSelectedNode(a,null,b);l(b,g.id.A,a).addClass(g.node.CURSELECTED);e.addSelectedNode(a,b);a.treeObj.trigger(g.event.SELECTED,[a.treeId,b])},setNodeFontCss:function(a,b){var c=l(b,g.id.A,a),d=j.makeNodeFontCss(a,b);d&&c.css(d)},setNodeLineIcos:function(a,b){if(b){var c=l(b,g.id.SWITCH,a),d=l(b,g.id.UL,a),f=l(b,g.id.ICON,a),i=j.makeUlLineClass(a,b);i.length==
+0?d.removeClass(g.line.LINE):d.addClass(i);c.attr("class",j.makeNodeLineClass(a,b));e.nodeIsParent(a,b)?c.removeAttr("disabled"):c.attr("disabled","disabled");f.removeAttr("style");f.attr("style",j.makeNodeIcoStyle(a,b));f.attr("class",j.makeNodeIcoClass(a,b))}},setNodeName:function(a,b){var c=e.nodeTitle(a,b),d=l(b,g.id.SPAN,a);d.empty();a.view.nameIsHTML?d.html(e.nodeName(a,b)):d.text(e.nodeName(a,b));h.apply(a.view.showTitle,[a.treeId,b],a.view.showTitle)&&l(b,g.id.A,a).attr("title",!c?"":c)},
+setNodeTarget:function(a,b){l(b,g.id.A,a).attr("target",j.makeNodeTarget(b))},setNodeUrl:function(a,b){var c=l(b,g.id.A,a),d=j.makeNodeUrl(a,b);d==null||d.length==0?c.removeAttr("href"):c.attr("href",d)},switchNode:function(a,b){b.open||!h.canAsync(a,b)?j.expandCollapseNode(a,b,!b.open):a.async.enable?j.asyncNode(a,b)||j.expandCollapseNode(a,b,!b.open):b&&j.expandCollapseNode(a,b,!b.open)}};r.fn.zTree={consts:{className:{BUTTON:"button",LEVEL:"level",ICO_LOADING:"ico_loading",SWITCH:"switch",NAME:"node_name"},
+event:{NODECREATED:"ztree_nodeCreated",CLICK:"ztree_click",EXPAND:"ztree_expand",COLLAPSE:"ztree_collapse",ASYNC_SUCCESS:"ztree_async_success",ASYNC_ERROR:"ztree_async_error",REMOVE:"ztree_remove",SELECTED:"ztree_selected",UNSELECTED:"ztree_unselected"},id:{A:"_a",ICON:"_ico",SPAN:"_span",SWITCH:"_switch",UL:"_ul"},line:{ROOT:"root",ROOTS:"roots",CENTER:"center",BOTTOM:"bottom",NOLINE:"noline",LINE:"line"},folder:{OPEN:"open",CLOSE:"close",DOCU:"docu"},node:{CURSELECTED:"curSelectedNode"}},_z:{tools:h,
+view:j,event:n,data:e},getZTreeObj:function(a){return(a=e.getZTreeTools(a))?a:null},destroy:function(a){if(a&&a.length>0)j.destroy(e.getSetting(a));else for(var b in t)j.destroy(t[b])},init:function(a,b,c){var d=h.clone(P);r.extend(!0,d,b);d.treeId=a.attr("id");d.treeObj=a;d.treeObj.empty();t[d.treeId]=d;if(typeof document.body.style.maxHeight==="undefined")d.view.expandSpeed="";e.initRoot(d);a=e.getRoot(d);c=c?h.clone(h.isArray(c)?c:[c]):[];d.data.simpleData.enable?e.nodeChildren(d,a,e.transformTozTreeFormat(d,
+c)):e.nodeChildren(d,a,c);e.initCache(d);n.unbindTree(d);n.bindTree(d);n.unbindEvent(d);n.bindEvent(d);var f={setting:d,addNodes:function(a,b,c,f){function g(){j.addNodes(d,a,b,n,f==!0)}a||(a=null);var l=e.nodeIsParent(d,a);if(a&&!l&&d.data.keep.leaf)return null;l=parseInt(b,10);isNaN(l)?(f=!!c,c=b,b=-1):b=l;if(!c)return null;var n=h.clone(h.isArray(c)?c:[c]);h.canAsync(d,a)?j.asyncNode(d,a,f,g):g();return n},cancelSelectedNode:function(a){j.cancelPreSelectedNode(d,a)},destroy:function(){j.destroy(d)},
+expandAll:function(a){a=!!a;j.expandCollapseSonNode(d,null,a,!0);return a},expandNode:function(a,b,c,f,g){function n(){var b=l(a,d).get(0);b&&f!==!1&&j.scrollIntoView(d,b)}if(!a||!e.nodeIsParent(d,a))return null;b!==!0&&b!==!1&&(b=!a.open);if((g=!!g)&&b&&h.apply(d.callback.beforeExpand,[d.treeId,a],!0)==!1)return null;else if(g&&!b&&h.apply(d.callback.beforeCollapse,[d.treeId,a],!0)==!1)return null;b&&a.parentTId&&j.expandCollapseParentNode(d,a.getParentNode(),b,!1);if(b===a.open&&!c)return null;
+e.getRoot(d).expandTriggerFlag=g;!h.canAsync(d,a)&&c?j.expandCollapseSonNode(d,a,b,!0,n):(a.open=!b,j.switchNode(this.setting,a),n());return b},getNodes:function(){return e.getNodes(d)},getNodeByParam:function(a,b,c){return!a?null:e.getNodeByParam(d,c?e.nodeChildren(d,c):e.getNodes(d),a,b)},getNodeByTId:function(a){return e.getNodeCache(d,a)},getNodesByParam:function(a,b,c){return!a?null:e.getNodesByParam(d,c?e.nodeChildren(d,c):e.getNodes(d),a,b)},getNodesByParamFuzzy:function(a,b,c){return!a?null:
+e.getNodesByParamFuzzy(d,c?e.nodeChildren(d,c):e.getNodes(d),a,b)},getNodesByFilter:function(a,b,c,f){b=!!b;return!a||typeof a!="function"?b?null:[]:e.getNodesByFilter(d,c?e.nodeChildren(d,c):e.getNodes(d),a,b,f)},getNodeIndex:function(a){if(!a)return null;for(var b=a.parentTId?a.getParentNode():e.getRoot(d),b=e.nodeChildren(d,b),c=0,f=b.length;c<f;c++)if(b[c]==a)return c;return-1},getSelectedNodes:function(){for(var a=[],b=e.getRoot(d).curSelectedList,c=0,f=b.length;c<f;c++)a.push(b[c]);return a},
+isSelectedNode:function(a){return e.isSelectedNode(d,a)},reAsyncChildNodesPromise:function(a,b,c){return new Promise(function(d,e){try{f.reAsyncChildNodes(a,b,c,function(){d(a)})}catch(g){e(g)}})},reAsyncChildNodes:function(a,b,c,f){if(this.setting.async.enable){var h=!a;h&&(a=e.getRoot(d));if(b=="refresh"){for(var b=e.nodeChildren(d,a),n=0,r=b?b.length:0;n<r;n++)e.removeNodeCache(d,b[n]);e.removeSelectedNode(d);e.nodeChildren(d,a,[]);h?this.setting.treeObj.empty():l(a,g.id.UL,d).empty()}j.asyncNode(this.setting,
+h?null:a,!!c,f)}},refresh:function(){this.setting.treeObj.empty();var a=e.getRoot(d),b=e.nodeChildren(d,a);e.initRoot(d);e.nodeChildren(d,a,b);e.initCache(d);j.createNodes(d,0,e.nodeChildren(d,a),null,-1)},removeChildNodes:function(a){if(!a)return null;var b=e.nodeChildren(d,a);j.removeChildNodes(d,a);return b?b:null},removeNode:function(a,b){a&&(b=!!b,b&&h.apply(d.callback.beforeRemove,[d.treeId,a],!0)==!1||(j.removeNode(d,a),b&&this.setting.treeObj.trigger(g.event.REMOVE,[d.treeId,a])))},selectNode:function(a,
+b,c){function e(){if(!c){var b=l(a,d).get(0);j.scrollIntoView(d,b)}}if(a&&h.uCanDo(d)){b=d.view.selectedMulti&&b;if(a.parentTId)j.expandCollapseParentNode(d,a.getParentNode(),!0,!1,e);else if(!c)try{l(a,d).focus().blur()}catch(f){}j.selectNode(d,a,b)}},transformTozTreeNodes:function(a){return e.transformTozTreeFormat(d,a)},transformToArray:function(a){return e.transformToArrayFormat(d,a)},updateNode:function(a){a&&l(a,d).get(0)&&h.uCanDo(d)&&(j.setNodeName(d,a),j.setNodeTarget(d,a),j.setNodeUrl(d,
+a),j.setNodeLineIcos(d,a),j.setNodeFontCss(d,a))}};a.treeTools=f;e.setZTreeTools(d,f);(c=e.nodeChildren(d,a))&&c.length>0?j.createNodes(d,0,c,null,-1):d.async.enable&&d.async.url&&d.async.url!==""&&j.asyncNode(d);return f}};var Q=r.fn.zTree,l=h.$,g=Q.consts})(jQuery);
+
+/*
+ * JQuery zTree excheck v3.5.37
+ * http://treejs.cn/
+ *
+ * Copyright (c) 2010 Hunter.z
+ *
+ * Licensed same as jquery - MIT License
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ * email: hunter.z@263.net
+ * Date: 2018-08-21
+ */
+(function(n){var q,r,s,p={event:{CHECK:"ztree_check"},id:{CHECK:"_check"},checkbox:{STYLE:"checkbox",DEFAULT:"chk",DISABLED:"disable",FALSE:"false",TRUE:"true",FULL:"full",PART:"part",FOCUS:"focus"},radio:{STYLE:"radio",TYPE_ALL:"all",TYPE_LEVEL:"level"}},w={check:{enable:!1,autoCheckTrigger:!1,chkStyle:p.checkbox.STYLE,nocheckInherit:!1,chkDisabledInherit:!1,radioType:p.radio.TYPE_LEVEL,chkboxType:{Y:"ps",N:"ps"}},data:{key:{checked:"checked"}},callback:{beforeCheck:null,onCheck:null}};q=function(c,
+a){if(a.chkDisabled===!0)return!1;var b=e.getSetting(c.data.treeId);if(i.apply(b.callback.beforeCheck,[b.treeId,a],!0)==!1)return!0;var d=e.nodeChecked(b,a);e.nodeChecked(b,a,!d);f.checkNodeRelation(b,a);d=m(a,h.id.CHECK,b);f.setChkClass(b,d,a);f.repairParentChkClassWithSelf(b,a);b.treeObj.trigger(h.event.CHECK,[c,b.treeId,a]);return!0};r=function(c,a){if(a.chkDisabled===!0)return!1;var b=e.getSetting(c.data.treeId),d=m(a,h.id.CHECK,b);a.check_Focus=!0;f.setChkClass(b,d,a);return!0};s=function(c,
+a){if(a.chkDisabled===!0)return!1;var b=e.getSetting(c.data.treeId),d=m(a,h.id.CHECK,b);a.check_Focus=!1;f.setChkClass(b,d,a);return!0};n.extend(!0,n.fn.zTree.consts,p);n.extend(!0,n.fn.zTree._z,{tools:{},view:{checkNodeRelation:function(c,a){var b,d,j;d=h.radio;b=e.nodeChecked(c,a);if(c.check.chkStyle==d.STYLE){var g=e.getRadioCheckedList(c);if(b)if(c.check.radioType==d.TYPE_ALL){for(d=g.length-1;d>=0;d--){b=g[d];var k=e.nodeChecked(c,b);k&&b!=a&&(e.nodeChecked(c,b,!1),g.splice(d,1),f.setChkClass(c,
+m(b,h.id.CHECK,c),b),b.parentTId!=a.parentTId&&f.repairParentChkClassWithSelf(c,b))}g.push(a)}else{g=a.parentTId?a.getParentNode():e.getRoot(c);g=e.nodeChildren(c,g);for(d=0,j=g.length;d<j;d++)if(b=g[d],(k=e.nodeChecked(c,b))&&b!=a)e.nodeChecked(c,b,!1),f.setChkClass(c,m(b,h.id.CHECK,c),b)}else if(c.check.radioType==d.TYPE_ALL)for(d=0,j=g.length;d<j;d++)if(a==g[d]){g.splice(d,1);break}}else g=e.nodeChildren(c,a),b&&(!g||g.length==0||c.check.chkboxType.Y.indexOf("s")>-1)&&f.setSonNodeCheckBox(c,a,
+!0),!b&&(!g||g.length==0||c.check.chkboxType.N.indexOf("s")>-1)&&f.setSonNodeCheckBox(c,a,!1),b&&c.check.chkboxType.Y.indexOf("p")>-1&&f.setParentNodeCheckBox(c,a,!0),!b&&c.check.chkboxType.N.indexOf("p")>-1&&f.setParentNodeCheckBox(c,a,!1)},makeChkClass:function(c,a){var b=h.checkbox,d=h.radio,j="",g=e.nodeChecked(c,a),j=a.chkDisabled===!0?b.DISABLED:a.halfCheck?b.PART:c.check.chkStyle==d.STYLE?a.check_Child_State<1?b.FULL:b.PART:g?a.check_Child_State===2||a.check_Child_State===-1?b.FULL:b.PART:
+a.check_Child_State<1?b.FULL:b.PART,d=c.check.chkStyle+"_"+(g?b.TRUE:b.FALSE)+"_"+j,d=a.check_Focus&&a.chkDisabled!==!0?d+"_"+b.FOCUS:d;return h.className.BUTTON+" "+b.DEFAULT+" "+d},repairAllChk:function(c,a){if(c.check.enable&&c.check.chkStyle===h.checkbox.STYLE)for(var b=e.getRoot(c),b=e.nodeChildren(c,b),d=0,j=b.length;d<j;d++){var g=b[d];g.nocheck!==!0&&g.chkDisabled!==!0&&e.nodeChecked(c,g,a);f.setSonNodeCheckBox(c,g,a)}},repairChkClass:function(c,a){if(a&&(e.makeChkFlag(c,a),a.nocheck!==!0)){var b=
+m(a,h.id.CHECK,c);f.setChkClass(c,b,a)}},repairParentChkClass:function(c,a){if(a&&a.parentTId){var b=a.getParentNode();f.repairChkClass(c,b);f.repairParentChkClass(c,b)}},repairParentChkClassWithSelf:function(c,a){if(a){var b=e.nodeChildren(c,a);b&&b.length>0?f.repairParentChkClass(c,b[0]):f.repairParentChkClass(c,a)}},repairSonChkDisabled:function(c,a,b,d){if(a){if(a.chkDisabled!=b)a.chkDisabled=b;f.repairChkClass(c,a);if((a=e.nodeChildren(c,a))&&d)for(var j=0,g=a.length;j<g;j++)f.repairSonChkDisabled(c,
+a[j],b,d)}},repairParentChkDisabled:function(c,a,b,d){if(a){if(a.chkDisabled!=b&&d)a.chkDisabled=b;f.repairChkClass(c,a);f.repairParentChkDisabled(c,a.getParentNode(),b,d)}},setChkClass:function(c,a,b){a&&(b.nocheck===!0?a.hide():a.show(),a.attr("class",f.makeChkClass(c,b)))},setParentNodeCheckBox:function(c,a,b,d){var j=m(a,h.id.CHECK,c);d||(d=a);e.makeChkFlag(c,a);a.nocheck!==!0&&a.chkDisabled!==!0&&(e.nodeChecked(c,a,b),f.setChkClass(c,j,a),c.check.autoCheckTrigger&&a!=d&&c.treeObj.trigger(h.event.CHECK,
+[null,c.treeId,a]));if(a.parentTId){j=!0;if(!b)for(var g=e.nodeChildren(c,a.getParentNode()),k=0,o=g.length;k<o;k++){var l=g[k],i=e.nodeChecked(c,l);if(l.nocheck!==!0&&l.chkDisabled!==!0&&i||(l.nocheck===!0||l.chkDisabled===!0)&&l.check_Child_State>0){j=!1;break}}j&&f.setParentNodeCheckBox(c,a.getParentNode(),b,d)}},setSonNodeCheckBox:function(c,a,b,d){if(a){var j=m(a,h.id.CHECK,c);d||(d=a);var g=!1,k=e.nodeChildren(c,a);if(k)for(var o=0,l=k.length;o<l;o++){var i=k[o];f.setSonNodeCheckBox(c,i,b,d);
+i.chkDisabled===!0&&(g=!0)}if(a!=e.getRoot(c)&&a.chkDisabled!==!0){g&&a.nocheck!==!0&&e.makeChkFlag(c,a);if(a.nocheck!==!0&&a.chkDisabled!==!0){if(e.nodeChecked(c,a,b),!g)a.check_Child_State=k&&k.length>0?b?2:0:-1}else a.check_Child_State=-1;f.setChkClass(c,j,a);c.check.autoCheckTrigger&&a!=d&&a.nocheck!==!0&&a.chkDisabled!==!0&&c.treeObj.trigger(h.event.CHECK,[null,c.treeId,a])}}}},event:{},data:{getRadioCheckedList:function(c){for(var a=e.getRoot(c).radioCheckedList,b=0,d=a.length;b<d;b++)e.getNodeCache(c,
+a[b].tId)||(a.splice(b,1),b--,d--);return a},getCheckStatus:function(c,a){if(!c.check.enable||a.nocheck||a.chkDisabled)return null;var b=e.nodeChecked(c,a);return{checked:b,half:a.halfCheck?a.halfCheck:c.check.chkStyle==h.radio.STYLE?a.check_Child_State===2:b?a.check_Child_State>-1&&a.check_Child_State<2:a.check_Child_State>0}},getTreeCheckedNodes:function(c,a,b,d){if(!a)return[];for(var j=b&&c.check.chkStyle==h.radio.STYLE&&c.check.radioType==h.radio.TYPE_ALL,d=!d?[]:d,g=0,f=a.length;g<f;g++){var i=
+a[g],l=e.nodeChildren(c,i),m=e.nodeChecked(c,i);if(i.nocheck!==!0&&i.chkDisabled!==!0&&m==b&&(d.push(i),j))break;e.getTreeCheckedNodes(c,l,b,d);if(j&&d.length>0)break}return d},getTreeChangeCheckedNodes:function(c,a,b){if(!a)return[];for(var b=!b?[]:b,d=0,j=a.length;d<j;d++){var g=a[d],f=e.nodeChildren(c,g),h=e.nodeChecked(c,g);g.nocheck!==!0&&g.chkDisabled!==!0&&h!=g.checkedOld&&b.push(g);e.getTreeChangeCheckedNodes(c,f,b)}return b},makeChkFlag:function(c,a){if(a){var b=-1,d=e.nodeChildren(c,a);
+if(d)for(var j=0,g=d.length;j<g;j++){var f=d[j],i=e.nodeChecked(c,f),l=-1;if(c.check.chkStyle==h.radio.STYLE)if(l=f.nocheck===!0||f.chkDisabled===!0?f.check_Child_State:f.halfCheck===!0?2:i?2:f.check_Child_State>0?2:0,l==2){b=2;break}else l==0&&(b=0);else if(c.check.chkStyle==h.checkbox.STYLE)if(l=f.nocheck===!0||f.chkDisabled===!0?f.check_Child_State:f.halfCheck===!0?1:i?f.check_Child_State===-1||f.check_Child_State===2?2:1:f.check_Child_State>0?1:0,l===1){b=1;break}else if(l===2&&b>-1&&j>0&&l!==
+b){b=1;break}else if(b===2&&l>-1&&l<2){b=1;break}else l>-1&&(b=l)}a.check_Child_State=b}}}});var n=n.fn.zTree,i=n._z.tools,h=n.consts,f=n._z.view,e=n._z.data,m=i.$;e.nodeChecked=function(c,a,b){if(!a)return!1;c=c.data.key.checked;typeof b!=="undefined"&&(typeof b==="string"&&(b=i.eqs(b,"true")),a[c]=!!b);return a[c]};e.exSetting(w);e.addInitBind(function(c){c.treeObj.bind(h.event.CHECK,function(a,b,d,e){a.srcEvent=b;i.apply(c.callback.onCheck,[a,d,e])})});e.addInitUnBind(function(c){c.treeObj.unbind(h.event.CHECK)});
+e.addInitCache(function(){});e.addInitNode(function(c,a,b,d){if(b){a=e.nodeChecked(c,b);a=e.nodeChecked(c,b,a);b.checkedOld=a;if(typeof b.nocheck=="string")b.nocheck=i.eqs(b.nocheck,"true");b.nocheck=!!b.nocheck||c.check.nocheckInherit&&d&&!!d.nocheck;if(typeof b.chkDisabled=="string")b.chkDisabled=i.eqs(b.chkDisabled,"true");b.chkDisabled=!!b.chkDisabled||c.check.chkDisabledInherit&&d&&!!d.chkDisabled;if(typeof b.halfCheck=="string")b.halfCheck=i.eqs(b.halfCheck,"true");b.halfCheck=!!b.halfCheck;
+b.check_Child_State=-1;b.check_Focus=!1;b.getCheckStatus=function(){return e.getCheckStatus(c,b)};c.check.chkStyle==h.radio.STYLE&&c.check.radioType==h.radio.TYPE_ALL&&a&&e.getRoot(c).radioCheckedList.push(b)}});e.addInitProxy(function(c){var a=c.target,b=e.getSetting(c.data.treeId),d="",f=null,g="",k=null;if(i.eqs(c.type,"mouseover")){if(b.check.enable&&i.eqs(a.tagName,"span")&&a.getAttribute("treeNode"+h.id.CHECK)!==null)d=i.getNodeMainDom(a).id,g="mouseoverCheck"}else if(i.eqs(c.type,"mouseout")){if(b.check.enable&&
+i.eqs(a.tagName,"span")&&a.getAttribute("treeNode"+h.id.CHECK)!==null)d=i.getNodeMainDom(a).id,g="mouseoutCheck"}else if(i.eqs(c.type,"click")&&b.check.enable&&i.eqs(a.tagName,"span")&&a.getAttribute("treeNode"+h.id.CHECK)!==null)d=i.getNodeMainDom(a).id,g="checkNode";if(d.length>0)switch(f=e.getNodeCache(b,d),g){case "checkNode":k=q;break;case "mouseoverCheck":k=r;break;case "mouseoutCheck":k=s}return{stop:g==="checkNode",node:f,nodeEventType:g,nodeEventCallback:k,treeEventType:"",treeEventCallback:null}},
+!0);e.addInitRoot(function(c){e.getRoot(c).radioCheckedList=[]});e.addBeforeA(function(c,a,b){c.check.enable&&(e.makeChkFlag(c,a),b.push("<span ID='",a.tId,h.id.CHECK,"' class='",f.makeChkClass(c,a),"' treeNode",h.id.CHECK,a.nocheck===!0?" style='display:none;'":"","></span>"))});e.addZTreeTools(function(c,a){a.checkNode=function(a,b,g,k){var o=e.nodeChecked(c,a);if(a.chkDisabled!==!0&&(b!==!0&&b!==!1&&(b=!o),k=!!k,(o!==b||g)&&!(k&&i.apply(this.setting.callback.beforeCheck,[this.setting.treeId,a],
+!0)==!1)&&i.uCanDo(this.setting)&&this.setting.check.enable&&a.nocheck!==!0))e.nodeChecked(c,a,b),b=m(a,h.id.CHECK,this.setting),(g||this.setting.check.chkStyle===h.radio.STYLE)&&f.checkNodeRelation(this.setting,a),f.setChkClass(this.setting,b,a),f.repairParentChkClassWithSelf(this.setting,a),k&&this.setting.treeObj.trigger(h.event.CHECK,[null,this.setting.treeId,a])};a.checkAllNodes=function(a){f.repairAllChk(this.setting,!!a)};a.getCheckedNodes=function(a){var a=a!==!1,b=e.nodeChildren(c,e.getRoot(this.setting));
+return e.getTreeCheckedNodes(this.setting,b,a)};a.getChangeCheckedNodes=function(){var a=e.nodeChildren(c,e.getRoot(this.setting));return e.getTreeChangeCheckedNodes(this.setting,a)};a.setChkDisabled=function(a,b,c,e){b=!!b;c=!!c;f.repairSonChkDisabled(this.setting,a,b,!!e);f.repairParentChkDisabled(this.setting,a.getParentNode(),b,c)};var b=a.updateNode;a.updateNode=function(c,e){b&&b.apply(a,arguments);if(c&&this.setting.check.enable&&m(c,this.setting).get(0)&&i.uCanDo(this.setting)){var g=m(c,
+h.id.CHECK,this.setting);(e==!0||this.setting.check.chkStyle===h.radio.STYLE)&&f.checkNodeRelation(this.setting,c);f.setChkClass(this.setting,g,c);f.repairParentChkClassWithSelf(this.setting,c)}}});var t=f.createNodes;f.createNodes=function(c,a,b,d,e){t&&t.apply(f,arguments);b&&f.repairParentChkClassWithSelf(c,d)};var u=f.removeNode;f.removeNode=function(c,a){var b=a.getParentNode();u&&u.apply(f,arguments);a&&b&&(f.repairChkClass(c,b),f.repairParentChkClass(c,b))};var v=f.appendNodes;f.appendNodes=
+function(c,a,b,d,h,g,i){var m="";v&&(m=v.apply(f,arguments));d&&e.makeChkFlag(c,d);return m}})(jQuery);
+
+/*
+ * JQuery zTree exedit v3.5.37
+ * http://treejs.cn/
+ *
+ * Copyright (c) 2010 Hunter.z
+ *
+ * Licensed same as jquery - MIT License
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ * email: hunter.z@263.net
+ * Date: 2018-08-21
+ */
+(function(B){var I={event:{DRAG:"ztree_drag",DROP:"ztree_drop",RENAME:"ztree_rename",DRAGMOVE:"ztree_dragmove"},id:{EDIT:"_edit",INPUT:"_input",REMOVE:"_remove"},move:{TYPE_INNER:"inner",TYPE_PREV:"prev",TYPE_NEXT:"next"},node:{CURSELECTED_EDIT:"curSelectedNode_Edit",TMPTARGET_TREE:"tmpTargetzTree",TMPTARGET_NODE:"tmpTargetNode"}},v={onHoverOverNode:function(a,b){var c=i.getSetting(a.data.treeId),d=i.getRoot(c);if(d.curHoverNode!=b)v.onHoverOutNode(a);d.curHoverNode=b;e.addHoverDom(c,b)},onHoverOutNode:function(a){var a=
+i.getSetting(a.data.treeId),b=i.getRoot(a);if(b.curHoverNode&&!i.isSelectedNode(a,b.curHoverNode))e.removeTreeDom(a,b.curHoverNode),b.curHoverNode=null},onMousedownNode:function(a,b){function c(a){if(m.dragFlag==0&&Math.abs(N-a.clientX)<f.edit.drag.minMoveSize&&Math.abs(O-a.clientY)<f.edit.drag.minMoveSize)return!0;var b,c,g,j;L.css("cursor","pointer");if(m.dragFlag==0){if(k.apply(f.callback.beforeDrag,[f.treeId,n],!0)==!1)return l(a),!0;for(b=0,c=n.length;b<c;b++){if(b==0)m.dragNodeShowBefore=[];
+g=n[b];i.nodeIsParent(f,g)&&g.open?(e.expandCollapseNode(f,g,!g.open),m.dragNodeShowBefore[g.tId]=!0):m.dragNodeShowBefore[g.tId]=!1}m.dragFlag=1;y.showHoverDom=!1;k.showIfameMask(f,!0);j=!0;var p=-1;if(n.length>1){var o=n[0].parentTId?i.nodeChildren(f,n[0].getParentNode()):i.getNodes(f);g=[];for(b=0,c=o.length;b<c;b++)if(m.dragNodeShowBefore[o[b].tId]!==void 0&&(j&&p>-1&&p+1!==b&&(j=!1),g.push(o[b]),p=b),n.length===g.length){n=g;break}}j&&(H=n[0].getPreNode(),Q=n[n.length-1].getNextNode());C=q("<ul class='zTreeDragUL'></ul>",
+f);for(b=0,c=n.length;b<c;b++)g=n[b],g.editNameFlag=!1,e.selectNode(f,g,b>0),e.removeTreeDom(f,g),b>f.edit.drag.maxShowNodeNum-1||(j=q("<li id='"+g.tId+"_tmp'></li>",f),j.append(q(g,d.id.A,f).clone()),j.css("padding","0"),j.children("#"+g.tId+d.id.A).removeClass(d.node.CURSELECTED),C.append(j),b==f.edit.drag.maxShowNodeNum-1&&(j=q("<li id='"+g.tId+"_moretmp'><a>  ...  </a></li>",f),C.append(j)));C.attr("id",n[0].tId+d.id.UL+"_tmp");C.addClass(f.treeObj.attr("class"));C.appendTo(L);u=q("<span class='tmpzTreeMove_arrow'></span>",
+f);u.attr("id","zTreeMove_arrow_tmp");u.appendTo(L);f.treeObj.trigger(d.event.DRAG,[a,f.treeId,n])}if(m.dragFlag==1){t&&u.attr("id")==a.target.id&&w&&a.clientX+G.scrollLeft()+2>B("#"+w+d.id.A,t).offset().left?(g=B("#"+w+d.id.A,t),a.target=g.length>0?g.get(0):a.target):t&&(t.removeClass(d.node.TMPTARGET_TREE),w&&B("#"+w+d.id.A,t).removeClass(d.node.TMPTARGET_NODE+"_"+d.move.TYPE_PREV).removeClass(d.node.TMPTARGET_NODE+"_"+I.move.TYPE_NEXT).removeClass(d.node.TMPTARGET_NODE+"_"+I.move.TYPE_INNER));
+w=t=null;J=!1;h=f;g=i.getSettings();for(var z in g)if(g[z].treeId&&g[z].edit.enable&&g[z].treeId!=f.treeId&&(a.target.id==g[z].treeId||B(a.target).parents("#"+g[z].treeId).length>0))J=!0,h=g[z];z=G.scrollTop();j=G.scrollLeft();p=h.treeObj.offset();b=h.treeObj.get(0).scrollHeight;g=h.treeObj.get(0).scrollWidth;c=a.clientY+z-p.top;var E=h.treeObj.height()+p.top-a.clientY-z,r=a.clientX+j-p.left,s=h.treeObj.width()+p.left-a.clientX-j,p=c<f.edit.drag.borderMax&&c>f.edit.drag.borderMin,o=E<f.edit.drag.borderMax&&
+E>f.edit.drag.borderMin,F=r<f.edit.drag.borderMax&&r>f.edit.drag.borderMin,v=s<f.edit.drag.borderMax&&s>f.edit.drag.borderMin,E=c>f.edit.drag.borderMin&&E>f.edit.drag.borderMin&&r>f.edit.drag.borderMin&&s>f.edit.drag.borderMin,r=p&&h.treeObj.scrollTop()<=0,s=o&&h.treeObj.scrollTop()+h.treeObj.height()+10>=b,M=F&&h.treeObj.scrollLeft()<=0,P=v&&h.treeObj.scrollLeft()+h.treeObj.width()+10>=g;if(a.target&&k.isChildOrSelf(a.target,h.treeId)){for(var D=a.target;D&&D.tagName&&!k.eqs(D.tagName,"li")&&D.id!=
+h.treeId;)D=D.parentNode;var R=!0;for(b=0,c=n.length;b<c;b++)if(g=n[b],D.id===g.tId){R=!1;break}else if(q(g,f).find("#"+D.id).length>0){R=!1;break}if(R&&a.target&&k.isChildOrSelf(a.target,D.id+d.id.A))t=B(D),w=D.id}g=n[0];if(E&&k.isChildOrSelf(a.target,h.treeId)){if(!t&&(a.target.id==h.treeId||r||s||M||P)&&(J||!J&&g.parentTId))t=h.treeObj;p?h.treeObj.scrollTop(h.treeObj.scrollTop()-10):o&&h.treeObj.scrollTop(h.treeObj.scrollTop()+10);F?h.treeObj.scrollLeft(h.treeObj.scrollLeft()-10):v&&h.treeObj.scrollLeft(h.treeObj.scrollLeft()+
+10);t&&t!=h.treeObj&&t.offset().left<h.treeObj.offset().left&&h.treeObj.scrollLeft(h.treeObj.scrollLeft()+t.offset().left-h.treeObj.offset().left)}C.css({top:a.clientY+z+3+"px",left:a.clientX+j+3+"px"});b=j=0;if(t&&t.attr("id")!=h.treeId){var A=w==null?null:i.getNodeCache(h,w),p=(a.ctrlKey||a.metaKey)&&f.edit.drag.isMove&&f.edit.drag.isCopy||!f.edit.drag.isMove&&f.edit.drag.isCopy;c=!!(H&&w===H.tId);F=!!(Q&&w===Q.tId);o=g.parentTId&&g.parentTId==w;g=(p||!F)&&k.apply(h.edit.drag.prev,[h.treeId,n,A],
+!!h.edit.drag.prev);c=(p||!c)&&k.apply(h.edit.drag.next,[h.treeId,n,A],!!h.edit.drag.next);p=(p||!o)&&!(h.data.keep.leaf&&!i.nodeIsParent(f,A))&&k.apply(h.edit.drag.inner,[h.treeId,n,A],!!h.edit.drag.inner);o=function(){t=null;w="";x=d.move.TYPE_INNER;u.css({display:"none"});if(window.zTreeMoveTimer)clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=null};if(!g&&!c&&!p)o();else if(F=B("#"+w+d.id.A,t),v=A.isLastNode?null:B("#"+A.getNextNode().tId+d.id.A,t.next()),E=F.offset().top,r=
+F.offset().left,s=g?p?0.25:c?0.5:1:-1,M=c?p?0.75:g?0.5:0:-1,z=(a.clientY+z-E)/F.height(),(s==1||z<=s&&z>=-0.2)&&g?(j=1-u.width(),b=E-u.height()/2,x=d.move.TYPE_PREV):(M==0||z>=M&&z<=1.2)&&c?(j=1-u.width(),b=v==null||i.nodeIsParent(f,A)&&A.open?E+F.height()-u.height()/2:v.offset().top-u.height()/2,x=d.move.TYPE_NEXT):p?(j=5-u.width(),b=E,x=d.move.TYPE_INNER):o(),t){u.css({display:"block",top:b+"px",left:r+j+"px"});F.addClass(d.node.TMPTARGET_NODE+"_"+x);if(S!=w||T!=x)K=(new Date).getTime();if(A&&i.nodeIsParent(f,
+A)&&x==d.move.TYPE_INNER&&(z=!0,window.zTreeMoveTimer&&window.zTreeMoveTargetNodeTId!==A.tId?(clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=null):window.zTreeMoveTimer&&window.zTreeMoveTargetNodeTId===A.tId&&(z=!1),z))window.zTreeMoveTimer=setTimeout(function(){x==d.move.TYPE_INNER&&A&&i.nodeIsParent(f,A)&&!A.open&&(new Date).getTime()-K>h.edit.drag.autoOpenTime&&k.apply(h.callback.beforeDragOpen,[h.treeId,A],!0)&&(e.switchNode(h,A),h.edit.drag.autoExpandTrigger&&h.treeObj.trigger(d.event.EXPAND,
+[h.treeId,A]))},h.edit.drag.autoOpenTime+50),window.zTreeMoveTargetNodeTId=A.tId}}else if(x=d.move.TYPE_INNER,t&&k.apply(h.edit.drag.inner,[h.treeId,n,null],!!h.edit.drag.inner)?t.addClass(d.node.TMPTARGET_TREE):t=null,u.css({display:"none"}),window.zTreeMoveTimer)clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=null;S=w;T=x;f.treeObj.trigger(d.event.DRAGMOVE,[a,f.treeId,n])}return!1}function l(a){if(window.zTreeMoveTimer)clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=
+null;T=S=null;G.unbind("mousemove",c);G.unbind("mouseup",l);G.unbind("selectstart",g);L.css("cursor","");t&&(t.removeClass(d.node.TMPTARGET_TREE),w&&B("#"+w+d.id.A,t).removeClass(d.node.TMPTARGET_NODE+"_"+d.move.TYPE_PREV).removeClass(d.node.TMPTARGET_NODE+"_"+I.move.TYPE_NEXT).removeClass(d.node.TMPTARGET_NODE+"_"+I.move.TYPE_INNER));k.showIfameMask(f,!1);y.showHoverDom=!0;if(m.dragFlag!=0){m.dragFlag=0;var b,j,o;for(b=0,j=n.length;b<j;b++)o=n[b],i.nodeIsParent(f,o)&&m.dragNodeShowBefore[o.tId]&&
+!o.open&&(e.expandCollapseNode(f,o,!o.open),delete m.dragNodeShowBefore[o.tId]);C&&C.remove();u&&u.remove();var r=(a.ctrlKey||a.metaKey)&&f.edit.drag.isMove&&f.edit.drag.isCopy||!f.edit.drag.isMove&&f.edit.drag.isCopy;!r&&t&&w&&n[0].parentTId&&w==n[0].parentTId&&x==d.move.TYPE_INNER&&(t=null);if(t){var p=w==null?null:i.getNodeCache(h,w);if(k.apply(f.callback.beforeDrop,[h.treeId,n,p,x,r],!0)==!1)e.selectNodes(v,n);else{var s=r?k.clone(n):n;b=function(){if(J){if(!r)for(var b=0,c=n.length;b<c;b++)e.removeNode(f,
+n[b]);x==d.move.TYPE_INNER?e.addNodes(h,p,-1,s):e.addNodes(h,p.getParentNode(),x==d.move.TYPE_PREV?p.getIndex():p.getIndex()+1,s)}else if(r&&x==d.move.TYPE_INNER)e.addNodes(h,p,-1,s);else if(r)e.addNodes(h,p.getParentNode(),x==d.move.TYPE_PREV?p.getIndex():p.getIndex()+1,s);else if(x!=d.move.TYPE_NEXT)for(b=0,c=s.length;b<c;b++)e.moveNode(h,p,s[b],x,!1);else for(b=-1,c=s.length-1;b<c;c--)e.moveNode(h,p,s[c],x,!1);e.selectNodes(h,s);b=q(s[0],f).get(0);e.scrollIntoView(f,b);f.treeObj.trigger(d.event.DROP,
+[a,h.treeId,s,p,x,r])};x==d.move.TYPE_INNER&&k.canAsync(h,p)?e.asyncNode(h,p,!1,b):b()}}else e.selectNodes(v,n),f.treeObj.trigger(d.event.DROP,[a,f.treeId,n,null,null,null])}}function g(){return!1}var o,j,f=i.getSetting(a.data.treeId),m=i.getRoot(f),y=i.getRoots();if(a.button==2||!f.edit.enable||!f.edit.drag.isCopy&&!f.edit.drag.isMove)return!0;var r=a.target,s=i.getRoot(f).curSelectedList,n=[];if(i.isSelectedNode(f,b))for(o=0,j=s.length;o<j;o++){if(s[o].editNameFlag&&k.eqs(r.tagName,"input")&&r.getAttribute("treeNode"+
+d.id.INPUT)!==null)return!0;n.push(s[o]);if(n[0].parentTId!==s[o].parentTId){n=[b];break}}else n=[b];e.editNodeBlur=!0;e.cancelCurEditNode(f);var G=B(f.treeObj.get(0).ownerDocument),L=B(f.treeObj.get(0).ownerDocument.body),C,u,t,J=!1,h=f,v=f,H,Q,S=null,T=null,w=null,x=d.move.TYPE_INNER,N=a.clientX,O=a.clientY,K=(new Date).getTime();k.uCanDo(f)&&G.bind("mousemove",c);G.bind("mouseup",l);G.bind("selectstart",g);return!0}};B.extend(!0,B.fn.zTree.consts,I);B.extend(!0,B.fn.zTree._z,{tools:{getAbs:function(a){a=
+a.getBoundingClientRect();return[a.left+(document.body.scrollLeft+document.documentElement.scrollLeft),a.top+(document.body.scrollTop+document.documentElement.scrollTop)]},inputFocus:function(a){a.get(0)&&(a.focus(),k.setCursorPosition(a.get(0),a.val().length))},inputSelect:function(a){a.get(0)&&(a.focus(),a.select())},setCursorPosition:function(a,b){if(a.setSelectionRange)a.focus(),a.setSelectionRange(b,b);else if(a.createTextRange){var c=a.createTextRange();c.collapse(!0);c.moveEnd("character",
+b);c.moveStart("character",b);c.select()}},showIfameMask:function(a,b){for(var c=i.getRoot(a);c.dragMaskList.length>0;)c.dragMaskList[0].remove(),c.dragMaskList.shift();if(b)for(var d=q("iframe",a),g=0,e=d.length;g<e;g++){var j=d.get(g),f=k.getAbs(j),j=q("<div id='zTreeMask_"+g+"' class='zTreeMask' style='top:"+f[1]+"px; left:"+f[0]+"px; width:"+j.offsetWidth+"px; height:"+j.offsetHeight+"px;'></div>",a);j.appendTo(q("body",a));c.dragMaskList.push(j)}}},view:{addEditBtn:function(a,b){if(!(b.editNameFlag||
+q(b,d.id.EDIT,a).length>0)&&k.apply(a.edit.showRenameBtn,[a.treeId,b],a.edit.showRenameBtn)){var c=q(b,d.id.A,a),l="<span class='"+d.className.BUTTON+" edit' id='"+b.tId+d.id.EDIT+"' title='"+k.apply(a.edit.renameTitle,[a.treeId,b],a.edit.renameTitle)+"' treeNode"+d.id.EDIT+" style='display:none;'></span>";c.append(l);q(b,d.id.EDIT,a).bind("click",function(){if(!k.uCanDo(a)||k.apply(a.callback.beforeEditName,[a.treeId,b],!0)==!1)return!1;e.editNode(a,b);return!1}).show()}},addRemoveBtn:function(a,
+b){if(!(b.editNameFlag||q(b,d.id.REMOVE,a).length>0)&&k.apply(a.edit.showRemoveBtn,[a.treeId,b],a.edit.showRemoveBtn)){var c=q(b,d.id.A,a),l="<span class='"+d.className.BUTTON+" remove' id='"+b.tId+d.id.REMOVE+"' title='"+k.apply(a.edit.removeTitle,[a.treeId,b],a.edit.removeTitle)+"' treeNode"+d.id.REMOVE+" style='display:none;'></span>";c.append(l);q(b,d.id.REMOVE,a).bind("click",function(){if(!k.uCanDo(a)||k.apply(a.callback.beforeRemove,[a.treeId,b],!0)==!1)return!1;e.removeNode(a,b);a.treeObj.trigger(d.event.REMOVE,
+[a.treeId,b]);return!1}).bind("mousedown",function(){return!0}).show()}},addHoverDom:function(a,b){if(i.getRoots().showHoverDom)b.isHover=!0,a.edit.enable&&(e.addEditBtn(a,b),e.addRemoveBtn(a,b)),k.apply(a.view.addHoverDom,[a.treeId,b])},cancelCurEditNode:function(a,b,c){var l=i.getRoot(a),g=l.curEditNode;if(g){var o=l.curEditInput,b=b?b:c?i.nodeName(a,g):o.val();if(k.apply(a.callback.beforeRename,[a.treeId,g,b,c],!0)===!1)return!1;i.nodeName(a,g,b);q(g,d.id.A,a).removeClass(d.node.CURSELECTED_EDIT);
+o.unbind();e.setNodeName(a,g);g.editNameFlag=!1;l.curEditNode=null;l.curEditInput=null;e.selectNode(a,g,!1);a.treeObj.trigger(d.event.RENAME,[a.treeId,g,c])}return l.noSelection=!0},editNode:function(a,b){var c=i.getRoot(a);e.editNodeBlur=!1;if(i.isSelectedNode(a,b)&&c.curEditNode==b&&b.editNameFlag)setTimeout(function(){k.inputFocus(c.curEditInput)},0);else{b.editNameFlag=!0;e.removeTreeDom(a,b);e.cancelCurEditNode(a);e.selectNode(a,b,!1);q(b,d.id.SPAN,a).html("<input type=text class='rename' id='"+
+b.tId+d.id.INPUT+"' treeNode"+d.id.INPUT+" >");var l=q(b,d.id.INPUT,a);l.attr("value",i.nodeName(a,b));a.edit.editNameSelectAll?k.inputSelect(l):k.inputFocus(l);l.bind("blur",function(){e.editNodeBlur||e.cancelCurEditNode(a)}).bind("keydown",function(b){b.keyCode=="13"?(e.editNodeBlur=!0,e.cancelCurEditNode(a)):b.keyCode=="27"&&e.cancelCurEditNode(a,null,!0)}).bind("click",function(){return!1}).bind("dblclick",function(){return!1});q(b,d.id.A,a).addClass(d.node.CURSELECTED_EDIT);c.curEditInput=l;
+c.noSelection=!1;c.curEditNode=b}},moveNode:function(a,b,c,l,g,k){var j=i.getRoot(a);if(b!=c&&(!a.data.keep.leaf||!b||i.nodeIsParent(a,b)||l!=d.move.TYPE_INNER)){var f=c.parentTId?c.getParentNode():j,m=b===null||b==j;m&&b===null&&(b=j);if(m)l=d.move.TYPE_INNER;j=b.parentTId?b.getParentNode():j;if(l!=d.move.TYPE_PREV&&l!=d.move.TYPE_NEXT)l=d.move.TYPE_INNER;if(l==d.move.TYPE_INNER)if(m)c.parentTId=null;else{if(!i.nodeIsParent(a,b))i.nodeIsParent(a,b,!0),b.open=!!b.open,e.setNodeLineIcos(a,b);c.parentTId=
+b.tId}var y;m?y=m=a.treeObj:(!k&&l==d.move.TYPE_INNER?e.expandCollapseNode(a,b,!0,!1):k||e.expandCollapseNode(a,b.getParentNode(),!0,!1),m=q(b,a),y=q(b,d.id.UL,a),m.get(0)&&!y.get(0)&&(y=[],e.makeUlHtml(a,b,y,""),m.append(y.join(""))),y=q(b,d.id.UL,a));var r=q(c,a);r.get(0)?m.get(0)||r.remove():r=e.appendNodes(a,c.level,[c],null,-1,!1,!0).join("");y.get(0)&&l==d.move.TYPE_INNER?y.append(r):m.get(0)&&l==d.move.TYPE_PREV?m.before(r):m.get(0)&&l==d.move.TYPE_NEXT&&m.after(r);var s;y=-1;var r=0,n=null,
+m=null,B=c.level,v=i.nodeChildren(a,f),C=i.nodeChildren(a,j),u=i.nodeChildren(a,b);if(c.isFirstNode){if(y=0,v.length>1)n=v[1],n.isFirstNode=!0}else if(c.isLastNode)y=v.length-1,n=v[y-1],n.isLastNode=!0;else for(j=0,s=v.length;j<s;j++)if(v[j].tId==c.tId){y=j;break}y>=0&&v.splice(y,1);if(l!=d.move.TYPE_INNER)for(j=0,s=C.length;j<s;j++)C[j].tId==b.tId&&(r=j);if(l==d.move.TYPE_INNER){u||(u=i.nodeChildren(a,b,[]));if(u.length>0)m=u[u.length-1],m.isLastNode=!1;u.splice(u.length,0,c);c.isLastNode=!0;c.isFirstNode=
+u.length==1}else b.isFirstNode&&l==d.move.TYPE_PREV?(C.splice(r,0,c),m=b,m.isFirstNode=!1,c.parentTId=b.parentTId,c.isFirstNode=!0,c.isLastNode=!1):b.isLastNode&&l==d.move.TYPE_NEXT?(C.splice(r+1,0,c),m=b,m.isLastNode=!1,c.parentTId=b.parentTId,c.isFirstNode=!1,c.isLastNode=!0):(l==d.move.TYPE_PREV?C.splice(r,0,c):C.splice(r+1,0,c),c.parentTId=b.parentTId,c.isFirstNode=!1,c.isLastNode=!1);i.fixPIdKeyValue(a,c);i.setSonNodeLevel(a,c.getParentNode(),c);e.setNodeLineIcos(a,c);e.repairNodeLevelClass(a,
+c,B);!a.data.keep.parent&&v.length<1?(i.nodeIsParent(a,f,!1),f.open=!1,b=q(f,d.id.UL,a),l=q(f,d.id.SWITCH,a),j=q(f,d.id.ICON,a),e.replaceSwitchClass(f,l,d.folder.DOCU),e.replaceIcoClass(f,j,d.folder.DOCU),b.css("display","none")):n&&e.setNodeLineIcos(a,n);m&&e.setNodeLineIcos(a,m);a.check&&a.check.enable&&e.repairChkClass&&(e.repairChkClass(a,f),e.repairParentChkClassWithSelf(a,f),f!=c.parent&&e.repairParentChkClassWithSelf(a,c));k||e.expandCollapseParentNode(a,c.getParentNode(),!0,g)}},removeEditBtn:function(a,
+b){q(b,d.id.EDIT,a).unbind().remove()},removeRemoveBtn:function(a,b){q(b,d.id.REMOVE,a).unbind().remove()},removeTreeDom:function(a,b){b.isHover=!1;e.removeEditBtn(a,b);e.removeRemoveBtn(a,b);k.apply(a.view.removeHoverDom,[a.treeId,b])},repairNodeLevelClass:function(a,b,c){if(c!==b.level){var e=q(b,a),g=q(b,d.id.A,a),a=q(b,d.id.UL,a),c=d.className.LEVEL+c,b=d.className.LEVEL+b.level;e.removeClass(c);e.addClass(b);g.removeClass(c);g.addClass(b);a.removeClass(c);a.addClass(b)}},selectNodes:function(a,
+b){for(var c=0,d=b.length;c<d;c++)e.selectNode(a,b[c],c>0)}},event:{},data:{setSonNodeLevel:function(a,b,c){if(c){var d=i.nodeChildren(a,c);c.level=b?b.level+1:0;if(d)for(var b=0,g=d.length;b<g;b++)d[b]&&i.setSonNodeLevel(a,c,d[b])}}}});var H=B.fn.zTree,k=H._z.tools,d=H.consts,e=H._z.view,i=H._z.data,q=k.$;i.exSetting({edit:{enable:!1,editNameSelectAll:!1,showRemoveBtn:!0,showRenameBtn:!0,removeTitle:"remove",renameTitle:"rename",drag:{autoExpandTrigger:!1,isCopy:!0,isMove:!0,prev:!0,next:!0,inner:!0,
+minMoveSize:5,borderMax:10,borderMin:-5,maxShowNodeNum:5,autoOpenTime:500}},view:{addHoverDom:null,removeHoverDom:null},callback:{beforeDrag:null,beforeDragOpen:null,beforeDrop:null,beforeEditName:null,beforeRename:null,onDrag:null,onDragMove:null,onDrop:null,onRename:null}});i.addInitBind(function(a){var b=a.treeObj,c=d.event;b.bind(c.RENAME,function(b,c,d,e){k.apply(a.callback.onRename,[b,c,d,e])});b.bind(c.DRAG,function(b,c,d,e){k.apply(a.callback.onDrag,[c,d,e])});b.bind(c.DRAGMOVE,function(b,
+c,d,e){k.apply(a.callback.onDragMove,[c,d,e])});b.bind(c.DROP,function(b,c,d,e,f,i,q){k.apply(a.callback.onDrop,[c,d,e,f,i,q])})});i.addInitUnBind(function(a){var a=a.treeObj,b=d.event;a.unbind(b.RENAME);a.unbind(b.DRAG);a.unbind(b.DRAGMOVE);a.unbind(b.DROP)});i.addInitCache(function(){});i.addInitNode(function(a,b,c){if(c)c.isHover=!1,c.editNameFlag=!1});i.addInitProxy(function(a){var b=a.target,c=i.getSetting(a.data.treeId),e=a.relatedTarget,g="",o=null,j="",f=null,m=null;if(k.eqs(a.type,"mouseover")){if(m=
+k.getMDom(c,b,[{tagName:"a",attrName:"treeNode"+d.id.A}]))g=k.getNodeMainDom(m).id,j="hoverOverNode"}else if(k.eqs(a.type,"mouseout"))m=k.getMDom(c,e,[{tagName:"a",attrName:"treeNode"+d.id.A}]),m||(g="remove",j="hoverOutNode");else if(k.eqs(a.type,"mousedown")&&(m=k.getMDom(c,b,[{tagName:"a",attrName:"treeNode"+d.id.A}])))g=k.getNodeMainDom(m).id,j="mousedownNode";if(g.length>0)switch(o=i.getNodeCache(c,g),j){case "mousedownNode":f=v.onMousedownNode;break;case "hoverOverNode":f=v.onHoverOverNode;
+break;case "hoverOutNode":f=v.onHoverOutNode}return{stop:!1,node:o,nodeEventType:j,nodeEventCallback:f,treeEventType:"",treeEventCallback:null}});i.addInitRoot(function(a){var a=i.getRoot(a),b=i.getRoots();a.curEditNode=null;a.curEditInput=null;a.curHoverNode=null;a.dragFlag=0;a.dragNodeShowBefore=[];a.dragMaskList=[];b.showHoverDom=!0});i.addZTreeTools(function(a,b){b.cancelEditName=function(a){i.getRoot(this.setting).curEditNode&&e.cancelCurEditNode(this.setting,a?a:null,!0)};b.copyNode=function(b,
+l,g,o){if(!l)return null;var j=i.nodeIsParent(a,b);if(b&&!j&&this.setting.data.keep.leaf&&g===d.move.TYPE_INNER)return null;var f=this,m=k.clone(l);if(!b)b=null,g=d.move.TYPE_INNER;g==d.move.TYPE_INNER?(l=function(){e.addNodes(f.setting,b,-1,[m],o)},k.canAsync(this.setting,b)?e.asyncNode(this.setting,b,o,l):l()):(e.addNodes(this.setting,b.parentNode,-1,[m],o),e.moveNode(this.setting,b,m,g,!1,o));return m};b.editName=function(a){a&&a.tId&&a===i.getNodeCache(this.setting,a.tId)&&(a.parentTId&&e.expandCollapseParentNode(this.setting,
+a.getParentNode(),!0),e.editNode(this.setting,a))};b.moveNode=function(b,l,g,o){function j(){e.moveNode(m.setting,b,l,g,!1,o)}if(!l)return l;var f=i.nodeIsParent(a,b);if(b&&!f&&this.setting.data.keep.leaf&&g===d.move.TYPE_INNER)return null;else if(b&&(l.parentTId==b.tId&&g==d.move.TYPE_INNER||q(l,this.setting).find("#"+b.tId).length>0))return null;else b||(b=null);var m=this;k.canAsync(this.setting,b)&&g===d.move.TYPE_INNER?e.asyncNode(this.setting,b,o,j):j();return l};b.setEditable=function(a){this.setting.edit.enable=
+a;return this.refresh()}});var N=e.cancelPreSelectedNode;e.cancelPreSelectedNode=function(a,b){for(var c=i.getRoot(a).curSelectedList,d=0,g=c.length;d<g;d++)if(!b||b===c[d])if(e.removeTreeDom(a,c[d]),b)break;N&&N.apply(e,arguments)};var O=e.createNodes;e.createNodes=function(a,b,c,d,g){O&&O.apply(e,arguments);c&&e.repairParentChkClassWithSelf&&e.repairParentChkClassWithSelf(a,d)};var V=e.makeNodeUrl;e.makeNodeUrl=function(a,b){return a.edit.enable?null:V.apply(e,arguments)};var K=e.removeNode;e.removeNode=
+function(a,b){var c=i.getRoot(a);if(c.curEditNode===b)c.curEditNode=null;K&&K.apply(e,arguments)};var P=e.selectNode;e.selectNode=function(a,b,c){var d=i.getRoot(a);if(i.isSelectedNode(a,b)&&d.curEditNode==b&&b.editNameFlag)return!1;P&&P.apply(e,arguments);e.addHoverDom(a,b);return!0};var U=k.uCanDo;k.uCanDo=function(a,b){var c=i.getRoot(a);if(b&&(k.eqs(b.type,"mouseover")||k.eqs(b.type,"mouseout")||k.eqs(b.type,"mousedown")||k.eqs(b.type,"mouseup")))return!0;if(c.curEditNode)e.editNodeBlur=!1,c.curEditInput.focus();
+return!c.curEditNode&&(U?U.apply(e,arguments):!0)}})(jQuery);
+/*
+ * JQuery zTree exHideNodes v3.5.37
+ * http://treejs.cn/
+ *
+ * Copyright (c) 2010 Hunter.z
+ *
+ * Licensed same as jquery - MIT License
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ * email: hunter.z@263.net
+ * Date: 2018-08-21
+ */
+(function(j){j.extend(!0,j.fn.zTree._z,{view:{clearOldFirstNode:function(c,a){for(var b=a.getNextNode();b;){if(b.isFirstNode){b.isFirstNode=!1;e.setNodeLineIcos(c,b);break}if(b.isLastNode)break;b=b.getNextNode()}},clearOldLastNode:function(c,a,b){for(a=a.getPreNode();a;){if(a.isLastNode){a.isLastNode=!1;b&&e.setNodeLineIcos(c,a);break}if(a.isFirstNode)break;a=a.getPreNode()}},makeDOMNodeMainBefore:function(c,a,b){a=d.isHidden(a,b);c.push("<li ",a?"style='display:none;' ":"","id='",b.tId,"' class='",
+l.className.LEVEL,b.level,"' tabindex='0' hidefocus='true' treenode>")},showNode:function(c,a){d.isHidden(c,a,!1);d.initShowForExCheck(c,a);k(a,c).show()},showNodes:function(c,a,b){if(a&&a.length!=0){var f={},g,i;for(g=0,i=a.length;g<i;g++){var h=a[g];if(!f[h.parentTId]){var u=h.getParentNode();f[h.parentTId]=u===null?d.getRoot(c):h.getParentNode()}e.showNode(c,h,b)}for(var j in f)a=d.nodeChildren(c,f[j]),e.setFirstNodeForShow(c,a),e.setLastNodeForShow(c,a)}},hideNode:function(c,a){d.isHidden(c,a,
+!0);a.isFirstNode=!1;a.isLastNode=!1;d.initHideForExCheck(c,a);e.cancelPreSelectedNode(c,a);k(a,c).hide()},hideNodes:function(c,a,b){if(a&&a.length!=0){var f={},g,i;for(g=0,i=a.length;g<i;g++){var h=a[g];if((h.isFirstNode||h.isLastNode)&&!f[h.parentTId]){var j=h.getParentNode();f[h.parentTId]=j===null?d.getRoot(c):h.getParentNode()}e.hideNode(c,h,b)}for(var k in f)a=d.nodeChildren(c,f[k]),e.setFirstNodeForHide(c,a),e.setLastNodeForHide(c,a)}},setFirstNode:function(c,a){var b=d.nodeChildren(c,a),f=
+d.isHidden(c,b[0],!1);b.length>0&&!f?b[0].isFirstNode=!0:b.length>0&&e.setFirstNodeForHide(c,b)},setLastNode:function(c,a){var b=d.nodeChildren(c,a),f=d.isHidden(c,b[0]);b.length>0&&!f?b[b.length-1].isLastNode=!0:b.length>0&&e.setLastNodeForHide(c,b)},setFirstNodeForHide:function(c,a){var b,f,g;for(f=0,g=a.length;f<g;f++){b=a[f];if(b.isFirstNode)break;if(!d.isHidden(c,b)&&!b.isFirstNode){b.isFirstNode=!0;e.setNodeLineIcos(c,b);break}else b=null}return b},setFirstNodeForShow:function(c,a){var b,f,
+g,i,h;for(f=0,g=a.length;f<g;f++){b=a[f];var j=d.isHidden(c,b);if(!i&&!j&&b.isFirstNode){i=b;break}else if(!i&&!j&&!b.isFirstNode)b.isFirstNode=!0,i=b,e.setNodeLineIcos(c,b);else if(i&&b.isFirstNode){b.isFirstNode=!1;h=b;e.setNodeLineIcos(c,b);break}}return{"new":i,old:h}},setLastNodeForHide:function(c,a){var b,f;for(f=a.length-1;f>=0;f--){b=a[f];if(b.isLastNode)break;if(!d.isHidden(c,b)&&!b.isLastNode){b.isLastNode=!0;e.setNodeLineIcos(c,b);break}else b=null}return b},setLastNodeForShow:function(c,
+a){var b,f,g,i;for(f=a.length-1;f>=0;f--){b=a[f];var h=d.isHidden(c,b);if(!g&&!h&&b.isLastNode){g=b;break}else if(!g&&!h&&!b.isLastNode)b.isLastNode=!0,g=b,e.setNodeLineIcos(c,b);else if(g&&b.isLastNode){b.isLastNode=!1;i=b;e.setNodeLineIcos(c,b);break}}return{"new":g,old:i}}},data:{initHideForExCheck:function(c,a){if(d.isHidden(c,a)&&c.check&&c.check.enable){if(typeof a._nocheck=="undefined")a._nocheck=!!a.nocheck,a.nocheck=!0;a.check_Child_State=-1;e.repairParentChkClassWithSelf&&e.repairParentChkClassWithSelf(c,
+a)}},initShowForExCheck:function(c,a){if(!d.isHidden(c,a)&&c.check&&c.check.enable){if(typeof a._nocheck!="undefined")a.nocheck=a._nocheck,delete a._nocheck;if(e.setChkClass){var b=k(a,l.id.CHECK,c);e.setChkClass(c,b,a)}e.repairParentChkClassWithSelf&&e.repairParentChkClassWithSelf(c,a)}}}});var j=j.fn.zTree,m=j._z.tools,l=j.consts,e=j._z.view,d=j._z.data,k=m.$;d.isHidden=function(c,a,b){if(!a)return!1;c=c.data.key.isHidden;typeof b!=="undefined"&&(typeof b==="string"&&(b=m.eqs(checked,"true")),a[c]=
+!!b);return a[c]};d.exSetting({data:{key:{isHidden:"isHidden"}}});d.addInitNode(function(c,a,b){a=d.isHidden(c,b);d.isHidden(c,b,a);d.initHideForExCheck(c,b)});d.addBeforeA(function(){});d.addZTreeTools(function(c,a){a.showNodes=function(a,b){e.showNodes(c,a,b)};a.showNode=function(a,b){a&&e.showNodes(c,[a],b)};a.hideNodes=function(a,b){e.hideNodes(c,a,b)};a.hideNode=function(a,b){a&&e.hideNodes(c,[a],b)};var b=a.checkNode;if(b)a.checkNode=function(f,e,i,h){(!f||!d.isHidden(c,f))&&b.apply(a,arguments)}});
+var n=d.initNode;d.initNode=function(c,a,b,f,g,i,h){var j=(f?f:d.getRoot(c))[c.data.key.children];d.tmpHideFirstNode=e.setFirstNodeForHide(c,j);d.tmpHideLastNode=e.setLastNodeForHide(c,j);h&&(e.setNodeLineIcos(c,d.tmpHideFirstNode),e.setNodeLineIcos(c,d.tmpHideLastNode));g=d.tmpHideFirstNode===b;i=d.tmpHideLastNode===b;n&&n.apply(d,arguments);h&&i&&e.clearOldLastNode(c,b,h)};var o=d.makeChkFlag;if(o)d.makeChkFlag=function(c,a){(!a||!d.isHidden(c,a))&&o.apply(d,arguments)};var p=d.getTreeCheckedNodes;
+if(p)d.getTreeCheckedNodes=function(c,a,b,f){if(a&&a.length>0){var e=a[0].getParentNode();if(e&&d.isHidden(c,e))return[]}return p.apply(d,arguments)};var q=d.getTreeChangeCheckedNodes;if(q)d.getTreeChangeCheckedNodes=function(c,a,b){if(a&&a.length>0){var e=a[0].getParentNode();if(e&&d.isHidden(c,e))return[]}return q.apply(d,arguments)};var r=e.expandCollapseSonNode;if(r)e.expandCollapseSonNode=function(c,a,b,f,g){(!a||!d.isHidden(c,a))&&r.apply(e,arguments)};var s=e.setSonNodeCheckBox;if(s)e.setSonNodeCheckBox=
+function(c,a,b,f){(!a||!d.isHidden(c,a))&&s.apply(e,arguments)};var t=e.repairParentChkClassWithSelf;if(t)e.repairParentChkClassWithSelf=function(c,a){(!a||!d.isHidden(c,a))&&t.apply(e,arguments)}})(jQuery);
+
+
+
+
+  TreeSelect.prototype.render = function (options) {
+    var elem = options.elem,
+      // 请求地址
+      data = options.data,
+      // 请求头
+      headers = options.headers,
+      // 请求方式
+      type = options.type === undefined ? 'GET' : options.type,
+      // 节点点击回调
+      click = options.click,
+      // 渲染成功后的回调函数
+      success = options.success,
+      // 占位符（提示信息）
+      placeholder = options.placeholder === undefined ? '请选择' : options.placeholder,
+      // 是否开启搜索
+      search = options.search === undefined ? false : options.search,
+      // 样式配置项
+      style = options.style,
+      // 唯一id
+      tmp = new Date().getTime(),
+      DATA = {},
+      selected = 'layui-form-selected',
+      TREE_OBJ = undefined,
+      TREE_INPUT_ID = 'treeSelect-input-' + tmp,
+      TREE_INPUT_CLASS = 'layui-treeselect',
+      TREE_SELECT_ID = 'layui-treeSelect-' + tmp,
+      TREE_SELECT_CLASS = 'layui-treeSelect',
+      TREE_SELECT_TITLE_ID = 'layui-select-title-' + tmp,
+      TREE_SELECT_TITLE_CLASS = 'layui-select-title',
+      TREE_SELECT_BODY_ID = 'layui-treeSelect-body-' + tmp,
+      TREE_SELECT_BODY_CLASS = 'layui-treeSelect-body',
+      TREE_SELECT_SEARCHED_CLASS = 'layui-treeSelect-search-ed';
+
+
+    var a = {
+      init: function () {
+        $.ajax({
+          url: data,
+          type: type,
+          headers: headers,
+          dataType: 'json',
+          success: function (d) {
+            DATA = d;
+            a.hideElem().input().toggleSelect().loadCss().preventEvent();
+            $.fn.zTree.init($('#' + TREE_SELECT_BODY_ID), a.setting(), d);
+            TREE_OBJ = $.fn.zTree.getZTreeObj(TREE_SELECT_BODY_ID);
+            if (search) {
+              a.searchParam();
+            }
+            a.configStyle();
+            if (success) {
+              var obj = {
+                treeId: TREE_SELECT_ID,
+                data: d
+              };
+              success(obj);
+            }
+          }
+        });
+        return a;
+      },
+      // 检查input是否有默认值
+      checkDefaultValue: function () {
+
+      },
+      setting: function () {
+        var setting = {
+          callback: {
+            onClick: a.onClick,
+            onExpand: a.onExpand,
+            onCollapse: a.onCollapse,
+            beforeExpand: a.ztreeCallBack.beforeExpand
+          }
+        };
+        return setting;
+      },
+      ztreeCallBack: {
+        beforeExpand: function () {
+          a.configStyle();
+        },
+      },
+      onCollapse: function () {
+        a.focusInput();
+      },
+      onExpand: function () {
+        a.configStyle();
+        a.focusInput();
+      },
+      focusInput: function () {
+        $('#' + TREE_INPUT_ID).focus();
+      },
+      onClick: function (event, treeId, treeNode) {
+        var name = treeNode.name,
+          id = treeNode.id,
+          $input = $('#' + TREE_SELECT_TITLE_ID + ' input');
+        $input.val(name);
+        $(elem).attr('value', id).val(id);
+        $('#' + TREE_SELECT_ID).removeClass(selected);
+
+        if (click) {
+          var obj = {
+            data: DATA,
+            current: treeNode,
+            treeId: TREE_SELECT_ID
+          };
+          click(obj);
+        }
+        return a;
+      },
+      hideElem: function () {
+        $(elem).hide();
+        return a;
+      },
+      input: function () {
+        var readonly = '';
+        if (!search) {
+          readonly = 'readonly';
+        }
+        var selectHtml = '<div class="' + TREE_SELECT_CLASS + ' layui-unselect layui-form-select" id="' + TREE_SELECT_ID + '">' +
+          '<div class="' + TREE_SELECT_TITLE_CLASS + '" id="' + TREE_SELECT_TITLE_ID + '">' +
+          ' <input type="text" id="' + TREE_INPUT_ID + '" placeholder="' + placeholder + '" value="" ' + readonly + ' class="layui-input layui-unselect">' +
+          '<i class="layui-edge"></i>' +
+          '</div>' +
+          '<div class="layui-anim layui-anim-upbit" style="">' +
+          '<div class="' + TREE_SELECT_BODY_CLASS + ' ztree" id="' + TREE_SELECT_BODY_ID + '"></div>' +
+          '</div>' +
+          '</div>';
+        $(elem).parent().append(selectHtml);
+        return a;
+      },
+      /**
+       * 展开/折叠下拉框
+       */
+      toggleSelect: function () {
+        var item = '#' + TREE_SELECT_TITLE_ID;
+        a.event('click', item, function (e) {
+          var $select = $('#' + TREE_SELECT_ID);
+          if ($select.hasClass(selected)) {
+            $select.removeClass(selected);
+            $('#' + TREE_INPUT_ID).blur();
+          } else {
+            // 隐藏其他picker
+            $('.layui-form-select').removeClass(selected);
+            // 显示当前picker
+            $select.addClass(selected);
+          }
+          e.stopPropagation();
+        });
+        $(document).click(function () {
+          var $select = $('#' + TREE_SELECT_ID);
+          if ($select.hasClass(selected)) {
+            $select.removeClass(selected);
+            $('#' + TREE_INPUT_ID).blur();
+          }
+        });
+        return a;
+      },
+      // 模糊查询
+      searchParam: function () {
+        if (!search) {
+          return;
+        }
+
+        var item = '#' + TREE_INPUT_ID;
+        a.fuzzySearch(item, null, true);
+      },
+      fuzzySearch: function (searchField, isHighLight, isExpand) {
+        var zTreeObj = TREE_OBJ;//get the ztree object by ztree id
+        if (!zTreeObj) {
+          alert("fail to get ztree object");
+        }
+        var nameKey = zTreeObj.setting.data.key.name; //get the key of the node name
+        isHighLight = isHighLight === false ? false : true;//default true, only use false to disable highlight
+        isExpand = isExpand ? true : false; // not to expand in default
+        zTreeObj.setting.view.nameIsHTML = isHighLight; //allow use html in node name for highlight use
+
+        var metaChar = '[\\[\\]\\\\\^\\$\\.\\|\\?\\*\\+\\(\\)]'; //js meta characters
+        var rexMeta = new RegExp(metaChar, 'gi');//regular expression to match meta characters
+
+        // keywords filter function 
+        function ztreeFilter(zTreeObj, _keywords, callBackFunc) {
+          if (!_keywords) {
+            _keywords = ''; //default blank for _keywords 
+          }
+
+          // function to find the matching node
+          function filterFunc(node) {
+            if (node && node.oldname && node.oldname.length > 0) {
+              node[nameKey] = node.oldname; //recover oldname of the node if exist
+            }
+            zTreeObj.updateNode(node); //update node to for modifications take effect
+            if (_keywords.length == 0) {
+              //return true to show all nodes if the keyword is blank
+              zTreeObj.showNode(node);
+              zTreeObj.expandNode(node, isExpand);
+              return true;
+            }
+            //transform node name and keywords to lowercase
+            if (node[nameKey] && node[nameKey].toLowerCase().indexOf(_keywords.toLowerCase()) != -1) {
+              zTreeObj.showNode(node);//show node with matching keywords
+              return true; //return true and show this node
+            }
+
+            zTreeObj.hideNode(node); // hide node that not matched
+            return false; //return false for node not matched
+          }
+
+          var nodesShow = zTreeObj.getNodesByFilter(filterFunc); //get all nodes that would be shown
+          processShowNodes(nodesShow, _keywords);//nodes should be reprocessed to show correctly
+        }
+
+        /**
+         * reprocess of nodes before showing
+         */
+        function processShowNodes(nodesShow, _keywords) {
+          if (nodesShow && nodesShow.length > 0) {
+            //process the ancient nodes if _keywords is not blank
+            if (_keywords.length > 0) {
+              $.each(nodesShow, function (n, obj) {
+                var pathOfOne = obj.getPath();//get all the ancient nodes including current node
+                if (pathOfOne && pathOfOne.length > 0) {
+                  //i < pathOfOne.length-1 process every node in path except self
+                  for (var i = 0; i < pathOfOne.length - 1; i++) {
+                    zTreeObj.showNode(pathOfOne[i]); //show node 
+                    zTreeObj.expandNode(pathOfOne[i], true); //expand node
+                  }
+                }
+              });
+            } else { //show all nodes when _keywords is blank and expand the root nodes
+              var rootNodes = zTreeObj.getNodesByParam('level', '0');//get all root nodes
+              $.each(rootNodes, function (n, obj) {
+                zTreeObj.expandNode(obj, true); //expand all root nodes
+              });
+            }
+          }
+        }
+
+        //listen to change in input element
+        $(searchField).bind('input propertychange', function () {
+          var _keywords = $(this).val();
+          searchNodeLazy(_keywords); //call lazy load
+        });
+
+        var timeoutId = null;
+        // excute lazy load once after input change, the last pending task will be cancled  
+        function searchNodeLazy(_keywords) {
+          if (timeoutId) {
+            //clear pending task
+            clearTimeout(timeoutId);
+          }
+          timeoutId = setTimeout(function () {
+            ztreeFilter(zTreeObj, _keywords); //lazy load ztreeFilter function 
+            $(searchField).focus();//focus input field again after filtering
+          }, 500);
+        }
+      },
+      checkNodes: function (nodes) {
+        for (var i = 0; i < nodes.length; i++) {
+          var o = nodes[i],
+            pid = o.parentTId,
+            tid = o.tId;
+          if (pid !== null) {
+            // 获取父节点
+            $('#' + pid).addClass(TREE_SELECT_SEARCHED_CLASS);
+            var pNode = TREE_OBJ.getNodesByParam("tId", pid, null);
+            TREE_OBJ.expandNode(pNode[0], true, false, true);
+          }
+          $('#' + tid).addClass(TREE_SELECT_SEARCHED_CLASS);
+        }
+      },
+      // 阻止Layui的一些默认事件
+      preventEvent: function () {
+        var item = '#' + TREE_SELECT_ID + ' .layui-anim';
+        a.event('click', item, function (e) {
+          e.stopPropagation();
+        });
+        return a;
+      },
+      loadCss: function () {
+        var ztree = '.ztree *{padding:0;margin:0;font-size:12px;font-family:Verdana,Arial,Helvetica,AppleGothic,sans-serif}.ztree{margin:0;padding:5px;color:#333}.ztree li{padding:0;margin:0;list-style:none;line-height:14px;text-align:left;white-space:nowrap;outline:0}.ztree li ul{margin:0;padding:0 0 0 18px}.ztree li ul.line{background:url(./img/line_conn.gif) 0 0 repeat-y;}.ztree li a{padding:1px 3px 0 0;margin:0;cursor:pointer;height:17px;color:#333;background-color:transparent;text-decoration:none;vertical-align:top;display:inline-block}.ztree li a:hover{text-decoration:underline}.ztree li a.curSelectedNode{padding-top:0px;background-color:#FFE6B0;color:black;height:16px;border:1px #FFB951 solid;opacity:0.8;}.ztree li a.curSelectedNode_Edit{padding-top:0px;background-color:#FFE6B0;color:black;height:16px;border:1px #FFB951 solid;opacity:0.8;}.ztree li a.tmpTargetNode_inner{padding-top:0px;background-color:#316AC5;color:white;height:16px;border:1px #316AC5 solid;opacity:0.8;filter:alpha(opacity=80)}.ztree li a.tmpTargetNode_prev{}.ztree li a.tmpTargetNode_next{}.ztree li a input.rename{height:14px;width:80px;padding:0;margin:0;font-size:12px;border:1px #7EC4CC solid;*border:0px}.ztree li span{line-height:16px;margin-right:2px}.ztree li span.button{line-height:0;margin:0;width:16px;height:16px;display:inline-block;vertical-align:middle;border:0 none;cursor:pointer;outline:none;background-color:transparent;background-repeat:no-repeat;background-attachment:scroll;background-image:url("./img/zTreeStandard.png");*background-image:url("./img/zTreeStandard.gif")}.ztree li span.button.chk{width:13px;height:13px;margin:0 3px 0 0;cursor:auto}.ztree li span.button.chk.checkbox_false_full{background-position:0 0}.ztree li span.button.chk.checkbox_false_full_focus{background-position:0 -14px}.ztree li span.button.chk.checkbox_false_part{background-position:0 -28px}.ztree li span.button.chk.checkbox_false_part_focus{background-position:0 -42px}.ztree li span.button.chk.checkbox_false_disable{background-position:0 -56px}.ztree li span.button.chk.checkbox_true_full{background-position:-14px 0}.ztree li span.button.chk.checkbox_true_full_focus{background-position:-14px -14px}.ztree li span.button.chk.checkbox_true_part{background-position:-14px -28px}.ztree li span.button.chk.checkbox_true_part_focus{background-position:-14px -42px}.ztree li span.button.chk.checkbox_true_disable{background-position:-14px -56px}.ztree li span.button.chk.radio_false_full{background-position:-28px 0}.ztree li span.button.chk.radio_false_full_focus{background-position:-28px -14px}.ztree li span.button.chk.radio_false_part{background-position:-28px -28px}.ztree li span.button.chk.radio_false_part_focus{background-position:-28px -42px}.ztree li span.button.chk.radio_false_disable{background-position:-28px -56px}.ztree li span.button.chk.radio_true_full{background-position:-42px 0}.ztree li span.button.chk.radio_true_full_focus{background-position:-42px -14px}.ztree li span.button.chk.radio_true_part{background-position:-42px -28px}.ztree li span.button.chk.radio_true_part_focus{background-position:-42px -42px}.ztree li span.button.chk.radio_true_disable{background-position:-42px -56px}.ztree li span.button.switch{width:18px;height:18px}.ztree li span.button.root_open{background-position:-92px -54px}.ztree li span.button.root_close{background-position:-74px -54px}.ztree li span.button.roots_open{background-position:-92px 0}.ztree li span.button.roots_close{background-position:-74px 0}.ztree li span.button.center_open{background-position:-92px -18px}.ztree li span.button.center_close{background-position:-74px -18px}.ztree li span.button.bottom_open{background-position:-92px -36px}.ztree li span.button.bottom_close{background-position:-74px -36px}.ztree li span.button.noline_open{background-position:-92px -72px}.ztree li span.button.noline_close{background-position:-74px -72px}.ztree li span.button.root_docu{background:none;}.ztree li span.button.roots_docu{background-position:-56px 0}.ztree li span.button.center_docu{background-position:-56px -18px}.ztree li span.button.bottom_docu{background-position:-56px -36px}.ztree li span.button.noline_docu{background:none;}.ztree li span.button.ico_open{margin-right:2px;background-position:-110px -16px;vertical-align:top;*vertical-align:middle}.ztree li span.button.ico_close{margin-right:2px;background-position:-110px 0;vertical-align:top;*vertical-align:middle}.ztree li span.button.ico_docu{margin-right:2px;background-position:-110px -32px;vertical-align:top;*vertical-align:middle}.ztree li span.button.edit{margin-right:2px;background-position:-110px -48px;vertical-align:top;*vertical-align:middle}.ztree li span.button.remove{margin-right:2px;background-position:-110px -64px;vertical-align:top;*vertical-align:middle}.ztree li span.button.ico_loading{margin-right:2px;background:url(./img/loading.gif) no-repeat scroll 0 0 transparent;vertical-align:top;*vertical-align:middle}ul.tmpTargetzTree{background-color:#FFE6B0;opacity:0.8;filter:alpha(opacity=80)}span.tmpzTreeMove_arrow{width:16px;height:16px;display:inline-block;padding:0;margin:2px 0 0 1px;border:0 none;position:absolute;background-color:transparent;background-repeat:no-repeat;background-attachment:scroll;background-position:-110px -80px;background-image:url("./img/zTreeStandard.png");*background-image:url("./img/zTreeStandard.gif")}ul.ztree.zTreeDragUL{margin:0;padding:0;position:absolute;width:auto;height:auto;overflow:hidden;background-color:#cfcfcf;border:1px #00B83F dotted;opacity:0.8;filter:alpha(opacity=80)}.zTreeMask{z-index:10000;background-color:#cfcfcf;opacity:0.0;filter:alpha(opacity=0);position:absolute}',
+          ztree_ex = '.layui-treeSelect .ztree li span.button{font-family:layui-icon!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:none;line-height:inherit;}.layui-treeSelect .ztree li span.button.ico_open{display:none;}.layui-treeSelect .ztree li span.button.ico_close{display:none;}.layui-treeSelect .ztree li span.button.ico_docu:before{content:"\\e621";}.layui-treeSelect .ztree li span.button.bottom_close:before,.layui-treeSelect .ztree li span.button.center_close:before,.layui-treeSelect .ztree li span.button.roots_close:before,.layui-treeSelect .ztree li span.button.root_close:before{content:"\\e623";}.layui-treeSelect .ztree li span.button.bottom_open:before,.layui-treeSelect .ztree li span.button.roots_open:before,.layui-treeSelect .ztree li span.button.center_open:before,.layui-treeSelect .ztree li span.button.root_open:before{content:"\\e625";}.layui-treeSelect .ztree li a:hover{text-decoration:none;}.layui-treeSelect .ztree *{font-size:14px;}.layui-treeSelect .ztree li{line-height:inherit;padding:2px 0;}.layui-treeSelect .ztree li span.button.switch{position:relative;top:-1px;}.layui-treeSelect .ztree li a,.ztree li span{line-height:18px;height:inherit;}.layui-treeSelect .ztree li a.curSelectedNode{color:#5FB878;background:none;border:none;height:inherit;padding-top:1px;}.layui-treeSelect .layui-anim::-webkit-scrollbar{width:6px;height:6px;background-color:#F5F5F5;}.layui-treeSelect .layui-anim::-webkit-scrollbar-track{box-shadow:inset 0 0 6px rgba(107,98,98,0.3);border-radius:10px;background-color:#F5F5F5;}.layui-treeSelect .layui-anim::-webkit-scrollbar-thumb{border-radius:10px;box-shadow:inset 0 0 6px rgba(107,98,98,0.3);background-color:#555;}.layui-treeSelect.layui-form-select .layui-anim{display:none;position:absolute;left:0;top:42px;padding:5px 0;z-index:9999;min-width:100%;border:1px solid #d2d2d2;max-height:300px;overflow-y:auto;background-color:#fff;border-radius:2px;box-shadow:0 2px 4px rgba(0,0,0,.12);box-sizing:border-box;}.layui-treeSelect.layui-form-selected .layui-anim{display:block;}.layui-treeSelect .ztree li ul.line{background:none;position:relative;}.layui-treeSelect .ztree li ul.line:before{content:"";height:100%;border-left:1px dotted #ece;position:absolute;left:8px;}.layui-treeSelect .ztree li .center_docu:before,.ztree li .bottom_docu::before{content:"";height:100%;border-left:1px dotted #ece;position:absolute;left:8px;}.layui-treeSelect .ztree li .center_docu::after,.ztree li .bottom_docu::after{content:"";position:absolute;left:8px;top:8px;width:8px;border-top:1px dotted #ece;}.layui-treeSelect .ztree li span.button.ico_open{display:inline-block;position:relative;top:1px;}.layui-treeSelect .ztree li span.button.ico_close{display:inline-block;position:relative;top:1px;}.layui-treeSelect .ztree li span.button.ico_open:before{content:"\\e643";}.layui-treeSelect .ztree li span.button.ico_close:before{content:"\\e63f";}';
+        $head = $('head'),
+          ztreeStyle = $head.find('style[ztree]');
+
+        if (ztreeStyle.length === 0) {
+          $head.append($('<style ztree>').append(ztree).append(ztree_ex))
+        }
+        return a;
+      },
+      configStyle: function () {
+        if (style == undefined || style.line == undefined || !style.line.enable) {
+          $('#' + TREE_SELECT_ID).find('li .center_docu,li .bottom_docu').hide();
+          //.layui-treeSelect .ztree li .center_docu:before, .ztree li .bottom_docu::before
+        }
+
+        if (style == undefined || style.folder == undefined || !style.folder.enable) {
+          $('#' + TREE_SELECT_ID).find('li span.button.ico_open').hide();
+          $('#' + TREE_SELECT_ID).find('li span.button.ico_close').hide();
+        }
+      },
+      event: function (evt, el, fn) {
+        $('body').on(evt, el, fn);
+      }
+    };
+    a.init();
+    return new TreeSelect();
+  };
+
+  /**
+   * 重新加载trerSelect
+   * @param filter
+   */
+  TreeSelect.prototype.refresh = function (filter) {
+      var treeObj = obj.treeObj(filter);
+      treeObj.reAsyncChildNodes(null, "refresh");
+  };
+
+  /**
+   * 选中节点，因为tree是异步加载，所以必须在success回调中调用checkNode函数，否则无法获取生成的DOM元素
+   * @param filter lay-filter属性
+   * @param id 选中的id
+   */
+  TreeSelect.prototype.checkNode = function(filter, id){
+    var o = obj.filter(filter),
+        treeInput = o.find('.layui-select-title input'),
+        treeObj = obj.treeObj(filter),
+        node = treeObj.getNodeByParam("id", id, null),
+        name = node.name;
+    treeInput.val(name);
+    o.find('a[treenode_a]').removeClass('curSelectedNode');
+    obj.get(filter).val(id).attr('value', id);
+    treeObj.selectNode(node);
+  };
+
+  /**
+   * 撤销选中的节点
+   * @param filter lay-filter属性
+   * @param fn 回调函数
+   */
+  TreeSelect.prototype.revokeNode = function(filter, fn){
+    var o = obj.filter(filter);
+    o.find('a[treenode_a]').removeClass('curSelectedNode');
+    o.find('.layui-select-title input.layui-input').val('');
+    obj.get(filter).attr('value', '').val('');
+    // obj.treeObj(filter).expandAll(false);
+    if (fn){
+      fn({
+        treeId: o.attr('id')
+      });
+    }
+  }
+
+  /**
+   * 销毁组件
+   */
+  TreeSelect.prototype.destroy = function(filter) {
+    var o = obj.filter(filter);
+    o.remove();
+    obj.get(filter).show();
+  }
+
+  /**
+   * 获取zTree对象，可调用所有zTree函数
+   * @param filter
+   */
+  TreeSelect.prototype.zTree = function (filter) {
+    return obj.treeObj(filter);
+  };
+
+  var obj = {
+    get: function(filter){
+      if (!filter) {
+        layui.hint().error('filter 不能为空');
+      }
+      return $('*[lay-filter='+ filter +']');
+    },
+    filter: function(filter){
+      var tf = obj.get(filter),
+          o = tf.next();
+      return o;
+    },
+    treeObj: function (filter) {
+      var o = obj.filter(filter),
+          treeId = o.find('.layui-treeSelect-body').attr('id'),
+          tree = $.fn.zTree.getZTreeObj(treeId);
+      return tree;
+    }
+  };
+
+  //输出接口
+  var mod = new TreeSelect();
+  exports(_MOD, mod);
+});    
\ No newline at end of file
diff --git a/src/main/resources/static/custom/module/treetable-lay/treetable.css b/src/main/resources/static/custom/module/treetable-lay/treetable.css
index ca2922d..584b2f8 100755
--- a/src/main/resources/static/custom/module/treetable-lay/treetable.css
+++ b/src/main/resources/static/custom/module/treetable-lay/treetable.css
@@ -13,5 +13,6 @@
 
 .treeTable-icon.open .layui-icon-triangle-d:before {
     content: "\e625";
+    background-color: transparent;
 }
 
diff --git a/src/main/resources/static/custom/module/treetable-lay/treetable.js b/src/main/resources/static/custom/module/treetable-lay/treetable.js
index 35efdcf..af7361a 100755
--- a/src/main/resources/static/custom/module/treetable-lay/treetable.js
+++ b/src/main/resources/static/custom/module/treetable-lay/treetable.js
@@ -10,91 +10,105 @@
             if (!treetable.checkParam(param)) {
                 return;
             }
-            var doneCallback = param.done;
             // 获取数据
+            if (param.data) {
+                treetable.init(param, param.data);
+            } else {
+                $.getJSON(param.url, param.where, function (res) {
+                    treetable.init(param, res.data);
+                });
+            }
+        },
+        // 渲染表格
+        init: function (param, data) {
             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];
+            var doneCallback = param.done;
+            var tNodes = 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;
                     }
-                    if (!tt.pid) {
-                        if (!param.treePidName) {
-                            layer.msg('参数treePidName不能为空', {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;
                         }
-                        tt.pid = tt[param.treePidName];
+                        mData.push(data[i]);
+                        sort(data[i].id, data);
                     }
                 }
+            };
+            sort(param.treeSpid, tNodes);
 
-                // 对数据进行排序
-                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>';
-                    }
+            // 重写参数
+            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 showIcon = true;
+                if (undefined != param.showicon && (param.showicon == true || param.showicon == false)) {
+                    showIcon = param.showicon;
+                }
+                var emptyNum = treetable.getEmptyNum(mPid, mData);
+                var iconHtml = '';
+                for (var i = 0; i < emptyNum; i++) {
+                    iconHtml += '<span class="treeTable-empty"></span>';
+                }
+                if (showIcon) {
                     if (isDir) {
                         iconHtml += '<i class="layui-icon layui-icon-triangle-d"></i> <i class="layui-icon layui-icon-layer"></i>';
                     } else {
                         iconHtml += '<i class="layui-icon layui-icon-file"></i>';
                     }
-                    iconHtml += '&nbsp;&nbsp;';
-                    var ttype = isDir ? 'dir' : 'file';
-                    var vg = '<span class="treeTable-icon open" lay-tid="' + mId + '" lay-tpid="' + mPid + '" lay-ttype="' + ttype + '">';
-                    return vg + iconHtml + d[param.cols[0][param.treeColIndex].field] + '</span>'
-                };
+                }
+                iconHtml += '&nbsp;&nbsp;';
+                var ttype = isDir ? 'dir' : 'file';
+                var vg = '<span class="treeTable-icon open" lay-tid="' + mId + '" lay-tpid="' + mPid + '" lay-ttype="' + ttype + '">';
+                return vg + iconHtml + d[param.cols[0][param.treeColIndex].field] + '</span>'
+            };
 
-                param.done = function (res, curr, count) {
-                    $(param.elem).next().addClass('treeTable');
-                    $('.treeTable .layui-table-page').css('display', 'none');
-                    $(param.elem).next().attr('treeLinkage', param.treeLinkage);
-                    // 绑定事件换成对body绑定
-                    /*$('.treeTable .treeTable-icon').click(function () {
-                        treetable.toggleRows($(this), param.treeLinkage);
-                    });*/
-                    if (param.treeDefaultClose) {
-                        treetable.foldAll(param.elem);
-                    }
-                    if (doneCallback) {
-                        doneCallback(res, curr, count);
-                    }
-                };
+            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);
-            });
+            // 渲染表格
+            table.render(param);
         },
         // 计算缩进的数量
         getEmptyNum: function (pid, data) {
diff --git a/src/main/resources/static/libs/custom.js b/src/main/resources/static/libs/custom.js
new file mode 100644
index 0000000..fd82856
--- /dev/null
+++ b/src/main/resources/static/libs/custom.js
@@ -0,0 +1,99 @@
+// 自定义全局js
+(function (root) {
+    "use strict";
+
+    root.DictPoolToolkit = function () {
+        var storage = root.localStorage;
+        if (storage == null || storage === undefined) {
+            layer.msg("浏览器不支持 LocalStorage！！！", {icon: 2, time: 1000});
+            return null;
+        }
+
+        return {
+            url: "",
+            storage: storage,
+            pool: {},
+            addNewDict: function (dictType) {
+                var that = this;
+                console.log("正在加载<"+dictType+">");
+                $.ajax(that.url, {
+                        method: "GET",
+                        data: "dicttype=" + dictType,
+                        contentType: "application/x-www-form-urlencoded",
+                        success: function (data) {
+                            if (data == null || data == "") {
+                                that.storage.removeItem(dictType);
+                            } else {
+                                that.storage.setItem(dictType, JSON.stringify(data));
+                                console.log("<"+dictType+">加载成功!");
+                            }
+                        },
+                        error: function(e){
+                            console.log("<"+dictType+">加载失败！");
+                        }
+                    }
+                );
+                return this;
+            },
+            loadSyncDict: function (dictType) {
+                var that = this;
+                console.log("正在加载<" + dictType + ">");
+                $.ajax(that.url, {
+                        method: "GET",
+                        data: "dicttype=" + dictType,
+                        async: false,  //同步
+                        contentType: "application/x-www-form-urlencoded",
+                        success: function (data) {
+                            if (data == null || data == "") {
+                                that.storage.removeItem(dictType);
+                            } else {
+                                that.storage.setItem(dictType, JSON.stringify(data));
+                                console.log("<"+dictType+">加载成功!");
+                            }
+                        },
+                        error: function (e) {
+                            console.log("<" + dictType + ">加载失败！");
+                        }
+                    }
+                );
+                return this;
+            },
+            initAll: function (url) {
+                this.url = url;
+                this.addNewDict("allReverseflagList");
+            },
+            getDict: function (dictType) {
+                var dict, that = this;
+                if (that.pool[dictType] != undefined) {
+                    return that.pool[dictType];
+                } else {
+                    dict = that.storage.getItem(dictType);
+                    if (dict == undefined) {
+                        return null;
+                    } else {
+                        that.pool[dictType] = JSON.parse(dict);
+                        return that.pool[dictType];
+                    }
+                }
+            },
+            getDictValue: function (dictType, code) {
+                var dict, that = this;
+                dict = that.getDict(dictType);
+                if (dict == null) {
+                    return code;
+                } else {
+                    var c = "" + code;
+                    return dict[c] == undefined ? code : dict[c];
+                }
+            }
+        }
+    }
+
+    root.getTempDictValue = function (dicttype, key) {
+        return DictPoolToolkit().getDictValue(dicttype, key);
+    }
+
+    root.dateFormat = function (str) {
+        return str.replace(/^(\d{4})(\d{2})(\d{2})$/, '$1-$2-$3'); //yyyyMMdd --> yyyy-MM-dd
+    }
+}(window));
\ No newline at end of file
diff --git a/src/main/resources/static/libs/zTree/css/zTreeStyle/img/diy/1_close.png b/src/main/resources/static/libs/zTree/css/zTreeStyle/img/diy/1_close.png
new file mode 100755
index 0000000..68ccb3c
--- /dev/null
+++ b/src/main/resources/static/libs/zTree/css/zTreeStyle/img/diy/1_close.png
Binary files differ
diff --git a/src/main/resources/static/libs/zTree/css/zTreeStyle/img/diy/1_open.png b/src/main/resources/static/libs/zTree/css/zTreeStyle/img/diy/1_open.png
new file mode 100755
index 0000000..d6ff36d
--- /dev/null
+++ b/src/main/resources/static/libs/zTree/css/zTreeStyle/img/diy/1_open.png
Binary files differ
diff --git a/src/main/resources/static/libs/zTree/css/zTreeStyle/img/diy/2.png b/src/main/resources/static/libs/zTree/css/zTreeStyle/img/diy/2.png
new file mode 100755
index 0000000..9eff506
--- /dev/null
+++ b/src/main/resources/static/libs/zTree/css/zTreeStyle/img/diy/2.png
Binary files differ
diff --git a/src/main/resources/static/libs/zTree/css/zTreeStyle/img/diy/3.png b/src/main/resources/static/libs/zTree/css/zTreeStyle/img/diy/3.png
new file mode 100755
index 0000000..d7ba6d0
--- /dev/null
+++ b/src/main/resources/static/libs/zTree/css/zTreeStyle/img/diy/3.png
Binary files differ
diff --git a/src/main/resources/static/libs/zTree/css/zTreeStyle/img/diy/4.png b/src/main/resources/static/libs/zTree/css/zTreeStyle/img/diy/4.png
new file mode 100755
index 0000000..753e2bf
--- /dev/null
+++ b/src/main/resources/static/libs/zTree/css/zTreeStyle/img/diy/4.png
Binary files differ
diff --git a/src/main/resources/static/libs/zTree/css/zTreeStyle/img/diy/5.png b/src/main/resources/static/libs/zTree/css/zTreeStyle/img/diy/5.png
new file mode 100755
index 0000000..0c5eccd
--- /dev/null
+++ b/src/main/resources/static/libs/zTree/css/zTreeStyle/img/diy/5.png
Binary files differ
diff --git a/src/main/resources/static/libs/zTree/css/zTreeStyle/img/diy/6.png b/src/main/resources/static/libs/zTree/css/zTreeStyle/img/diy/6.png
new file mode 100755
index 0000000..070b835
--- /dev/null
+++ b/src/main/resources/static/libs/zTree/css/zTreeStyle/img/diy/6.png
Binary files differ
diff --git a/src/main/resources/static/libs/zTree/css/zTreeStyle/img/diy/7.png b/src/main/resources/static/libs/zTree/css/zTreeStyle/img/diy/7.png
new file mode 100755
index 0000000..532b037
--- /dev/null
+++ b/src/main/resources/static/libs/zTree/css/zTreeStyle/img/diy/7.png
Binary files differ
diff --git a/src/main/resources/static/libs/zTree/css/zTreeStyle/img/diy/8.png b/src/main/resources/static/libs/zTree/css/zTreeStyle/img/diy/8.png
new file mode 100755
index 0000000..a8f3a86
--- /dev/null
+++ b/src/main/resources/static/libs/zTree/css/zTreeStyle/img/diy/8.png
Binary files differ
diff --git a/src/main/resources/static/libs/zTree/css/zTreeStyle/img/diy/9.png b/src/main/resources/static/libs/zTree/css/zTreeStyle/img/diy/9.png
new file mode 100755
index 0000000..4db73cd
--- /dev/null
+++ b/src/main/resources/static/libs/zTree/css/zTreeStyle/img/diy/9.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
index a6845a4..3b7190b 100755
--- a/src/main/resources/static/libs/zTree/css/zTreeStyle/zTreeStyle.css
+++ b/src/main/resources/static/libs/zTree/css/zTreeStyle/zTreeStyle.css
@@ -8,7 +8,7 @@
 
 -------------------------------------*/
 
-.ztree * {padding:0; margin:0; font-size:12px; font-family: Verdana, Arial, Helvetica, AppleGothic, sans-serif}
+.ztree * {padding:0; margin:0; font-size:14px; 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}
@@ -75,6 +75,11 @@
 .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.add {margin-right:2px; background-position:-144px 0; vertical-align:top; *vertical-align:middle}
+
+.ztree li span.button.pIcon01_ico_open, .ztree li span.button.pIcon01_ico_close, .ztree li span.button.pIcon01_ico_docu{margin-right:2px; background: url(./img/diy/1_open.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}
+.ztree li span.button.pIcon02_ico_open, .ztree li span.button.pIcon02_ico_close, .ztree li span.button.pIcon02_ico_docu{margin-right:2px; background: url(./img/diy/3.png) no-repeat scroll 0 0 transparent; 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}
 
diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html
index a959451..1fb326d 100755
--- a/src/main/resources/templates/index.html
+++ b/src/main/resources/templates/index.html
@@ -33,8 +33,11 @@
         </ul>
         <ul class="layui-nav layui-layout-right">
             <li class="layui-nav-item" lay-unselect>
-                <a id="btnMessage" title="消息"><i class="layui-icon layui-icon-notice"></i></a>
+                <a ew-event="refreshDict" title="刷新字典"><i class="layui-icon layui-icon-read"></i></a>
             </li>
+            <!--<li class="layui-nav-item" lay-unselect>-->
+                <!--<a id="btnMessage" title="消息"><i class="layui-icon layui-icon-notice"></i></a>-->
+            <!--</li>-->
             <li class="layui-nav-item layui-hide-xs" lay-unselect>
                 <a ew-event="fullScreen" title="全屏"><i class="layui-icon layui-icon-screen-full"></i></a>
             </li>
@@ -47,7 +50,7 @@
                     <dd ay-unselect><a lay-href="/operator/userinfor">基本资料</a></dd>
                     <dd ay-unselect><a lay-href="/operator/setpwd">修改密码</a></dd>
                     <hr>
-                    <dd layadmin-event="logout" style="text-align: center;" ><a href="/logout">退出</a></dd>
+                    <dd layadmin-event="logout" style="text-align: center;" ><a th:href="@{/logout}">退出</a></dd>
                 </dl>
             </li>
             <li class="layui-nav-item" lay-unselect>
@@ -130,12 +133,15 @@
 <script type="text/javascript" th:src="@{/static/libs/q.js}"></script>
 <script type="text/javascript" th:src="@{/static/libs/layui/layui.js}"></script>
 <script type="text/javascript" th:src="@{/static/libs/zTree/js/jquery.ztree.all-3.5.min.js}"></script>
+<script type="text/javascript" th:src="@{/static/libs/custom.js}"></script>
+
 <script>
     layui.config({
         base: 'static/custom/module/'
     }).extend({
         formSelects: 'formSelects/formSelects-v4',
-        treetable: 'treetable-lay/treetable'
+        treetable: 'treetable-lay/treetable',
+        treeSelect: 'treeSelect/treeSelect'
     }).use(['admin'], function () {
         var admin = layui.admin;
     });
@@ -148,6 +154,8 @@
         index.initRouter();  // 导航栏和tab联动
         index.bindEvent();  // 绑定事件
 
+        var dictpool = DictPoolToolkit();
+        dictpool.initAll("[[@{/dictpool}]]"); //加载字典
     });
 </script>
 </body>
diff --git a/src/main/resources/templates/area/form.html b/src/main/resources/templates/restaurant/area/form.html
similarity index 100%
rename from src/main/resources/templates/area/form.html
rename to src/main/resources/templates/restaurant/area/form.html
diff --git a/src/main/resources/templates/area/index.html b/src/main/resources/templates/restaurant/area/index.html
similarity index 100%
rename from src/main/resources/templates/area/index.html
rename to src/main/resources/templates/restaurant/area/index.html
diff --git a/src/main/resources/templates/device/form.html b/src/main/resources/templates/restaurant/device/form.html
similarity index 100%
rename from src/main/resources/templates/device/form.html
rename to src/main/resources/templates/restaurant/device/form.html
diff --git a/src/main/resources/templates/device/import.html b/src/main/resources/templates/restaurant/device/import.html
similarity index 100%
rename from src/main/resources/templates/device/import.html
rename to src/main/resources/templates/restaurant/device/import.html
diff --git a/src/main/resources/templates/device/index.html b/src/main/resources/templates/restaurant/device/index.html
similarity index 100%
rename from src/main/resources/templates/device/index.html
rename to src/main/resources/templates/restaurant/device/index.html
diff --git a/src/main/resources/templates/devicegroup/form.html b/src/main/resources/templates/restaurant/devicegroup/form.html
similarity index 100%
rename from src/main/resources/templates/devicegroup/form.html
rename to src/main/resources/templates/restaurant/devicegroup/form.html
diff --git a/src/main/resources/templates/devicegroup/index.html b/src/main/resources/templates/restaurant/devicegroup/index.html
similarity index 100%
rename from src/main/resources/templates/devicegroup/index.html
rename to src/main/resources/templates/restaurant/devicegroup/index.html
diff --git a/src/main/resources/templates/devicemanage/index.html b/src/main/resources/templates/restaurant/devicemanage/index.html
similarity index 100%
rename from src/main/resources/templates/devicemanage/index.html
rename to src/main/resources/templates/restaurant/devicemanage/index.html
diff --git a/src/main/resources/templates/system/function/form.html b/src/main/resources/templates/system/function/form.html
index 94ef8cc..e1468be 100755
--- a/src/main/resources/templates/system/function/form.html
+++ b/src/main/resources/templates/system/function/form.html
@@ -51,7 +51,7 @@
                 var msg = "";
                 $.ajax({
                     type: "GET",
-                    url: '/function/checkname',
+                    url: '[[@{/function/checkname}]]',
                     async: false,
                     data: {
                         name: e,
@@ -69,7 +69,7 @@
             }
         });
 
-        var url = '/function/add';
+        var url = '[[@{/function/add}]]';
         // 回显user数据
         var func = admin.getTempData('t_func');
         if (func) {
@@ -98,7 +98,7 @@
                         admin.finishPopupCenter();
                     } else if (result.code == 401) {
                         layer.msg(result.msg, {icon: 2, time: 1500}, function () {
-                            location.replace('/login');
+                            location.replace('[[@{/login}]]');
                         }, 1000);
                         return;
                     } else {
diff --git a/src/main/resources/templates/system/function/index.html b/src/main/resources/templates/system/function/index.html
index 3696dc7..93d53ac 100755
--- a/src/main/resources/templates/system/function/index.html
+++ b/src/main/resources/templates/system/function/index.html
@@ -10,9 +10,9 @@
         <div class="layui-form toolbar">
             搜索：
             <input id="search-value" class="layui-input search-input" type="text" placeholder="输入功能名称"/>&emsp;
-            <button id="btn-search" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
+            <button id="btn-search-func" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
             </button>
-            <button id="btn-add" class="layui-btn icon-btn" data-type="add"><i class="layui-icon"></i>添加父功能</button>
+            <button id="btn-add-func" class="layui-btn icon-btn" data-type="add"><i class="layui-icon"></i>添加父功能</button>
         </div>
         <table class="layui-table" id="table" lay-filter="table"></table>
     </div>
@@ -29,7 +29,7 @@
         // 渲染表格
         table.render({
             elem: '#table',
-            url: '/function/list',
+            url: '[[@{/function/list}]]',
             page: true,
             cols: [
                 [
@@ -71,11 +71,11 @@
             ]
         });
         // 搜索按钮点击事件
-        $('#btn-search').click(function () {
+        $('#btn-search-func').click(function () {
             let key = $('#search-value').val();
             table.reload('table', {where: {searchkey: key}, page: {curr: 1}});
         });
-        $('#btn-add').click(function () {
+        $('#btn-add-func').click(function () {
             showModel();
         });
         let showModel = function (data) {
@@ -83,7 +83,7 @@
             admin.putTempData('t_func', data);
             admin.popupCenter({
                 title: title,
-                path: '/function/loadadd',
+                path: '[[@{/function/loadadd}]]',
                 finish: function () {
                     table.reload('table', {});
                 }
@@ -95,7 +95,7 @@
             admin.putTempData('t_func', data);
             admin.popupCenter({
                 title: title,
-                path: '/function/loadsubadd',
+                path: '[[@{/function/loadsubadd}]]',
                 finish: function () {
                     table.reload('table', {});
                 }
@@ -108,7 +108,7 @@
             admin.popupCenter({
                 title: title,
                 area:'70%',
-                path: '/function/loadres?functionid='+functionid
+                path: '[[@{/function/loadres}]]?functionid='+functionid
             });
         };
         let showAddResModelSub = function (functionid) {
@@ -116,7 +116,7 @@
             admin.putTempData('functionid', functionid);
             admin.popupCenter({
                 title: title,
-                path: '/function/loadresadd',
+                path: '[[@{/function/loadresadd}]]',
                 finish: function () {
                     table.reload('table', {});
                 }
@@ -146,7 +146,7 @@
                 layer.close(i);
                 layer.load(2);
                 let token = $("meta[name='_csrf_token']").attr("value");
-                admin.go('/function/delfunc', {
+                admin.go('[[@{/function/delfunc}]]', {
                     funcid: data.id,
                     _csrf:token
                 }, function (data) {
@@ -156,7 +156,7 @@
                         layer.msg(data.msg, {icon: 1});
                     } else if (data.code == 401) {
                         layer.msg(data.msg, {icon: 2, time: 1500}, function () {
-                            location.replace('/login');
+                            location.replace('[[@{/login}]]');
                         }, 1000);
                         return;
                     }
diff --git a/src/main/resources/templates/system/function/resform.html b/src/main/resources/templates/system/function/resform.html
index 78f7747..4ac8b98 100755
--- a/src/main/resources/templates/system/function/resform.html
+++ b/src/main/resources/templates/system/function/resform.html
@@ -42,7 +42,7 @@
         var form = layui.form;
         form.render('select');
         form.render('radio');
-        var url = '/function/addres';
+        var url = '[[@{/function/addres}]]';
         // 回显user数据
         var func = admin.getTempData('t_res');
         if (func) {
@@ -75,7 +75,7 @@
                         admin.finishPopupCenter();
                     } else if (result.code == 401) {
                         layer.msg(result.msg, {icon: 2, time: 1500}, function () {
-                            location.replace('/login');
+                            location.replace('[[@{/login}]]');
                         }, 1000);
                         return;
                     } else {
diff --git a/src/main/resources/templates/system/function/reslist.html b/src/main/resources/templates/system/function/reslist.html
index d95cbfe..63ba042 100755
--- a/src/main/resources/templates/system/function/reslist.html
+++ b/src/main/resources/templates/system/function/reslist.html
@@ -13,7 +13,7 @@
         let func = admin.getTempData('functionid');
         table.render({
             elem: '#restable',
-            url: '/function/reslist?functionid=' + func,
+            url: '[[@{/function/reslist}]]?functionid=' + func,
             cols: [
                 [
                     {field: 'id', title: '资源ID', width: 80, fixed: 'left', sort: true},
@@ -50,7 +50,7 @@
             admin.putTempData('t_data',data);
             admin.popupCenter({
                 title: title,
-                path: '/function/loadresadd',
+                path: '[[@{/function/loadresadd}]]',
                 finish: function () {
                     table.reload('table', {});
                 }
@@ -61,7 +61,7 @@
                 layer.close(i);
                 layer.load(2);
                 let token = $("meta[name='_csrf_token']").attr("value");
-                admin.go('/function/delres', {
+                admin.go('[[@{/function/delres}]]', {
                     resid: data.id,
                     _csrf:token
                 }, function (data) {
@@ -71,7 +71,7 @@
                         layer.msg(data.msg, {icon: 1});
                     } else if (data.code == 401) {
                         layer.msg(data.msg, {icon: 2, time: 1500}, function () {
-                            location.replace('/login');
+                            location.replace('[[@{/login}]]');
                         }, 1000);
                         return;
                     }
diff --git a/src/main/resources/templates/system/function/subform.html b/src/main/resources/templates/system/function/subform.html
index def716f..f04a15e 100755
--- a/src/main/resources/templates/system/function/subform.html
+++ b/src/main/resources/templates/system/function/subform.html
@@ -54,7 +54,7 @@
         var form = layui.form;
         form.render('select');
         form.render('radio');
-        var url = '/function/add';
+        var url = '[[@{/function/add}]]';
         // 回显user数据
         var func = admin.getTempData('t_func');
         if (func) {
@@ -63,7 +63,7 @@
         }
         let parentId = admin.getTempData("parentId");
         if(parentId){
-            form.val('form', {"parentId":parentId});
+            form.val('subform', {"parentId":parentId});
         }
         // 表单提交事件
         form.on('submit(subform-submit)', function (data) {
@@ -87,7 +87,7 @@
                         admin.finishPopupCenter();
                     } else if (result.code == 401) {
                         layer.msg(result.msg, {icon: 2, time: 1500}, function () {
-                            location.replace('/login');
+                            location.replace('[[@{/login}]]');
                         }, 1000);
                         return;
                     } else {
diff --git a/src/main/resources/templates/system/operator/index.html b/src/main/resources/templates/system/operator/index.html
index 09b5f2e..6cbcf98 100644
--- a/src/main/resources/templates/system/operator/index.html
+++ b/src/main/resources/templates/system/operator/index.html
@@ -57,7 +57,7 @@
         // 渲染表格
         table.render({
             elem: '#oper-table',
-            url: '/operator/list',
+            url: '[[@{/operator/list}]]',
             page: true,
             cols: [
                 [
@@ -103,7 +103,7 @@
             admin.putTempData('t_user', data);
             admin.popupCenter({
                 title: title,
-                path: '/operator/load4add',
+                path: '[[@{/operator/load4add}]]',
                 finish: function () {
                     table.reload('oper-table', {});
                 }
@@ -119,7 +119,7 @@
             if (layEvent === 'edit') { // 修改
                 layer.load(2);
                 let token = $("meta[name='_csrf_token']").attr("value");
-                admin.go('/operator/getoperatorrole', {
+                admin.go('[[@{/operator/getoperatorrole}]]', {
                     operid: data.operid,
                     _csrf: token
                 }, function (ret) {
@@ -130,7 +130,7 @@
                         showEditModel(data);
                     } else if (ret.code == 401) {
                         layer.msg(ret.msg, {icon: 2, time: 1500}, function () {
-                            location.replace('/login');
+                            location.replace('[[@{/login}]]');
                         }, 1000);
                         return;
                     }
@@ -146,7 +146,7 @@
                     layer.close(i);
                     layer.load(2);
                     let token = $("meta[name='_csrf_token']").attr("value");
-                    admin.go('/operator/resetpwd', {
+                    admin.go('[[@{/operator/resetpwd}]]', {
                         operid: data.operid,
                         _csrf: token
                     }, function (ret) {
@@ -156,7 +156,7 @@
                             layer.msg(ret.msg, {icon: 1});
                         } else if (ret.code == 401) {
                             layer.msg(ret.msg, {icon: 2, time: 1500}, function () {
-                                location.replace('/login');
+                                location.replace('[[@{/login}]]');
                             }, 1000);
                             return;
                         }
@@ -175,7 +175,7 @@
         form.on('switch(oper-tpl-state)', function (obj) {
             layer.load(2);
             let token = $("meta[name='_csrf_token']").attr("value");
-            admin.go('/operator/updatestate', {
+            admin.go('[[@{/operator/updatestate}]]', {
                 operid: obj.elem.value,
                 _csrf: token,
                 state: obj.elem.checked ? 'normal' : 'closed'
@@ -186,7 +186,7 @@
                     //table.reload('table-user', {});
                 } else if (data.code == 401) {
                     layer.msg(data.msg, {icon: 2, time: 1500}, function () {
-                        location.replace('/login');
+                        location.replace('[[@{/login}]]');
                     }, 1000);
                     return;
                 } else {
diff --git a/src/main/resources/templates/system/operator/logs.html b/src/main/resources/templates/system/operator/logs.html
index 125ce8d..207b4ea 100644
--- a/src/main/resources/templates/system/operator/logs.html
+++ b/src/main/resources/templates/system/operator/logs.html
@@ -25,7 +25,7 @@
         // 渲染表格
         table.render({
             elem: '#logtable',
-            url: '/operator/logslist',
+            url: '[[@{/operator/logslist}]]',
             page: true,
             cols: [
                 [
diff --git a/src/main/resources/templates/system/operator/operator.html b/src/main/resources/templates/system/operator/operator.html
index a048c1a..682e6c4 100644
--- a/src/main/resources/templates/system/operator/operator.html
+++ b/src/main/resources/templates/system/operator/operator.html
@@ -16,6 +16,12 @@
         </div>
     </div>
     <div class="layui-form-item">
+        <label class="layui-form-label" title="用于第三方授权登录，但不能访问本系统资源">授权登录用户</label>
+        <div class="layui-input-block">
+            <input type="checkbox" name="thirdadmin" value="yes"  />
+        </div>
+    </div>
+    <div class="layui-form-item">
         <label class="layui-form-label">性别</label>
         <div class="layui-input-block">
             <input type="radio" name="sex" value="male" title="男" checked/>
@@ -78,7 +84,7 @@
                 var msg = "";
                 $.ajax({
                     type: "GET",
-                    url: '/operator/checkopercode',
+                    url: '[[@{/operator/checkopercode}]]',
                     async: false, //同步提交。不设置则默认异步，异步的话，最后执行ajax
                     data: {
                         opercode: e,
@@ -99,7 +105,7 @@
             }
         });
 
-        var url = '/operator/add';
+        var url = '[[@{/operator/add}]]';
         // 回显user数据
         var user = admin.getTempData('t_user');
         if (user) {
@@ -129,7 +135,7 @@
                         admin.finishPopupCenter();
                     } else if (data.code == 401) {
                         layer.msg(result.msg, {icon: 2, time: 1500}, function () {
-                            location.replace('/login');
+                            location.replace('[[@{/login}]]');
                         }, 1000);
                         return;
                     } else {
diff --git a/src/main/resources/templates/system/operator/setpwd.html b/src/main/resources/templates/system/operator/setpwd.html
index d549946..53f4fef 100644
--- a/src/main/resources/templates/system/operator/setpwd.html
+++ b/src/main/resources/templates/system/operator/setpwd.html
@@ -42,7 +42,7 @@
             admin.closeThisTabs()
         });
         form.render('select');
-        let url = '/operator/dosetpwd';
+        let url = '[[@{/operator/dosetpwd}]]';
         // 表单提交事件
         form.on('submit(setmypass)', function (data) {
             layer.load(2);
@@ -58,11 +58,11 @@
                     layer.closeAll('loading');
                     if (result.code == 200) {
                         layer.msg(result.msg, {icon: 1, time: 1500}, function () {
-                            location.replace('/login');
+                            location.replace('[[@{/login}]]');
                         }, 1000);
                     } else if (data.code == 401) {
                         layer.msg(result.msg, {icon: 2, time: 1500}, function () {
-                            location.replace('/login');
+                            location.replace('[[@{/login}]]');
                         }, 1000);
                         return;
                     } else {
diff --git a/src/main/resources/templates/system/operator/userinfor.html b/src/main/resources/templates/system/operator/userinfor.html
index 8ca3c10..1193ef3 100644
--- a/src/main/resources/templates/system/operator/userinfor.html
+++ b/src/main/resources/templates/system/operator/userinfor.html
@@ -56,7 +56,7 @@
             admin.closeThisTabs()
         });
         form.render('select');
-        let url = '/operator/updateinfor';
+        let url = '[[@{/operator/updateinfor}]]';
         // 表单提交事件
         form.on('submit(infor-form-submit)', function (data) {
             layer.load(2);
@@ -79,7 +79,7 @@
                         layer.msg(result.msg, {icon: 1});
                     } else if (data.code == 401) {
                         layer.msg(result.msg, {icon: 2, time: 1500}, function () {
-                            location.replace('/login');
+                            location.replace('[[@{/login}]]');
                         }, 1000);
                         return;
                     } else {
diff --git a/src/main/resources/templates/system/param/apiclientform.html b/src/main/resources/templates/system/param/apiclientform.html
new file mode 100644
index 0000000..94353f7
--- /dev/null
+++ b/src/main/resources/templates/system/param/apiclientform.html
@@ -0,0 +1,78 @@
+<form id="appid-form" lay-filter="form" class="layui-form model-form">
+    <div class="layui-form-item">
+        <label class="layui-form-label">APPID</label>
+        <div class="layui-input-block">
+            <input name="appid" placeholder="请输入APPID" type="text" class="layui-input" maxlength="30"
+                   lay-verify="required|number" required/>
+        </div>
+    </div>
+    <div class="layui-form-item">
+        <label class="layui-form-label">角色</label>
+        <div class="layui-input-block">
+            <select name="roles" xm-select="roles" lay-verify="required">
+                <option th:each="role : ${rolelist}" th:value="${role.key}">[[${role.value}]]</option>
+            </select>
+        </div>
+    </div>
+
+    <div class="layui-form-item model-form-footer">
+        <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>
+        <button class="layui-btn" lay-filter="form-submit" lay-submit  id="submitbtn">保存</button>
+    </div>
+</form>
+
+
+<script>
+    layui.use(['layer', 'admin', 'form', 'formSelects'], function () {
+        var layer = layui.layer;
+        var admin = layui.admin;
+        var form = layui.form;
+        var formSelects = layui.formSelects;
+
+        var url = '[[@{/param/addapiclientpara}]]';
+        // 回显user数据
+        var apiparam = admin.getTempData('t_appclient');
+        debugger
+        if (undefined != apiparam && null != apiparam) {
+            url = '[[@{/param/updateapiclientpara}]]';
+            $('input[name="appid"]').attr('readonly', 'readonly');
+            $('input[name="appid"]').val(apiparam.appid);
+            var rds = apiparam.roles.split(";");
+            formSelects.value('roles', rds);
+        }
+        // 表单提交事件
+        form.on('submit(form-submit)', function (data) {
+            layer.load(2);
+            var token_name = $("meta[name='_csrf_token']").attr("content");
+            var token = $("meta[name='_csrf_token']").attr("value");
+            data.field[token_name] = token;
+            $.ajax({
+                type : "POST",
+                dataType : "json",
+                url : url,
+                data : data.field,
+                success : function(result) {
+                    layer.closeAll('loading');
+                    if (result.code == 200) {
+                        layer.msg(result.msg, {icon: 1});
+                        admin.finishPopupCenter();
+                    } else if (data.code == 401) {
+                        layer.msg(result.msg, {icon: 2, time: 1500}, function () {
+                            location.replace('[[@{/login}]]');
+                        }, 1000);
+                        return;
+                    } else {
+                        console.log('err:' + result.code);
+                        layer.msg(result.msg, {icon: 2});
+                    }
+                },
+                error : function(data) {
+                    layer.closeAll('loading');
+                    layer.msg("请求服务器失败！", {icon: 2});
+                }
+            });
+            return false;
+        });
+    });
+</script>
+
diff --git a/src/main/resources/templates/system/param/apiclientpara.html b/src/main/resources/templates/system/param/apiclientpara.html
new file mode 100644
index 0000000..4c8e214
--- /dev/null
+++ b/src/main/resources/templates/system/param/apiclientpara.html
@@ -0,0 +1,169 @@
+<div class="layui-card">
+    <div class="layui-card-header">
+        <h2 class="header-title">应用权限参数管理</h2>
+        <span class="layui-breadcrumb pull-right">
+          <a href="#">参数管理</a>
+          <a><cite>应用权限参数管理</cite></a>
+        </span>
+    </div>
+    <div class="layui-card-body">
+        <div class="layui-form toolbar">
+            搜索：
+            <input id="search-appid" class="layui-input search-input" type="text" maxlength="40" style="width: 300px;"
+                   placeholder="输入APPID查询"/>
+            <button id="btn-search" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
+            </button>
+            <button id="btn-add" class="layui-btn icon-btn" data-type="add"><i class="layui-icon">&#xe654;</i>新 增</button>
+            <button id="btn-reset" class="layui-btn layui-btn-primary" data-type="reset"><i class="layui-icon"></i>清 空</button>
+        </div>
+        <table class="layui-table" id="apiClientTable" lay-filter="apiClientTable-filter"></table>
+    </div>
+</div>
+
+<!-- 表格操作列 -->
+<script type="text/html" id="apiclient-table-bar">
+    <a class="layui-btn layui-btn-xs" lay-event="editRole">修改角色</a>
+    <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
+</script>
+
+<!-- 表格状态列 -->
+<script type="text/html" id="api-tpl-state">
+    <input type="checkbox" lay-filter="api-tpl-state" value="{{d.appid}}" lay-skin="switch" lay-text="启用|关闭"
+           {{d.status=='normal'?'checked':''}} />
+</script>
+
+<script>
+    layui.use(['form', 'table', 'layer', 'admin', 'element'], function () {
+        var form = layui.form;
+        var table = layui.table;
+        var admin = layui.admin;
+        // 渲染表格
+        table.render({
+            elem: '#apiClientTable',
+            url: '[[@{/param/apiclientparalist}]]',
+            toolbar:'',
+            page: true,
+            cols: [
+                [
+                    {field: 'appid', title: 'APPID', width: 120, align: 'right', fixed: 'left', sort: true},
+                    {field: 'secret', title: '密钥', align: 'center', edit: 'text'},
+                    {field: 'status', title: '状态', width: 100, templet: '#api-tpl-state',sort: true},
+                    {field: 'roles', title: '角色', align: 'center' },
+                    {align: 'center', title: '操作', width: 150, toolbar: '#apiclient-table-bar',  fixed: 'right'}
+                ]
+            ]
+        });
+        // 搜索按钮点击事件
+        $('#btn-search').click(function () {
+            var paraname = $("#search-appid").val();
+            table.reload('apiClientTable', {where: {appid: paraname}, page: {curr: 1}});
+        });
+
+        $('#btn-add').click(function () {
+            showEditModel();
+        });
+
+        $('#btn-reset').click(function () {
+            $("#search-appid").val("");
+        });
+
+        function showEditModel(data) {
+            var title = data ? '修改角色' : '新增应用';
+            admin.putTempData('t_appclient', data);
+            admin.popupCenter({
+                title: title,
+                path: '[[@{/param/load4addapiclient}]]',
+                finish: function () {
+                    table.reload('apiClientTable');
+                }
+            });
+        }
+
+        // 修改user状态
+        form.on('switch(api-tpl-state)', function (obj) {
+            var token = $("meta[name='_csrf_token']").attr("value");
+            admin.go('[[@{/param/updateapiclientstate}]]', {
+                appid: obj.elem.value,
+                state: obj.elem.checked ? 'normal' : 'closed',
+                _csrf: token
+            }, function (data) {
+                if (data.code == 200) {
+                    layer.msg(data.msg, {icon: 1});
+                } else if (data.code == 401) {
+                    layer.msg(data.msg, {icon: 2, time: 1500}, function () {
+                        location.replace('[[@{/login}]]');
+                    }, 1000);
+                    return;
+                } else {
+                    layer.msg(data.msg, {icon: 2});
+                    $(obj.elem).prop('checked', !obj.elem.checked);
+                    form.render('checkbox');
+                }
+            },function () {
+                layer.msg('请求失败了，请稍后再试', {icon: 2});
+                $(obj.elem).prop('checked', !obj.elem.checked);
+                form.render('checkbox');
+            });
+        });
+
+        //监听单元格
+        table.on('tool(apiClientTable-filter)', function (obj) {
+            var data = obj.data;
+            if('del' == obj.event){
+                if(confirm("确定要删除应用参数["+data.appid+"]吗？")){
+                    layer.load(2);
+                    admin.go('[[@{/param/deleteapiclient}]]', {
+                        appid: data.appid,
+                        _csrf: $("meta[name='_csrf_token']").attr("value")
+                    }, function (data) {
+                        console.log(data.code);
+                        layer.closeAll('loading');
+                        if (data.code == 200) {
+                            layer.msg(data.msg, {icon: 1});
+                        } else if (data.code == 401) {
+                            layer.msg(data.msg, {icon: 2, time: 1500}, function () {
+                                location.replace('[[@{/login}]]');
+                            }, 1000);
+                            return;
+                        } else {
+                            layer.msg(data.msg, {icon: 2});
+                        }
+                        table.reload('apiClientTable');
+                    }, function (ret) {
+                        console.log(ret);
+                        layer.closeAll('loading');
+                        layer.msg('请求失败了，请稍后再试', {icon: 2});
+                    });
+                }
+            }else if('editRole' ==obj.event){
+                showEditModel(data);
+            }
+        });
+
+        table.on('edit(apiClientTable-filter)', function (obj) {
+            var row = obj.data; //得到所在行所有键值
+            var newval = obj.value; //得到修改后的值
+            admin.go('[[@{/param/updateapiclientpara}]]', {
+                appid: row.appid,
+                secret: newval,
+                _csrf: $("meta[name='_csrf_token']").attr("value"),
+            }, function (data) {
+                if (data.code == 200) {
+                    layer.msg("修改成功", {icon: 1});
+                } else if (data.code == 401) {
+                    layer.msg(data.msg, {icon: 2, time: 1500}, function () {
+                        location.replace('[[@{/login}]]');
+                    }, 1000);
+                    return;
+                } else {
+                    layer.msg(data.msg, {icon: 2});
+                    table.reload('apiClientTable');
+                }
+            },function () {
+                layer.msg('修改失败了，请稍后再试', {icon: 2});
+                table.reload('apiClientTable');
+            });
+        })
+
+    });
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/system/param/businesspara.html b/src/main/resources/templates/system/param/businesspara.html
index 57b1e76..0da59dd 100644
--- a/src/main/resources/templates/system/param/businesspara.html
+++ b/src/main/resources/templates/system/param/businesspara.html
@@ -9,13 +9,22 @@
     <div class="layui-card-body">
         <div class="layui-form toolbar">
             搜索：
-            <input id="search-paraname" class="layui-input search-input" type="text" maxlength="40" placeholder="输入参数名称"/>&emsp;
-            <button id="btn-search" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
+            <input id="search-business-paraname" class="layui-input search-input" type="text" maxlength="40" style="width: 300px;"
+                   placeholder="输入参数名查询"/>&emsp;
+            <button id="search-business-search" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
             </button>
+            <button id="search-business-add" class="layui-btn icon-btn" data-type="add"><i class="layui-icon">&#xe654;</i>新 增</button>
+            <button id="search-business-reset" class="layui-btn layui-btn-primary" data-type="reset"><i class="layui-icon"></i>清 空</button>
         </div>
         <table class="layui-table" id="businessparaTable" lay-filter="businessparaTable-filter"></table>
     </div>
 </div>
+
+<!-- 表格操作列 -->
+<script type="text/html" id="busipara-table-bar">
+    <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
+</script>
+
 <script>
     layui.use(['form', 'table', 'layer', 'admin', 'element'], function () {
         var form = layui.form;
@@ -23,72 +32,98 @@
         var admin = layui.admin;
         // 渲染表格
         table.render({
-            elem: '#sysparaTable',
-            url: '/param/sysparalist',
+            elem: '#businessparaTable',
+            url: '[[@{/param/businessparalist}]]',
             page: true,
             cols: [
                 [
-                    {field: 'paraid', title: 'ID', width: 80, align: 'center', fixed: 'left', sort: true},
-                    {field: 'paraname', title: '参数名称', width: 250, align: 'center', fixed: 'left'},
-                    {field: 'paraval', title: '参数值', fixed: 'left', edit: 'text'},
-                    {
-                        field: 'valueType', title: '格式', width: 75, align: 'center', templet: function (item) {
-                            if("amount"==item["valueType"]) return "金额";
-                            else if("switch"==item["valueType"]) return "开关";
-                            else if("date"==item["valueType"]) return "yyyyMMdd";
-                            else if("datetime"==item["valueType"]) return "yyyyMMddHHmmss";
-                            else if("decimal"==item["valueType"]) return "数值";
-                            else if("number"==item["valueType"]) return "整数";
-                            else  return "字符串";
-                        }
-                    },
-                    {field: 'paraunit', title: '单位', width: 75, align: 'center'},
-                    {field: 'remark', title: '备注'}
+                    {field: 'parakey', title: '参数名', width: 366, align: 'right', fixed: 'left', sort: true},
+                    {field: 'paraval', title: '参数值', align: 'left', style:'cursor: pointer;', event: 'modifyValue'},
+                    {align: 'center', title: '操作', width: 80, toolbar: '#busipara-table-bar',  fixed: 'right'}
                 ]
             ]
         });
         // 搜索按钮点击事件
-        $('#btn-search').click(function () {
-            var paraid = $("#search-paraid").val();
-            var paraname = $("#search-paraname").val();
-            if (null != paraid && paraid.length > 0 && !(/^\d+$/.test(paraid))) {
-                layer.msg("参数ID请输入数字", {icon: 2});
-            }else{
-                table.reload('sysparaTable', {where: {paraid: paraid, paraname: paraname}, page: {curr: 1}});
-            }
+        $('#search-business-search').click(function () {
+            var paraname = $("#search-business-paraname").val();
+            table.reload('businessparaTable', {where: {paraname: paraname}, page: {curr: 1}});
         });
 
-        $('#btn-reset').click(function () {
-            $("#search-paraid").val("");
-            $("#search-paraname").val("");
-        });
-
-
-        //监听单元格编辑
-        table.on('edit(sysparaTable-filter)', function (obj) {
-            var row = obj.data; //得到所在行所有键值
-            var newval = obj.value; //得到修改后的值
-            admin.go('/param/sysparaupdate', {
-                paraid: row.paraid,
-                paraval: newval,
-                _csrf: $("meta[name='_csrf_token']").attr("value"),
-            }, function (data) {
-                if (data.code == 200) {
-                    layer.msg("修改成功", {icon: 1});
-                } else if (data.code == 401) {
-                    layer.msg(data.msg, {icon: 2, time: 1500}, function () {
-                        location.replace('/login');
-                    }, 1000);
-                    return;
-                } else {
-                    layer.msg(data.msg, {icon: 2});
-                    table.reload('sysparaTable');
+        $('#search-business-add').click(function () {
+            admin.popupCenter({
+                title: "新增业务参数",
+                area:["600px","300px"],
+                path: '[[@{/param/load4addbuspara}]]',
+                finish: function () {
+                    table.reload('businessparaTable');
                 }
-            },function () {
-                layer.msg('修改失败了，请稍后再试', {icon: 2});
-                table.reload('sysparaTable');
             });
         });
 
+        $('#search-business-reset').click(function () {
+            $("#search-business-paraname").val("");
+        });
+
+        //监听单元格
+        table.on('tool(businessparaTable-filter)', function (obj) {
+            var data = obj.data;
+            if('del' == obj.event){
+                if(confirm("确定要删除业务参数["+data.parakey+"]吗？")){
+                    layer.load(2);
+                    admin.go('[[@{/param/deletebusinesspara}]]', {
+                        parakey: data.parakey,
+                        _csrf: $("meta[name='_csrf_token']").attr("value")
+                    }, function (data) {
+                        console.log(data.code);
+                        layer.closeAll('loading');
+                        if (data.code == 200) {
+                            layer.msg(data.msg, {icon: 1});
+                        } else if (data.code == 401) {
+                            layer.msg(data.msg, {icon: 2, time: 1500}, function () {
+                                location.replace('[[@{/login}]]');
+                            }, 1000);
+                            return;
+                        } else {
+                            layer.msg(data.msg, {icon: 2});
+                        }
+                        table.reload('businessparaTable');
+                    }, function (ret) {
+                        console.log(ret);
+                        layer.closeAll('loading');
+                        layer.msg('请求失败了，请稍后再试', {icon: 2});
+                    });
+                }
+            }else if('modifyValue' == obj.event){
+                layer.prompt({
+                    formType: 2,
+                    title: '修改参数名为 ['+ data.parakey +'] 的值：',
+                    area: ['500px', '200px'],
+                    maxlength: 1000,
+                    value: data.paraval
+                }, function(value, index){
+                    layer.close(index);
+                    admin.go('[[@{/param/businessparaupdate}]]', {
+                        parakey: data.parakey,
+                        paraval: value,
+                        _csrf: $("meta[name='_csrf_token']").attr("value"),
+                    }, function (data) {
+                        if (data.code == 200) {
+                            layer.msg("修改成功", {icon: 1});
+                            obj.update({ paraval: value });
+                        } else if (data.code == 401) {
+                            layer.msg(data.msg, {icon: 2, time: 1500}, function () {
+                                location.replace('[[@{/login}]]');
+                            }, 1000);
+                            return;
+                        } else {
+                            layer.msg(data.msg, {icon: 2});
+                        }
+                    },function () {
+                        layer.msg('修改失败了，请稍后再试', {icon: 2});
+                    });
+                });
+            }
+        });
+
     });
 </script>
\ No newline at end of file
diff --git a/src/main/resources/templates/system/param/busparaform.html b/src/main/resources/templates/system/param/busparaform.html
new file mode 100644
index 0000000..39dd9de
--- /dev/null
+++ b/src/main/resources/templates/system/param/busparaform.html
@@ -0,0 +1,89 @@
+<form id="form" lay-filter="form" class="layui-form model-form">
+    <div class="layui-form-item">
+        <label class="layui-form-label">参数名</label>
+        <div class="layui-input-block">
+            <input name="parakey" placeholder="请输入参数名" type="text" class="layui-input" maxlength="30"
+                   lay-verify="required|businame" required/>
+        </div>
+    </div>
+    <div class="layui-form-item">
+        <label class="layui-form-label">参数值</label>
+        <div class="layui-input-block">
+            <textarea name="paraval" placeholder="请输入内容" class="layui-textarea" required></textarea>
+        </div>
+    </div>
+
+    <div class="layui-form-item model-form-footer">
+        <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>
+        <button class="layui-btn" lay-filter="form-submit" lay-submit  id="submitbtn">保存</button>
+    </div>
+</form>
+
+
+<script>
+    layui.use(['layer', 'admin', 'form'], function () {
+        var layer = layui.layer;
+        var admin = layui.admin;
+        var form = layui.form;
+        form.render('radio');
+        form.verify({
+            "businame": function (e) {
+                var msg = "";
+                $.ajax({
+                    type: "GET",
+                    url: '[[@{/param/checkbusname}]]',
+                    async: false,
+                    data: {
+                        parakey: e
+                    },
+                    success: function (result) {
+                        if (result.code != 200) {
+                            msg = result.msg;
+                        }
+                    },
+                    error: function (error) {
+                        msg = "请求服务器校验参数名失败";
+                    }
+                });
+                if (msg != "") {
+                    return msg;
+                }
+            }
+        });
+
+        var url = '[[@{/param/addbusinesspara}]]';
+        // 表单提交事件
+        form.on('submit(form-submit)', function (data) {
+            layer.load(2);
+            var vdata = data.field;
+            vdata["_csrf"] = $("meta[name='_csrf_token']").attr("value");
+            console.log("postdata=",data)
+            $.ajax({
+                type : "POST",
+                dataType : "json",
+                url : url,
+                data : vdata,
+                success : function(result) {
+                    layer.closeAll('loading');
+                    if (result.code == 200) {
+                        layer.msg(result.msg, {icon: 1});
+                        admin.finishPopupCenter();
+                    } else if (result.code == 401) {
+                        layer.msg(result.msg, {icon: 2, time: 1500}, function () {
+                            location.replace('[[@{/login}]]');
+                        }, 1000);
+                        return;
+                    } else {
+                        console.log('err:' + result.code);
+                        layer.msg(result.msg, {icon: 2});
+                    }
+                },
+                error : function() {
+                    layer.closeAll('loading');
+                    layer.msg("请求服务器失败！", {icon: 2});
+                }
+            });
+            return false;
+        });
+    });
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/system/param/syspara.html b/src/main/resources/templates/system/param/syspara.html
index ae17c1d..f49293b 100644
--- a/src/main/resources/templates/system/param/syspara.html
+++ b/src/main/resources/templates/system/param/syspara.html
@@ -9,11 +9,11 @@
     <div class="layui-card-body">
         <div class="layui-form toolbar">
             搜索：
-            <input id="search-paraid" class="layui-input search-input" maxlength="9" type="text" placeholder="输入参数ID"/>&emsp;
-            <input id="search-paraname" class="layui-input search-input" type="text" maxlength="30" placeholder="输入参数名称"/>&emsp;
-            <button id="btn-search" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
+            <input id="search-syspara-paraid" class="layui-input search-input" maxlength="9" type="text" placeholder="输入参数ID"/>&emsp;
+            <input id="search-syspara-paraname" class="layui-input search-input" type="text" maxlength="30" placeholder="输入参数名称"/>&emsp;
+            <button id="btn-search-sysparam" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
             </button>
-            <button id="btn-reset" class="layui-btn layui-btn-primary" data-type="reset"><i class="layui-icon"></i>清 空</button>
+            <button id="btn-reset-sysparam" class="layui-btn layui-btn-primary" data-type="reset"><i class="layui-icon"></i>清 空</button>
         </div>
         <table class="layui-table" id="sysparaTable" lay-filter="sysparaTable-filter"></table>
     </div>
@@ -26,7 +26,7 @@
         // 渲染表格
         table.render({
             elem: '#sysparaTable',
-            url: '/param/sysparalist',
+            url: '[[@{/param/sysparalist}]]',
             page: true,
             cols: [
                 [
@@ -50,9 +50,9 @@
             ]
         });
         // 搜索按钮点击事件
-        $('#btn-search').click(function () {
-            var paraid = $("#search-paraid").val();
-            var paraname = $("#search-paraname").val();
+        $('#btn-search-sysparam').click(function () {
+            var paraid = $("#search-syspara-paraid").val();
+            var paraname = $("#search-syspara-paraname").val();
             if (null != paraid && paraid.length > 0 && !(/^\d+$/.test(paraid))) {
                 layer.msg("参数ID请输入数字", {icon: 2});
             }else{
@@ -60,9 +60,9 @@
             }
         });
 
-        $('#btn-reset').click(function () {
-            $("#search-paraid").val("");
-            $("#search-paraname").val("");
+        $('#btn-reset-sysparam').click(function () {
+            $("#search-syspara-paraid").val("");
+            $("#search-syspara-paraname").val("");
         });
 
 
@@ -70,7 +70,7 @@
         table.on('edit(sysparaTable-filter)', function (obj) {
             var row = obj.data; //得到所在行所有键值
             var newval = obj.value; //得到修改后的值
-            admin.go('/param/sysparaupdate', {
+            admin.go('[[@{/param/sysparaupdate}]]', {
                 paraid: row.paraid,
                 paraval: newval,
                 _csrf: $("meta[name='_csrf_token']").attr("value"),
@@ -79,7 +79,7 @@
                     layer.msg("修改成功", {icon: 1});
                 } else if (data.code == 401) {
                     layer.msg(data.msg, {icon: 2, time: 1500}, function () {
-                        location.replace('/login');
+                        location.replace('[[@{/login}]]');
                     }, 1000);
                     return;
                 } else {
diff --git a/src/main/resources/templates/system/role/form.html b/src/main/resources/templates/system/role/form.html
index fcfcbf3..d60bac8 100755
--- a/src/main/resources/templates/system/role/form.html
+++ b/src/main/resources/templates/system/role/form.html
@@ -26,7 +26,7 @@
         var layer = layui.layer;
         var admin = layui.admin;
         var form = layui.form;
-        var url = '/role/add';
+        var url = '[[@{/role/add}]]';
         // 回显user数据
         var func = admin.getTempData('t_func');
         if (func) {
@@ -54,7 +54,7 @@
                         admin.finishPopupCenter();
                     } else if (result.code == 401) {
                         layer.msg(result.msg, {icon: 2, time: 1500}, function () {
-                            location.replace('/login');
+                            location.replace('[[@{/login}]]');
                         }, 1000);
                         return;
                     } else {
diff --git a/src/main/resources/templates/system/role/func.html b/src/main/resources/templates/system/role/func.html
index d838bb5..aeca844 100755
--- a/src/main/resources/templates/system/role/func.html
+++ b/src/main/resources/templates/system/role/func.html
@@ -1,5 +1,5 @@
 <div style="padding: 0 20px">
-    <div class="layui-form-item">
+    <div class="layui-form-item" style="max-height: 490px;overflow: auto;">
         <ul id="funclist" class="ztree"></ul>
     </div>
     <div class="layui-form-item model-form-footer">
@@ -31,7 +31,7 @@
             };
             $.fn.zTree.init($("#funclist"), menuSetting, nodes);
         }
-        admin.dgo('/role/func', {
+        admin.dgo('[[@{/role/func}]]', {
             roleId: func,
         }, function (data) {
             layer.closeAll('loading');
@@ -39,7 +39,7 @@
                 initTree(data.node);
             } else if (data.code == 401) {
                 layer.msg(data.msg, {icon: 2, time: 1500}, function () {
-                    location.replace('/login');
+                    location.replace('[[@{/login}]]');
                 }, 1000);
                 return;
             } else {
@@ -61,7 +61,7 @@
             }
             let idStr = ids.toString();
             let token = $("meta[name='_csrf_token']").attr("value");
-            admin.go('/role/addfunc', {
+            admin.go('[[@{/role/addfunc}]]', {
                 roleId: func,
                 funcs: idStr,
                 _csrf: token,
@@ -72,7 +72,7 @@
                     admin.finishPopupCenter();
                 } else if (data.code == 401) {
                     layer.msg(data.msg, {icon: 2, time: 1500}, function () {
-                        location.replace('/login');
+                        location.replace('[[@{/login}]]');
                     }, 1000);
                     return;
                 } else {
diff --git a/src/main/resources/templates/system/role/index.html b/src/main/resources/templates/system/role/index.html
index 93c755d..f92912f 100644
--- a/src/main/resources/templates/system/role/index.html
+++ b/src/main/resources/templates/system/role/index.html
@@ -10,9 +10,9 @@
         <div class="layui-form toolbar">
             搜索：
             <input id="search-value" class="layui-input search-input" type="text" placeholder="输入角色名称"/>&emsp;
-            <button id="btn-search" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
+            <button id="btn-search-role" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
             </button>
-            <button id="btn-add" class="layui-btn icon-btn" data-type="add"><i class="layui-icon"></i>添加角色</button>
+            <button id="btn-add-role" class="layui-btn icon-btn" data-type="add"><i class="layui-icon"></i>添加角色</button>
         </div>
         <table class="layui-table" id="roletable" lay-filter="roletable"></table>
     </div>
@@ -22,13 +22,12 @@
         let form = layui.form;
         let table = layui.table;
         let admin = layui.admin;
-
         form.render('select');
 
         // 渲染表格
         table.render({
             elem: '#roletable',
-            url: '/role/list',
+            url: '[[@{/role/list}]]',
             page: true,
             cols: [
                 [
@@ -49,11 +48,11 @@
             ]
         });
         // 搜索按钮点击事件
-        $('#btn-search').click(function () {
+        $('#btn-search-role').click(function () {
             let key = $('#search-value').val();
             table.reload('roletable', {where: {searchkey: key}, page: {curr: 1}});
         });
-        $('#btn-add').click(function () {
+        $('#btn-add-role').click(function () {
             showModel();
         });
         let showModel = function (data) {
@@ -61,7 +60,7 @@
             admin.putTempData('t_func', data);
             admin.popupCenter({
                 title: title,
-                path: '/role/loadadd',
+                path: '[[@{/role/loadadd}]]',
                 finish: function () {
                     table.reload('roletable', {});
                 }
@@ -72,7 +71,8 @@
             admin.putTempData('roleId', data.roleId);
             admin.popupCenter({
                 title: title,
-                path: '/role/loadfunc'
+                area:['400px','600px'],
+                path: '[[@{/role/loadfunc}]]'
             });
         };
         // 工具条点击事件
@@ -93,7 +93,7 @@
                 layer.close(i);
                 layer.load(2);
                 let token = $("meta[name='_csrf_token']").attr("value");
-                admin.go('/role/del', {
+                admin.go('[[@{/role/del}]]', {
                     roleid: data.roleId,
                     _csrf: token
                 }, function (data) {
@@ -103,7 +103,7 @@
                         layer.msg(data.msg, {icon: 1});
                     } else if (data.code == 401) {
                         layer.msg(data.msg, {icon: 2, time: 1500}, function () {
-                            location.replace('/login');
+                            location.replace('[[@{/login}]]');
                         }, 1000);
                         return;
                     } else {
