From 2804585b14a62cc1fdec876b65267a4db8bc8995 Mon Sep 17 00:00:00 2001
From: Junjie <xjj@123>
Date: 星期二, 14 一月 2025 10:55:47 +0800
Subject: [PATCH] #

---
 src/main/webapp/static/js/basShuttleErrLog/basShuttleErrLog.js       |  287 
 src/main/resources/mapper/WrkMastLogMapper.xml                       |    2 
 src/main/java/com/zy/asrs/controller/ApiLogController.java           |  129 
 src/main/java/com/zy/asrs/controller/LocMastController.java          |  122 
 src/main/webapp/static/js/operateLog/operateLog.js                   |  396 +
 src/main/java/com/zy/asrs/controller/BasLiftErrController.java       |  127 
 src/main/webapp/static/js/basLocSts/basLocSts.js                     |  440 +
 src/main/webapp/views/admin/wrkMast/wrkMast.html                     |   12 
 src/main/webapp/views/admin/basWrkIotype/basWrkIotype.html           |   54 
 src/main/webapp/views/admin/wrkMastLog/wrkMastLog.html               |   98 
 src/main/webapp/views/admin/role/role.html                           |   60 
 src/main/java/com/zy/asrs/mapper/BasLocStsMapper.java                |   12 
 src/main/webapp/views/admin/tpl/tpl-note.html                        |  206 
 src/main/webapp/static/images/zy-logo-dark.png                       |    0 
 src/main/webapp/views/admin/basShuttleErr/basShuttleErr.html         |  134 
 src/main/webapp/views/shuttle.html                                   |    2 
 src/main/webapp/views/admin/apiLog/apiLog.html                       |  187 
 src/main/webapp/views/admin/basPlcerror/basPlcerror.html             |   56 
 src/main/java/com/zy/asrs/controller/BasLocStsController.java        |  147 
 src/main/java/com/zy/system/controller/UserController.java           |   12 
 src/main/webapp/views/shuttle_zs.html                                |    2 
 src/main/webapp/static/layui/lay/modules/notice/notice.css           | 1929 ++++
 src/main/webapp/views/admin/wrkLastno/wrkLastno.html                 |   58 
 src/main/webapp/static/js/basLiftOpt/basLiftOpt.js                   |  264 
 src/main/webapp/static/layui/lay/modules/tableMerge.js               |   75 
 src/main/java/com/zy/asrs/entity/WrkMastLog.java                     |   24 
 src/main/webapp/views/admin/tpl/theme/img/theme-cyan.png             |    0 
 src/main/webapp/views/admin/user/user_detail.html                    |   87 
 src/main/webapp/views/admin/basLiftOpt/basLiftOpt.html               |  134 
 src/main/webapp/static/js/basLiftErrLog/basLiftErrLog.js             |  287 
 src/main/webapp/static/layui/lay/modules/notice/5.wav                |    0 
 src/main/java/com/zy/asrs/controller/BasWrkIotypeController.java     |  147 
 src/main/webapp/views/admin/basWrkStatus/basWrkStatus.html           |   54 
 src/main/java/com/zy/asrs/service/impl/ApiLogServiceImpl.java        |   51 
 src/main/webapp/views/admin/tpl/theme/img/theme-my.png               |    0 
 src/main/java/com/zy/asrs/service/BasWrkIotypeService.java           |    8 
 src/main/webapp/static/css/cool.css                                  |   48 
 src/main/webapp/static/js/role/rolePower.js                          |   82 
 src/main/java/com/zy/asrs/service/BasWrkStatusService.java           |    8 
 src/main/webapp/views/forklift.html                                  |    2 
 src/main/webapp/views/admin/role/role_power_detail.html              |   37 
 src/main/webapp/static/js/basShuttleErr/basShuttleErr.js             |  267 
 src/main/webapp/views/admin/tpl/theme/img/ic_loading.gif             |    0 
 src/main/webapp/views/admin/permission/permission.html               |   66 
 src/main/java/com/zy/asrs/controller/WrkMastLogController.java       |  143 
 src/main/webapp/views/admin/wrkMastLog/wrkDetlLog.html               |   99 
 src/main/webapp/static/layui/lay/modules/notice/3.wav                |    0 
 src/main/java/com/zy/asrs/service/BasPlcerrorService.java            |    8 
 src/main/webapp/views/admin/tpl/theme/img/theme-admin.png            |    0 
 src/main/webapp/static/js/basShuttleErrLog/basShuttleOpt.js          |  275 
 src/main/webapp/static/js/permission/permission.js                   |  378 
 src/main/webapp/views/admin/basPlcerror/basPlcerror_detail.html      |   96 
 src/main/webapp/views/admin/operateLog/operateLog.html               |   70 
 src/main/webapp/static/layui/lay/modules/contextMenu.js              |  228 
 src/main/java/com/zy/asrs/controller/BasShuttleController.java       |  127 
 src/main/java/com/zy/asrs/controller/BasShuttleErrLogController.java |  128 
 src/main/java/com/zy/asrs/service/impl/BasWrkStatusServiceImpl.java  |   12 
 src/main/webapp/views/admin/basLiftErrLog/basLiftErrLog.html         |  240 
 src/main/webapp/static/layui/lay/modules/notice/1.wav                |    0 
 src/main/webapp/views/admin/tpl/tpl-theme.html                       |  229 
 src/main/java/com/zy/asrs/controller/BasPlcerrorController.java      |  133 
 src/main/webapp/static/layui/lay/modules/notice/notice.js            | 1241 +++
 src/main/webapp/views/admin/tpl/theme/img/theme-pink.png             |    0 
 src/main/java/com/zy/asrs/controller/BasLiftOptController.java       |  128 
 src/main/webapp/views/admin/tpl/alarm-detl.html                      |   52 
 src/main/java/com/zy/asrs/controller/BasLiftErrLogController.java    |  128 
 src/main/webapp/static/layui/lay/modules/xmSelect.js                 |    8 
 src/main/java/com/zy/asrs/entity/ApiLog.java                         |  193 
 src/main/webapp/static/layui/lay/modules/admin.js                    | 1667 ++++
 src/main/java/com/zy/asrs/controller/BasLiftController.java          |  127 
 src/main/webapp/static/layui/lay/modules/tableX.js                   |  645 +
 src/main/webapp/views/admin/tpl/theme/img/theme-blue.png             |    0 
 src/main/java/com/zy/asrs/controller/ShuttleController.java          |    1 
 src/main/webapp/static/js/userLogin/userLogin.js                     |  369 
 src/main/resources/mapper/ApiLogMapper.xml                           |   32 
 src/main/webapp/static/js/locMast/locMast.js                         |  590 +
 src/main/webapp/static/js/basWrkStatus/basWrkStatus.js               |  441 +
 src/main/java/com/zy/asrs/entity/BasLocSts.java                      |  164 
 src/main/webapp/views/admin/config/config_detail.html                |   83 
 src/main/webapp/views/admin/role/role_detail.html                    |   82 
 src/main/webapp/views/admin/wrkLastno/wrkLastno_detail.html          |   78 
 src/main/webapp/static/css/loader.css                                |   59 
 src/main/webapp/views/admin/basWrkIotype/basWrkIotype_detail.html    |   94 
 src/main/webapp/views/admin/index.html                               |  199 
 src/main/webapp/views/admin/tpl/theme/img/theme-colorful.png         |    0 
 src/main/webapp/views/admin/locMast/locMast.html                     |  177 
 src/main/webapp/views/admin/resource/resource.html                   |  309 
 src/main/webapp/views/admin/tpl/theme/img/theme-white.png            |    0 
 src/main/webapp/views/admin/basLocSts/basLocSts_detail.html          |   88 
 src/main/webapp/views/admin/basWrkStatus/basWrkStatus_detail.html    |   96 
 src/main/java/com/zy/asrs/mapper/ApiLogMapper.java                   |   14 
 src/main/webapp/static/css/originTable.css                           |   29 
 src/main/webapp/static/layui/lay/modules/index.js                    |  302 
 src/main/java/com/zy/asrs/entity/LocMast.java                        |   10 
 src/main/java/com/zy/asrs/controller/BasShuttleOptController.java    |   53 
 src/main/webapp/static/layui/lay/modules/notice/6.wav                |    0 
 src/main/webapp/views/admin/tpl/theme/img/theme-purple.png           |    0 
 src/main/java/com/zy/asrs/service/impl/BasPlcerrorServiceImpl.java   |   12 
 src/main/java/com/zy/asrs/service/impl/BasLocStsServiceImpl.java     |   12 
 src/main/java/com/zy/asrs/entity/BasShuttleOpt.java                  |    9 
 src/main/webapp/views/admin/userLogin/userLogin.html                 |   61 
 src/main/webapp/views/admin/basLiftErr/basLiftErr.html               |  134 
 src/main/webapp/views/lift.html                                      |    2 
 src/main/webapp/views/admin/wrkMastLog/wrkMastLog_detail.html        |  196 
 src/main/webapp/views/shuttle2.html                                  |    2 
 src/main/webapp/static/js/basLift/basLift.js                         |  277 
 src/main/webapp/static/css/admin.css                                 |  445 +
 src/main/webapp/static/images/zy-logo.png                            |    0 
 src/main/java/com/zy/asrs/controller/WrkLastnoController.java        |  133 
 src/main/webapp/views/admin/userLogin/userLogin_detail.html          |   69 
 src/main/webapp/static/js/basLiftErr/basLiftErr.js                   |  260 
 src/main/java/com/zy/system/controller/ResourceController.java       |   24 
 src/main/webapp/views/admin/basLift/basLift.html                     |  260 
 src/main/webapp/views/admin/basShuttleErrLog/basShuttleErrLog.html   |  240 
 src/main/java/com/zy/asrs/controller/BasWrkStatusController.java     |  147 
 src/main/java/com/zy/asrs/service/BasLocStsService.java              |    8 
 src/main/webapp/static/layui/lay/modules/treeTable.js                |    2 
 src/main/java/com/zy/asrs/service/impl/BasWrkIotypeServiceImpl.java  |   12 
 src/main/webapp/static/js/resource/resource.js                       |  382 
 src/main/webapp/views/admin/user/user.html                           |  177 
 src/main/webapp/static/js/wrkMastLog/wrkMastLog.js                   |  532 +
 src/main/webapp/views/admin/config/config.html                       |   55 
 src/main/webapp/static/js/basShuttle/basShuttle.js                   |  279 
 src/main/webapp/views/admin/locMast/locMast_detail.html              |   88 
 src/main/webapp/views/index.html                                     |    7 
 src/main/webapp/views/admin/operateLog/operateLog_detail.html        |   87 
 src/main/java/com/zy/asrs/service/ApiLogService.java                 |   12 
 src/main/webapp/static/js/config/config.js                           |  345 
 src/main/webapp/static/js/user/user.js                               |  238 
 src/main/webapp/static/js/wrkLastno/wrkLastno.js                     |  475 +
 src/main/webapp/static/layui/lay/modules/notice/4.wav                |    0 
 src/main/webapp/views/admin/permission/permission_detail.html        |   79 
 src/main/webapp/views/admin/basShuttle/basShuttle.html               |  148 
 src/main/webapp/views/admin/basLocSts/basLocSts.html                 |   54 
 src/main/webapp/views/admin/tpl/theme/img/theme-green.png            |    0 
 src/main/webapp/static/js/apiLog/apiLog.js                           |  268 
 src/main/webapp/views/admin/password.html                            |  146 
 src/main/webapp/views/pipeline.html                                  |    2 
 src/main/java/com/zy/asrs/controller/BasShuttleErrController.java    |  127 
 src/main/webapp/static/js/role/role.js                               |  410 +
 src/main/resources/mapper/BasLocStsMapper.xml                        |   16 
 src/main/webapp/views/admin/basShuttleErrLog/basShuttleOpt.html      |   57 
 src/main/webapp/views/admin/tpl/theme/img/theme-red.png              |    0 
 src/main/webapp/views/admin/detail.html                              |  172 
 src/main/webapp/static/css/common.css                                |  254 
 /dev/null                                                            |   10 
 src/main/webapp/static/js/basWrkIotype/basWrkIotype.js               |  443 +
 src/main/webapp/views/admin/tpl/theme/img/icon_search.png            |    0 
 src/main/webapp/views/admin/tpl/theme/img/icon_date.png              |    0 
 src/main/webapp/static/js/basPlcerror/basPlcerror.js                 |  369 
 src/main/webapp/static/layui/lay/modules/notice/2.wav                |    0 
 151 files changed, 23,183 insertions(+), 92 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/ApiLogController.java b/src/main/java/com/zy/asrs/controller/ApiLogController.java
new file mode 100644
index 0000000..36ed259
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/ApiLogController.java
@@ -0,0 +1,129 @@
+package com.zy.asrs.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.core.annotations.ManagerAuth;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.DateUtils;
+import com.core.common.R;
+import com.zy.asrs.entity.ApiLog;
+import com.zy.asrs.service.ApiLogService;
+import com.zy.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+public class ApiLogController extends BaseController {
+
+    @Autowired
+    private ApiLogService apiLogService;
+
+    @RequestMapping(value = "/apiLog/{id}/auth")
+    @ManagerAuth
+    public R get(@PathVariable("id") String id) {
+        return R.ok(apiLogService.selectById(String.valueOf(id)));
+    }
+
+    @RequestMapping(value = "/apiLog/list/auth")
+    @ManagerAuth
+    public R list(@RequestParam(defaultValue = "1")Integer curr,
+                  @RequestParam(defaultValue = "10")Integer limit,
+                  @RequestParam(required = false)String orderByField,
+                  @RequestParam(required = false)String orderByType,
+                  @RequestParam(required = false)String condition,
+                  @RequestParam Map<String, Object> param){
+        EntityWrapper<ApiLog> wrapper = new EntityWrapper<>();
+        excludeTrash(param);
+        convert(param, wrapper);
+        allLike(ApiLog.class, param.keySet(), wrapper, condition);
+        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} else {
+            wrapper.orderBy("create_time", false);
+        }
+        return R.ok(apiLogService.selectPage(new Page<>(curr, limit), wrapper));
+    }
+
+    private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
+        for (Map.Entry<String, Object> entry : map.entrySet()){
+            String val = String.valueOf(entry.getValue());
+            if (val.contains(RANGE_TIME_LINK)){
+                String[] dates = val.split(RANGE_TIME_LINK);
+                wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
+                wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
+            } else {
+                wrapper.like(entry.getKey(), val);
+            }
+        }
+    }
+
+    @RequestMapping(value = "/apiLog/add/auth")
+    @ManagerAuth
+    public R add(ApiLog apiLog) {
+        apiLogService.insert(apiLog);
+        return R.ok();
+    }
+
+	@RequestMapping(value = "/apiLog/update/auth")
+	@ManagerAuth
+    public R update(ApiLog apiLog){
+        if (Cools.isEmpty(apiLog) || null==apiLog.getId()){
+            return R.error();
+        }
+        apiLogService.updateById(apiLog);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/apiLog/delete/auth")
+    @ManagerAuth
+    public R delete(@RequestParam(value="ids[]") Long[] ids){
+         for (Long id : ids){
+            apiLogService.deleteById(id);
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/apiLog/export/auth")
+    @ManagerAuth
+    public R export(@RequestBody JSONObject param){
+        EntityWrapper<ApiLog> wrapper = new EntityWrapper<>();
+        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
+        Map<String, Object> map = excludeTrash(param.getJSONObject("apiLog"));
+        convert(map, wrapper);
+        List<ApiLog> list = apiLogService.selectList(wrapper);
+        return R.ok(exportSupport(list, fields));
+    }
+
+    @RequestMapping(value = "/apiLogQuery/auth")
+    @ManagerAuth
+    public R query(String condition) {
+        EntityWrapper<ApiLog> wrapper = new EntityWrapper<>();
+        wrapper.like("uuid", condition);
+        Page<ApiLog> page = apiLogService.selectPage(new Page<>(0, 10), wrapper);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (ApiLog apiLog : page.getRecords()){
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", apiLog.getId());
+            map.put("value", apiLog.getId());
+            result.add(map);
+        }
+        return R.ok(result);
+    }
+
+    @RequestMapping(value = "/apiLog/check/column/auth")
+    @ManagerAuth
+    public R query(@RequestBody JSONObject param) {
+        Wrapper<ApiLog> wrapper = new EntityWrapper<ApiLog>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+        if (null != apiLogService.selectOne(wrapper)){
+            return R.parse(BaseRes.REPEAT).add(getComment(ApiLog.class, String.valueOf(param.get("key"))));
+        }
+        return R.ok();
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/controller/BasLiftController.java b/src/main/java/com/zy/asrs/controller/BasLiftController.java
new file mode 100644
index 0000000..d103c38
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/BasLiftController.java
@@ -0,0 +1,127 @@
+package com.zy.asrs.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.core.annotations.ManagerAuth;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.DateUtils;
+import com.core.common.R;
+import com.zy.asrs.entity.BasLift;
+import com.zy.asrs.service.BasLiftService;
+import com.zy.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+public class BasLiftController extends BaseController {
+
+    @Autowired
+    private BasLiftService basLiftService;
+
+    @RequestMapping(value = "/basLift/{id}/auth")
+    @ManagerAuth
+    public R get(@PathVariable("id") String id) {
+        return R.ok(basLiftService.selectById(String.valueOf(id)));
+    }
+
+    @RequestMapping(value = "/basLift/list/auth")
+    @ManagerAuth
+    public R list(@RequestParam(defaultValue = "1")Integer curr,
+                  @RequestParam(defaultValue = "10")Integer limit,
+                  @RequestParam(required = false)String orderByField,
+                  @RequestParam(required = false)String orderByType,
+                  @RequestParam(required = false)String condition,
+                  @RequestParam Map<String, Object> param){
+        EntityWrapper<BasLift> wrapper = new EntityWrapper<>();
+        excludeTrash(param);
+        convert(param, wrapper);
+        allLike(BasLift.class, param.keySet(), wrapper, condition);
+        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
+        return R.ok(basLiftService.selectPage(new Page<>(curr, limit), wrapper));
+    }
+
+    private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
+        for (Map.Entry<String, Object> entry : map.entrySet()){
+            String val = String.valueOf(entry.getValue());
+            if (val.contains(RANGE_TIME_LINK)){
+                String[] dates = val.split(RANGE_TIME_LINK);
+                wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
+                wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
+            } else {
+                wrapper.like(entry.getKey(), val);
+            }
+        }
+    }
+
+    @RequestMapping(value = "/basLift/add/auth")
+    @ManagerAuth
+    public R add(BasLift basLift) {
+        basLiftService.insert(basLift);
+        return R.ok();
+    }
+
+	@RequestMapping(value = "/basLift/update/auth")
+	@ManagerAuth
+    public R update(BasLift basLift){
+        if (Cools.isEmpty(basLift) || null==basLift.getLiftNo()){
+            return R.error();
+        }
+        basLiftService.updateById(basLift);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/basLift/delete/auth")
+    @ManagerAuth
+    public R delete(@RequestParam(value="ids[]") Long[] ids){
+         for (Long id : ids){
+             basLiftService.delete(new EntityWrapper<BasLift>().eq("lift_no", id));
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/basLift/export/auth")
+    @ManagerAuth
+    public R export(@RequestBody JSONObject param){
+        EntityWrapper<BasLift> wrapper = new EntityWrapper<>();
+        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
+        Map<String, Object> map = excludeTrash(param.getJSONObject("basLift"));
+        convert(map, wrapper);
+        List<BasLift> list = basLiftService.selectList(wrapper);
+        return R.ok(exportSupport(list, fields));
+    }
+
+    @RequestMapping(value = "/basLiftQuery/auth")
+    @ManagerAuth
+    public R query(String condition) {
+        EntityWrapper<BasLift> wrapper = new EntityWrapper<>();
+        wrapper.like("lift_no", condition);
+        Page<BasLift> page = basLiftService.selectPage(new Page<>(0, 10), wrapper);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (BasLift basLift : page.getRecords()){
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", basLift.getLiftNo());
+            map.put("value", basLift.getLiftNo());
+            result.add(map);
+        }
+        return R.ok(result);
+    }
+
+    @RequestMapping(value = "/basLift/check/column/auth")
+    @ManagerAuth
+    public R query(@RequestBody JSONObject param) {
+        Wrapper<BasLift> wrapper = new EntityWrapper<BasLift>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+        if (null != basLiftService.selectOne(wrapper)){
+            return R.parse(BaseRes.REPEAT).add(getComment(BasLift.class, String.valueOf(param.get("key"))));
+        }
+        return R.ok();
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/controller/BasLiftErrController.java b/src/main/java/com/zy/asrs/controller/BasLiftErrController.java
new file mode 100644
index 0000000..a8b67e3
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/BasLiftErrController.java
@@ -0,0 +1,127 @@
+package com.zy.asrs.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.core.annotations.ManagerAuth;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.DateUtils;
+import com.core.common.R;
+import com.zy.asrs.entity.BasLiftErr;
+import com.zy.asrs.service.BasLiftErrService;
+import com.zy.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+public class BasLiftErrController extends BaseController {
+
+    @Autowired
+    private BasLiftErrService basLiftErrService;
+
+    @RequestMapping(value = "/basLiftErr/{id}/auth")
+    @ManagerAuth
+    public R get(@PathVariable("id") String id) {
+        return R.ok(basLiftErrService.selectById(String.valueOf(id)));
+    }
+
+    @RequestMapping(value = "/basLiftErr/list/auth")
+    @ManagerAuth
+    public R list(@RequestParam(defaultValue = "1")Integer curr,
+                  @RequestParam(defaultValue = "10")Integer limit,
+                  @RequestParam(required = false)String orderByField,
+                  @RequestParam(required = false)String orderByType,
+                  @RequestParam(required = false)String condition,
+                  @RequestParam Map<String, Object> param){
+        EntityWrapper<BasLiftErr> wrapper = new EntityWrapper<>();
+        excludeTrash(param);
+        convert(param, wrapper);
+        allLike(BasLiftErr.class, param.keySet(), wrapper, condition);
+        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
+        return R.ok(basLiftErrService.selectPage(new Page<>(curr, limit), wrapper));
+    }
+
+    private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
+        for (Map.Entry<String, Object> entry : map.entrySet()){
+            String val = String.valueOf(entry.getValue());
+            if (val.contains(RANGE_TIME_LINK)){
+                String[] dates = val.split(RANGE_TIME_LINK);
+                wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
+                wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
+            } else {
+                wrapper.like(entry.getKey(), val);
+            }
+        }
+    }
+
+    @RequestMapping(value = "/basLiftErr/add/auth")
+    @ManagerAuth
+    public R add(BasLiftErr basLiftErr) {
+        basLiftErrService.insert(basLiftErr);
+        return R.ok();
+    }
+
+	@RequestMapping(value = "/basLiftErr/update/auth")
+	@ManagerAuth
+    public R update(BasLiftErr basLiftErr){
+        if (Cools.isEmpty(basLiftErr) || null==basLiftErr.getErrorCode()){
+            return R.error();
+        }
+        basLiftErrService.updateById(basLiftErr);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/basLiftErr/delete/auth")
+    @ManagerAuth
+    public R delete(@RequestParam(value="ids[]") Long[] ids){
+         for (Long id : ids){
+            basLiftErrService.deleteById(id);
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/basLiftErr/export/auth")
+    @ManagerAuth
+    public R export(@RequestBody JSONObject param){
+        EntityWrapper<BasLiftErr> wrapper = new EntityWrapper<>();
+        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
+        Map<String, Object> map = excludeTrash(param.getJSONObject("basLiftErr"));
+        convert(map, wrapper);
+        List<BasLiftErr> list = basLiftErrService.selectList(wrapper);
+        return R.ok(exportSupport(list, fields));
+    }
+
+    @RequestMapping(value = "/basLiftErrQuery/auth")
+    @ManagerAuth
+    public R query(String condition) {
+        EntityWrapper<BasLiftErr> wrapper = new EntityWrapper<>();
+        wrapper.like("id", condition);
+        Page<BasLiftErr> page = basLiftErrService.selectPage(new Page<>(0, 10), wrapper);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (BasLiftErr basLiftErr : page.getRecords()){
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", basLiftErr.getErrorCode());
+            map.put("value", basLiftErr.getErrorCode());
+            result.add(map);
+        }
+        return R.ok(result);
+    }
+
+    @RequestMapping(value = "/basLiftErr/check/column/auth")
+    @ManagerAuth
+    public R query(@RequestBody JSONObject param) {
+        Wrapper<BasLiftErr> wrapper = new EntityWrapper<BasLiftErr>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+        if (null != basLiftErrService.selectOne(wrapper)){
+            return R.parse(BaseRes.REPEAT).add(getComment(BasLiftErr.class, String.valueOf(param.get("key"))));
+        }
+        return R.ok();
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/controller/BasLiftErrLogController.java b/src/main/java/com/zy/asrs/controller/BasLiftErrLogController.java
new file mode 100644
index 0000000..83b79e6
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/BasLiftErrLogController.java
@@ -0,0 +1,128 @@
+package com.zy.asrs.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.core.annotations.ManagerAuth;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.DateUtils;
+import com.core.common.R;
+import com.zy.asrs.entity.BasLiftErrLog;
+import com.zy.asrs.service.BasLiftErrLogService;
+import com.zy.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+public class BasLiftErrLogController extends BaseController {
+
+    @Autowired
+    private BasLiftErrLogService basLiftErrLogService;
+
+    @RequestMapping(value = "/basLiftErrLog/{id}/auth")
+    @ManagerAuth
+    public R get(@PathVariable("id") String id) {
+        return R.ok(basLiftErrLogService.selectById(String.valueOf(id)));
+    }
+
+    @RequestMapping(value = "/basLiftErrLog/list/auth")
+    @ManagerAuth
+    public R list(@RequestParam(defaultValue = "1")Integer curr,
+                  @RequestParam(defaultValue = "10")Integer limit,
+                  @RequestParam(required = false)String orderByField,
+                  @RequestParam(required = false)String orderByType,
+                  @RequestParam(required = false)String condition,
+                  @RequestParam Map<String, Object> param){
+        EntityWrapper<BasLiftErrLog> wrapper = new EntityWrapper<>();
+        excludeTrash(param);
+        convert(param, wrapper);
+        allLike(BasLiftErrLog.class, param.keySet(), wrapper, condition);
+        wrapper.orderBy("create_time", false);
+        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
+        return R.ok(basLiftErrLogService.selectPage(new Page<>(curr, limit), wrapper));
+    }
+
+    private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
+        for (Map.Entry<String, Object> entry : map.entrySet()){
+            String val = String.valueOf(entry.getValue());
+            if (val.contains(RANGE_TIME_LINK)){
+                String[] dates = val.split(RANGE_TIME_LINK);
+                wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
+                wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
+            } else {
+                wrapper.like(entry.getKey(), val);
+            }
+        }
+    }
+
+    @RequestMapping(value = "/basLiftErrLog/add/auth")
+    @ManagerAuth
+    public R add(BasLiftErrLog basLiftErrLog) {
+        basLiftErrLogService.insert(basLiftErrLog);
+        return R.ok();
+    }
+
+	@RequestMapping(value = "/basLiftErrLog/update/auth")
+	@ManagerAuth
+    public R update(BasLiftErrLog basLiftErrLog){
+        if (Cools.isEmpty(basLiftErrLog) || null==basLiftErrLog.getId()){
+            return R.error();
+        }
+        basLiftErrLogService.updateById(basLiftErrLog);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/basLiftErrLog/delete/auth")
+    @ManagerAuth
+    public R delete(@RequestParam(value="ids[]") Long[] ids){
+         for (Long id : ids){
+            basLiftErrLogService.deleteById(id);
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/basLiftErrLog/export/auth")
+    @ManagerAuth
+    public R export(@RequestBody JSONObject param){
+        EntityWrapper<BasLiftErrLog> wrapper = new EntityWrapper<>();
+        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
+        Map<String, Object> map = excludeTrash(param.getJSONObject("basLiftErrLog"));
+        convert(map, wrapper);
+        List<BasLiftErrLog> list = basLiftErrLogService.selectList(wrapper);
+        return R.ok(exportSupport(list, fields));
+    }
+
+    @RequestMapping(value = "/basLiftErrLogQuery/auth")
+    @ManagerAuth
+    public R query(String condition) {
+        EntityWrapper<BasLiftErrLog> wrapper = new EntityWrapper<>();
+        wrapper.like("id", condition);
+        Page<BasLiftErrLog> page = basLiftErrLogService.selectPage(new Page<>(0, 10), wrapper);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (BasLiftErrLog basLiftErrLog : page.getRecords()){
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", basLiftErrLog.getId());
+            map.put("value", basLiftErrLog.getId());
+            result.add(map);
+        }
+        return R.ok(result);
+    }
+
+    @RequestMapping(value = "/basLiftErrLog/check/column/auth")
+    @ManagerAuth
+    public R query(@RequestBody JSONObject param) {
+        Wrapper<BasLiftErrLog> wrapper = new EntityWrapper<BasLiftErrLog>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+        if (null != basLiftErrLogService.selectOne(wrapper)){
+            return R.parse(BaseRes.REPEAT).add(getComment(BasLiftErrLog.class, String.valueOf(param.get("key"))));
+        }
+        return R.ok();
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/controller/BasLiftOptController.java b/src/main/java/com/zy/asrs/controller/BasLiftOptController.java
new file mode 100644
index 0000000..4e21bdd
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/BasLiftOptController.java
@@ -0,0 +1,128 @@
+package com.zy.asrs.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.core.annotations.ManagerAuth;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.DateUtils;
+import com.core.common.R;
+import com.zy.asrs.entity.BasLiftOpt;
+import com.zy.asrs.service.BasLiftOptService;
+import com.zy.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+public class BasLiftOptController extends BaseController {
+
+    @Autowired
+    private BasLiftOptService basLiftOptService;
+
+    @RequestMapping(value = "/basLiftOpt/{id}/auth")
+    @ManagerAuth
+    public R get(@PathVariable("id") String id) {
+        return R.ok(basLiftOptService.selectById(String.valueOf(id)));
+    }
+
+    @RequestMapping(value = "/basLiftOpt/list/auth")
+    @ManagerAuth
+    public R list(@RequestParam(defaultValue = "1")Integer curr,
+                  @RequestParam(defaultValue = "10")Integer limit,
+                  @RequestParam(required = false)String orderByField,
+                  @RequestParam(required = false)String orderByType,
+                  @RequestParam(required = false)String condition,
+                  @RequestParam Map<String, Object> param){
+        EntityWrapper<BasLiftOpt> wrapper = new EntityWrapper<>();
+        excludeTrash(param);
+        convert(param, wrapper);
+        allLike(BasLiftOpt.class, param.keySet(), wrapper, condition);
+        wrapper.orderBy("send_time", false);
+        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
+        return R.ok(basLiftOptService.selectPage(new Page<>(curr, limit), wrapper));
+    }
+
+    private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
+        for (Map.Entry<String, Object> entry : map.entrySet()){
+            String val = String.valueOf(entry.getValue());
+            if (val.contains(RANGE_TIME_LINK)){
+                String[] dates = val.split(RANGE_TIME_LINK);
+                wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
+                wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
+            } else {
+                wrapper.like(entry.getKey(), val);
+            }
+        }
+    }
+
+    @RequestMapping(value = "/basLiftOpt/add/auth")
+    @ManagerAuth
+    public R add(BasLiftOpt basLiftOpt) {
+        basLiftOptService.insert(basLiftOpt);
+        return R.ok();
+    }
+
+	@RequestMapping(value = "/basLiftOpt/update/auth")
+	@ManagerAuth
+    public R update(BasLiftOpt basLiftOpt){
+        if (Cools.isEmpty(basLiftOpt) || null==basLiftOpt.getId()){
+            return R.error();
+        }
+        basLiftOptService.updateById(basLiftOpt);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/basLiftOpt/delete/auth")
+    @ManagerAuth
+    public R delete(@RequestParam(value="ids[]") Long[] ids){
+         for (Long id : ids){
+            basLiftOptService.deleteById(id);
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/basLiftOpt/export/auth")
+    @ManagerAuth
+    public R export(@RequestBody JSONObject param){
+        EntityWrapper<BasLiftOpt> wrapper = new EntityWrapper<>();
+        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
+        Map<String, Object> map = excludeTrash(param.getJSONObject("basLiftOpt"));
+        convert(map, wrapper);
+        List<BasLiftOpt> list = basLiftOptService.selectList(wrapper);
+        return R.ok(exportSupport(list, fields));
+    }
+
+    @RequestMapping(value = "/basLiftOptQuery/auth")
+    @ManagerAuth
+    public R query(String condition) {
+        EntityWrapper<BasLiftOpt> wrapper = new EntityWrapper<>();
+        wrapper.like("id", condition);
+        Page<BasLiftOpt> page = basLiftOptService.selectPage(new Page<>(0, 10), wrapper);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (BasLiftOpt basLiftOpt : page.getRecords()){
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", basLiftOpt.getId());
+            map.put("value", basLiftOpt.getId());
+            result.add(map);
+        }
+        return R.ok(result);
+    }
+
+    @RequestMapping(value = "/basLiftOpt/check/column/auth")
+    @ManagerAuth
+    public R query(@RequestBody JSONObject param) {
+        Wrapper<BasLiftOpt> wrapper = new EntityWrapper<BasLiftOpt>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+        if (null != basLiftOptService.selectOne(wrapper)){
+            return R.parse(BaseRes.REPEAT).add(getComment(BasLiftOpt.class, String.valueOf(param.get("key"))));
+        }
+        return R.ok();
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/controller/BasLocStsController.java b/src/main/java/com/zy/asrs/controller/BasLocStsController.java
new file mode 100644
index 0000000..2a40cc2
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/BasLocStsController.java
@@ -0,0 +1,147 @@
+package com.zy.asrs.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.core.annotations.ManagerAuth;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.DateUtils;
+import com.core.common.R;
+import com.zy.asrs.entity.BasLocSts;
+import com.zy.asrs.service.BasLocStsService;
+import com.zy.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+
+@RestController
+public class BasLocStsController extends BaseController {
+
+    @Autowired
+    private BasLocStsService basLocStsService;
+
+    @RequestMapping(value = "/basLocSts/{id}/auth")
+    @ManagerAuth
+    public R get(@PathVariable("id") String id) {
+        return R.ok(basLocStsService.selectById(id));
+    }
+
+    @RequestMapping(value = "/basLocSts/list/auth")
+    @ManagerAuth
+    public R list(@RequestParam(defaultValue = "1")Integer curr,
+                  @RequestParam(defaultValue = "10")Integer limit,
+                  @RequestParam(required = false)String orderByField,
+                  @RequestParam(required = false)String orderByType,
+                  @RequestParam Map<String, Object> param){
+        excludeTrash(param);
+        EntityWrapper<BasLocSts> wrapper = new EntityWrapper<>();
+        convert(param, wrapper);
+        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
+        return R.ok(basLocStsService.selectPage(new Page<>(curr, limit), wrapper));
+    }
+
+    private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
+        for (Map.Entry<String, Object> entry : map.entrySet()){
+            String val = String.valueOf(entry.getValue());
+            if (val.contains(RANGE_TIME_LINK)){
+                String[] dates = val.split(RANGE_TIME_LINK);
+                wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
+                wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
+            } else {
+                wrapper.like(entry.getKey(), val);
+            }
+        }
+    }
+
+    @RequestMapping(value = "/basLocSts/edit/auth")
+    @ManagerAuth
+    public R edit(BasLocSts basLocSts) {
+        if (Cools.isEmpty(basLocSts)){
+            return R.error();
+        }
+        if (null == basLocSts.getLocSts()){
+            basLocStsService.insert(basLocSts);
+        } else {
+            basLocStsService.updateById(basLocSts);
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/basLocSts/add/auth")
+    @ManagerAuth(memo = "搴撲綅鐘舵�佹坊鍔�")
+    public R add(BasLocSts basLocSts) {
+        basLocSts.setModiUser(getUserId());
+        basLocSts.setModiTime(new Date());
+        basLocSts.setAppeUser(getUserId());
+        basLocSts.setAppeTime(new Date());
+        basLocStsService.insert(basLocSts);
+        return R.ok();
+    }
+
+	@RequestMapping(value = "/basLocSts/update/auth")
+    @ManagerAuth(memo = "搴撲綅鐘舵�佷慨鏀�")
+    public R update(BasLocSts basLocSts){
+        if (Cools.isEmpty(basLocSts) || null==basLocSts.getLocSts()){
+            return R.error();
+        }
+        basLocSts.setModiUser(getUserId());
+        basLocSts.setModiTime(new Date());
+        basLocStsService.updateById(basLocSts);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/basLocSts/delete/auth")
+    @ManagerAuth(memo = "搴撲綅鐘舵�佸垹闄�")
+    public R delete(@RequestParam String param){
+        List<BasLocSts> list = JSONArray.parseArray(param, BasLocSts.class);
+        if (Cools.isEmpty(list)){
+            return R.error();
+        }
+        for (BasLocSts entity : list){
+            basLocStsService.delete(new EntityWrapper<>(entity));
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/basLocSts/export/auth")
+    @ManagerAuth(memo = "搴撲綅鐘舵�佸鍑�")
+    public R export(@RequestBody JSONObject param){
+        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
+        EntityWrapper<BasLocSts> wrapper = new EntityWrapper<>();
+        Map<String, Object> map = excludeTrash(param.getJSONObject("basLocSts"));
+        convert(map, wrapper);
+        List<BasLocSts> list = basLocStsService.selectList(wrapper);
+        return R.ok(exportSupport(list, fields));
+    }
+
+    @RequestMapping(value = "/basLocStsQuery/auth")
+    @ManagerAuth
+    public R query(String condition) {
+        EntityWrapper<BasLocSts> wrapper = new EntityWrapper<>();
+        wrapper.like("loc_desc", condition);
+        Page<BasLocSts> page = basLocStsService.selectPage(new Page<>(0, 10), wrapper);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (BasLocSts basLocSts : page.getRecords()){
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", basLocSts.getLocSts());
+            map.put("value", basLocSts.getLocDesc());
+            result.add(map);
+        }
+        return R.ok(result);
+    }
+
+    @RequestMapping(value = "/basLocSts/check/column/auth")
+    @ManagerAuth
+    public R query(@RequestBody JSONObject param) {
+        Wrapper<BasLocSts> wrapper = new EntityWrapper<BasLocSts>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+        if (null != basLocStsService.selectOne(wrapper)){
+            return R.parse(BaseRes.REPEAT).add(getComment(BasLocSts.class, String.valueOf(param.get("key"))));
+        }
+        return R.ok();
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/controller/BasPlcerrorController.java b/src/main/java/com/zy/asrs/controller/BasPlcerrorController.java
new file mode 100644
index 0000000..5e81cc1
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/BasPlcerrorController.java
@@ -0,0 +1,133 @@
+package com.zy.asrs.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.core.annotations.ManagerAuth;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.DateUtils;
+import com.core.common.R;
+import com.zy.asrs.entity.BasPlcerror;
+import com.zy.asrs.service.BasPlcerrorService;
+import com.zy.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+
+@RestController
+public class BasPlcerrorController extends BaseController {
+
+    @Autowired
+    private BasPlcerrorService basPlcerrorService;
+
+    @RequestMapping(value = "/basPlcerror/{id}/auth")
+    @ManagerAuth
+    public R get(@PathVariable("id") String id) {
+        return R.ok(basPlcerrorService.selectById(String.valueOf(id)));
+    }
+
+    @RequestMapping(value = "/basPlcerror/list/auth")
+    @ManagerAuth
+    public R list(@RequestParam(defaultValue = "1")Integer curr,
+                  @RequestParam(defaultValue = "10")Integer limit,
+                  @RequestParam(required = false)String orderByField,
+                  @RequestParam(required = false)String orderByType,
+                  @RequestParam Map<String, Object> param){
+        EntityWrapper<BasPlcerror> wrapper = new EntityWrapper<>();
+        excludeTrash(param);
+        convert(param, wrapper);
+        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
+        return R.ok(basPlcerrorService.selectPage(new Page<>(curr, limit), wrapper));
+    }
+
+    private void convert(Map<String, Object> map, EntityWrapper wrapper){
+        for (Map.Entry<String, Object> entry : map.entrySet()){
+            String val = String.valueOf(entry.getValue());
+            if (val.contains(RANGE_TIME_LINK)){
+                String[] dates = val.split(RANGE_TIME_LINK);
+                wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
+                wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
+            } else {
+                wrapper.like(entry.getKey(), val);
+            }
+        }
+    }
+
+    @RequestMapping(value = "/basPlcerror/add/auth")
+    @ManagerAuth
+    public R add(BasPlcerror basPlcerror) {
+        basPlcerror.setModiUser(getUserId());
+        basPlcerror.setModiTime(new Date());
+        basPlcerror.setAppeUser(getUserId());
+        basPlcerror.setAppeTime(new Date());
+        basPlcerrorService.insert(basPlcerror);
+        return R.ok();
+    }
+
+	@RequestMapping(value = "/basPlcerror/update/auth")
+	@ManagerAuth
+    public R update(BasPlcerror basPlcerror){
+        if (Cools.isEmpty(basPlcerror) || null==basPlcerror.getErrorCode()){
+            return R.error();
+        }
+        basPlcerror.setModiUser(getUserId());
+        basPlcerror.setModiTime(new Date());
+        basPlcerrorService.updateById(basPlcerror);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/basPlcerror/delete/auth")
+    @ManagerAuth
+    public R delete(@RequestParam String param){
+        List<BasPlcerror> list = JSONArray.parseArray(param, BasPlcerror.class);
+        if (Cools.isEmpty(list)){
+            return R.error();
+        }
+        for (BasPlcerror entity : list){
+            basPlcerrorService.delete(new EntityWrapper<>(entity));
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/basPlcerror/export/auth")
+    @ManagerAuth
+    public R export(@RequestBody JSONObject param){
+        EntityWrapper<BasPlcerror> wrapper = new EntityWrapper<>();
+        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
+        Map<String, Object> map = excludeTrash(param.getJSONObject("basPlcerror"));
+        convert(map, wrapper);
+        List<BasPlcerror> list = basPlcerrorService.selectList(wrapper);
+        return R.ok(exportSupport(list, fields));
+    }
+
+    @RequestMapping(value = "/basPlcerrorQuery/auth")
+    @ManagerAuth
+    public R query(String condition) {
+        EntityWrapper<BasPlcerror> wrapper = new EntityWrapper<>();
+        wrapper.like("error_desc", condition);
+        Page<BasPlcerror> page = basPlcerrorService.selectPage(new Page<>(0, 10), wrapper);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (BasPlcerror basPlcerror : page.getRecords()){
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", basPlcerror.getErrorCode());
+            map.put("value", basPlcerror.getErrorDesc());
+            result.add(map);
+        }
+        return R.ok(result);
+    }
+
+    @RequestMapping(value = "/basPlcerror/check/column/auth")
+    @ManagerAuth
+    public R query(@RequestBody JSONObject param) {
+        Wrapper<BasPlcerror> wrapper = new EntityWrapper<BasPlcerror>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+        if (null != basPlcerrorService.selectOne(wrapper)){
+            return R.parse(BaseRes.REPEAT).add(getComment(BasPlcerror.class, String.valueOf(param.get("key"))));
+        }
+        return R.ok();
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/controller/BasShuttleController.java b/src/main/java/com/zy/asrs/controller/BasShuttleController.java
new file mode 100644
index 0000000..88a5cc9
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/BasShuttleController.java
@@ -0,0 +1,127 @@
+package com.zy.asrs.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.core.annotations.ManagerAuth;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.DateUtils;
+import com.core.common.R;
+import com.zy.asrs.entity.BasShuttle;
+import com.zy.asrs.service.BasShuttleService;
+import com.zy.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+public class BasShuttleController extends BaseController {
+
+    @Autowired
+    private BasShuttleService basShuttleService;
+
+    @RequestMapping(value = "/basShuttle/{id}/auth")
+    @ManagerAuth
+    public R get(@PathVariable("id") String id) {
+        return R.ok(basShuttleService.selectById(String.valueOf(id)));
+    }
+
+    @RequestMapping(value = "/basShuttle/list/auth")
+    @ManagerAuth
+    public R list(@RequestParam(defaultValue = "1")Integer curr,
+                  @RequestParam(defaultValue = "10")Integer limit,
+                  @RequestParam(required = false)String orderByField,
+                  @RequestParam(required = false)String orderByType,
+                  @RequestParam(required = false)String condition,
+                  @RequestParam Map<String, Object> param){
+        EntityWrapper<BasShuttle> wrapper = new EntityWrapper<>();
+        excludeTrash(param);
+        convert(param, wrapper);
+        allLike(BasShuttle.class, param.keySet(), wrapper, condition);
+        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
+        return R.ok(basShuttleService.selectPage(new Page<>(curr, limit), wrapper));
+    }
+
+    private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
+        for (Map.Entry<String, Object> entry : map.entrySet()){
+            String val = String.valueOf(entry.getValue());
+            if (val.contains(RANGE_TIME_LINK)){
+                String[] dates = val.split(RANGE_TIME_LINK);
+                wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
+                wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
+            } else {
+                wrapper.like(entry.getKey(), val);
+            }
+        }
+    }
+
+    @RequestMapping(value = "/basShuttle/add/auth")
+    @ManagerAuth
+    public R add(BasShuttle basShuttle) {
+        basShuttleService.insert(basShuttle);
+        return R.ok();
+    }
+
+	@RequestMapping(value = "/basShuttle/update/auth")
+	@ManagerAuth
+    public R update(BasShuttle basShuttle){
+        if (Cools.isEmpty(basShuttle) || null==basShuttle.getShuttleNo()){
+            return R.error();
+        }
+        basShuttleService.updateById(basShuttle);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/basShuttle/delete/auth")
+    @ManagerAuth
+    public R delete(@RequestParam(value="ids[]") Long[] ids){
+         for (Long id : ids){
+            basShuttleService.deleteById(id);
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/basShuttle/export/auth")
+    @ManagerAuth
+    public R export(@RequestBody JSONObject param){
+        EntityWrapper<BasShuttle> wrapper = new EntityWrapper<>();
+        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
+        Map<String, Object> map = excludeTrash(param.getJSONObject("basShuttle"));
+        convert(map, wrapper);
+        List<BasShuttle> list = basShuttleService.selectList(wrapper);
+        return R.ok(exportSupport(list, fields));
+    }
+
+    @RequestMapping(value = "/basShuttleQuery/auth")
+    @ManagerAuth
+    public R query(String condition) {
+        EntityWrapper<BasShuttle> wrapper = new EntityWrapper<>();
+        wrapper.like("shuttle_no", condition);
+        Page<BasShuttle> page = basShuttleService.selectPage(new Page<>(0, 10), wrapper);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (BasShuttle basShuttle : page.getRecords()){
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", basShuttle.getShuttleNo());
+            map.put("value", basShuttle.getShuttleNo());
+            result.add(map);
+        }
+        return R.ok(result);
+    }
+
+    @RequestMapping(value = "/basShuttle/check/column/auth")
+    @ManagerAuth
+    public R query(@RequestBody JSONObject param) {
+        Wrapper<BasShuttle> wrapper = new EntityWrapper<BasShuttle>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+        if (null != basShuttleService.selectOne(wrapper)){
+            return R.parse(BaseRes.REPEAT).add(getComment(BasShuttle.class, String.valueOf(param.get("key"))));
+        }
+        return R.ok();
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/controller/BasShuttleErrController.java b/src/main/java/com/zy/asrs/controller/BasShuttleErrController.java
new file mode 100644
index 0000000..440bd93
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/BasShuttleErrController.java
@@ -0,0 +1,127 @@
+package com.zy.asrs.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.core.annotations.ManagerAuth;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.DateUtils;
+import com.core.common.R;
+import com.zy.asrs.entity.BasShuttleErr;
+import com.zy.asrs.service.BasShuttleErrService;
+import com.zy.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+public class BasShuttleErrController extends BaseController {
+
+    @Autowired
+    private BasShuttleErrService basShuttleErrService;
+
+    @RequestMapping(value = "/basShuttleErr/{id}/auth")
+    @ManagerAuth
+    public R get(@PathVariable("id") String id) {
+        return R.ok(basShuttleErrService.selectById(String.valueOf(id)));
+    }
+
+    @RequestMapping(value = "/basShuttleErr/list/auth")
+    @ManagerAuth
+    public R list(@RequestParam(defaultValue = "1")Integer curr,
+                  @RequestParam(defaultValue = "10")Integer limit,
+                  @RequestParam(required = false)String orderByField,
+                  @RequestParam(required = false)String orderByType,
+                  @RequestParam(required = false)String condition,
+                  @RequestParam Map<String, Object> param){
+        EntityWrapper<BasShuttleErr> wrapper = new EntityWrapper<>();
+        excludeTrash(param);
+        convert(param, wrapper);
+        allLike(BasShuttleErr.class, param.keySet(), wrapper, condition);
+        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
+        return R.ok(basShuttleErrService.selectPage(new Page<>(curr, limit), wrapper));
+    }
+
+    private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
+        for (Map.Entry<String, Object> entry : map.entrySet()){
+            String val = String.valueOf(entry.getValue());
+            if (val.contains(RANGE_TIME_LINK)){
+                String[] dates = val.split(RANGE_TIME_LINK);
+                wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
+                wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
+            } else {
+                wrapper.like(entry.getKey(), val);
+            }
+        }
+    }
+
+    @RequestMapping(value = "/basShuttleErr/add/auth")
+    @ManagerAuth
+    public R add(BasShuttleErr basShuttleErr) {
+        basShuttleErrService.insert(basShuttleErr);
+        return R.ok();
+    }
+
+	@RequestMapping(value = "/basShuttleErr/update/auth")
+	@ManagerAuth
+    public R update(BasShuttleErr basShuttleErr){
+        if (Cools.isEmpty(basShuttleErr) || null==basShuttleErr.getErrorCode()){
+            return R.error();
+        }
+        basShuttleErrService.updateById(basShuttleErr);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/basShuttleErr/delete/auth")
+    @ManagerAuth
+    public R delete(@RequestParam(value="ids[]") Long[] ids){
+         for (Long id : ids){
+            basShuttleErrService.deleteById(id);
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/basShuttleErr/export/auth")
+    @ManagerAuth
+    public R export(@RequestBody JSONObject param){
+        EntityWrapper<BasShuttleErr> wrapper = new EntityWrapper<>();
+        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
+        Map<String, Object> map = excludeTrash(param.getJSONObject("basShuttleErr"));
+        convert(map, wrapper);
+        List<BasShuttleErr> list = basShuttleErrService.selectList(wrapper);
+        return R.ok(exportSupport(list, fields));
+    }
+
+    @RequestMapping(value = "/basShuttleErrQuery/auth")
+    @ManagerAuth
+    public R query(String condition) {
+        EntityWrapper<BasShuttleErr> wrapper = new EntityWrapper<>();
+        wrapper.like("id", condition);
+        Page<BasShuttleErr> page = basShuttleErrService.selectPage(new Page<>(0, 10), wrapper);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (BasShuttleErr basShuttleErr : page.getRecords()){
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", basShuttleErr.getErrorCode());
+            map.put("value", basShuttleErr.getErrorCode());
+            result.add(map);
+        }
+        return R.ok(result);
+    }
+
+    @RequestMapping(value = "/basShuttleErr/check/column/auth")
+    @ManagerAuth
+    public R query(@RequestBody JSONObject param) {
+        Wrapper<BasShuttleErr> wrapper = new EntityWrapper<BasShuttleErr>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+        if (null != basShuttleErrService.selectOne(wrapper)){
+            return R.parse(BaseRes.REPEAT).add(getComment(BasShuttleErr.class, String.valueOf(param.get("key"))));
+        }
+        return R.ok();
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/controller/BasShuttleErrLogController.java b/src/main/java/com/zy/asrs/controller/BasShuttleErrLogController.java
new file mode 100644
index 0000000..31b3aef
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/BasShuttleErrLogController.java
@@ -0,0 +1,128 @@
+package com.zy.asrs.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.core.annotations.ManagerAuth;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.DateUtils;
+import com.core.common.R;
+import com.zy.asrs.entity.BasShuttleErrLog;
+import com.zy.asrs.service.BasShuttleErrLogService;
+import com.zy.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+public class BasShuttleErrLogController extends BaseController {
+
+    @Autowired
+    private BasShuttleErrLogService basShuttleErrLogService;
+
+    @RequestMapping(value = "/basShuttleErrLog/{id}/auth")
+    @ManagerAuth
+    public R get(@PathVariable("id") String id) {
+        return R.ok(basShuttleErrLogService.selectById(String.valueOf(id)));
+    }
+
+    @RequestMapping(value = "/basShuttleErrLog/list/auth")
+    @ManagerAuth
+    public R list(@RequestParam(defaultValue = "1")Integer curr,
+                  @RequestParam(defaultValue = "10")Integer limit,
+                  @RequestParam(required = false)String orderByField,
+                  @RequestParam(required = false)String orderByType,
+                  @RequestParam(required = false)String condition,
+                  @RequestParam Map<String, Object> param){
+        EntityWrapper<BasShuttleErrLog> wrapper = new EntityWrapper<>();
+        excludeTrash(param);
+        convert(param, wrapper);
+        allLike(BasShuttleErrLog.class, param.keySet(), wrapper, condition);
+        wrapper.orderBy("create_time", false);
+        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
+        return R.ok(basShuttleErrLogService.selectPage(new Page<>(curr, limit), wrapper));
+    }
+
+    private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
+        for (Map.Entry<String, Object> entry : map.entrySet()){
+            String val = String.valueOf(entry.getValue());
+            if (val.contains(RANGE_TIME_LINK)){
+                String[] dates = val.split(RANGE_TIME_LINK);
+                wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
+                wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
+            } else {
+                wrapper.like(entry.getKey(), val);
+            }
+        }
+    }
+
+    @RequestMapping(value = "/basShuttleErrLog/add/auth")
+    @ManagerAuth
+    public R add(BasShuttleErrLog basShuttleErrLog) {
+        basShuttleErrLogService.insert(basShuttleErrLog);
+        return R.ok();
+    }
+
+	@RequestMapping(value = "/basShuttleErrLog/update/auth")
+	@ManagerAuth
+    public R update(BasShuttleErrLog basShuttleErrLog){
+        if (Cools.isEmpty(basShuttleErrLog) || null==basShuttleErrLog.getId()){
+            return R.error();
+        }
+        basShuttleErrLogService.updateById(basShuttleErrLog);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/basShuttleErrLog/delete/auth")
+    @ManagerAuth
+    public R delete(@RequestParam(value="ids[]") Long[] ids){
+         for (Long id : ids){
+            basShuttleErrLogService.deleteById(id);
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/basShuttleErrLog/export/auth")
+    @ManagerAuth
+    public R export(@RequestBody JSONObject param){
+        EntityWrapper<BasShuttleErrLog> wrapper = new EntityWrapper<>();
+        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
+        Map<String, Object> map = excludeTrash(param.getJSONObject("basShuttleErrLog"));
+        convert(map, wrapper);
+        List<BasShuttleErrLog> list = basShuttleErrLogService.selectList(wrapper);
+        return R.ok(exportSupport(list, fields));
+    }
+
+    @RequestMapping(value = "/basShuttleErrLogQuery/auth")
+    @ManagerAuth
+    public R query(String condition) {
+        EntityWrapper<BasShuttleErrLog> wrapper = new EntityWrapper<>();
+        wrapper.like("id", condition);
+        Page<BasShuttleErrLog> page = basShuttleErrLogService.selectPage(new Page<>(0, 10), wrapper);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (BasShuttleErrLog basShuttleErrLog : page.getRecords()){
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", basShuttleErrLog.getId());
+            map.put("value", basShuttleErrLog.getId());
+            result.add(map);
+        }
+        return R.ok(result);
+    }
+
+    @RequestMapping(value = "/basShuttleErrLog/check/column/auth")
+    @ManagerAuth
+    public R query(@RequestBody JSONObject param) {
+        Wrapper<BasShuttleErrLog> wrapper = new EntityWrapper<BasShuttleErrLog>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+        if (null != basShuttleErrLogService.selectOne(wrapper)){
+            return R.parse(BaseRes.REPEAT).add(getComment(BasShuttleErrLog.class, String.valueOf(param.get("key"))));
+        }
+        return R.ok();
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/controller/BasShuttleOptController.java b/src/main/java/com/zy/asrs/controller/BasShuttleOptController.java
new file mode 100644
index 0000000..a3ecca1
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/BasShuttleOptController.java
@@ -0,0 +1,53 @@
+package com.zy.asrs.controller;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.core.annotations.ManagerAuth;
+import com.core.common.Cools;
+import com.core.common.DateUtils;
+import com.core.common.R;
+import com.zy.asrs.entity.BasShuttleOpt;
+import com.zy.asrs.service.BasShuttleOptService;
+import com.zy.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+@RestController
+public class BasShuttleOptController extends BaseController {
+    @Autowired
+    private BasShuttleOptService basShuttleOptService;
+
+    @RequestMapping(value = "/basShuttleOpt/list/auth")
+    @ManagerAuth
+    public R list(@RequestParam(defaultValue = "1")Integer curr,
+                  @RequestParam(defaultValue = "10")Integer limit,
+                  @RequestParam(required = false)String orderByField,
+                  @RequestParam(required = false)String orderByType,
+                  @RequestParam(required = false)String condition,
+                  @RequestParam Map<String, Object> param){
+        EntityWrapper<BasShuttleOpt> wrapper = new EntityWrapper<>();
+        excludeTrash(param);
+        convert(param, wrapper);
+        allLike(BasShuttleOpt.class, param.keySet(), wrapper, condition);
+        wrapper.orderBy("send_time", false);
+        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
+        return R.ok(basShuttleOptService.selectPage(new Page<>(curr, limit), wrapper));
+    }
+
+    private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
+        for (Map.Entry<String, Object> entry : map.entrySet()){
+            String val = String.valueOf(entry.getValue());
+            if (val.contains(RANGE_TIME_LINK)){
+                String[] dates = val.split(RANGE_TIME_LINK);
+                wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
+                wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
+            } else {
+                wrapper.like(entry.getKey(), val);
+            }
+        }
+    }
+}
diff --git a/src/main/java/com/zy/asrs/controller/BasWrkIotypeController.java b/src/main/java/com/zy/asrs/controller/BasWrkIotypeController.java
new file mode 100644
index 0000000..0136af7
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/BasWrkIotypeController.java
@@ -0,0 +1,147 @@
+package com.zy.asrs.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.core.annotations.ManagerAuth;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.DateUtils;
+import com.core.common.R;
+import com.zy.asrs.entity.BasWrkIotype;
+import com.zy.asrs.service.BasWrkIotypeService;
+import com.zy.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+
+@RestController
+public class BasWrkIotypeController extends BaseController {
+
+    @Autowired
+    private BasWrkIotypeService basWrkIotypeService;
+
+    @RequestMapping(value = "/basWrkIotype/{id}/auth")
+    @ManagerAuth
+    public R get(@PathVariable("id") Long id) {
+        return R.ok(basWrkIotypeService.selectById(String.valueOf(id)));
+    }
+
+    @RequestMapping(value = "/basWrkIotype/list/auth")
+    @ManagerAuth
+    public R list(@RequestParam(defaultValue = "1")Integer curr,
+                  @RequestParam(defaultValue = "10")Integer limit,
+                  @RequestParam(required = false)String orderByField,
+                  @RequestParam(required = false)String orderByType,
+                  @RequestParam Map<String, Object> param){
+        excludeTrash(param);
+        EntityWrapper<BasWrkIotype> wrapper = new EntityWrapper<>();
+        convert(param, wrapper);
+        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
+        return R.ok(basWrkIotypeService.selectPage(new Page<>(curr, limit), wrapper));
+    }
+
+    private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
+        for (Map.Entry<String, Object> entry : map.entrySet()){
+            String val = String.valueOf(entry.getValue());
+            if (val.contains(RANGE_TIME_LINK)){
+                String[] dates = val.split(RANGE_TIME_LINK);
+                wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
+                wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
+            } else {
+                wrapper.like(entry.getKey(), val);
+            }
+        }
+    }
+
+    @RequestMapping(value = "/basWrkIotype/edit/auth")
+    @ManagerAuth
+    public R edit(BasWrkIotype basWrkIotype) {
+        if (Cools.isEmpty(basWrkIotype)){
+            return R.error();
+        }
+        if (null == basWrkIotype.getIoType()){
+            basWrkIotypeService.insert(basWrkIotype);
+        } else {
+            basWrkIotypeService.updateById(basWrkIotype);
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/basWrkIotype/add/auth")
+    @ManagerAuth(memo = "鍏ュ嚭搴撶被鍨嬫坊鍔�")
+    public R add(BasWrkIotype basWrkIotype) {
+        basWrkIotype.setModiUser(getUserId());
+        basWrkIotype.setModiTime(new Date());
+        basWrkIotype.setAppeUser(getUserId());
+        basWrkIotype.setAppeTime(new Date());
+        basWrkIotypeService.insert(basWrkIotype);
+        return R.ok();
+    }
+
+	@RequestMapping(value = "/basWrkIotype/update/auth")
+    @ManagerAuth(memo = "鍏ュ嚭搴撶被鍨嬩慨鏀�")
+    public R update(BasWrkIotype basWrkIotype){
+        if (Cools.isEmpty(basWrkIotype) || null==basWrkIotype.getIoType()){
+            return R.error();
+        }
+        basWrkIotype.setModiUser(getUserId());
+        basWrkIotype.setModiTime(new Date());
+        basWrkIotypeService.updateById(basWrkIotype);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/basWrkIotype/delete/auth")
+    @ManagerAuth(memo = "鍏ュ嚭搴撶被鍨嬪垹闄�")
+    public R delete(@RequestParam String param){
+        List<BasWrkIotype> list = JSONArray.parseArray(param, BasWrkIotype.class);
+        if (Cools.isEmpty(list)){
+            return R.error();
+        }
+        for (BasWrkIotype entity : list){
+            basWrkIotypeService.delete(new EntityWrapper<>(entity));
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/basWrkIotype/export/auth")
+    @ManagerAuth(memo = "鍏ュ嚭搴撶被鍨嬪鍑�")
+    public R export(@RequestBody JSONObject param){
+        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
+        EntityWrapper<BasWrkIotype> wrapper = new EntityWrapper<>();
+        Map<String, Object> map = excludeTrash(param.getJSONObject("basWrkIotype"));
+        convert(map, wrapper);
+        List<BasWrkIotype> list = basWrkIotypeService.selectList(wrapper);
+        return R.ok(exportSupport(list, fields));
+    }
+
+    @RequestMapping(value = "/basWrkIotypeQuery/auth")
+    @ManagerAuth
+    public R query(String condition) {
+        EntityWrapper<BasWrkIotype> wrapper = new EntityWrapper<>();
+        wrapper.like("io_desc", condition);
+        Page<BasWrkIotype> page = basWrkIotypeService.selectPage(new Page<>(0, 10), wrapper);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (BasWrkIotype basWrkIotype : page.getRecords()){
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", basWrkIotype.getIoType());
+            map.put("value", basWrkIotype.getIoDesc());
+            result.add(map);
+        }
+        return R.ok(result);
+    }
+
+    @RequestMapping(value = "/basWrkIotype/check/column/auth")
+    @ManagerAuth
+    public R query(@RequestBody JSONObject param) {
+        Wrapper<BasWrkIotype> wrapper = new EntityWrapper<BasWrkIotype>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+        if (null != basWrkIotypeService.selectOne(wrapper)){
+            return R.parse(BaseRes.REPEAT).add(getComment(BasWrkIotype.class, String.valueOf(param.get("key"))));
+        }
+        return R.ok();
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/controller/BasWrkStatusController.java b/src/main/java/com/zy/asrs/controller/BasWrkStatusController.java
new file mode 100644
index 0000000..321b8f6
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/BasWrkStatusController.java
@@ -0,0 +1,147 @@
+package com.zy.asrs.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.core.annotations.ManagerAuth;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.DateUtils;
+import com.core.common.R;
+import com.zy.asrs.entity.BasWrkStatus;
+import com.zy.asrs.service.BasWrkStatusService;
+import com.zy.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+
+@RestController
+public class BasWrkStatusController extends BaseController {
+
+    @Autowired
+    private BasWrkStatusService basWrkStatusService;
+
+    @RequestMapping(value = "/basWrkStatus/{id}/auth")
+    @ManagerAuth
+    public R get(@PathVariable("id") Long id) {
+        return R.ok(basWrkStatusService.selectById(String.valueOf(id)));
+    }
+
+    @RequestMapping(value = "/basWrkStatus/list/auth")
+    @ManagerAuth
+    public R list(@RequestParam(defaultValue = "1")Integer curr,
+                  @RequestParam(defaultValue = "10")Integer limit,
+                  @RequestParam(required = false)String orderByField,
+                  @RequestParam(required = false)String orderByType,
+                  @RequestParam Map<String, Object> param){
+        excludeTrash(param);
+        EntityWrapper<BasWrkStatus> wrapper = new EntityWrapper<>();
+        convert(param, wrapper);
+        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
+        return R.ok(basWrkStatusService.selectPage(new Page<>(curr, limit), wrapper));
+    }
+
+    private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
+        for (Map.Entry<String, Object> entry : map.entrySet()){
+            String val = String.valueOf(entry.getValue());
+            if (val.contains(RANGE_TIME_LINK)){
+                String[] dates = val.split(RANGE_TIME_LINK);
+                wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
+                wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
+            } else {
+                wrapper.like(entry.getKey(), val);
+            }
+        }
+    }
+
+    @RequestMapping(value = "/basWrkStatus/edit/auth")
+    @ManagerAuth
+    public R edit(BasWrkStatus basWrkStatus) {
+        if (Cools.isEmpty(basWrkStatus)){
+            return R.error();
+        }
+        if (null == basWrkStatus.getWrkSts()){
+            basWrkStatusService.insert(basWrkStatus);
+        } else {
+            basWrkStatusService.updateById(basWrkStatus);
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/basWrkStatus/add/auth")
+    @ManagerAuth(memo = "宸ヤ綔鐘舵�佹坊鍔�")
+    public R add(BasWrkStatus basWrkStatus) {
+        basWrkStatus.setModiUser(getUserId());
+        basWrkStatus.setModiTime(new Date());
+        basWrkStatus.setAppeUser(getUserId());
+        basWrkStatus.setAppeTime(new Date());
+        basWrkStatusService.insert(basWrkStatus);
+        return R.ok();
+    }
+
+	@RequestMapping(value = "/basWrkStatus/update/auth")
+    @ManagerAuth(memo = "宸ヤ綔鐘舵�佷慨鏀�")
+    public R update(BasWrkStatus basWrkStatus){
+        if (Cools.isEmpty(basWrkStatus) || null==basWrkStatus.getWrkSts()){
+            return R.error();
+        }
+        basWrkStatus.setModiUser(getUserId());
+        basWrkStatus.setModiTime(new Date());
+        basWrkStatusService.updateById(basWrkStatus);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/basWrkStatus/delete/auth")
+    @ManagerAuth(memo = "宸ヤ綔鐘舵�佸垹闄�")
+    public R delete(@RequestParam String param){
+        List<BasWrkStatus> list = JSONArray.parseArray(param, BasWrkStatus.class);
+        if (Cools.isEmpty(list)){
+            return R.error();
+        }
+        for (BasWrkStatus entity : list){
+            basWrkStatusService.delete(new EntityWrapper<>(entity));
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/basWrkStatus/export/auth")
+    @ManagerAuth(memo = "宸ヤ綔鐘舵�佸鍑�")
+    public R export(@RequestBody JSONObject param){
+        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
+        EntityWrapper<BasWrkStatus> wrapper = new EntityWrapper<>();
+        Map<String, Object> map = excludeTrash(param.getJSONObject("basWrkStatus"));
+        convert(map, wrapper);
+        List<BasWrkStatus> list = basWrkStatusService.selectList(wrapper);
+        return R.ok(exportSupport(list, fields));
+    }
+
+    @RequestMapping(value = "/basWrkStatusQuery/auth")
+    @ManagerAuth
+    public R query(String condition) {
+        EntityWrapper<BasWrkStatus> wrapper = new EntityWrapper<>();
+        wrapper.like("wrk_desc", condition);
+        Page<BasWrkStatus> page = basWrkStatusService.selectPage(new Page<>(0, 10), wrapper);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (BasWrkStatus basWrkStatus : page.getRecords()){
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", basWrkStatus.getWrkSts());
+            map.put("value", basWrkStatus.getWrkDesc());
+            result.add(map);
+        }
+        return R.ok(result);
+    }
+
+    @RequestMapping(value = "/basWrkStatus/check/column/auth")
+    @ManagerAuth
+    public R query(@RequestBody JSONObject param) {
+        Wrapper<BasWrkStatus> wrapper = new EntityWrapper<BasWrkStatus>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+        if (null != basWrkStatusService.selectOne(wrapper)){
+            return R.parse(BaseRes.REPEAT).add(getComment(BasWrkStatus.class, String.valueOf(param.get("key"))));
+        }
+        return R.ok();
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/controller/LocMastController.java b/src/main/java/com/zy/asrs/controller/LocMastController.java
index 787d39d..a08e8c3 100644
--- a/src/main/java/com/zy/asrs/controller/LocMastController.java
+++ b/src/main/java/com/zy/asrs/controller/LocMastController.java
@@ -1,36 +1,142 @@
 package com.zy.asrs.controller;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.plugins.Page;
 import com.core.annotations.ManagerAuth;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.DateUtils;
 import com.core.common.R;
+import com.core.exception.CoolException;
 import com.zy.asrs.entity.LocMast;
+import com.zy.asrs.entity.WrkMast;
 import com.zy.asrs.service.LocMastService;
 import com.zy.asrs.utils.Utils;
 import com.zy.common.model.MapNode;
 import com.zy.common.utils.NavigateMapData;
+import com.zy.common.web.BaseController;
 import com.zy.core.enums.LocStsType;
 import com.zy.core.enums.MapNodeType;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
 
 @Slf4j
 @RestController
-@RequestMapping("/locMast")
-public class LocMastController {
+public class LocMastController extends BaseController {
 
     @Autowired
     private NavigateMapData navigateMapData;
     @Autowired
     private LocMastService locMastService;
 
-    @PostMapping("/init")
+    @RequestMapping(value = "/locMast/{id}/auth")
+    @ManagerAuth
+    public R get(@PathVariable("id") String id) {
+        return R.ok(locMastService.selectById(String.valueOf(id)));
+    }
+
+    @RequestMapping(value = "/locMast/list/auth")
+    @ManagerAuth
+    public R list(@RequestParam(defaultValue = "1")Integer curr,
+                  @RequestParam(defaultValue = "10")Integer limit,
+                  @RequestParam(required = false)String orderByField,
+                  @RequestParam(required = false)String orderByType,
+                  @RequestParam Map<String, Object> param){
+        excludeTrash(param);
+        EntityWrapper<LocMast> wrapper = new EntityWrapper<>();
+        convert(param, wrapper);
+        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
+        return R.ok(locMastService.selectPage(new Page<>(curr, limit), wrapper));
+    }
+
+    private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
+        for (Map.Entry<String, Object> entry : map.entrySet()){
+            String val = String.valueOf(entry.getValue());
+            if (val.contains(RANGE_TIME_LINK)){
+                String[] dates = val.split(RANGE_TIME_LINK);
+                wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
+                wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
+            } else {
+                wrapper.like(entry.getKey(), val);
+            }
+        }
+    }
+
+    @RequestMapping(value = "/locMast/update/auth")
+    @ManagerAuth(memo = "搴撲綅淇敼")
+    @Transactional
+    public R update(LocMast locMast){
+        if (Cools.isEmpty(locMast) || null==locMast.getLocNo()){
+            return R.error();
+        }
+
+        Date now = new Date();
+        locMast.setModiUser(getUserId());
+        locMast.setModiTime(now);
+        if(!locMastService.updateById(locMast)) {
+            throw new CoolException("鏈嶅姟鍣ㄩ敊璇紝璇疯仈绯荤鐞嗗憳");
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/locMast/delete/auth")
+    @ManagerAuth(memo = "搴撲綅鍒犻櫎")
+    public R delete(@RequestParam String param){
+        List<LocMast> list = JSONArray.parseArray(param, LocMast.class);
+        if (Cools.isEmpty(list)){
+            return R.error();
+        }
+        for (LocMast entity : list){
+            locMastService.delete(new EntityWrapper<>(entity));
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/locMast/export/auth")
+    @ManagerAuth(memo = "搴撲綅瀵煎嚭")
+    public R export(@RequestBody JSONObject param){
+        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
+        EntityWrapper<LocMast> wrapper = new EntityWrapper<>();
+        Map<String, Object> map = excludeTrash(param.getJSONObject("locMast"));
+        convert(map, wrapper);
+        List<LocMast> list = locMastService.selectList(wrapper);
+        return R.ok(exportSupport(list, fields));
+    }
+
+    @RequestMapping(value = "/locMastQuery/auth")
+    @ManagerAuth
+    public R query(String condition) {
+        EntityWrapper<LocMast> wrapper = new EntityWrapper<>();
+        wrapper.like("loc_no", condition);
+        Page<LocMast> page = locMastService.selectPage(new Page<>(0, 10), wrapper);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (LocMast locMast : page.getRecords()){
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", locMast.getLocNo());
+            map.put("value", locMast.getLocNo());
+            result.add(map);
+        }
+        return R.ok(result);
+    }
+
+    @RequestMapping(value = "/locMast/check/column/auth")
+    @ManagerAuth
+    public R query(@RequestBody JSONObject param) {
+        Wrapper<LocMast> wrapper = new EntityWrapper<LocMast>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+        if (null != locMastService.selectOne(wrapper)){
+            return R.parse(BaseRes.REPEAT).add(getComment(LocMast.class, String.valueOf(param.get("key"))));
+        }
+        return R.ok();
+    }
+
+    @PostMapping("/locMast/init")
     @ManagerAuth(memo = "鍒濆鍖栧簱浣�")
     @Transactional
     public R shuttleStateTable(){
diff --git a/src/main/java/com/zy/asrs/controller/ShuttleController.java b/src/main/java/com/zy/asrs/controller/ShuttleController.java
index 54e8772..d2c475c 100644
--- a/src/main/java/com/zy/asrs/controller/ShuttleController.java
+++ b/src/main/java/com/zy/asrs/controller/ShuttleController.java
@@ -15,7 +15,6 @@
 import com.zy.asrs.service.LocMastService;
 import com.zy.asrs.service.WrkMastService;
 import com.zy.asrs.utils.Utils;
-import com.zy.common.model.NavigateNode;
 import com.zy.common.model.enums.NavigationMapType;
 import com.zy.common.service.CommonService;
 import com.zy.common.utils.NavigateMapUtils;
diff --git a/src/main/java/com/zy/asrs/controller/WrkLastnoController.java b/src/main/java/com/zy/asrs/controller/WrkLastnoController.java
new file mode 100644
index 0000000..0ee6a4e
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/WrkLastnoController.java
@@ -0,0 +1,133 @@
+package com.zy.asrs.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.core.annotations.ManagerAuth;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.DateUtils;
+import com.core.common.R;
+import com.zy.asrs.entity.WrkLastno;
+import com.zy.asrs.service.WrkLastnoService;
+import com.zy.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+
+@RestController
+public class WrkLastnoController extends BaseController {
+
+    @Autowired
+    private WrkLastnoService wrkLastnoService;
+
+    @RequestMapping(value = "/wrkLastno/{id}/auth")
+    @ManagerAuth
+    public R get(@PathVariable("id") String id) {
+        return R.ok(wrkLastnoService.selectById(String.valueOf(id)));
+    }
+
+    @RequestMapping(value = "/wrkLastno/list/auth")
+    @ManagerAuth
+    public R list(@RequestParam(defaultValue = "1")Integer curr,
+                  @RequestParam(defaultValue = "10")Integer limit,
+                  @RequestParam(required = false)String orderByField,
+                  @RequestParam(required = false)String orderByType,
+                  @RequestParam Map<String, Object> param){
+        excludeTrash(param);
+        EntityWrapper<WrkLastno> wrapper = new EntityWrapper<>();
+        convert(param, wrapper);
+        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
+        return R.ok(wrkLastnoService.selectPage(new Page<>(curr, limit), wrapper));
+    }
+
+    private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
+        for (Map.Entry<String, Object> entry : map.entrySet()){
+            String val = String.valueOf(entry.getValue());
+            if (val.contains(RANGE_TIME_LINK)){
+                String[] dates = val.split(RANGE_TIME_LINK);
+                wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
+                wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
+            } else {
+                wrapper.like(entry.getKey(), val);
+            }
+        }
+    }
+
+    @RequestMapping(value = "/wrkLastno/add/auth")
+    @ManagerAuth(memo = "宸ヤ綔搴忓彿娣诲姞")
+    public R add(WrkLastno wrkLastno) {
+        wrkLastno.setModiUser(getUserId());
+        wrkLastno.setModiTime(new Date());
+        wrkLastno.setAppeUser(getUserId());
+        wrkLastno.setAppeTime(new Date());
+        wrkLastnoService.insert(wrkLastno);
+        return R.ok();
+    }
+
+	@RequestMapping(value = "/wrkLastno/update/auth")
+	@ManagerAuth(memo = "宸ヤ綔搴忓彿淇敼")
+    public R update(WrkLastno wrkLastno){
+        if (Cools.isEmpty(wrkLastno) || null==wrkLastno.getWrkMk()){
+            return R.error();
+        }
+        wrkLastno.setModiUser(getUserId());
+        wrkLastno.setModiTime(new Date());
+        wrkLastnoService.updateById(wrkLastno);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/wrkLastno/delete/auth")
+    @ManagerAuth(memo = "宸ヤ綔搴忓彿鍒犻櫎")
+    public R delete(@RequestParam String param){
+        List<WrkLastno> list = JSONArray.parseArray(param, WrkLastno.class);
+        if (Cools.isEmpty(list)){
+            return R.error();
+        }
+        for (WrkLastno entity : list){
+            wrkLastnoService.delete(new EntityWrapper<>(entity));
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/wrkLastno/export/auth")
+    @ManagerAuth(memo = "宸ヤ綔搴忓彿瀵煎嚭")
+    public R export(@RequestBody JSONObject param){
+        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
+        EntityWrapper<WrkLastno> wrapper = new EntityWrapper<>();
+        Map<String, Object> map = excludeTrash(param.getJSONObject("wrkLastno"));
+        convert(map, wrapper);
+        List<WrkLastno> list = wrkLastnoService.selectList(wrapper);
+        return R.ok(exportSupport(list, fields));
+    }
+
+    @RequestMapping(value = "/wrkLastnoQuery/auth")
+    @ManagerAuth
+    public R query(String condition) {
+        EntityWrapper<WrkLastno> wrapper = new EntityWrapper<>();
+        wrapper.like("wrk_mk", condition);
+        Page<WrkLastno> page = wrkLastnoService.selectPage(new Page<>(0, 10), wrapper);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (WrkLastno wrkLastno : page.getRecords()){
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", wrkLastno.getWrkMk());
+            map.put("value", wrkLastno.getWrkMk());
+            result.add(map);
+        }
+        return R.ok(result);
+    }
+
+    @RequestMapping(value = "/wrkLastno/check/column/auth")
+    @ManagerAuth
+    public R query(@RequestBody JSONObject param) {
+        Wrapper<WrkLastno> wrapper = new EntityWrapper<WrkLastno>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+        if (null != wrkLastnoService.selectOne(wrapper)){
+            return R.parse(BaseRes.REPEAT).add(getComment(WrkLastno.class, String.valueOf(param.get("key"))));
+        }
+        return R.ok();
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/controller/WrkMastLogController.java b/src/main/java/com/zy/asrs/controller/WrkMastLogController.java
new file mode 100644
index 0000000..7e0bec4
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/WrkMastLogController.java
@@ -0,0 +1,143 @@
+package com.zy.asrs.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.core.annotations.ManagerAuth;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.DateUtils;
+import com.core.common.R;
+import com.zy.asrs.entity.WrkMastLog;
+import com.zy.asrs.service.WrkMastLogService;
+import com.zy.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+public class WrkMastLogController extends BaseController {
+
+    @Autowired
+    private WrkMastLogService wrkMastLogService;
+
+    @RequestMapping(value = "/wrkMastLog/{id}/auth")
+    @ManagerAuth
+    public R get(@PathVariable("id") String id) {
+        return R.ok(wrkMastLogService.selectById(String.valueOf(id)));
+    }
+
+    @RequestMapping(value = "/wrkMastLog/list/auth")
+    @ManagerAuth
+    public R list(@RequestParam(defaultValue = "1")Integer curr,
+                  @RequestParam(defaultValue = "10")Integer limit,
+                  @RequestParam(required = false)String orderByField,
+                  @RequestParam(required = false)String orderByType,
+                  @RequestParam(required = false)String condition,
+                  @RequestParam Map<String, Object> param){
+        excludeTrash(param);
+        EntityWrapper<WrkMastLog> wrapper = new EntityWrapper<>();
+        convert(param, wrapper);
+        allLike(WrkMastLog.class, param.keySet(), wrapper, condition);
+        if (!Cools.isEmpty(orderByField)){
+            if (orderByField.endsWith("$")){
+                orderByField = orderByField.substring(0, orderByField.length()-1);
+            }
+            wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));
+        }else {
+            wrapper.orderBy("modi_time", false);
+        }
+        return R.ok(wrkMastLogService.selectPage(new Page<>(curr, limit), wrapper));
+    }
+
+    private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
+        for (Map.Entry<String, Object> entry : map.entrySet()){
+            String val = String.valueOf(entry.getValue());
+            if (val.contains(RANGE_TIME_LINK)){
+                String[] dates = val.split(RANGE_TIME_LINK);
+                wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
+                wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
+            } else {
+                if (entry.getKey().equals("manu_type")) {
+                    wrapper.like(entry.getKey(), val);
+                } else {
+                    wrapper.eq(entry.getKey(), val);
+                }
+            }
+        }
+    }
+
+    @RequestMapping(value = "/wrkMastLog/add/auth")
+    @ManagerAuth(memo = "宸ヤ綔鍘嗗彶妗f坊鍔�")
+    public R add(WrkMastLog wrkMastLog) {
+        wrkMastLogService.insert(wrkMastLog);
+        return R.ok();
+    }
+
+	@RequestMapping(value = "/wrkMastLog/update/auth")
+	@ManagerAuth(memo = "宸ヤ綔鍘嗗彶妗d慨鏀�")
+    public R update(WrkMastLog wrkMastLog){
+        if (Cools.isEmpty(wrkMastLog) || null==wrkMastLog.getId()){
+            return R.error();
+        }
+        wrkMastLogService.updateById(wrkMastLog);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/wrkMastLog/delete/auth")
+    @ManagerAuth(memo = "宸ヤ綔鍘嗗彶妗e垹闄�")
+    public R delete(@RequestParam String param){
+        List<WrkMastLog> list = JSONArray.parseArray(param, WrkMastLog.class);
+        if (Cools.isEmpty(list)){
+            return R.error();
+        }
+        for (WrkMastLog entity : list){
+            wrkMastLogService.delete(new EntityWrapper<>(entity));
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/wrkMastLog/export/auth")
+    @ManagerAuth(memo = "宸ヤ綔鍘嗗彶妗e鍑�")
+    public R export(@RequestBody JSONObject param){
+        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
+        EntityWrapper<WrkMastLog> wrapper = new EntityWrapper<>();
+        Map<String, Object> map = excludeTrash(param.getJSONObject("wrkMastLog"));
+        convert(map, wrapper);
+        List<WrkMastLog> list = wrkMastLogService.selectList(wrapper);
+        return R.ok(exportSupport(list, fields));
+    }
+
+    @RequestMapping(value = "/wrkMastLogQuery/auth")
+    @ManagerAuth
+    public R query(String condition) {
+        EntityWrapper<WrkMastLog> wrapper = new EntityWrapper<>();
+        wrapper.like("id", condition);
+        Page<WrkMastLog> page = wrkMastLogService.selectPage(new Page<>(0, 10), wrapper);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (WrkMastLog wrkMastLog : page.getRecords()){
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", wrkMastLog.getId());
+            map.put("value", wrkMastLog.getId());
+            result.add(map);
+        }
+        return R.ok(result);
+    }
+
+    @RequestMapping(value = "/wrkMastLog/check/column/auth")
+    @ManagerAuth
+    public R query(@RequestBody JSONObject param) {
+        Wrapper<WrkMastLog> wrapper = new EntityWrapper<WrkMastLog>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+        if (null != wrkMastLogService.selectOne(wrapper)){
+            return R.parse(BaseRes.REPEAT).add(getComment(WrkMastLog.class, String.valueOf(param.get("key"))));
+        }
+        return R.ok();
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/ApiLog.java b/src/main/java/com/zy/asrs/entity/ApiLog.java
new file mode 100644
index 0000000..45101d1
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/ApiLog.java
@@ -0,0 +1,193 @@
+package com.zy.asrs.entity;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+import com.core.common.Cools;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+@Data
+@TableName("man_api_log")
+public class ApiLog implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @ApiModelProperty(value= "ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 鏃ュ織缂栧彿
+     */
+    @ApiModelProperty(value= "鏃ュ織缂栧彿")
+    private String uuid;
+
+    /**
+     * 鍚嶇О绌洪棿
+     */
+    @ApiModelProperty(value= "鍚嶇О绌洪棿")
+    private String namespace;
+
+    /**
+     * 鎺ュ彛鍦板潃
+     */
+    @ApiModelProperty(value= "鎺ュ彛鍦板潃")
+    private String url;
+
+    /**
+     * 骞冲彴瀵嗛挜
+     */
+    @ApiModelProperty(value= "骞冲彴瀵嗛挜")
+    private String appkey;
+
+    /**
+     * 鏃堕棿鎴�
+     */
+    @ApiModelProperty(value= "鏃堕棿鎴�")
+    private String timestamp;
+
+    /**
+     * 瀹㈡埛绔疘P
+     */
+    @ApiModelProperty(value= "瀹㈡埛绔疘P")
+    @TableField("client_ip")
+    private String clientIp;
+
+    /**
+     * 璇锋眰鍐呭
+     */
+    @ApiModelProperty(value= "璇锋眰鍐呭")
+    private String request;
+
+    /**
+     * 鍝嶅簲鍐呭
+     */
+    @ApiModelProperty(value= "鍝嶅簲鍐呭")
+    private String response;
+
+    /**
+     * 寮傚父鍐呭
+     */
+    @ApiModelProperty(value= "寮傚父鍐呭")
+    private String err;
+
+    /**
+     * 缁撴灉 1: 鎴愬姛  0: 澶辫触  
+     */
+    @ApiModelProperty(value= "缁撴灉 1: 鎴愬姛  0: 澶辫触  ")
+    private Integer result;
+
+    /**
+     * 鐘舵�� 1: 姝e父  0: 绂佺敤  
+     */
+    @ApiModelProperty(value= "鐘舵�� 1: 姝e父  0: 绂佺敤  ")
+    private Integer status;
+
+    /**
+     * 娣诲姞鏃堕棿
+     */
+    @ApiModelProperty(value= "娣诲姞鏃堕棿")
+    @TableField("create_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @ApiModelProperty(value= "淇敼鏃堕棿")
+    @TableField("update_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value= "澶囨敞")
+    private String memo;
+
+    public ApiLog() {}
+
+    public ApiLog(String uuid, String namespace, String url, String appkey, String timestamp, String clientIp, String request, String response, String err, Integer result, Integer status, Date createTime, Date updateTime, String memo) {
+        this.uuid = uuid;
+        this.namespace = namespace;
+        this.url = url;
+        this.appkey = appkey;
+        this.timestamp = timestamp;
+        this.clientIp = clientIp;
+        this.request = request;
+        this.response = response;
+        this.err = err;
+        this.result = result;
+        this.status = status;
+        this.createTime = createTime;
+        this.updateTime = updateTime;
+        this.memo = memo;
+    }
+
+//    ApiLog apiLog = new ApiLog(
+//            null,    // 鏃ュ織缂栧彿
+//            null,    // 鍚嶇О绌洪棿
+//            null,    // 鎺ュ彛鍦板潃
+//            null,    // 骞冲彴瀵嗛挜
+//            null,    // 鏃堕棿鎴�
+//            null,    // 瀹㈡埛绔疘P
+//            null,    // 璇锋眰鍐呭
+//            null,    // 鍝嶅簲鍐呭
+//            null,    // 寮傚父鍐呭
+//            null,    // 缁撴灉
+//            null,    // 鐘舵��
+//            null,    // 娣诲姞鏃堕棿
+//            null,    // 淇敼鏃堕棿
+//            null    // 澶囨敞
+//    );
+
+    public String getResult$(){
+        if (null == this.result){ return null; }
+        switch (this.result){
+            case 1:
+                return "鎴愬姛";
+            case 0:
+                return "澶辫触";
+            default:
+                return String.valueOf(this.result);
+        }
+    }
+
+    public String getStatus$(){
+        if (null == this.status){ return null; }
+        switch (this.status){
+            case 1:
+                return "姝e父";
+            case 0:
+                return "绂佺敤";
+            default:
+                return String.valueOf(this.status);
+        }
+    }
+
+    public String getCreateTime$(){
+        if (Cools.isEmpty(this.createTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
+    }
+
+    public String getUpdateTime$(){
+        if (Cools.isEmpty(this.updateTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
+    }
+
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/BasLocSts.java b/src/main/java/com/zy/asrs/entity/BasLocSts.java
new file mode 100644
index 0000000..13d16b9
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/BasLocSts.java
@@ -0,0 +1,164 @@
+package com.zy.asrs.entity;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+import com.core.common.Cools;
+import com.core.common.SpringUtils;
+import com.zy.system.entity.User;
+import com.zy.system.service.UserService;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+@TableName("asr_bas_loc_sts")
+public class BasLocSts implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 搴撲綅鐘舵�佷唬鍙�
+     */
+    @ApiModelProperty(value= "搴撲綅鐘舵�佷唬鍙�")
+    @TableId(value = "loc_sts", type = IdType.INPUT)
+    @TableField("loc_sts")
+    private String locSts;
+
+    /**
+     * 搴撲綅鐘舵�佹弿杩�
+     */
+    @ApiModelProperty(value= "搴撲綅鐘舵�佹弿杩�")
+    @TableField("loc_desc")
+    private String locDesc;
+
+    /**
+     * 淇敼浜哄憳
+     */
+    @ApiModelProperty(value= "淇敼浜哄憳")
+    @TableField("modi_user")
+    private Long modiUser;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @ApiModelProperty(value= "淇敼鏃堕棿")
+    @TableField("modi_time")
+    private Date modiTime;
+
+    /**
+     * 鍒涘缓鑰�
+     */
+    @ApiModelProperty(value= "鍒涘缓鑰�")
+    @TableField("appe_user")
+    private Long appeUser;
+
+    /**
+     * 娣诲姞鏃堕棿
+     */
+    @ApiModelProperty(value= "娣诲姞鏃堕棿")
+    @TableField("appe_time")
+    private Date appeTime;
+
+    public BasLocSts() {}
+
+    public BasLocSts(String locDesc, Long modiUser, Date modiTime, Long appeUser, Date appeTime) {
+        this.locDesc = locDesc;
+        this.modiUser = modiUser;
+        this.modiTime = modiTime;
+        this.appeUser = appeUser;
+        this.appeTime = appeTime;
+    }
+
+//    BasLocSts basLocSts = new BasLocSts(
+//            null,    // 搴撲綅鐘舵�佹弿杩�
+//            null,    // 淇敼浜哄憳
+//            null,    // 淇敼鏃堕棿
+//            null,    // 鍒涘缓鑰�
+//            null    // 娣诲姞鏃堕棿
+//    );
+
+    public String getLocSts() {
+        return locSts;
+    }
+
+    public void setLocSts(String locSts) {
+        this.locSts = locSts;
+    }
+
+    public String getLocDesc() {
+        return locDesc;
+    }
+
+    public void setLocDesc(String locDesc) {
+        this.locDesc = locDesc;
+    }
+
+    public Long getModiUser() {
+        return modiUser;
+    }
+
+    public String getModiUser$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.selectById(this.modiUser);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getUsername());
+        }
+        return null;
+    }
+
+    public void setModiUser(Long modiUser) {
+        this.modiUser = modiUser;
+    }
+
+    public Date getModiTime() {
+        return modiTime;
+    }
+
+    public String getModiTime$(){
+        if (Cools.isEmpty(this.modiTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.modiTime);
+    }
+
+    public void setModiTime(Date modiTime) {
+        this.modiTime = modiTime;
+    }
+
+    public Long getAppeUser() {
+        return appeUser;
+    }
+
+    public String getAppeUser$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.selectById(this.appeUser);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getUsername());
+        }
+        return null;
+    }
+
+    public void setAppeUser(Long appeUser) {
+        this.appeUser = appeUser;
+    }
+
+    public Date getAppeTime() {
+        return appeTime;
+    }
+
+    public String getAppeTime$(){
+        if (Cools.isEmpty(this.appeTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.appeTime);
+    }
+
+    public void setAppeTime(Date appeTime) {
+        this.appeTime = appeTime;
+    }
+
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/BasShuttleOpt.java b/src/main/java/com/zy/asrs/entity/BasShuttleOpt.java
index 1e476d8..2a1325f 100644
--- a/src/main/java/com/zy/asrs/entity/BasShuttleOpt.java
+++ b/src/main/java/com/zy/asrs/entity/BasShuttleOpt.java
@@ -97,12 +97,6 @@
     private String command;
 
     /**
-     * 鍛戒护
-     */
-    @ApiModelProperty(value= "鍛戒护鎶ユ枃(涓嬪彂)")
-    private String commandSend;
-
-    /**
      * 绯荤粺鐘舵��
      */
     @ApiModelProperty(value= "绯荤粺鐘舵��")
@@ -132,7 +126,7 @@
 
     public BasShuttleOpt() {}
 
-    public BasShuttleOpt(Integer wrkNo, Integer shuttleNo, Date sendTime, String mode, String sourceLocNo, String distLocNo, Date updateTime, Long updateBy, String memo, String command, String commandSend, String systemStatus) {
+    public BasShuttleOpt(Integer wrkNo, Integer shuttleNo, Date sendTime, String mode, String sourceLocNo, String distLocNo, Date updateTime, Long updateBy, String memo, String command, String systemStatus) {
         this.wrkNo = wrkNo;
         this.shuttleNo = shuttleNo;
         this.sendTime = sendTime;
@@ -143,7 +137,6 @@
         this.updateBy = updateBy;
         this.memo = memo;
         this.command = command;
-        this.commandSend = commandSend;
         this.systemStatus = systemStatus;
     }
 
diff --git a/src/main/java/com/zy/asrs/entity/LocMast.java b/src/main/java/com/zy/asrs/entity/LocMast.java
index fa8ef82..24b77db 100644
--- a/src/main/java/com/zy/asrs/entity/LocMast.java
+++ b/src/main/java/com/zy/asrs/entity/LocMast.java
@@ -6,6 +6,7 @@
 import com.baomidou.mybatisplus.enums.IdType;
 import com.core.common.Cools;
 import com.core.common.SpringUtils;
+import com.zy.asrs.service.BasLocStsService;
 import com.zy.system.entity.User;
 import com.zy.system.service.UserService;
 import io.swagger.annotations.ApiModelProperty;
@@ -111,6 +112,15 @@
     @TableField("qr_code_value")
     private String qrCodeValue;
 
+    public String getLocSts$(){
+        BasLocStsService service = SpringUtils.getBean(BasLocStsService.class);
+        BasLocSts basLocSts = service.selectById(this.locSts);
+        if (!Cools.isEmpty(basLocSts)){
+            return String.valueOf(basLocSts.getLocDesc());
+        }
+        return null;
+    }
+
     public String getIoTime$(){
         if (Cools.isEmpty(this.ioTime)){
             return "";
diff --git a/src/main/java/com/zy/asrs/entity/WrkMastLog.java b/src/main/java/com/zy/asrs/entity/WrkMastLog.java
index 18bfcc7..0679314 100644
--- a/src/main/java/com/zy/asrs/entity/WrkMastLog.java
+++ b/src/main/java/com/zy/asrs/entity/WrkMastLog.java
@@ -6,6 +6,8 @@
 import com.baomidou.mybatisplus.enums.IdType;
 import com.core.common.Cools;
 import com.core.common.SpringUtils;
+import com.zy.asrs.mapper.BasWrkIotypeMapper;
+import com.zy.asrs.mapper.BasWrkStatusMapper;
 import com.zy.asrs.service.BasDevpService;
 import com.zy.asrs.service.LocMastService;
 import com.zy.asrs.service.WrkMastService;
@@ -135,8 +137,8 @@
     private String errorMemo;
 
     @ApiModelProperty(value= "")
-    @TableField("memo_m")
-    private String memoM;
+    @TableField("memo")
+    private String memo;
 
     /**
      * 鏉$爜
@@ -166,6 +168,24 @@
 
     public WrkMastLog() {}
 
+    public String getWrkSts$(){
+        BasWrkStatusMapper mapper = SpringUtils.getBean(BasWrkStatusMapper.class);
+        BasWrkStatus entity = mapper.selectById(this.wrkSts);
+        if (entity != null) {
+            return entity.getWrkDesc();
+        }
+        return null;
+    }
+
+    public String getIoType$(){
+        BasWrkIotypeMapper mapper = SpringUtils.getBean(BasWrkIotypeMapper.class);
+        BasWrkIotype entity = mapper.selectById(this.ioType);
+        if (entity != null) {
+            return entity.getIoDesc();
+        }
+        return null;
+    }
+
     public String getWrkNo$(){
         WrkMastService service = SpringUtils.getBean(WrkMastService.class);
         WrkMast wrkMast = service.selectById(this.wrkNo);
diff --git a/src/main/java/com/zy/asrs/mapper/ApiLogMapper.java b/src/main/java/com/zy/asrs/mapper/ApiLogMapper.java
new file mode 100644
index 0000000..a20d98f
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/ApiLogMapper.java
@@ -0,0 +1,14 @@
+package com.zy.asrs.mapper;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.zy.asrs.entity.ApiLog;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface ApiLogMapper extends BaseMapper<ApiLog> {
+
+    int clearWeekBefore();
+
+}
diff --git a/src/main/java/com/zy/asrs/mapper/BasLocStsMapper.java b/src/main/java/com/zy/asrs/mapper/BasLocStsMapper.java
new file mode 100644
index 0000000..6b4fbce
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/BasLocStsMapper.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.mapper;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.zy.asrs.entity.BasLocSts;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface BasLocStsMapper extends BaseMapper<BasLocSts> {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/ApiLogService.java b/src/main/java/com/zy/asrs/service/ApiLogService.java
new file mode 100644
index 0000000..8e3c698
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/ApiLogService.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.zy.asrs.entity.ApiLog;
+
+public interface ApiLogService extends IService<ApiLog> {
+
+    void save(String namespace, String url, String appkey, String ip, String request, String response, boolean success);
+
+    boolean clearWeekBefore();
+
+}
diff --git a/src/main/java/com/zy/asrs/service/BasLocStsService.java b/src/main/java/com/zy/asrs/service/BasLocStsService.java
new file mode 100644
index 0000000..85f68fb
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/BasLocStsService.java
@@ -0,0 +1,8 @@
+package com.zy.asrs.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.zy.asrs.entity.BasLocSts;
+
+public interface BasLocStsService extends IService<BasLocSts> {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/BasPlcerrorService.java b/src/main/java/com/zy/asrs/service/BasPlcerrorService.java
new file mode 100644
index 0000000..45c6c91
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/BasPlcerrorService.java
@@ -0,0 +1,8 @@
+package com.zy.asrs.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.zy.asrs.entity.BasPlcerror;
+
+public interface BasPlcerrorService extends IService<BasPlcerror> {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/BasWrkIotypeService.java b/src/main/java/com/zy/asrs/service/BasWrkIotypeService.java
new file mode 100644
index 0000000..aeb603d
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/BasWrkIotypeService.java
@@ -0,0 +1,8 @@
+package com.zy.asrs.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.zy.asrs.entity.BasWrkIotype;
+
+public interface BasWrkIotypeService extends IService<BasWrkIotype> {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/BasWrkStatusService.java b/src/main/java/com/zy/asrs/service/BasWrkStatusService.java
new file mode 100644
index 0000000..d64196e
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/BasWrkStatusService.java
@@ -0,0 +1,8 @@
+package com.zy.asrs.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.zy.asrs.entity.BasWrkStatus;
+
+public interface BasWrkStatusService extends IService<BasWrkStatus> {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/ApiLogServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/ApiLogServiceImpl.java
new file mode 100644
index 0000000..30a725f
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/ApiLogServiceImpl.java
@@ -0,0 +1,51 @@
+package com.zy.asrs.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.core.common.SnowflakeIdWorker;
+import com.zy.asrs.entity.ApiLog;
+import com.zy.asrs.mapper.ApiLogMapper;
+import com.zy.asrs.service.ApiLogService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+@Slf4j
+@Service("apiLogService")
+public class ApiLogServiceImpl extends ServiceImpl<ApiLogMapper, ApiLog> implements ApiLogService {
+
+    @Autowired
+    private SnowflakeIdWorker snowflakeIdWorker;
+
+    @Async
+    @Override
+    public void save(String namespace, String url, String appkey, String ip, String request, String response, boolean success) {
+        Date now = new Date();
+        ApiLog apiLog = new ApiLog(
+                String.valueOf(snowflakeIdWorker.nextId()),    // 鏃ュ織缂栧彿
+                namespace,    // 鍚嶇О绌洪棿
+                url,    // 鎺ュ彛鍦板潃
+                appkey,    // 骞冲彴瀵嗛挜
+                String.valueOf(now.getTime()),    // 鏃堕棿鎴�
+                ip,    // 瀹㈡埛绔疘P
+                request,    // 璇锋眰鍐呭
+                response,
+                null,    // 寮傚父鍐呭
+                success?1:0 ,    // 缁撴灉
+                1,    // 鐘舵��
+                now,    // 娣诲姞鏃堕棿
+                null,    // 淇敼鏃堕棿
+                null    // 澶囨敞
+        );
+        if (!this.insert(apiLog)) {
+            log.error("鎺ュ彛璋冪敤鏃ュ織淇濆瓨澶辫触锛�");
+        }
+    }
+
+    @Override
+    public boolean clearWeekBefore() {
+        return this.baseMapper.clearWeekBefore() > 0;
+    }
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/BasLocStsServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/BasLocStsServiceImpl.java
new file mode 100644
index 0000000..59a5106
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/BasLocStsServiceImpl.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.zy.asrs.entity.BasLocSts;
+import com.zy.asrs.mapper.BasLocStsMapper;
+import com.zy.asrs.service.BasLocStsService;
+import org.springframework.stereotype.Service;
+
+@Service("basLocStsService")
+public class BasLocStsServiceImpl extends ServiceImpl<BasLocStsMapper, BasLocSts> implements BasLocStsService {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/BasPlcerrorServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/BasPlcerrorServiceImpl.java
new file mode 100644
index 0000000..0d48f6f
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/BasPlcerrorServiceImpl.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.zy.asrs.entity.BasPlcerror;
+import com.zy.asrs.mapper.BasPlcerrorMapper;
+import com.zy.asrs.service.BasPlcerrorService;
+import org.springframework.stereotype.Service;
+
+@Service("basPlcerrorService")
+public class BasPlcerrorServiceImpl extends ServiceImpl<BasPlcerrorMapper, BasPlcerror> implements BasPlcerrorService {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/BasWrkIotypeServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/BasWrkIotypeServiceImpl.java
new file mode 100644
index 0000000..9c6c8c6
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/BasWrkIotypeServiceImpl.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.zy.asrs.entity.BasWrkIotype;
+import com.zy.asrs.mapper.BasWrkIotypeMapper;
+import com.zy.asrs.service.BasWrkIotypeService;
+import org.springframework.stereotype.Service;
+
+@Service("basWrkIotypeService")
+public class BasWrkIotypeServiceImpl extends ServiceImpl<BasWrkIotypeMapper, BasWrkIotype> implements BasWrkIotypeService {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/BasWrkStatusServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/BasWrkStatusServiceImpl.java
new file mode 100644
index 0000000..9684470
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/BasWrkStatusServiceImpl.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.zy.asrs.entity.BasWrkStatus;
+import com.zy.asrs.mapper.BasWrkStatusMapper;
+import com.zy.asrs.service.BasWrkStatusService;
+import org.springframework.stereotype.Service;
+
+@Service("basWrkStatusService")
+public class BasWrkStatusServiceImpl extends ServiceImpl<BasWrkStatusMapper, BasWrkStatus> implements BasWrkStatusService {
+
+}
diff --git a/src/main/java/com/zy/system/controller/ResourceController.java b/src/main/java/com/zy/system/controller/ResourceController.java
index aded982..4cc94dc 100644
--- a/src/main/java/com/zy/system/controller/ResourceController.java
+++ b/src/main/java/com/zy/system/controller/ResourceController.java
@@ -89,11 +89,10 @@
 
     @RequestMapping(value = "/resource/delete/auth")
     @ManagerAuth(memo = "鑿滃崟鍒犻櫎")
-    public R delete(Integer[] ids){
-        if (Cools.isEmpty(ids)){
-            return R.error();
+    public R delete(@RequestParam(value="ids[]") Long[] ids){
+        for (Long id : ids){
+            resourceService.deleteById(id);
         }
-        resourceService.deleteBatchIds(Arrays.asList(ids));
         return R.ok();
     }
 
@@ -124,4 +123,21 @@
         return R.ok(result);
     }
 
+    @RequestMapping(value = "/resource/tree/auth")
+    @ManagerAuth
+    public R tree(@RequestParam(defaultValue = "1")Integer curr,
+                  @RequestParam(defaultValue = "10")Integer limit,
+                  @RequestParam(required = false)String orderByField,
+                  @RequestParam(required = false)String orderByType,
+                  @RequestParam Map<String, Object> param){
+        EntityWrapper<Resource> wrapper = new EntityWrapper<>();
+        excludeTrash(param);
+        convert(param, wrapper);
+        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
+        else {
+            wrapper.orderBy("sort");
+        }
+        return R.parse("0-鎿嶄綔鎴愬姛").add(resourceService.selectList(wrapper));
+    }
+
 }
diff --git a/src/main/java/com/zy/system/controller/UserController.java b/src/main/java/com/zy/system/controller/UserController.java
index f3ec1c2..9344ff6 100644
--- a/src/main/java/com/zy/system/controller/UserController.java
+++ b/src/main/java/com/zy/system/controller/UserController.java
@@ -96,7 +96,7 @@
         return R.ok();
     }
 
-	@RequestMapping(value = "/user/update/auth")
+    @RequestMapping(value = "/user/update/auth")
     @ManagerAuth(memo = "绯荤粺鐢ㄦ埛淇敼")
     public R update(User user){
         if (Cools.isEmpty(user) || null==user.getId()){
@@ -112,17 +112,19 @@
         if (user.getMobile()!=null) {
             entity.setMobile(user.getMobile());
         }
+        if (user.getRoleId() !=null) {
+            entity.setRoleId(user.getRoleId());
+        }
         userService.updateById(entity);
         return R.ok();
     }
 
     @RequestMapping(value = "/user/delete/auth")
     @ManagerAuth(memo = "绯荤粺鐢ㄦ埛鍒犻櫎")
-    public R delete(Integer[] ids){
-        if (Cools.isEmpty(ids)){
-            return R.error();
+    public R delete(@RequestParam(value="ids[]") Long[] ids){
+        for (Long id : ids){
+            userService.deleteById(id);
         }
-        userService.deleteBatchIds(Arrays.asList(ids));
         return R.ok();
     }
 
diff --git a/src/main/resources/mapper/ApiLogMapper.xml b/src/main/resources/mapper/ApiLogMapper.xml
new file mode 100644
index 0000000..05e704e
--- /dev/null
+++ b/src/main/resources/mapper/ApiLogMapper.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zy.asrs.mapper.ApiLogMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.ApiLog">
+        <id column="id" property="id" />
+        <result column="uuid" property="uuid" />
+        <result column="namespace" property="namespace" />
+        <result column="url" property="url" />
+        <result column="appkey" property="appkey" />
+        <result column="timestamp" property="timestamp" />
+        <result column="client_ip" property="clientIp" />
+        <result column="request" property="request" />
+        <result column="response" property="response" />
+        <result column="err" property="err" />
+        <result column="result" property="result" />
+        <result column="status" property="status" />
+        <result column="create_time" property="createTime" />
+        <result column="update_time" property="updateTime" />
+        <result column="memo" property="memo" />
+
+    </resultMap>
+
+    <delete id="clearWeekBefore">
+        delete from man_api_log
+        where 1=1
+        and datediff(week,create_time,getdate()) >= 1
+        and result != 1
+    </delete>
+
+</mapper>
diff --git a/src/main/resources/mapper/BasLocStsMapper.xml b/src/main/resources/mapper/BasLocStsMapper.xml
new file mode 100644
index 0000000..1933fd0
--- /dev/null
+++ b/src/main/resources/mapper/BasLocStsMapper.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zy.asrs.mapper.BasLocStsMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.BasLocSts">
+        <id column="loc_sts" property="locSts" />
+        <result column="loc_desc" property="locDesc" />
+        <result column="modi_user" property="modiUser" />
+        <result column="modi_time" property="modiTime" />
+        <result column="appe_user" property="appeUser" />
+        <result column="appe_time" property="appeTime" />
+
+    </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/WrkMastLogMapper.xml b/src/main/resources/mapper/WrkMastLogMapper.xml
index 10b5858..eba392f 100644
--- a/src/main/resources/mapper/WrkMastLogMapper.xml
+++ b/src/main/resources/mapper/WrkMastLogMapper.xml
@@ -21,7 +21,7 @@
         <result column="appe_time" property="appeTime" />
         <result column="error_time" property="errorTime" />
         <result column="error_memo" property="errorMemo" />
-        <result column="memo_m" property="memoM" />
+        <result column="memo" property="memo" />
         <result column="barcode" property="barcode" />
         <result column="lift_no" property="liftNo" />
         <result column="shuttle_no" property="shuttleNo" />
diff --git a/src/main/webapp/static/css/admin.css b/src/main/webapp/static/css/admin.css
new file mode 100644
index 0000000..b4ecfd4
--- /dev/null
+++ b/src/main/webapp/static/css/admin.css
@@ -0,0 +1,445 @@
+锘�/** EasyWeb iframe v3.1.8 date:2020-05-04 License By http://easyweb.vip */
+*{font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","寰蒋闆呴粦",Arial,sans-serif}body{color:#595959;background-color:#f5f7f9}.layui-layout-body{overflow:auto}.layui-layout-admin{position:absolute;top:0;left:0;right:0;bottom:0;overflow:hidden;-webkit-transition:left .3s,right .3s;transition:left .3s,right .3s}.layui-layout-admin .layui-header{position:absolute;top:0;left:0;right:0;height:50px;background-color:#fff;box-shadow:0 1px 0 0 rgba(0,0,0,.03);z-index:999}.layui-layout-admin .layui-header .layui-logo{color:#ddd;width:235px;line-height:50px;background-color:#191a23;box-shadow:1px 2px 2px 0 rgba(0,0,0,.05);position:relative;vertical-align:top;white-space:nowrap;display:inline-block;-webkit-transition:width .3s;transition:width .3s;overflow:hidden}.layui-layout-admin .layui-header .layui-logo img{height:28px;vertical-align:middle}.layui-layout-admin .layui-header .layui-logo cite{font-style:normal;vertical-align:middle}.layui-layout-admin .layui-header .layui-layout-left{padding:0;vertical-align:top;display:inline-block;position:static!important}.layui-layout-admin .layui-header .layui-layout-right{padding:0}.layui-layout-admin .layui-header .layui-nav .layui-this:after,.layui-layout-admin .layui-header .layui-nav-bar{height:2px;top:0!important;background-color:#191a23}.layui-layout-admin .layui-header .layui-nav .layui-nav-item{line-height:50px;vertical-align:top}.layui-layout-admin .layui-header .layui-nav .layui-nav-item .layui-nav-child{top:55px}.layui-layout-admin .layui-header .layui-nav-item .layui-icon{font-size:16px}.layui-layout-admin .layui-header a{color:#595959;padding:0 15px;cursor:pointer}.layui-layout-admin .layui-header a:hover{color:#595959}.layui-layout-admin .layui-header .layui-nav-child a{color:#595959;text-align:center}.layui-layout-admin .layui-header .layui-nav .layui-nav-more{border-color:#8c8c8c transparent transparent}.layui-layout-admin .layui-header .layui-nav .layui-nav-mored{border-color:transparent transparent #8c8c8c}.layui-layout-admin .layui-header .layui-nav-img{width:26px;height:26px;margin-right:2px;vertical-align:middle}.layui-layout-admin .layui-header .layui-nav-img+cite{margin-right:3px;vertical-align:middle}.layui-layout-admin .layui-header .layui-badge-dot{right:8px;margin:-10px 0 0 0}.layui-layout-admin .layui-body{position:absolute;left:235px;top:50px;z-index:auto;overflow:auto;-webkit-transition:left .3s;transition:left .3s;-webkit-overflow-scrolling:touch}.admin-iframe{position:absolute;top:0;left:0;right:0;bottom:0;width:100%;height:100%}.layui-fluid{padding:15px}.layui-layout-admin .layui-footer{position:absolute;left:235px;background:#fff;box-sizing:border-box;border-top:1px solid #f5f7f9;-webkit-transition:left .3s;transition:left .3s;overflow:hidden}.close-footer .layui-layout-admin .layui-footer{display:none}.close-footer .layui-layout-admin .layui-body{bottom:0}.layui-layout-admin .layui-side{position:absolute;top:50px;width:235px;background-color:#191a23;box-shadow:1px 2px 2px 0 rgba(0,0,0,.05);-webkit-transition:width .3s;transition:width .3s;-webkit-user-select:none;user-select:none;z-index:1000}.layui-layout-admin .layui-side .layui-side-scroll{width:255px;-webkit-transition:width .3s;transition:width .3s}.layui-layout-admin .layui-side .layui-nav{width:235px;background-color:transparent;-webkit-transition:width .3s;transition:width .3s}.layui-layout-admin .layui-side>.layui-side-scroll>.layui-nav:first-child{margin-top:10px}.layui-layout-admin .layui-side .layui-nav .layui-nav-item>a{cursor:pointer;padding-top:5px;padding-bottom:5px}.layui-layout-admin .layui-side .layui-nav .layui-nav-item a{-webkit-transition:color .3s,background-color .3s;transition:color .3s,background-color .3s}.layui-layout-admin .layui-side .layui-nav .layui-nav-more{right:15px}.layui-layout-admin .layui-side .layui-nav .layui-nav-item>.layui-nav-child{position:static}.layui-layout-admin .layui-side .layui-nav .layui-nav-item .layui-nav-child a{padding-left:50px;cursor:pointer}.layui-layout-admin .layui-side .layui-nav .layui-nav-item .layui-nav-child .layui-nav-child a{padding-left:70px}.layui-layout-admin .layui-side .layui-nav .layui-nav-item .layui-nav-child .layui-nav-child .layui-nav-child a{padding-left:90px}.layui-layout-admin .layui-side .layui-nav .layui-nav-item .layui-nav-child .layui-nav-child .layui-nav-child .layui-nav-child a{padding-left:110px}@media screen and (min-width:769px){.layui-layout-admin.admin-nav-mini .layui-header .layui-logo{width:60px}.layui-layout-admin.admin-nav-mini .layui-header .layui-logo cite{display:none}.layui-layout-admin.admin-nav-mini .layui-header .layui-icon-shrink-right:before{content:"\e66b"}.layui-layout-admin.admin-nav-mini .layui-body,.layui-layout-admin.admin-nav-mini .layui-footer{left:60px}.layui-layout-admin.admin-nav-mini .layui-side,.layui-layout-admin.admin-nav-mini .layui-side .layui-nav{width:60px}.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .layui-nav-item>a{overflow:visible}.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .layui-nav-item>a>cite,.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .layui-nav-item>a .layui-nav-more,.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .layui-nav-itemed>.layui-nav-child{display:none!important}.layui-layout-admin.admin-nav-mini .layui-side .layui-nav li.layui-nav-itemed>a{background:rgba(0,0,0,.3)}.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .layui-nav-item>a>.layui-icon{font-size:16px;-webkit-transition:font-size .3s;transition:font-size .3s}.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child{position:fixed;top:60px;left:60px;padding:5px;min-width:150px;display:block!important;background:transparent!important}.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child:before{content:'';position:absolute;right:5px;left:5px;bottom:0;top:0;border-radius:4px;background:#191a23;box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child dd:first-child>.layui-nav-child{margin-top:-5px}.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child dd:last-child>.layui-nav-child.show-top{margin-top:5px}.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child>dd>a{padding:0 20px!important}.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child>dd>a .layui-nav-more{border-color:transparent transparent transparent rgba(255,255,255,.7);right:7px;margin-top:-6px}.layui-layout-admin.admin-nav-mini .layui-side .layui-nav.arrow2 .admin-nav-hover>.layui-nav-child>dd>a .layui-nav-more,.layui-layout-admin.admin-nav-mini .layui-side .layui-nav.arrow3 .admin-nav-hover>.layui-nav-child>dd>a .layui-nav-more{-o-transform:rotate(0deg);-ms-transform:rotate(0deg);-moz-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg);width:6px;height:10px;right:10px;margin-top:-5px;font-weight:600}.layui-layout-admin.admin-nav-mini .layui-side .layui-nav.arrow2 .admin-nav-hover>.layui-nav-child>dd>a .layui-nav-more:before,.layui-layout-admin.admin-nav-mini .layui-side .layui-nav.arrow3 .admin-nav-hover>.layui-nav-child>dd>a .layui-nav-more:before{content:"\e602";left:-4px;top:-2px}.layui-layout-admin.admin-nav-mini .layui-side .layui-nav.arrow3 .admin-nav-hover>.layui-nav-child>dd>a .layui-nav-more:before{-o-transform:rotate(0deg);-ms-transform:rotate(0deg);-moz-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@media screen and (max-width:768px){.layui-layout-admin{left:-235px}.layui-layout-admin .layui-side,.layui-layout-admin .layui-header .layui-logo{box-shadow:none!important}.layui-layout-admin .layui-header .layui-icon-shrink-right:before{content:"\e66b"}.layui-layout-admin.admin-nav-mini{left:0;right:-235px;position:fixed}.layui-layout-admin.admin-nav-mini .layui-header .layui-icon-shrink-right:before{content:"\e668"}.layui-layout-admin.admin-nav-mini .layui-side,.layui-layout-admin.admin-nav-mini .layui-header .layui-logo{box-shadow:1px 0 2px 0 rgba(0,0,0,.05)}.layui-layout-admin.admin-nav-mini .site-mobile-shade{position:absolute;top:0;right:0;bottom:0;left:235px;background-color:rgba(0,0,0,.25);-webkit-transition:background-color .3s;transition:background-color .3s;cursor:pointer;z-index:1000}}.ew-anim-drop-in{-webkit-animation:ewTransitionDropIn .3s ease-in-out;animation:ewTransitionDropIn .3s ease-in-out;-webkit-transform-origin:0 0;transform-origin:0 0}@-webkit-keyframes ewTransitionDropIn{from{opacity:0;-webkit-transform:scale(0.8)}to{opacity:1;-webkit-transform:scale(1)}}@keyframes ewTransitionDropIn{from{opacity:0;transform:scale(0.8)}to{opacity:1;transform:scale(1)}}.layui-nav-tree .layui-nav-bar{display:none}.layui-nav-tree>.layui-nav-item>a:before{content:"";position:absolute;top:0;left:0;bottom:100%;width:4px;background-color:#009688;-webkit-transition:all .3s ease;transition:all .3s ease}.layui-nav-tree>.layui-nav-item:hover>a:before{bottom:0}.layui-nav-tree .layui-nav-item a:hover{background-color:transparent}.layui-nav-tree .layui-this>a:hover{background-color:#009688}.layui-nav-tree .layui-nav-child dd.layui-this,.layui-nav-tree .layui-this{background:transparent}.layui-nav-tree .layui-nav-item .layui-nav-child{padding:5px 0;background-color:rgba(0,0,0,.3)!important}.layui-nav-tree.arrow2 .layui-nav-more{font-family:layui-icon!important;font-size:12px;font-weight:600;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overflow:hidden;line-height:normal;border:0;margin:-3px 0 0 0;padding:0;width:10px;height:6px;top:50%;display:inline-block;-webkit-transition:all .3s ease;transition:all .3s ease}.layui-nav-tree.arrow2 .layui-nav-more:before{content:"\e61a";position:absolute;right:-1px;top:-4px}.layui-nav-tree.arrow2 .layui-nav-itemed>a>.layui-nav-more{-ms-transform:rotate(-180deg);-moz-transform:rotate(-180deg);-webkit-transform:rotate(-180deg);-o-transform:rotate(-180deg);transform:rotate(-180deg)}.layui-nav-tree.arrow3 .layui-nav-more{font-family:layui-icon!important;font-size:12px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overflow:hidden;line-height:normal;border:0;margin:-5px 0 0 0;padding:0;width:10px;height:10px;top:50%;display:inline-block;-webkit-transition:all .3s ease;transition:all .3s ease}.layui-nav-tree.arrow3 .layui-nav-more:before{content:"\e654";position:absolute;top:-2px;left:-1px}.layui-nav-tree.arrow3 .layui-nav-itemed>a>.layui-nav-more{-ms-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-webkit-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)}.layui-nav-tree.arrow3 .layui-nav-itemed>a>.layui-nav-more:before{content:'';width:8px;height:2px;background-color:rgba(255,255,255,.7);top:4px;left:1px;-ms-transform:rotate(45deg);-moz-transform:rotate(45deg);-webkit-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.layui-layout-admin .layui-body>.layui-tab{position:absolute;top:0;left:0;right:0;bottom:0;margin:0}.layui-layout-admin .layui-body>.layui-tab>.layui-tab-content{position:absolute;left:0;right:0;bottom:0;top:40px;padding:0}.layui-layout-admin .layui-body>.layui-tab>.layui-tab-content>.layui-tab-item{position:absolute;bottom:0;right:0;top:0;left:0;overflow:auto;-webkit-overflow-scrolling:touch;display:block;visibility:hidden;opacity:0;filter:Alpha(opacity=0)}.layui-layout-admin .layui-body>.layui-tab>.layui-tab-content>.layui-tab-item.layui-show{visibility:visible;opacity:1;filter:Alpha(opacity=100)}.layui-layout-admin.admin-side-flexible .layui-body>.layui-tab>.layui-tab-content>.layui-tab-item{display:none}.layui-layout-admin .layui-body>.layui-tab>.layui-tab-title{height:40px;line-height:40px;padding:0 80px 0 40px;background-color:#fff;box-shadow:0 1px 2px 0 rgba(0,0,0,.1);position:absolute;top:0;left:0;right:0;border:0;overflow:hidden;-webkit-transition:none;transition:none;z-index:998}.layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li{min-width:auto;max-width:160px;line-height:40px;padding:0 30px 0 15px;border-right:1px solid #f6f6f6;overflow:hidden;text-overflow:ellipsis;vertical-align:top;-webkit-transition:background-color .2s;transition:background-color .2s}.layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li.layui-this,.layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li:hover{background-color:#f6f6f6}.layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li.layui-this:after{height:2px;border:0;border-radius:0;background-color:#191a23}.layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li:first-child{padding:0 15px}.layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li cite{font-style:normal}.layui-layout-admin .layui-body>.layui-tab>.layui-tab-title .layui-tab-bar{display:none}.layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li .layui-tab-close{width:16px;height:16px;line-height:16px;font-size:12px;border-radius:50%;position:absolute;top:12px;right:8px;-webkit-transition:background-color .2s,color .2s;transition:background-color .2s,color .2s}.layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li:first-child .layui-tab-close{display:none}.admin-tabs-control{position:absolute;top:0;width:40px;height:40px;line-height:40px;background-color:#fff;border-left:1px solid #f6f6f6;-webkit-transition:background-color .2s;transition:background-color .2s;text-align:center;cursor:pointer;z-index:998}.admin-tabs-control:hover{background-color:#f6f6f6}.admin-tabs-control.layui-icon-prev{left:0;border-left:none;border-right:1px solid #f6f6f6}.admin-tabs-control.layui-icon-next{right:40px}.admin-tabs-control.layui-icon-down{right:0}.admin-tabs-control>.layui-nav,.admin-tabs-control>.layui-nav .layui-nav-item{position:absolute;top:0;left:0;padding:0;width:100%;height:100%;background:transparent}.admin-tabs-control>.layui-nav .layui-nav-child{right:0;top:40px;left:auto}.admin-tabs-control>.layui-nav .layui-nav-child a{color:#595959}.admin-tabs-control>.layui-nav .layui-nav-bar,.admin-tabs-control>.layui-nav .layui-nav-more{display:none}.layui-body-header{padding:0 20px;height:40px;line-height:40px;background-color:#fff;box-shadow:0 1px 2px 0 rgba(0,0,0,.1);box-sizing:border-box;position:absolute;left:0;right:0;z-index:998;display:none}.layui-body-header.show{display:block}.layui-body-header-title{padding-left:6px;border-left:4px solid #009688}.layui-body-header.show+div{position:absolute;left:0;right:0;top:40px;bottom:0;overflow:auto;-webkit-overflow-scrolling:touch}.hide-body-title .layui-body-header.show{display:none}.hide-body-title .layui-body-header.show+div{top:0}.layui-layout-admin .layui-body>.page-loading,.layui-layout-admin .layui-body>.layui-tab>.layui-tab-content>.layui-tab-item>.page-loading,.layui-layout-admin .layui-body>div>iframe[lay-id]+.page-loading{z-index:997}.layui-layer.layui-layer-adminRight{bottom:0;top:50px!important;border:none!important;box-shadow:1px 1px 50px rgba(0,0,0,.3)!important;overflow:auto}.layui-layer.layui-layer-adminRight0{bottom:0;top:0!important;border:none!important;box-shadow:1px 1px 50px rgba(0,0,0,.3)!important;overflow:auto}.layui-layer.layui-layer-adminRight>.layui-layer-content,.layui-layer.layui-layer-adminRight>.layui-layer-content>iframe{height:100%!important}.layui-layer.layui-layer-adminRight>.layui-layer-title+.layui-layer-content{position:absolute;top:43px;left:0;right:0;bottom:0;height:auto!important}.layui-anim-rl{-webkit-animation-name:layui-rl;animation-name:layui-rl}@-webkit-keyframes layui-rl{from{-webkit-transform:translate3d(100%,0,0)}to{-webkit-transform:translate3d(0,0,0)}}@keyframes layui-rl{from{transform:translate3d(100%,0,0)}to{transform:translate3d(0,0,0)}}.layui-anim-lr,.layui-anim-rl.layer-anim-close{-webkit-animation-name:layui-lr;animation-name:layui-lr}@-webkit-keyframes layui-lr{from{-webkit-transform:translate3d(0,0,0);opacity:1}to{-webkit-transform:translate3d(100%,0,0);opacity:1}}@keyframes layui-lr{from{transform:translate3d(0,0,0)}to{transform:translate3d(100%,0,0)}}.layui-layer.layui-layer-admin{border:none!important;box-shadow:1px 1px 50px rgba(0,0,0,.3)!important}.layui-layer.layui-layer-admin .layui-layer-title{color:#fff;height:50px;line-height:50px;background-color:#191a23;border:0}.layui-layer.layui-layer-admin .layui-layer-setwin{top:17px}.layui-layer.layui-layer-admin .layui-layer-setwin a{color:#fff;font-size:16px;font-style:normal;font-family:layui-icon!important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.layui-layer.layui-layer-admin .layui-layer-setwin .layui-layer-close1{background:0;margin-top:-1px}.layui-layer.layui-layer-admin .layui-layer-setwin .layui-layer-close1:before{content:"\1006"}.layui-layer.layui-layer-admin .layui-layer-setwin .layui-layer-min cite{background-color:#ddd}.layui-layer.layui-layer-admin .layui-layer-setwin .layui-layer-max{font-size:14px;padding-top:1px;background:0}.layui-layer.layui-layer-admin .layui-layer-setwin .layui-layer-max:before{content:"\e622"}.layui-layer.layui-layer-admin .layui-layer-setwin .layui-layer-maxmin:before{content:"\e758"}.layui-layer.layui-layer-admin .layui-layer-btn{padding-bottom:15px}.layui-layer.layui-layer-admin .layui-layer-btn .layui-layer-btn0{border-color:#009688;background-color:#009688}.layui-layer.layui-layer-admin .layui-layer-btn a{height:34px;line-height:34px}.layui-layer-admin{max-width:100%}.layui-layer-iframe .layui-layer-content{overflow:auto;-webkit-overflow-scrolling:touch}@media screen and (max-width:768px){.layui-layer-admin{max-width:98%;max-width:-webkit-calc(100% - 30px);max-width:-moz-calc(100% - 30px);max-width:calc(100% - 30px);width:max-content;left:0!important;right:0!important;margin:auto!important;margin-bottom:15px!important}.layui-layer-admin[area]{max-width:100%;margin-bottom:0!important}}body .layui-layer-msg{border:0;border-radius:4px;box-shadow:0 2px 12px 0 rgba(0,0,0,0.1)}body .layui-layer-load{background:transparent}.page-loading{position:absolute;display:block;width:100%;height:100%;top:0;left:0;right:0;bottom:0;z-index:19891017;background-color:#fff}body>.page-loading{position:fixed;background-color:#f5f7f9}.layui-layout-admin>.layui-body>.layui-tab>.layui-tab-content>.layui-tab-item>.page-loading,.layui-layout-admin>.layui-body>.page-loading,.layui-layout-admin>.layui-body>div>iframe[lay-id]+.page-loading{background-color:#f5f7f9}.layui-layout-admin>.layui-body>.layui-body-header.show+div+.page-loading{top:40px;height:auto}.page-no-scroll{overflow-x:hidden!important;overflow-y:hidden!important;min-height:80px}.rubik-loader,.ball-loader,.signal-loader,.layui-loader{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.ball-loader>span,.signal-loader>span{background-color:#4aca85;display:inline-block}.ball-loader>span:nth-child(1),.ball-loader.sm>span:nth-child(1),.signal-loader>span:nth-child(1),.signal-loader.sm>span:nth-child(1){-webkit-animation-delay:0s;animation-delay:0s}.ball-loader>span:nth-child(2),.ball-loader.sm>span:nth-child(2),.signal-loader>span:nth-child(2),.signal-loader.sm>span:nth-child(2){-webkit-animation-delay:.1s;animation-delay:.1s}.ball-loader>span:nth-child(3),.ball-loader.sm>span:nth-child(3),.signal-loader>span:nth-child(3),.signal-loader.sm>span:nth-child(3){-webkit-animation-delay:.15s;animation-delay:.15s}.ball-loader>span:nth-child(4),.ball-loader.sm>span:nth-child(4),.signal-loader>span:nth-child(4),.signal-loader.sm>span:nth-child(4){-webkit-animation-delay:.2s;animation-delay:.2s}.rubik-loader{width:64px;height:64px;background-image:url(img/ic_loading.gif);background-repeat:no-repeat;background-position:center;background-size:contain}.rubik-loader.sm{width:50px;height:50px}.ball-loader>span{width:20px;height:20px;margin:0 3px;border-radius:50%;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-animation:1s ball-load ease-in-out infinite;animation:ball-load 1s ease-in-out infinite}@-webkit-keyframes ball-load{0%{-webkit-transform:scale(0)}50%{-webkit-transform:scale(1)}100%{-webkit-transform:scale(0)}}@keyframes ball-load{0%{transform:scale(0)}50%{transform:scale(1)}100%{transform:scale(0)}}.ball-loader.sm>span{width:15px;height:15px;margin:0 2px}.signal-loader{width:50px;height:22px}.signal-loader>span{width:8px;height:0;position:absolute;bottom:0;left:0;margin:0;-webkit-animation:signal-load 1s infinite;animation:signal-load 1s infinite}.signal-loader>span:nth-child(2){left:14px}.signal-loader>span:nth-child(3){left:28px}.signal-loader>span:nth-child(4){left:42px}@-webkit-keyframes signal-load{0%{height:0}50%{height:22px}100%{height:0}}@keyframes signal-load{0%{height:0}50%{height:22px}100%{height:0}}.signal-loader.sm{width:32px;height:15px}.signal-loader.sm>span{width:5px;-webkit-animation:signal-load-sm 1s infinite;animation:signal-load-sm 1s infinite}.signal-loader.sm>span:nth-child(2){left:9px}.signal-loader.sm>span:nth-child(3){left:18px}.signal-loader.sm>span:nth-child(4){left:27px}@-webkit-keyframes signal-load-sm{0%{height:0}50%{height:15px}100%{height:0}}@keyframes signal-load-sm{0%{height:0}50%{height:15px}100%{height:0}}.layui-loader .layui-icon{font-size:36px;color:#bbb}.layui-loader.sm .layui-icon{font-size:30px}.layui-form.toolbar .layui-form-item,.layui-form.toolbar .layui-form-item .layui-inline>.layui-input-inline{margin-bottom:0}.layui-form.toolbar .layui-form-item .layui-inline{margin-bottom:10px}.toolbar+.layui-table,.layui-card-body>.layui-table,.toolbar+table+.layui-table-view,.layui-card-body>.layui-table-view,.toolbar+table+.ew-tree-table{margin:0}.mr0,.layui-form.toolbar .layui-form-item .layui-inline>.layui-input-inline{margin-right:0!important}.w-auto{width:auto!important}.model-form{padding:25px 30px 0 0}.model-form.no-padding{padding:0}.model-form .model-form-body{overflow-y:auto;padding:25px 30px 0 0;max-height:calc(100vh - 180px)}.model-form.no-padding .model-form-footer{padding-top:10px;padding-right:30px}.layui-form.model-form>.layui-form-item:last-child{margin-bottom:0;padding-bottom:20px}.layui-form-required:before{content:"*";display:inline-block;font-family:SimSun;margin-right:4px;font-size:14px;line-height:1;color:#ed4014}.layui-input,.layui-textarea{color:#595959}.layui-form-select .layui-input{padding-right:0}.layui-form-select-top .layui-form-select>dl{top:auto;bottom:42px}.ew-select-fixed .layui-form-selected dl{position:fixed;min-width:auto;bottom:auto;right:auto}body .layui-form-checked[lay-skin=primary] i,body .layui-form-checked[lay-skin=primary]:hover i{color:#fff}body .layui-form-checkbox[lay-skin=primary] span,body .layui-form-checkbox[lay-skin=primary]:hover span{background-color:transparent}body .layui-form-danger+.layui-form-select .layui-input,body .layui-input.layui-form-danger:focus,body .layui-textarea.layui-form-danger:focus{border-color:#ff5722!important}body .layui-laypage input.layui-input{height:30px;line-height:30px}body .layui-table-page .layui-laypage input.layui-input{height:26px;line-height:26px}body .layui-form-onswitch em{margin-left:3px;margin-right:18px}.layui-btn{-webkit-transition:background-color .2s;transition:background-color .2s}body .layui-btn.layui-btn-radius{border-radius:100px}.layui-btn-primary{color:#595959;border-color:#e6e6e6}.layui-btn-primary:hover{border-color:#bbb}.layui-btn-group .layui-btn-primary:hover{border-color:#e6e6e6}.layui-btn-group .layui-btn-primary:first-child{border-left:1px solid #e6e6e6}body .layui-btn.layui-btn-disabled,body .layui-transfer-active .layui-btn.layui-btn-disabled{background-color:#fbfbfb!important;border-color:#e6e6e6!important;color:#c9c9c9!important}body .layui-btn.layui-btn-primary{background-color:#fff}body .layui-btn.layui-btn-normal{background-color:#1e9fff}body .layui-btn.layui-btn-warm{background-color:#ffb800}body .layui-btn.layui-btn-danger{background-color:#ff5722}.layui-btn-group>.layui-btn+.layui-btn{border-radius:0}.layui-btn-group>.layui-btn:last-child{border-top-right-radius:2px;border-bottom-right-radius:2px}body .layui-transfer-active .layui-btn{background-color:#5fb878!important;border-color:#5fb878!important;color:#fff!important}.btn-circle{width:50px;height:50px;line-height:50px;border-radius:50%;background:#009688;position:fixed;right:15px;bottom:15px;color:#fff;text-align:center;box-shadow:0 0 8px rgba(0,0,0,.2);cursor:pointer}.btn-circle:hover{color:#fff;opacity:.8}.btn-circle .layui-icon{font-size:24px}.icon-date,.date-icon{background-image:url(img/icon_date.png);background-repeat:no-repeat;background-position:right center;padding-right:28px}.icon-search{background-image:url(img/icon_search.png);background-repeat:no-repeat;background-position:right center;padding-right:26px}span.icon-text>.layui-icon,a.icon-text>.layui-icon,.layui-form-label.icon-text>.layui-icon{font-size:14px;margin:0 2px}.layui-btn.icon-btn{padding:0 10px}.layui-btn.layui-btn-sm.icon-btn{padding:0 6px}.bg-white,html.bg-white>body{background-color:white}[ew-href],[lay-tips]{cursor:pointer}.inline-block{display:inline-block}.pull-right{float:right}.pull-left{float:left}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-primary,.layui-link{color:#009688!important}.text-success{color:#5fb878!important}.text-warning{color:#ffb800!important}.text-danger{color:#ff5722!important}.text-info{color:#01aaed!important}.text-muted{color:#c2c2c2!important}.layui-text a:not(.layui-btn){color:#2d8cf0;cursor:pointer}.layui-text a:not(.layui-btn):hover{text-decoration:none}.ew-console-wrapper .layui-card{box-shadow:none;border-radius:4px}.layui-card-header{color:#595959}.lay-big-font{font-size:36px;line-height:36px;padding:5px 0 10px;overflow:hidden;white-space:nowrap;word-break:break-all;text-overflow:ellipsis}.no-scrollbar{overflow-x:hidden!important;overflow-y:hidden!important}input.layui-disabled,input.layui-disabled:hover,textarea.layui-disabled,textarea.layui-disabled:hover{color:#595959!important;background-color:#f6f6f6}.layui-input::-webkit-input-placeholder,.layui-textarea::-webkit-input-placeholder{color:#ccc}.layui-input::-moz-placeholder,.layui-textarea::-moz-placeholder{color:#ccc}.layui-input::-ms-input-placeholder,.layui-textarea::-ms-input-placeholder{color:#ccc}.dropdown-menu{display:inline-block}.dropdown-menu .dropdown-menu-nav{display:none}.dropdown-menu+.dropdown-menu,.layui-btn+.dropdown-menu,.dropdown-menu+.layui-btn{margin-left:10px}::-webkit-scrollbar{width:10px;height:10px;background:transparent}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{border-radius:5px;background-color:#c1c1c1}::-webkit-scrollbar-thumb:hover{background-color:#a8a8a8}.mini-bar::-webkit-scrollbar{width:6px;height:6px}.mini-bar::-webkit-scrollbar-thumb{border-radius:3px}@media screen and (max-width:768px){::-webkit-scrollbar{width:4px;height:4px}::-webkit-scrollbar-thumb{border-radius:0}}#ew-map-select-map{height:450px}#ew-map-select-pois{height:450px;overflow-x:hidden;overflow-y:auto}.ew-map-select-search-list-item{padding:10px 30px 10px 15px;border-bottom:1px solid #e8e8e8;cursor:pointer;position:relative}.ew-map-select-search-list-item:hover{background:#f2f2f2}.ew-map-select-search-list-item:last-child{border-bottom:0}.ew-map-select-search-list-item .ew-map-select-search-list-item-title{font-size:14px;color:#262626}.ew-map-select-search-list-item .ew-map-select-search-list-item-address{font-size:12px;color:#595959;padding-top:5px}.ew-map-select-search-list-item-icon-ok{position:absolute;right:15px;top:50%;transform:translateY(-50%)}.ew-map-select-search-list-item-icon-ok .layui-icon{color:#3b74ff}.ew-map-select-tool{padding:5px 15px;box-shadow:0 1px 0 0 rgba(0,0,0,.05)}#ew-map-select-center-img{position:absolute;bottom:50%;left:50%;width:26px;margin-left:-13px}#ew-map-select-center-img2{position:absolute;left:50%;top:50%;font-size:12px;display:inline-block;margin-left:-6px;margin-top:-7px;color:#3b74ff}.bounceInDown{animation:bounceInDown 500ms;animation-direction:alternate;-webkit-animation:bounceInDown 500ms;-webkit-animation-direction:alternate}@-webkit-keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-transition-timing-function:cubic-bezier(.215,.61,.355,1)}0%,to{-webkit-transform:translate3d(0,0,0)}25%{-webkit-transform:translate3d(0,-30px,0)}50%{-webkit-transform:translate3d(0,-15px,0)}75%{-webkit-transform:translate3d(0,-4px,0)}}@keyframes bounceInDown{0%,60%,75%,90%,to{transition-timing-function:cubic-bezier(.215,.61,.355,1)}0%,to{transform:translate3d(0,0,0)}25%{transform:translate3d(0,-10px,0)}50%{transform:translate3d(0,-20px,0)}75%{transform:translate3d(0,-10px,0)}}#ew-map-select-tips{position:absolute;z-index:999;background:#fff;max-height:430px;overflow:auto;top:48px;left:56px;width:280px;box-shadow:0 2px 4px rgba(0,0,0,.12);border:1px solid #d2d2d2}#ew-map-select-tips .ew-map-select-search-list-item{padding:10px 15px 10px 35px}.ew-map-select-search-list-item-icon-search{position:absolute;left:10px;top:50%;transform:translateY(-50%)}.ew-map-select-search-list-item-icon-search .layui-icon{color:#8c8c8c}.table-tool-mini .layui-table-view{position:relative}.table-tool-mini .layui-table-tool{position:absolute;min-height:unset;height:auto;padding:3px 10px;width:auto;top:-38px;right:-1px;border-top-right-radius:8px;border-top-left-radius:8px;border:1px solid #e6e6e6;border-bottom:0}.table-tool-mini .layui-table-tool .layui-table-tool-temp{padding-right:0;display:inline-block}.table-tool-mini .layui-table-tool .layui-table-tool-self{position:static;display:inline-block}.table-tool-mini .layui-table-tool .layui-table-tool-self .layui-inline[lay-event]:first-child{margin:0}.table-tool-mini.full-table .layui-table-tool{top:-35px;height:1px;padding:0 10px;background:transparent;border:0}.table-tool-mini.full-table .layui-table-tool:before{content:"";position:absolute;top:-3px;right:0;left:0;height:36px;background-color:#f2f2f2;border-top-right-radius:8px;border-top-left-radius:8px;border:1px solid #e6e6e6;border-bottom:0}@media screen and (max-width:768px){.layui-laydate-range{left:0!important;top:0!important;right:0!important;margin:10px auto!important;max-width:95%}.layui-laydate-range .layui-laydate-main,.layui-laydate-range .layui-laydate-content table{width:100%}.layui-laydate-range .laydate-main-list-0 .laydate-next-m,.layui-laydate-range .laydate-main-list-0 .laydate-next-y,.layui-laydate-range .laydate-main-list-1 .laydate-prev-m,.layui-laydate-range .laydate-main-list-1 .laydate-prev-y{display:inline-block!important}.layui-laydate-range .laydate-main-list-1 .layui-laydate-header{border-top:1px solid #e2e2e2}.layui-laydate-range .laydate-main-list-1 .layui-laydate-content{border-left:none!important}.layui-laydate-range .laydate-time-list ol li{padding-left:0!important;text-align:center}.layui-laydate-range .laydate-time-list ol{overflow:auto!important}}.layui-tree-spread>div>div>span>.layui-tree-iconArrow:after{border-color:#c0c4cc transparent transparent transparent;top:6px;left:0}.layui-tree .layui-tree-iconArrow:after{transition:none}.ew-tb-cell-ck .layui-form-checkbox[lay-skin=primary]{padding-left:22px}.ew-tb-cell-ck .layui-form-checkbox[lay-skin=primary] span{padding-right:5px}.ew-field-group>.layui-elem-field{border-bottom:0;margin:0}.ew-field-group>.ew-field-box{border:1px solid #e6e6e6;padding:10px 15px;border-top:0}body .layui-elem-quote.layui-quote-nm{border-color:#e6e6e6}.layui-card>.layui-tab-brief>.layui-tab-title li{padding:0 5px;margin:0 10px;line-height:43px;height:43px;transition:color .2s;-webkit-transition:color .2s}.layui-card>.layui-tab-brief>.layui-tab-title li:after{height:43px}.layui-card>.layui-tab-brief>.layui-tab-title{border-bottom-color:#f6f6f6;height:42px;transition:none;-webkit-transition:none}.layui-card>.layui-tab-brief>.layui-tab-content{padding:10px 15px}.layui-tab.layui-tab-vertical{position:relative}.layui-tab.layui-tab-vertical:after{content:"";clear:both;display:block}.layui-tab.layui-tab-vertical>.layui-tab-title{width:130px;height:auto;border:0;border-right:1px solid #e9e9e9;box-sizing:border-box;padding:10px 0;float:left}.layui-tab.layui-tab-vertical>.layui-tab-title>li{display:block;margin-right:-1px;border-right:2px solid transparent;white-space:normal;line-height:normal;padding:10px 20px;text-align:right}.layui-tab.layui-tab-vertical>.layui-tab-title>li.layui-this{border-right:2px solid #5fb878;color:#5fb878}.layui-tab.layui-tab-vertical>.layui-tab-title>li.layui-this:after{display:none}.layui-tab.layui-tab-vertical>.layui-tab-title>li>.layui-icon{font-size:14px;margin-right:5px}.layui-tab.layui-tab-vertical>.layui-tab-content{margin-left:130px}.layui-tab.layui-tab-vertical.layui-tab-vertical-right>.layui-tab-title{float:right;border-right:0;border-left:1px solid #e9e9e9}.layui-tab.layui-tab-vertical.layui-tab-vertical-right>.layui-tab-content{margin-left:0;margin-right:130px}.layui-tab.layui-tab-vertical.layui-tab-vertical-right>.layui-tab-title>li{text-align:left;border-left:2px solid transparent;border-right:0}.layui-tab.layui-tab-vertical.layui-tab-vertical-right>.layui-tab-title>li.layui-this{border-left:2px solid #5fb878}.layui-tab.layui-tab-vertical.layui-tab-vertical-full>.layui-tab-title{position:absolute;top:0;left:0;right:auto;min-height:100%}.layui-tab.layui-tab-vertical.layui-tab-vertical-right.layui-tab-vertical-full>.layui-tab-title{right:0;left:auto}.ew-btn-loading{opacity:.8;pointer-events:none;font-size:0!important}.ew-btn-loading *{display:none!important}.ew-btn-loading>.ew-btn-loading-text{font-size:14px!important;display:inline-block!important}.ew-btn-loading.layui-btn-sm>.ew-btn-loading-text,.ew-btn-loading.layui-btn-xs>.ew-btn-loading-text{font-size:12px!important}.ew-btn-loading.layui-btn-lg>.ew-btn-loading-text{font-size:16px!important}.ew-btn-loading>.ew-btn-loading-text *{display:inline-block!important}.form-search-expand,.form-search-expand:hover{padding:0!important;color:#2d8cf0!important;border:none!important;box-shadow:none!important;background-color:transparent!important}.form-search-expand .layui-icon{font-size:12px!important;font-weight:600!important}.form-search-show-expand{display:none!important}.layui-badge-green{color:#52c41a;background:#f6ffed;border:1px solid #b7eb8f}.layui-badge-blue{color:#1890ff;background:#e6f7ff;border:1px solid #91d5ff}.layui-badge-red{color:#f5222d;background:#fff1f0;border:1px solid #ffa39e}.layui-badge-yellow{color:#faad14;background:#fffbe6;border:1px solid #ffe58f}.layui-badge-gray{color:#8c8c8c;background:#fafafa;border:1px solid #ccc}.layui-badge{height:20px;line-height:19px;box-sizing:border-box}.layui-badge-list .layui-badge{height:23px;line-height:22px;margin:0 6px 8px 0}.layui-badge-list .layui-badge.layui-bg-gray{border:1px solid #ccc;background-color:#fafafa!important}.layui-card .layui-card-header .layui-badge.pull-right{top:50%;margin-top:-10px}#ew-lock-screen-group{position:fixed;top:0;left:0;right:0;bottom:0;z-index:19891099}.ios-iframe-body{position:absolute;top:0;left:0;right:0;bottom:0}xm-select>.xm-body{margin-left:-2px}xm-select>.xm-body .xm-option{background-color:transparent!important}xm-select>.xm-body .xm-option.hide-icon.selected{background-color:#5fb878!important}xm-select>.xm-body .xm-option:hover{background-color:#f2f2f2!important}.xm-body .xm-tree{min-width:200px}.xm-body .xm-tree .xm-option-content{padding-left:6px}xm-select{border-color:#e6e6e6!important}xm-select:hover{border-color:#d2d2d2!important}xm-select[style="border-color: rgb(229, 77, 66);"]{border-color:#e54d42!important}body .ew-xmselect-tree xm-select .xm-body .xm-option .xm-option-icon{position:absolute;left:30px;top:0;right:0;bottom:0;width:auto;height:auto;border:none!important;z-index:1}body .ew-xmselect-tree xm-select .xm-body .xm-option .xm-option-icon:before{display:none}body .ew-xmselect-tree xm-select .xm-body .xm-option.selected{background-color:#f2f2f2!important}body .ew-xmselect-tree xm-select .xm-body .xm-option.selected .xm-option-content{color:#5fb878!important}.theme-blue .layui-layout-admin .layui-header .layui-logo{color:#fff;box-shadow:none;background-color:transparent}.theme-blue .layui-layout-admin .layui-header{background-color:#3c8dbc}.theme-blue .layui-layout-admin .layui-header a{color:#fff}.theme-blue .layui-layout-admin .layui-header a:hover{color:#fff}.theme-blue .layui-layout-admin .layui-header .layui-nav-child a{color:#595959}.theme-blue .layui-layout-admin .layui-header .layui-nav .layui-nav-more{border-color:#eee transparent transparent}.theme-blue .layui-layout-admin .layui-header .layui-nav .layui-nav-mored{border-color:transparent transparent #eee}.theme-blue .layui-layout-admin .layui-header .layui-nav .layui-this:after,.theme-blue .layui-layout-admin .layui-header .layui-nav-bar{background-color:#fff}.theme-blue .layui-layout-admin .layui-side{background-color:#222d32}.theme-blue .layui-side .layui-nav .layui-nav-item a{color:#b8c7ce}.theme-blue .layui-nav-tree .layui-nav-child dd.layui-this a,.theme-blue .layui-nav-tree .layui-this>a,.theme-blue .layui-nav-tree .layui-this>a:hover{color:#fff;background-color:#3c8dbc}.theme-blue .layui-nav-tree>.layui-nav-item>a:before{background-color:#3c8dbc}.theme-blue .layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child:before{background:#222d32!important}.theme-blue .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li.layui-this:after{background-color:#3c8dbc;top:38px}.theme-blue .layui-body-header-title{border-left-color:#3c8dbc}.theme-blue .layui-layer.layui-layer-admin .layui-layer-title{background-color:#3c8dbc}.theme-blue .layui-layer.layui-layer-admin .layui-layer-btn .layui-layer-btn0{border-color:#3c8dbc;background-color:#3c8dbc}.theme-blue .ball-loader>span,.theme-blue .signal-loader>span{background-color:#3c8dbc}.theme-blue .btn-circle{background:#3c8dbc}.theme-blue .more-theme-item:hover,.theme-blue .more-theme-item.active{border-color:#3c8dbc}.theme-blue .text-primary,.theme-blue .layui-link{color:#3c8dbc!important}.theme-blue .layui-btn{background-color:#3c8dbc}.theme-blue .layui-form-onswitch{border-color:#3c8dbc;background-color:#3c8dbc}.theme-blue .layui-form-radio>i:hover,.theme-blue .layui-form-radioed>i,.theme-blue .layui-form-checked i,.theme-blue .layui-form-checked:hover i{color:#3c8dbc}.theme-blue .layui-form-checked[lay-skin=primary] i,.theme-blue .layui-form-checked span,.theme-blue .layui-form-checked:hover span{border-color:#3c8dbc!important;background-color:#3c8dbc}.theme-blue .layui-form-checked[lay-skin=primary] i:hover,.theme-blue .layui-form-checkbox[lay-skin=primary]:hover i{border-color:#3c8dbc!important}.theme-blue .layui-form-select dl dd.layui-this{background-color:#3c8dbc}.theme-blue .layui-laypage .layui-laypage-curr .layui-laypage-em{background-color:#3c8dbc}.theme-blue .layui-laypage input:focus,.theme-blue .layui-laypage select:focus{border-color:#3c8dbc!important}.theme-blue .layui-laypage a:hover{color:#3c8dbc}.theme-blue .layui-tab-brief>.layui-tab-title .layui-this{color:#3c8dbc}.theme-blue .layui-tab-brief>.layui-tab-more li.layui-this:after,.theme-blue .layui-tab-brief>.layui-tab-title .layui-this:after{border-color:#3c8dbc!important}.theme-blue .layui-tab.layui-tab-vertical>.layui-tab-title>li.layui-this{border-color:#3c8dbc;color:#3c8dbc}.theme-blue .layui-breadcrumb a:hover{color:#3c8dbc!important}.theme-blue .layui-laydate-footer span:hover,.theme-blue .layui-laydate-header i:hover,.theme-blue .layui-laydate-header span:hover{color:#3c8dbc}.theme-blue .layui-laydate .layui-this{background-color:#3c8dbc!important}.theme-blue .layui-laydate-content td.laydate-selected{background-color:rgba(60,141,188,.1)}.theme-blue .laydate-selected:hover{background-color:rgba(60,141,188,.1)!important}.theme-blue .layui-timeline-axis{color:#3c8dbc}.theme-blue .layui-transfer-active .layui-btn{background-color:#3c8dbc!important;border-color:#3c8dbc!important}.theme-blue .layui-progress-bar{background-color:#3c8dbc}.theme-blue .layui-slider-bar{background-color:#3c8dbc!important}.theme-blue .layui-slider-wrap-btn{border-color:#3c8dbc!important}.theme-blue .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon{color:#3c8dbc}.theme-blue .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon.layui-icon-ok,.theme-blue .layui-elem-quote{border-color:#3c8dbc}.theme-blue .layui-tab.layui-steps>.layui-tab-title>li:before,.theme-blue .layui-tab.layui-steps>.layui-tab-title>li.layui-this>.layui-icon.layui-icon-ok{background-color:#3c8dbc}.theme-blue .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li{background-color:#9dc6dd}.theme-blue .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this{background-color:#3c8dbc}.theme-blue .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li:after{border-left-color:#9dc6dd!important}.theme-blue .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this+li:after{border-left-color:#3c8dbc!important}.theme-blue .ew-cascader-dropdown-list-item.active,.theme-blue .ew-cascader-dropdown-list-item.active .ew-icon-right{color:#3c8dbc}.theme-blue div.tagsinput span.tag{background:#3c8dbc}.theme-blue xm-select .xm-body .xm-option .xm-option-icon{border-color:#3c8dbc!important}.theme-blue xm-select .xm-body .xm-option.selected .xm-option-icon,.theme-blue xm-select>.xm-body .xm-toolbar .toolbar-tag:hover,.theme-blue .ew-xmselect-tree xm-select .xm-body .xm-option.selected .xm-option-content{color:#3c8dbc!important}.theme-blue xm-select .xm-label .xm-label-block,.theme-blue xm-select .xm-body .xm-option.hide-icon.selected{background-color:#3c8dbc!important}.theme-blue .city-select a.active{color:#fff!important;background-color:#3c8dbc!important}.theme-blue .city-select a:hover,.theme-blue .city-select a:focus{background-color:rgba(60,141,188,.1);color:#3c8dbc}.theme-blue .city-picker-span>.title>span:hover{background-color:rgba(60,141,188,.1)}.theme-blue .city-select-tab>a.active{color:#3c8dbc}.theme-green .layui-layout-admin .layui-header .layui-logo{color:#fff;box-shadow:none;background-color:transparent}.theme-green .layui-layout-admin .layui-header{background-color:#00a65a}.theme-green .layui-layout-admin .layui-header a{color:#fff}.theme-green .layui-layout-admin .layui-header a:hover{color:#fff}.theme-green .layui-layout-admin .layui-header .layui-nav-child a{color:#595959}.theme-green .layui-layout-admin .layui-header .layui-nav .layui-nav-more{border-color:#eee transparent transparent}.theme-green .layui-layout-admin .layui-header .layui-nav .layui-nav-mored{border-color:transparent transparent #eee}.theme-green .layui-layout-admin .layui-header .layui-nav .layui-this:after,.theme-green .layui-layout-admin .layui-header .layui-nav-bar{background-color:#fff}.theme-green .layui-layout-admin .layui-side{background-color:#222d32}.theme-green .layui-side .layui-nav .layui-nav-item a{color:#b8c7ce}.theme-green .layui-nav-tree .layui-nav-child dd.layui-this a,.theme-green .layui-nav-tree .layui-this>a,.theme-green .layui-nav-tree .layui-this>a:hover{color:#fff;background-color:#00a65a}.theme-green .layui-nav-tree>.layui-nav-item>a:before{background-color:#00a65a}.theme-green .layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child:before{background:#222d32!important}.theme-green .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li.layui-this:after{background-color:#00a65a;top:38px}.theme-green .layui-body-header-title{border-left-color:#00a65a}.theme-green .layui-layer.layui-layer-admin .layui-layer-title{background-color:#00a65a}.theme-green .layui-layer.layui-layer-admin .layui-layer-btn .layui-layer-btn0{border-color:#00a65a;background-color:#00a65a}.theme-green .more-theme-item:hover,.theme-green .more-theme-item.active{border-color:#00a65a}.theme-green .btn-circle{background:#00a65a}.theme-green .ball-loader>span,.theme-green .signal-loader>span{background-color:#00a65a}.theme-green .text-primary,.theme-green .layui-link{color:#00a65a!important}.theme-green .layui-btn{background-color:#00a65a}.theme-green .layui-form-onswitch{border-color:#00a65a;background-color:#00a65a}.theme-green .layui-form-radio>i:hover,.theme-green .layui-form-radioed>i,.theme-green .layui-form-checked i,.theme-green .layui-form-checked:hover i{color:#00a65a}.theme-green .layui-form-checked[lay-skin=primary] i,.theme-green .layui-form-checked span,.theme-green .layui-form-checked:hover span{border-color:#00a65a!important;background-color:#00a65a}.theme-green .layui-form-checked[lay-skin=primary] i:hover,.theme-green .layui-form-checkbox[lay-skin=primary]:hover i{border-color:#00a65a!important}.theme-green .layui-form-select dl dd.layui-this{background-color:#00a65a}.theme-green .layui-laypage .layui-laypage-curr .layui-laypage-em{background-color:#00a65a}.theme-green .layui-laypage input:focus,.theme-green .layui-laypage select:focus{border-color:#00a65a!important}.theme-green .layui-laypage a:hover{color:#00a65a}.theme-green .layui-tab-brief>.layui-tab-title .layui-this{color:#00a65a}.theme-green .layui-tab-brief>.layui-tab-more li.layui-this:after,.theme-green .layui-tab-brief>.layui-tab-title .layui-this:after{border-color:#00a65a!important}.theme-green .layui-tab.layui-tab-vertical>.layui-tab-title>li.layui-this{border-color:#00a65a;color:#00a65a}.theme-green .layui-breadcrumb a:hover{color:#00a65a!important}.theme-green .layui-laydate-footer span:hover,.theme-green .layui-laydate-header i:hover,.theme-green .layui-laydate-header span:hover{color:#00a65a}.theme-green .layui-laydate .layui-this{background-color:#00a65a!important}.theme-green .layui-laydate-content td.laydate-selected{background-color:rgba(0,166,90,.1)}.theme-green .laydate-selected:hover{background-color:rgba(0,166,90,.1)!important}.theme-green .layui-timeline-axis{color:#00a65a}.theme-green .layui-transfer-active .layui-btn{background-color:#00a65a!important;border-color:#00a65a!important}.theme-green .layui-progress-bar{background-color:#00a65a}.theme-green .layui-slider-bar{background-color:#00a65a!important}.theme-green .layui-slider-wrap-btn{border-color:#00a65a!important}.theme-green .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon{color:#00a65a}.theme-green .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon.layui-icon-ok,.theme-green .layui-elem-quote{border-color:#00a65a}.theme-green .layui-tab.layui-steps>.layui-tab-title>li:before,.theme-green .layui-tab.layui-steps>.layui-tab-title>li.layui-this>.layui-icon.layui-icon-ok{background-color:#00a65a}.theme-green .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li{background-color:#7fd2ac}.theme-green .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this{background-color:#00a65a}.theme-green .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li:after{border-left-color:#7fd2ac!important}.theme-green .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this+li:after{border-left-color:#00a65a!important}.theme-green .ew-cascader-dropdown-list-item.active,.theme-green .ew-cascader-dropdown-list-item.active .ew-icon-right{color:#00a65a}.theme-green div.tagsinput span.tag{background:#00a65a}.theme-green xm-select .xm-body .xm-option .xm-option-icon{border-color:#00a65a!important}.theme-green xm-select .xm-body .xm-option.selected .xm-option-icon,.theme-green xm-select>.xm-body .xm-toolbar .toolbar-tag:hover,.theme-green .ew-xmselect-tree xm-select .xm-body .xm-option.selected .xm-option-content{color:#00a65a!important}.theme-green xm-select .xm-label .xm-label-block,.theme-green xm-select .xm-body .xm-option.hide-icon.selected{background-color:#00a65a!important}.theme-green .city-select a.active{color:#fff!important;background-color:#00a65a!important}.theme-green .city-select a:hover,.theme-green .city-select a:focus{background-color:rgba(0,166,90,.1);color:#00a65a}.theme-green .city-picker-span>.title>span:hover{background-color:rgba(0,166,90,.1)}.theme-green .city-select-tab>a.active{color:#00a65a}.theme-purple .layui-layout-admin .layui-header .layui-logo{color:#fff;box-shadow:none;background-color:transparent}.theme-purple .layui-layout-admin .layui-header{background-color:#722ed1}.theme-purple .layui-layout-admin .layui-header a{color:#fff}.theme-purple .layui-layout-admin .layui-header a:hover{color:#fff}.theme-purple .layui-layout-admin .layui-header .layui-nav-child a{color:#595959}.theme-purple .layui-layout-admin .layui-header .layui-nav .layui-nav-more{border-color:#eee transparent transparent}.theme-purple .layui-layout-admin .layui-header .layui-nav .layui-nav-mored{border-color:transparent transparent #eee}.theme-purple .layui-layout-admin .layui-header .layui-nav .layui-this:after,.theme-purple .layui-layout-admin .layui-header .layui-nav-bar{background-color:#fff}.theme-purple .layui-layout-admin .layui-side{background-color:#222d32}.theme-purple .layui-side .layui-nav .layui-nav-item a{color:#b8c7ce}.theme-purple .layui-nav-tree .layui-nav-child dd.layui-this a,.theme-purple .layui-nav-tree .layui-this>a,.theme-purple .layui-nav-tree .layui-this>a:hover{color:#fff;background-color:#722ed1}.theme-purple .layui-nav-tree>.layui-nav-item>a:before{background-color:#722ed1}.theme-purple .layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child:before{background:#222d32!important}.theme-purple .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li.layui-this:after{background-color:#722ed1;top:38px}.theme-purple .layui-body-header-title{border-left-color:#722ed1}.theme-purple .layui-layer.layui-layer-admin .layui-layer-title{background-color:#722ed1}.theme-purple .layui-layer.layui-layer-admin .layui-layer-btn .layui-layer-btn0{border-color:#722ed1;background-color:#722ed1}.theme-purple .more-theme-item:hover,.theme-purple .more-theme-item.active{border-color:#722ed1}.theme-purple .btn-circle{background:#722ed1}.theme-purple .ball-loader>span,.theme-purple .signal-loader>span{background-color:#722ed1}.theme-purple .text-primary,.theme-purple .layui-link{color:#722ed1!important}.theme-purple .layui-btn{background-color:#722ed1}.theme-purple .layui-form-onswitch{border-color:#722ed1;background-color:#722ed1}.theme-purple .layui-form-radio>i:hover,.theme-purple .layui-form-radioed>i,.theme-purple .layui-form-checked i,.theme-purple .layui-form-checked:hover i{color:#722ed1}.theme-purple .layui-form-checked[lay-skin=primary] i,.theme-purple .layui-form-checked span,.theme-purple .layui-form-checked:hover span{border-color:#722ed1!important;background-color:#722ed1}.theme-purple .layui-form-checked[lay-skin=primary] i:hover,.theme-purple .layui-form-checkbox[lay-skin=primary]:hover i{border-color:#722ed1!important}.theme-purple .layui-form-select dl dd.layui-this{background-color:#722ed1}.theme-purple .layui-laypage .layui-laypage-curr .layui-laypage-em{background-color:#722ed1}.theme-purple .layui-laypage input:focus,.theme-purple .layui-laypage select:focus{border-color:#722ed1!important}.theme-purple .layui-laypage a:hover{color:#722ed1}.theme-purple .layui-tab-brief>.layui-tab-title .layui-this{color:#722ed1}.theme-purple .layui-tab-brief>.layui-tab-more li.layui-this:after,.theme-purple .layui-tab-brief>.layui-tab-title .layui-this:after{border-color:#722ed1!important}.theme-purple .layui-tab.layui-tab-vertical>.layui-tab-title>li.layui-this{border-color:#722ed1;color:#722ed1}.theme-purple .layui-breadcrumb a:hover{color:#722ed1!important}.theme-purple .layui-laydate-footer span:hover,.theme-purple .layui-laydate-header i:hover,.theme-purple .layui-laydate-header span:hover{color:#722ed1}.theme-purple .layui-laydate .layui-this{background-color:#722ed1!important}.theme-purple .layui-laydate-content td.laydate-selected{background-color:rgba(114,46,209,.1)}.theme-purple .laydate-selected:hover{background-color:rgba(114,46,209,.1)!important}.theme-purple .layui-timeline-axis{color:#722ed1}.theme-purple .layui-transfer-active .layui-btn{background-color:#722ed1!important;border-color:#722ed1!important}.theme-purple .layui-progress-bar{background-color:#722ed1}.theme-purple .layui-slider-bar{background-color:#722ed1!important}.theme-purple .layui-slider-wrap-btn{border-color:#722ed1!important}.theme-purple .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon{color:#722ed1}.theme-purple .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon.layui-icon-ok,.theme-purple .layui-elem-quote{border-color:#722ed1}.theme-purple .layui-tab.layui-steps>.layui-tab-title>li:before,.theme-purple .layui-tab.layui-steps>.layui-tab-title>li.layui-this>.layui-icon.layui-icon-ok{background-color:#722ed1}.theme-purple .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li{background-color:#b896e8}.theme-purple .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this{background-color:#722ed1}.theme-purple .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li:after{border-left-color:#b896e8!important}.theme-purple .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this+li:after{border-left-color:#722ed1!important}.theme-purple .ew-cascader-dropdown-list-item.active,.theme-purple .ew-cascader-dropdown-list-item.active .ew-icon-right{color:#722ed1}.theme-purple div.tagsinput span.tag{background:#722ed1}.theme-purple xm-select .xm-body .xm-option .xm-option-icon{border-color:#722ed1!important}.theme-purple xm-select .xm-body .xm-option.selected .xm-option-icon,.theme-purple xm-select>.xm-body .xm-toolbar .toolbar-tag:hover,.theme-purple .ew-xmselect-tree xm-select .xm-body .xm-option.selected .xm-option-content{color:#722ed1!important}.theme-purple xm-select .xm-label .xm-label-block,.theme-purple xm-select .xm-body .xm-option.hide-icon.selected{background-color:#722ed1!important}.theme-purple .city-select a.active{color:#fff!important;background-color:#722ed1!important}.theme-purple .city-select a:hover,.theme-purple .city-select a:focus{background-color:rgba(114,46,209,.1);color:#722ed1}.theme-purple .city-picker-span>.title>span:hover{background-color:rgba(114,46,209,.1)}.theme-purple .city-select-tab>a.active{color:#722ed1}.theme-red .layui-layout-admin .layui-header .layui-logo{color:#fff;box-shadow:none;background-color:transparent}.theme-red .layui-layout-admin .layui-header{background-color:#dd4b39}.theme-red .layui-layout-admin .layui-header a{color:#fff}.theme-red .layui-layout-admin .layui-header a:hover{color:#fff}.theme-red .layui-layout-admin .layui-header .layui-nav-child a{color:#595959}.theme-red .layui-layout-admin .layui-header .layui-nav .layui-nav-more{border-color:#eee transparent transparent}.theme-red .layui-layout-admin .layui-header .layui-nav .layui-nav-mored{border-color:transparent transparent #eee}.theme-red .layui-layout-admin .layui-header .layui-nav .layui-this:after,.theme-red .layui-layout-admin .layui-header .layui-nav-bar{background-color:#fff}.theme-red .layui-layout-admin .layui-side{background-color:#28333e}.theme-red .layui-nav-tree .layui-nav-child dd.layui-this a,.theme-red .layui-nav-tree .layui-this>a,.theme-red .layui-nav-tree .layui-this>a:hover{background-color:#dd4b39}.theme-red .layui-nav-tree>.layui-nav-item>a:before{background-color:#dd4b39}.theme-red .layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child:before{background:#28333e!important}.theme-red .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li.layui-this:after{background-color:#dd4b39;top:38px}.theme-red .layui-body-header-title{border-left-color:#dd4b39}.theme-red .layui-layer.layui-layer-admin .layui-layer-title{background-color:#dd4b39}.theme-red .layui-layer.layui-layer-admin .layui-layer-btn .layui-layer-btn0{border-color:#dd4b39;background-color:#dd4b39}.theme-red .more-theme-item:hover,.theme-red .more-theme-item.active{border-color:#dd4b39}.theme-red .btn-circle{background:#dd4b39}.theme-red .ball-loader>span,.theme-red .signal-loader>span{background-color:#dd4b39}.theme-red .text-primary,.theme-red .layui-link{color:#dd4b39!important}.theme-red .layui-btn{background-color:#dd4b39}.theme-red .layui-form-onswitch{border-color:#dd4b39;background-color:#dd4b39}.theme-red .layui-form-radio>i:hover,.theme-red .layui-form-radioed>i,.theme-red .layui-form-checked i,.theme-red .layui-form-checked:hover i{color:#dd4b39}.theme-red .layui-form-checked[lay-skin=primary] i,.theme-red .layui-form-checked span,.theme-red .layui-form-checked:hover span{border-color:#dd4b39!important;background-color:#dd4b39}.theme-red .layui-form-checked[lay-skin=primary] i:hover,.theme-red .layui-form-checkbox[lay-skin=primary]:hover i{border-color:#dd4b39!important}.theme-red .layui-form-select dl dd.layui-this{background-color:#dd4b39}.theme-red .layui-laypage .layui-laypage-curr .layui-laypage-em{background-color:#dd4b39}.theme-red .layui-laypage input:focus,.theme-red .layui-laypage select:focus{border-color:#dd4b39!important}.theme-red .layui-laypage a:hover{color:#dd4b39}.theme-red .layui-tab-brief>.layui-tab-title .layui-this{color:#dd4b39}.theme-red .layui-tab-brief>.layui-tab-more li.layui-this:after,.theme-red .layui-tab-brief>.layui-tab-title .layui-this:after{border-color:#dd4b39!important}.theme-red .layui-tab.layui-tab-vertical>.layui-tab-title>li.layui-this{border-color:#dd4b39;color:#dd4b39}.theme-red .layui-breadcrumb a:hover{color:#dd4b39!important}.theme-red .layui-laydate-footer span:hover,.theme-red .layui-laydate-header i:hover,.theme-red .layui-laydate-header span:hover{color:#dd4b39}.theme-red .layui-laydate .layui-this{background-color:#dd4b39!important}.theme-red .layui-laydate-content td.laydate-selected{background-color:rgba(221,75,57,.1)}.theme-red .laydate-selected:hover{background-color:rgba(221,75,57,.1)!important}.theme-red .layui-timeline-axis{color:#dd4b39}.theme-red .layui-transfer-active .layui-btn{background-color:#dd4b39!important;border-color:#dd4b39!important}.theme-red .layui-progress-bar{background-color:#dd4b39}.theme-red .layui-slider-bar{background-color:#dd4b39!important}.theme-red .layui-slider-wrap-btn{border-color:#dd4b39!important}.theme-red .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon{color:#dd4b39}.theme-red .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon.layui-icon-ok,.theme-red .layui-elem-quote{border-color:#dd4b39}.theme-red .layui-tab.layui-steps>.layui-tab-title>li:before,.theme-red .layui-tab.layui-steps>.layui-tab-title>li.layui-this>.layui-icon.layui-icon-ok{background-color:#dd4b39}.theme-red .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li{background-color:#eea39a}.theme-red .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this{background-color:#dd4b39}.theme-red .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li:after{border-left-color:#eea39a!important}.theme-red .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this+li:after{border-left-color:#dd4b39!important}.theme-red .ew-cascader-dropdown-list-item.active,.theme-red .ew-cascader-dropdown-list-item.active .ew-icon-right{color:#dd4b39}.theme-red div.tagsinput span.tag{background:#dd4b39}.theme-red xm-select .xm-body .xm-option .xm-option-icon{border-color:#dd4b39!important}.theme-red xm-select .xm-body .xm-option.selected .xm-option-icon,.theme-red xm-select>.xm-body .xm-toolbar .toolbar-tag:hover,.theme-red .ew-xmselect-tree xm-select .xm-body .xm-option.selected .xm-option-content{color:#dd4b39!important}.theme-red xm-select .xm-label .xm-label-block,.theme-red xm-select .xm-body .xm-option.hide-icon.selected{background-color:#dd4b39!important}.theme-red .city-select a.active{color:#fff!important;background-color:#dd4b39!important}.theme-red .city-select a:hover,.theme-red .city-select a:focus{background-color:rgba(221,75,57,.1);color:#dd4b39}.theme-red .city-picker-span>.title>span:hover{background-color:rgba(221,75,57,.1)}.theme-red .city-select-tab>a.active{color:#dd4b39}.theme-cyan .layui-layout-admin .layui-header .layui-logo{background-color:#001529}.theme-cyan .layui-layout-admin .layui-header .layui-nav .layui-this:after,.theme-cyan .layui-layout-admin .layui-header .layui-nav-bar{background-color:#001529}.theme-cyan .layui-layout-admin .layui-side{background-color:#001529}.theme-cyan .layui-nav-tree .layui-nav-child dd.layui-this a,.theme-cyan .layui-nav-tree .layui-this>a,.theme-cyan .layui-nav-tree .layui-this>a:hover{background-color:#1890ff}.theme-cyan .layui-nav-tree>.layui-nav-item>a:before{background-color:#1890ff}.theme-cyan .layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child:before{background:#001529!important}.theme-cyan .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li.layui-this:after{background-color:#001529}.theme-cyan .layui-body-header-title{border-left-color:#1890ff}.theme-cyan .layui-layer.layui-layer-admin{border-radius:4px}.theme-cyan .layui-layer.layui-layer-admin .layui-layer-title{color:#333;font-size:16px;padding-left:23px;background-color:#fff;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom:1px solid #f1f1f1}.theme-cyan .layui-layer.layui-layer-admin .layui-layer-setwin a{color:#8c8c8c;font-weight:600}.theme-cyan .layui-layer.layui-layer-admin .layui-layer-setwin .layui-layer-min cite{background-color:#8c8c8c}.theme-cyan .layui-layer.layui-layer-admin .layui-layer-btn a{height:32px;line-height:32px;border-radius:4px;box-shadow:0 1px 0 rgba(0,0,0,.03)}.theme-cyan .layui-layer.layui-layer-admin .layui-layer-btn .layui-layer-btn0{border-color:#1890ff;background-color:#1890ff}.theme-cyan .more-theme-item:hover,.theme-cyan .more-theme-item.active{border-color:#1890ff}.theme-cyan .btn-circle{background:#1890ff}.theme-cyan .ball-loader>span,.theme-cyan .signal-loader>span{background-color:#1890ff}.theme-cyan .text-primary,.theme-cyan .layui-link{color:#1890ff!important}.theme-cyan .layui-btn{height:36px;line-height:36px;border-radius:4px;background-color:#1890ff;box-shadow:0 1px 0 rgba(0,0,0,.03)}.theme-cyan .layui-btn-lg{height:42px;line-height:42px}.theme-cyan .layui-btn-sm{height:28px;line-height:28px}.theme-cyan .layui-btn-xs{height:22px;line-height:22px}.theme-cyan .layui-input,.theme-cyan .layui-select,.theme-cyan .layui-textarea,.theme-cyan xm-select{height:36px;border-radius:4px}.theme-cyan .layui-input:focus,.theme-cyan .layui-textarea:focus,.theme-cyan xm-select:hover{border-color:#40a9ff!important}.theme-cyan .layui-form-label,.theme-cyan .layui-form-mid{padding-top:8px;padding-bottom:8px}.theme-cyan .layui-input-block{min-height:36px}.theme-cyan .layui-form-radio{margin-top:4px}.theme-cyan .layui-form-onswitch{border-color:#1890ff;background-color:#1890ff}.theme-cyan .layui-form-radio>i:hover,.theme-cyan .layui-form-radioed>i,.theme-cyan .layui-form-checked i,.theme-cyan .layui-form-checked:hover i{color:#1890ff}.theme-cyan .layui-form-checked[lay-skin=primary] i,.theme-cyan .layui-form-checked span,.theme-cyan .layui-form-checked:hover span{border-color:#1890ff!important;background-color:#1890ff}.theme-cyan .layui-form-checked[lay-skin=primary] i:hover,.theme-cyan .layui-form-checkbox[lay-skin=primary]:hover i{border-color:#1890ff!important}.theme-cyan .layui-form-select dl dd.layui-this{background-color:#1890ff}.theme-cyan .layui-laypage .layui-laypage-curr .layui-laypage-em{background-color:#1890ff}.theme-cyan .layui-laypage input:focus,.theme-cyan .layui-laypage select:focus{border-color:#1890ff!important}.theme-cyan .layui-laypage a:hover{color:#1890ff}.theme-cyan .layui-tab-brief>.layui-tab-title .layui-this{color:#1890ff}.theme-cyan .layui-tab-brief>.layui-tab-more li.layui-this:after,.theme-cyan .layui-tab-brief>.layui-tab-title .layui-this:after{border-color:#1890ff!important}.theme-cyan .layui-tab.layui-tab-vertical>.layui-tab-title>li.layui-this{border-color:#2d8cf0;color:#2d8cf0}.theme-cyan .layui-breadcrumb a:hover{color:#1890ff!important}.theme-cyan .layui-laydate-footer span:hover,.theme-cyan .layui-laydate-header i:hover,.theme-cyan .layui-laydate-header span:hover{color:#1890ff}.theme-cyan .layui-laydate .layui-this{background-color:#1890ff!important}.theme-cyan .layui-laydate-content td.laydate-selected{background-color:rgba(24,144,255,.1)}.theme-cyan .laydate-selected:hover{background-color:rgba(24,144,255,.1)!important}.theme-cyan .layui-timeline-axis{color:#1890ff}.theme-cyan .layui-transfer-active .layui-btn{background-color:#1890ff!important;border-color:#1890ff!important}.theme-cyan .layui-progress-bar{background-color:#1890ff}.theme-cyan .layui-slider-bar{background-color:#1890ff!important}.theme-cyan .layui-slider-wrap-btn{border-color:#1890ff!important}.theme-cyan .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon{color:#1890ff}.theme-cyan .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon.layui-icon-ok,.theme-cyan .layui-elem-quote{border-color:#1890ff}.theme-cyan .layui-tab.layui-steps>.layui-tab-title>li:before,.theme-cyan .layui-tab.layui-steps>.layui-tab-title>li.layui-this>.layui-icon.layui-icon-ok{background-color:#1890ff}.theme-cyan .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li{background-color:#89c6ff}.theme-cyan .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this{background-color:#1890ff}.theme-cyan .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li:after{border-left-color:#89c6ff!important}.theme-cyan .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this+li:after{border-left-color:#1890ff!important}.theme-cyan .ew-cascader-dropdown-list-item.active,.theme-cyan .ew-cascader-dropdown-list-item.active .ew-icon-right{color:#1890ff}.theme-cyan div.tagsinput span.tag{background:#1890ff}.theme-cyan xm-select .xm-body .xm-option .xm-option-icon{border-color:#1890ff!important}.theme-cyan xm-select .xm-body .xm-option.selected .xm-option-icon,.theme-cyan xm-select>.xm-body .xm-toolbar .toolbar-tag:hover,.theme-cyan .ew-xmselect-tree xm-select .xm-body .xm-option.selected .xm-option-content{color:#1890ff!important}.theme-cyan xm-select .xm-label .xm-label-block,.theme-cyan xm-select .xm-body .xm-option.hide-icon.selected{background-color:#1890ff!important}.theme-cyan .city-select a.active{color:#fff!important;background-color:#1890ff!important}.theme-cyan .city-select a:hover,.theme-cyan .city-select a:focus{background-color:#f0faff;color:#1890ff}.theme-cyan .city-picker-span>.title>span:hover{background-color:#f0faff}.theme-cyan .city-select-tab>a.active{color:#1890ff}.theme-white .layui-layout-admin .layui-header .layui-logo{color:#262626;background-color:transparent;box-shadow:2px 8px 8px 0 rgba(29,35,41,.05)}.theme-white .layui-layout-admin .layui-header{box-shadow:0 1px 4px rgba(0,21,41,.08)}.theme-white .layui-layout-admin .layui-header .layui-nav .layui-this:after,.theme-white .layui-layout-admin .layui-header .layui-nav-bar{background-color:#2d8cf0}.theme-white .layui-layout-admin .layui-side{background-color:#fff;box-shadow:2px 8px 8px 0 rgba(29,35,41,.05)}.theme-white .layui-side .layui-nav .layui-nav-item a{color:#595959}.theme-white .layui-side .layui-nav .layui-nav-item a:hover{color:#2d8cf0}.theme-white .layui-side .layui-nav-itemed>a,.theme-white .layui-side .layui-nav-tree .layui-nav-title a,.theme-white .layui-side .layui-nav-tree .layui-nav-title a:hover{color:#595959!important}.theme-white .layui-side .layui-nav-itemed>a:hover{color:#2d8cf0!important}.theme-white .layui-side .layui-nav-tree .layui-nav-child dd.layui-this a,.theme-white .layui-side .layui-nav-tree .layui-this>a,.theme-white .layui-side .layui-nav-tree .layui-this>a:hover{color:#2d8cf0;background:#f0faff;border-right:2px solid #2d8cf0}.theme-white .layui-side .layui-nav-tree .layui-nav-item .layui-nav-child{background-color:transparent!important}.theme-white .layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child:before{background:#fff!important}@media screen and (min-width:769px){.theme-white .layui-layout-admin.admin-nav-mini .layui-side .layui-nav li.layui-nav-itemed>a{background:#f0faff;color:#2d8cf0!important}}.theme-white .layui-nav-tree>.layui-nav-item>a:before{display:none}.theme-white .layui-side .layui-nav .layui-nav-more{border-color:rgba(89,89,89,.7) transparent transparent}.theme-white .layui-side .layui-nav .layui-nav-mored,.theme-white .layui-side .layui-nav-itemed>a .layui-nav-more{border-color:transparent transparent rgba(89,89,89,.7)}.theme-white .layui-side .layui-nav-tree.arrow3 .layui-nav-itemed>a>.layui-nav-more:before{background-color:rgba(89,89,89,.7)}@media screen and (min-width:769px){.theme-white .layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child>dd>a .layui-nav-more{border-color:transparent transparent transparent rgba(89,89,89,.7)}}.theme-white .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title{top:8px;right:8px;height:32px;line-height:32px;box-sizing:border-box;background-color:transparent;box-shadow:-4px 4px 0 #f5f7f9;padding-right:70px}.theme-white .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li{border:0;margin-right:6px;border-radius:4px;background-color:#fff;line-height:32px;height:32px}.theme-white .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li.layui-this{color:#2d8cf0;background-color:#fff}.theme-white .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li:hover{background-color:#fff}.theme-white .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li.layui-this:after{display:none}.theme-white .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li .layui-tab-close,.theme-white .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li .layui-tab-close:hover{top:8px;color:#8c8c8c;background-color:transparent}.theme-white .layui-layout-admin .layui-body .admin-tabs-control,.theme-white .layui-layout-admin .layui-body .admin-tabs-control:hover{top:8px;height:32px;line-height:32px;background-color:#f5f7f9;border:0}.theme-white .layui-layout-admin .layui-body .admin-tabs-control.layui-icon-down{border-radius:4px;background-color:#fff;width:32px;right:8px}.theme-white .admin-tabs-control>.layui-nav .layui-nav-item{line-height:32px}.theme-white .admin-tabs-control>.layui-nav .layui-nav-item>a{height:32px;width:32px;padding:0}.theme-white .admin-tabs-control>.layui-nav .layui-nav-child{top:36px;border:0;border-radius:4px;box-shadow:0 1px 6px rgba(0,0,0,.2)}.theme-white .layui-layout-admin .layui-body .admin-tabs-control.layui-icon-prev:before{content:"\e603"}.theme-white .layui-layout-admin .layui-body .admin-tabs-control.layui-icon-next:before{content:"\e602"}.theme-white .layui-body-header-title{border-left-color:#2d8cf0}.theme-white .layui-body-header{box-shadow:0 1px 4px rgba(0,21,41,.08)}.theme-white .layui-layer.layui-layer-admin{border-radius:4px}.theme-white .layui-layer.layui-layer-admin .layui-layer-title{color:#262626;font-size:16px;padding-left:23px;background-color:#fff;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom:1px solid #f1f1f1}.theme-white .layui-layer.layui-layer-admin .layui-layer-setwin a{color:#8c8c8c;font-weight:600}.theme-white .layui-layer.layui-layer-admin .layui-layer-setwin .layui-layer-min cite{background-color:#8c8c8c}.theme-white .layui-layer.layui-layer-admin .layui-layer-btn a{height:32px;line-height:32px;border-radius:4px;box-shadow:0 1px 0 rgba(0,0,0,.03)}.theme-white .layui-layer.layui-layer-admin .layui-layer-btn .layui-layer-btn0{border-color:#2d8cf0;background-color:#2d8cf0}.theme-white .more-theme-item:hover,.theme-white .more-theme-item.active{border-color:#2d8cf0}.theme-white .btn-circle{background:#2d8cf0}.theme-white .ball-loader>span,.theme-white .signal-loader>span{background-color:#2d8cf0}.theme-white .text-primary,.theme-white .layui-link{color:#2d8cf0!important}.theme-white .layui-card{border-radius:4px;box-shadow:none}.theme-white .layui-btn{height:36px;line-height:36px;border-radius:4px;background-color:#2d8cf0;box-shadow:0 1px 0 rgba(0,0,0,.03)}.theme-white .layui-btn-lg{height:42px;line-height:42px}.theme-white .layui-btn-sm{height:28px;line-height:28px}.theme-white .layui-btn-xs{height:22px;line-height:22px}.theme-white .layui-input,.theme-white .layui-select,.theme-white .layui-textarea,.theme-white xm-select{height:36px;border-radius:4px}.theme-white .layui-input:focus,.theme-white .layui-textarea:focus,.theme-white xm-select:hover{border-color:#2d8cf0!important}.theme-white .layui-form-label,.theme-white .layui-form-mid{padding-top:8px;padding-bottom:8px}.theme-white .layui-input-block{min-height:36px}.theme-white .layui-form-radio{margin-top:4px}.theme-white .layui-form-onswitch{border-color:#2d8cf0;background-color:#2d8cf0}.theme-white .layui-form-radio>i:hover,.theme-white .layui-form-radioed>i,.theme-white .layui-form-checked i,.theme-white .layui-form-checked:hover i{color:#2d8cf0}.theme-white .layui-form-checked[lay-skin=primary] i,.theme-white .layui-form-checked span,.theme-white .layui-form-checked:hover span{border-color:#2d8cf0!important;background-color:#2d8cf0}.theme-white .layui-form-checked[lay-skin=primary] i:hover,.theme-white .layui-form-checkbox[lay-skin=primary]:hover i{border-color:#2d8cf0!important}.theme-white .layui-form-select dl dd.layui-this{background-color:#2d8cf0}.theme-white .layui-laypage .layui-laypage-curr .layui-laypage-em{background-color:#2d8cf0}.theme-white .layui-laypage input:focus,.theme-white .layui-laypage select:focus{border-color:#2d8cf0!important}.theme-white .layui-laypage a:hover{color:#2d8cf0}.theme-white .layui-tab-brief>.layui-tab-title .layui-this{color:#2d8cf0}.theme-white .layui-tab-brief>.layui-tab-more li.layui-this:after,.theme-white .layui-tab-brief>.layui-tab-title .layui-this:after{border-color:#2d8cf0!important}.theme-white .layui-tab.layui-tab-vertical>.layui-tab-title>li.layui-this{border-color:#2d8cf0;color:#2d8cf0}.theme-white .layui-breadcrumb a:hover{color:#2d8cf0!important}.theme-white .layui-laydate-footer span:hover,.theme-white .layui-laydate-header i:hover,.theme-white .layui-laydate-header span:hover{color:#2d8cf0}.theme-white .layui-laydate .layui-this{background-color:#2d8cf0!important}.theme-white .layui-laydate-content td.laydate-selected{background-color:rgba(45,140,240,.1)}.theme-white .laydate-selected:hover{background-color:rgba(45,140,240,.1)!important}.theme-white .layui-timeline-axis{color:#2d8cf0}.theme-white .layui-transfer-active .layui-btn{background-color:#2d8cf0!important;border-color:#2d8cf0!important}.theme-white .layui-progress-bar{background-color:#2d8cf0}.theme-white .layui-slider-bar{background-color:#2d8cf0!important}.theme-white .layui-slider-wrap-btn{border-color:#2d8cf0!important}.theme-white .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon{color:#2d8cf0}.theme-white .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon.layui-icon-ok,.theme-white .layui-elem-quote{border-color:#2d8cf0}.theme-white .layui-tab.layui-steps>.layui-tab-title>li:before,.theme-white .layui-tab.layui-steps>.layui-tab-title>li.layui-this>.layui-icon.layui-icon-ok{background-color:#2d8cf0}.theme-white .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li{background-color:#95c5f7}.theme-white .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this{background-color:#2d8cf0}.theme-white .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li:after{border-left-color:#95c5f7!important}.theme-white .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this+li:after{border-left-color:#2d8cf0!important}.theme-white .ew-cascader-dropdown-list-item.active,.theme-white .ew-cascader-dropdown-list-item.active .ew-icon-right{color:#2d8cf0}.theme-white div.tagsinput span.tag{background:#2d8cf0}.theme-white xm-select .xm-body .xm-option .xm-option-icon{border-color:#2d8cf0!important}.theme-white xm-select .xm-body .xm-option.selected .xm-option-icon,.theme-white xm-select>.xm-body .xm-toolbar .toolbar-tag:hover,.theme-white .ew-xmselect-tree xm-select .xm-body .xm-option.selected .xm-option-content{color:#2d8cf0!important}.theme-white xm-select .xm-label .xm-label-block,.theme-white xm-select .xm-body .xm-option.hide-icon.selected{background-color:#2d8cf0!important}.theme-white .city-select a.active{color:#fff!important;background-color:#2d8cf0!important}.theme-white .city-select a:hover,.theme-white .city-select a:focus{background-color:#f0faff;color:#2d8cf0}.theme-white .city-picker-span>.title>span:hover{background-color:#f0faff}.theme-white .city-select-tab>a.active{color:#2d8cf0}.theme-pink .layui-layout-admin .layui-header .layui-logo{color:#262626;background-color:transparent;box-shadow:2px 8px 8px 0 rgba(29,35,41,.05)}.theme-pink .layui-layout-admin .layui-header{box-shadow:0 1px 4px rgba(0,21,41,.08)}.theme-pink .layui-layout-admin .layui-header .layui-nav .layui-this:after,.theme-pink .layui-layout-admin .layui-header .layui-nav-bar{background-color:#fb7299}.theme-pink .layui-layout-admin .layui-side{background-color:#fff;box-shadow:2px 8px 8px 0 rgba(29,35,41,.05)}.theme-pink .layui-side .layui-nav .layui-nav-item a{color:#595959}.theme-pink .layui-side .layui-nav .layui-nav-item a:hover{color:#fb7299}.theme-pink .layui-side .layui-nav-itemed>a,.theme-pink .layui-side .layui-nav-tree .layui-nav-title a,.theme-pink .layui-side .layui-nav-tree .layui-nav-title a:hover{color:#595959!important}.theme-pink .layui-side .layui-nav-itemed>a:hover{color:#fb7299!important}.theme-pink .layui-side .layui-nav-tree .layui-nav-child dd.layui-this a,.theme-pink .layui-side .layui-nav-tree .layui-this>a,.theme-pink .layui-side .layui-nav-tree .layui-this>a:hover{color:#fb7299;background:#fff7f9;border-right:2px solid #fb7299}.theme-pink .layui-side .layui-nav-tree .layui-nav-item .layui-nav-child{background-color:transparent!important}.theme-pink .layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child:before{background:#fff!important}@media screen and (min-width:769px){.theme-pink .layui-layout-admin.admin-nav-mini .layui-side .layui-nav li.layui-nav-itemed>a{background:#fff1f5;color:#fb7299!important}}.theme-pink .layui-nav-tree>.layui-nav-item>a:before{display:none}.theme-pink .layui-side .layui-nav .layui-nav-more{border-color:rgba(89,89,89,.7) transparent transparent}.theme-pink .layui-side .layui-nav .layui-nav-mored,.theme-pink .layui-side .layui-nav-itemed>a .layui-nav-more{border-color:transparent transparent rgba(89,89,89,.7)}.theme-pink .layui-side .layui-nav-tree.arrow3 .layui-nav-itemed>a>.layui-nav-more:before{background-color:rgba(89,89,89,.7)}@media screen and (min-width:769px){.theme-pink .layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child>dd>a .layui-nav-more{border-color:transparent transparent transparent rgba(89,89,89,.7)}}.theme-pink .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title{top:8px;right:8px;height:32px;line-height:32px;box-sizing:border-box;background-color:transparent;box-shadow:-4px 4px 0 #f5f7f9;padding-right:70px}.theme-pink .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li{border:0;margin-right:6px;border-radius:4px;background-color:#fff;line-height:32px;height:32px}.theme-pink .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li.layui-this{color:#fb7299;background-color:#fff}.theme-pink .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li:hover{background-color:#fff}.theme-pink .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li.layui-this:after{display:none}.theme-pink .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li .layui-tab-close,.theme-pink .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li .layui-tab-close:hover{top:8px;color:#8c8c8c;background-color:transparent}.theme-pink .layui-layout-admin .layui-body .admin-tabs-control,.theme-pink .layui-layout-admin .layui-body .admin-tabs-control:hover{top:8px;height:32px;line-height:32px;background-color:#f5f7f9;border:0}.theme-pink .layui-layout-admin .layui-body .admin-tabs-control.layui-icon-down{border-radius:4px;background-color:#fff;width:32px;right:8px}.theme-pink .admin-tabs-control>.layui-nav .layui-nav-item{line-height:32px}.theme-pink .admin-tabs-control>.layui-nav .layui-nav-item>a{height:32px;width:32px;padding:0}.theme-pink .admin-tabs-control>.layui-nav .layui-nav-child{top:36px;border:0;border-radius:4px;box-shadow:0 1px 6px rgba(0,0,0,.2)}.theme-pink .layui-layout-admin .layui-body .admin-tabs-control.layui-icon-prev:before{content:"\e603"}.theme-pink .layui-layout-admin .layui-body .admin-tabs-control.layui-icon-next:before{content:"\e602"}.theme-pink .layui-body-header-title{border-left-color:#fb7299}.theme-pink .layui-body-header{box-shadow:0 1px 4px rgba(0,21,41,.08)}.theme-pink .layui-layer.layui-layer-admin{border-radius:4px}.theme-pink .layui-layer.layui-layer-admin .layui-layer-title{color:#262626;font-size:16px;padding-left:23px;background-color:#fff;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom:1px solid #f1f1f1}.theme-pink .layui-layer.layui-layer-admin .layui-layer-setwin a{color:#8c8c8c;font-weight:600}.theme-pink .layui-layer.layui-layer-admin .layui-layer-setwin .layui-layer-min cite{background-color:#8c8c8c}.theme-pink .layui-layer.layui-layer-admin .layui-layer-btn a{height:32px;line-height:32px;border-radius:4px;box-shadow:0 1px 0 rgba(0,0,0,.03)}.theme-pink .layui-layer.layui-layer-admin .layui-layer-btn .layui-layer-btn0{border-color:#fb7299;background-color:#fb7299}.theme-pink .more-theme-item:hover,.theme-pink .more-theme-item.active{border-color:#fb7299}.theme-pink .btn-circle{background:#fb7299}.theme-pink .ball-loader>span,.theme-pink .signal-loader>span{background-color:#fb7299}.theme-pink .text-primary,.theme-pink .layui-link{color:#fb7299!important}.theme-pink .layui-card{border-radius:4px;box-shadow:none}.theme-pink .layui-btn{height:36px;line-height:36px;border-radius:4px;background-color:#fb7299;box-shadow:0 1px 0 rgba(0,0,0,.03)}.theme-pink .layui-btn-lg{height:42px;line-height:42px}.theme-pink .layui-btn-sm{height:28px;line-height:28px}.theme-pink .layui-btn-xs{height:22px;line-height:22px}.theme-pink .layui-input,.theme-pink .layui-select,.theme-pink .layui-textarea,.theme-pink xm-select{height:36px;border-radius:4px}.theme-pink .layui-input:focus,.theme-pink .layui-textarea:focus,.theme-pink xm-select:hover{border-color:#fb7299!important}.theme-pink .layui-form-label,.theme-pink .layui-form-mid{padding-top:8px;padding-bottom:8px}.theme-pink .layui-input-block{min-height:36px}.theme-pink .layui-form-radio{margin-top:4px}.theme-pink .layui-form-onswitch{border-color:#fb7299;background-color:#fb7299}.theme-pink .layui-form-radio>i:hover,.theme-pink .layui-form-radioed>i,.theme-pink .layui-form-checked i,.theme-pink .layui-form-checked:hover i{color:#fb7299}.theme-pink .layui-form-checked[lay-skin=primary] i,.theme-pink .layui-form-checked span,.theme-pink .layui-form-checked:hover span{border-color:#fb7299!important;background-color:#fb7299}.theme-pink .layui-form-checked[lay-skin=primary] i:hover,.theme-pink .layui-form-checkbox[lay-skin=primary]:hover i{border-color:#fb7299!important}.theme-pink .layui-form-select dl dd.layui-this{background-color:#fb7299}.theme-pink .layui-laypage .layui-laypage-curr .layui-laypage-em{background-color:#fb7299}.theme-pink .layui-laypage input:focus,.theme-pink .layui-laypage select:focus{border-color:#fb7299!important}.theme-pink .layui-laypage a:hover{color:#fb7299}.theme-pink .layui-tab-brief>.layui-tab-title .layui-this{color:#fb7299}.theme-pink .layui-tab-brief>.layui-tab-more li.layui-this:after,.theme-pink .layui-tab-brief>.layui-tab-title .layui-this:after{border-color:#fb7299!important}.theme-pink .layui-tab.layui-tab-vertical>.layui-tab-title>li.layui-this{border-color:#fb7299;color:#fb7299}.theme-pink .layui-breadcrumb a:hover{color:#fb7299!important}.theme-pink .layui-laydate-footer span:hover,.theme-pink .layui-laydate-header i:hover,.theme-pink .layui-laydate-header span:hover{color:#fb7299}.theme-pink .layui-laydate .layui-this{background-color:#fb7299!important}.theme-pink .layui-laydate-content td.laydate-selected{background-color:#fff1f5}.theme-pink .laydate-selected:hover{background-color:#fff1f5!important}.theme-pink .layui-timeline-axis{color:#fb7299}.theme-pink .layui-transfer-active .layui-btn{background-color:#fb7299!important;border-color:#fb7299!important}.theme-pink .layui-progress-bar{background-color:#fb7299}.theme-pink .layui-slider-bar{background-color:#fb7299!important}.theme-pink .layui-slider-wrap-btn{border-color:#fb7299!important}.theme-pink .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon{color:#fb7299}.theme-pink .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon.layui-icon-ok,.theme-pink .layui-elem-quote{border-color:#fb7299}.theme-pink .layui-tab.layui-steps>.layui-tab-title>li:before,.theme-pink .layui-tab.layui-steps>.layui-tab-title>li.layui-this>.layui-icon.layui-icon-ok{background-color:#fb7299}.theme-pink .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li{background-color:#fdb8cc}.theme-pink .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this{background-color:#fb7299}.theme-pink .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li:after{border-left-color:#fdb8cc!important}.theme-pink .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this+li:after{border-left-color:#fb7299!important}.theme-pink .ew-cascader-dropdown-list-item.active,.theme-pink .ew-cascader-dropdown-list-item.active .ew-icon-right{color:#fb7299}.theme-pink div.tagsinput span.tag{background:#fb7299}.theme-pink xm-select .xm-body .xm-option .xm-option-icon{border-color:#fb7299!important}.theme-pink xm-select .xm-body .xm-option.selected .xm-option-icon,.theme-pink xm-select>.xm-body .xm-toolbar .toolbar-tag:hover,.theme-pink .ew-xmselect-tree xm-select .xm-body .xm-option.selected .xm-option-content{color:#fb7299!important}.theme-pink xm-select .xm-label .xm-label-block,.theme-pink xm-select .xm-body .xm-option.hide-icon.selected{background-color:#fb7299!important}.theme-pink .city-select a.active{color:#fff!important;background-color:#fb7299!important}.theme-pink .city-select a:hover,.theme-pink .city-select a:focus{background-color:#fff1f5;color:#fb7299}.theme-pink .city-picker-span>.title>span:hover{background-color:#fff1f5}.theme-pink .city-select-tab>a.active{color:#fb7299}.theme-colorful .layui-layout-admin .layui-header .layui-logo{color:#262626;background-color:transparent;box-shadow:2px 8px 8px 0 rgba(29,35,41,.05)}.theme-colorful .layui-layout-admin .layui-header{box-shadow:0 1px 4px rgba(0,21,41,.08)}.theme-colorful .layui-layout-admin .layui-header .layui-nav .layui-this:after,.theme-colorful .layui-layout-admin .layui-header .layui-nav-bar{background-color:#2d8cf0}.theme-colorful .layui-layout-admin .layui-side{background-color:#fff;box-shadow:2px 8px 8px 0 rgba(29,35,41,.05)}.theme-colorful .layui-side .layui-nav .layui-nav-item a{color:#595959}.theme-colorful .layui-side .layui-nav .layui-nav-item a:hover{color:#2d8cf0}.theme-colorful .layui-side .layui-nav-itemed>a,.theme-colorful .layui-side .layui-nav-tree .layui-nav-title a,.theme-colorful .layui-side .layui-nav-tree .layui-nav-title a:hover{color:#595959!important}.theme-colorful .layui-side .layui-nav-itemed>a:hover{color:#2d8cf0!important}.theme-colorful .layui-side .layui-nav-tree .layui-nav-child dd.layui-this a,.theme-colorful .layui-side .layui-nav-tree .layui-this>a,.theme-colorful .layui-side .layui-nav-tree .layui-this>a:hover{color:#2d8cf0;background:#f0faff;border-right:2px solid #2d8cf0}.theme-colorful .layui-side .layui-nav-tree .layui-nav-item .layui-nav-child{background-color:transparent!important}.theme-colorful .layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child:before{background:#fff!important}@media screen and (min-width:769px){.theme-colorful .layui-layout-admin.admin-nav-mini .layui-side .layui-nav li.layui-nav-itemed>a{background:#f0faff;color:#2d8cf0!important}}.theme-colorful .layui-nav-tree>.layui-nav-item>a:before{display:none}.theme-colorful .layui-side .layui-nav .layui-nav-more{border-color:rgba(89,89,89,.7) transparent transparent}.theme-colorful .layui-side .layui-nav .layui-nav-mored,.theme-colorful .layui-side .layui-nav-itemed>a .layui-nav-more{border-color:transparent transparent rgba(89,89,89,.7)}.theme-colorful .layui-side .layui-nav-tree.arrow3 .layui-nav-itemed>a>.layui-nav-more:before{background-color:rgba(89,89,89,.7)}@media screen and (min-width:769px){.theme-colorful .layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child>dd>a .layui-nav-more{border-color:transparent transparent transparent rgba(89,89,89,.7)}}.theme-colorful .layui-side .layui-nav .layui-nav-item a cite{vertical-align:middle}.theme-colorful .layui-side .layui-nav-item>a>.layui-icon{color:#fff;width:28px;height:28px;font-size:12px!important;line-height:28px;text-align:center;border-radius:50%;display:inline-block;vertical-align:middle;background-color:#61b2fc}.theme-colorful .layui-side .layui-nav-item:nth-child(even)>a>.layui-icon{background-color:#7dd733}.theme-colorful .layui-side .layui-nav-item:nth-child(3)>a>.layui-icon{background-color:#32a2d4}.theme-colorful .layui-side .layui-nav-item:nth-child(4)>a>.layui-icon{background-color:#2bccce}.theme-colorful .layui-side .layui-nav-item:nth-child(5)>a>.layui-icon{background-color:#7383cf}@media screen and (min-width:768px){.theme-colorful .admin-nav-mini .layui-side .layui-nav-item>a{padding-left:16px}}.theme-colorful .layui-layout-admin .layui-side .layui-nav .layui-nav-item .layui-nav-child a{padding-left:63px}.theme-colorful .layui-layout-admin .layui-side .layui-nav .layui-nav-item .layui-nav-child .layui-nav-child a{padding-left:83px}.theme-colorful .layui-layout-admin .layui-side .layui-nav .layui-nav-item .layui-nav-child .layui-nav-child .layui-nav-child a{padding-left:103px}.theme-colorful .layui-layout-admin .layui-side .layui-nav .layui-nav-item .layui-nav-child .layui-nav-child .layui-nav-child .layui-nav-child a{padding-left:123px}.theme-colorful .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title{top:8px;right:8px;height:32px;line-height:32px;box-sizing:border-box;background-color:transparent;box-shadow:-4px 4px 0 #f5f7f9;padding-right:70px}.theme-colorful .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li{border:0;margin-right:6px;border-radius:4px;background-color:#fff;line-height:32px;height:32px}.theme-colorful .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li.layui-this{color:#2d8cf0;background-color:#fff}.theme-colorful .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li:hover{background-color:#fff}.theme-colorful .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li.layui-this:after{display:none}.theme-colorful .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li .layui-tab-close,.theme-colorful .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li .layui-tab-close:hover{top:8px;color:#8c8c8c;background-color:transparent}.theme-colorful .layui-layout-admin .layui-body .admin-tabs-control,.theme-colorful .layui-layout-admin .layui-body .admin-tabs-control:hover{top:8px;height:32px;line-height:32px;background-color:#f5f7f9;border:0}.theme-colorful .layui-layout-admin .layui-body .admin-tabs-control.layui-icon-down{border-radius:4px;background-color:#fff;width:32px;right:8px}.theme-colorful .admin-tabs-control>.layui-nav .layui-nav-item{line-height:32px}.theme-colorful .admin-tabs-control>.layui-nav .layui-nav-item>a{height:32px;width:32px;padding:0}.theme-colorful .admin-tabs-control>.layui-nav .layui-nav-child{top:36px;border:0;border-radius:4px;box-shadow:0 1px 6px rgba(0,0,0,.2)}.theme-colorful .layui-layout-admin .layui-body .admin-tabs-control.layui-icon-prev:before{content:"\e603"}.theme-colorful .layui-layout-admin .layui-body .admin-tabs-control.layui-icon-next:before{content:"\e602"}.theme-colorful .layui-body-header-title{border-left-color:#2d8cf0}.theme-colorful .layui-body-header{box-shadow:0 1px 4px rgba(0,21,41,.08)}.theme-colorful .layui-layer.layui-layer-admin{border-radius:4px}.theme-colorful .layui-layer.layui-layer-admin .layui-layer-title{color:#262626;font-size:16px;padding-left:23px;background-color:#fff;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom:1px solid #f1f1f1}.theme-colorful .layui-layer.layui-layer-admin .layui-layer-setwin a{color:#8c8c8c;font-weight:600}.theme-colorful .layui-layer.layui-layer-admin .layui-layer-setwin .layui-layer-min cite{background-color:#8c8c8c}.theme-colorful .layui-layer.layui-layer-admin .layui-layer-btn a{height:32px;line-height:32px;border-radius:4px;box-shadow:0 1px 0 rgba(0,0,0,.03)}.theme-colorful .layui-layer.layui-layer-admin .layui-layer-btn .layui-layer-btn0{border-color:#2d8cf0;background-color:#2d8cf0}.theme-colorful .more-theme-item:hover,.theme-colorful .more-theme-item.active{border-color:#2d8cf0}.theme-colorful .btn-circle{background:#2d8cf0}.theme-colorful .ball-loader>span,.theme-colorful .signal-loader>span{background-color:#2d8cf0}.theme-colorful .text-primary,.theme-colorful .layui-link{color:#2d8cf0!important}.theme-colorful .layui-card{border-radius:4px;box-shadow:none}.theme-colorful .layui-btn{height:36px;line-height:36px;border-radius:4px;background-color:#2d8cf0;box-shadow:0 1px 0 rgba(0,0,0,.03)}.theme-colorful .layui-btn-lg{height:42px;line-height:42px}.theme-colorful .layui-btn-sm{height:28px;line-height:28px}.theme-colorful .layui-btn-xs{height:22px;line-height:22px}.theme-colorful .layui-input,.theme-colorful .layui-select,.theme-colorful .layui-textarea,.theme-colorful xm-select{height:36px;border-radius:4px}.theme-colorful .layui-input:focus,.theme-colorful .layui-textarea:focus,.theme-colorful xm-select:hover{border-color:#2d8cf0!important}.theme-colorful .layui-form-label,.theme-colorful .layui-form-mid{padding-top:8px;padding-bottom:8px}.theme-colorful .layui-input-block{min-height:36px}.theme-colorful .layui-form-radio{margin-top:4px}.theme-colorful .layui-form-onswitch{border-color:#2d8cf0;background-color:#2d8cf0}.theme-colorful .layui-form-radio>i:hover,.theme-colorful .layui-form-radioed>i,.theme-colorful .layui-form-checked i,.theme-colorful .layui-form-checked:hover i{color:#2d8cf0}.theme-colorful .layui-form-checked[lay-skin=primary] i,.theme-colorful .layui-form-checked span,.theme-colorful .layui-form-checked:hover span{border-color:#2d8cf0!important;background-color:#2d8cf0}.theme-colorful .layui-form-checkbox[lay-skin=primary] i:hover,.theme-colorful .layui-form-checkbox[lay-skin=primary]:hover i{border-color:#2d8cf0}.theme-colorful .layui-form-select dl dd.layui-this{background-color:#2d8cf0}.theme-colorful .layui-laypage .layui-laypage-curr .layui-laypage-em{background-color:#2d8cf0}.theme-colorful .layui-laypage input:focus,.theme-colorful .layui-laypage select:focus{border-color:#2d8cf0!important}.theme-colorful .layui-laypage a:hover{color:#2d8cf0}.theme-colorful .layui-tab-brief>.layui-tab-title .layui-this{color:#2d8cf0}.theme-colorful .layui-tab-brief>.layui-tab-more li.layui-this:after,.theme-colorful .layui-tab-brief>.layui-tab-title .layui-this:after{border-color:#2d8cf0!important}.theme-colorful .layui-tab.layui-tab-vertical>.layui-tab-title>li.layui-this{border-color:#2d8cf0;color:#2d8cf0}.theme-colorful .layui-breadcrumb a:hover{color:#2d8cf0!important}.theme-colorful .layui-laydate-footer span:hover,.theme-colorful .layui-laydate-header i:hover,.theme-colorful .layui-laydate-header span:hover{color:#2d8cf0}.theme-colorful .layui-laydate .layui-this{background-color:#2d8cf0!important}.theme-colorful .layui-laydate-content td.laydate-selected{background-color:rgba(45,140,240,.1)}.theme-colorful .laydate-selected:hover{background-color:rgba(45,140,240,.1)!important}.theme-colorful .layui-timeline-axis{color:#2d8cf0}.theme-colorful .layui-transfer-active .layui-btn{background-color:#2d8cf0!important;border-color:#2d8cf0!important}.theme-colorful .layui-progress-bar{background-color:#2d8cf0}.theme-colorful .layui-slider-bar{background-color:#2d8cf0!important}.theme-colorful .layui-slider-wrap-btn{border-color:#2d8cf0!important}.theme-colorful .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon{color:#2d8cf0}.theme-colorful .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon.layui-icon-ok,.theme-colorful .layui-elem-quote{border-color:#2d8cf0}.theme-colorful .layui-tab.layui-steps>.layui-tab-title>li:before,.theme-colorful .layui-tab.layui-steps>.layui-tab-title>li.layui-this>.layui-icon.layui-icon-ok{background-color:#2d8cf0}.theme-colorful .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li{background-color:#96c6f8}.theme-colorful .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this{background-color:#2d8cf0}.theme-colorful .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li:after{border-left-color:#96c6f8!important}.theme-colorful .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this+li:after{border-left-color:#2d8cf0!important}.theme-colorful .ew-cascader-dropdown-list-item.active,.theme-colorful .ew-cascader-dropdown-list-item.active .ew-icon-right{color:#2d8cf0}.theme-colorful div.tagsinput span.tag{background:#2d8cf0}.theme-colorful xm-select .xm-body .xm-option .xm-option-icon{border-color:#2d8cf0!important}.theme-colorful xm-select .xm-body .xm-option.selected .xm-option-icon,.theme-colorful xm-select>.xm-body .xm-toolbar .toolbar-tag:hover,.theme-colorful .ew-xmselect-tree xm-select .xm-body .xm-option.selected .xm-option-content{color:#2d8cf0!important}.theme-colorful xm-select .xm-label .xm-label-block,.theme-colorful xm-select .xm-body .xm-option.hide-icon.selected{background-color:#2d8cf0!important}.theme-colorful .city-select a.active{color:#fff!important;background-color:#2d8cf0!important}.theme-colorful .city-select a:hover,.theme-colorful .city-select a:focus{background-color:#f0faff;color:#2d8cf0}.theme-colorful .city-picker-span>.title>span:hover{background-color:#f0faff}.theme-colorful .city-select-tab>a.active{color:#2d8cf0}
+
+/** ---------------------------theme-my涓婚start----------------------------------- */
+/* logo */
+.theme-my .layui-layout-admin .layui-header .layui-logo {
+    color: #dddddd;
+    background-color: #191a23;
+
+}
+
+/* header */
+
+
+.theme-my .layui-layout-admin .layui-header {
+    background-color: #191a23;
+}
+
+.theme-my .layui-layout-admin .layui-header a {
+    color: #dddddd;
+}
+
+.theme-my .layui-layout-admin .layui-header a:hover {
+    color: #dddddd;
+}
+
+.theme-my .layui-layout-admin .layui-header .layui-nav-child a {
+    color: #595959;
+}
+
+.theme-my .layui-layout-admin .layui-header .layui-nav .layui-nav-more {
+    border-color: #dddddd transparent transparent;
+}
+
+.theme-my .layui-layout-admin .layui-header .layui-nav .layui-nav-mored {
+    border-color: transparent transparent #dddddd;
+}
+
+.theme-my .layui-layout-admin .layui-header .layui-nav .layui-this:after,
+.theme-my .layui-layout-admin .layui-header .layui-nav-bar {
+    background-color: #191a23;
+}
+
+
+
+/* side */
+.theme-my .layui-layout-admin .layui-side {
+    background-color: #191a23;
+
+}
+
+
+.theme-my .layui-nav-tree .layui-nav-child dd.layui-this a,
+.theme-my .layui-nav-tree .layui-this > a,
+.theme-my .layui-nav-tree .layui-this > a:hover {
+    background-color: #009688;
+}
+
+.theme-my .layui-nav-tree > .layui-nav-item > a:before {
+    background-color: #009688;
+}
+
+
+.theme-my .layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover > .layui-nav-child:before {
+    background: #191a23 !important;
+}
+
+
+
+
+
+/* body tab */
+
+.theme-my .layui-layout-admin .layui-body > .layui-tab > .layui-tab-title {
+    top: 8px;
+    right: 8px;
+    height: 32px;
+    line-height: 32px;
+    box-sizing: border-box;
+    background-color: transparent;
+    box-shadow: -4px 4px 0 #f5f7f9;
+    padding-right: 70px;
+}
+
+.theme-my .layui-layout-admin .layui-body > .layui-tab > .layui-tab-content {
+    top: 40px;
+}
+
+.theme-my .layui-layout-admin .layui-body > .layui-tab > .layui-tab-title li {
+    border: none;
+    margin-right: 6px;
+    border-radius: 4px;
+    background-color: #fff;
+    line-height: 32px;
+    height: 32px;
+}
+
+.theme-my .layui-layout-admin .layui-body > .layui-tab > .layui-tab-title li.layui-this {
+    color: #2d8cf0;
+    background-color: #fff;
+}
+
+.theme-my .layui-layout-admin .layui-body > .layui-tab > .layui-tab-title li:hover {
+    background-color: #fff;
+}
+
+.theme-my .layui-layout-admin .layui-body > .layui-tab > .layui-tab-title li.layui-this:after {
+    display: none;
+}
+
+.theme-my .layui-layout-admin .layui-body > .layui-tab > .layui-tab-title li .layui-tab-close,
+.theme-my .layui-layout-admin .layui-body > .layui-tab > .layui-tab-title li .layui-tab-close:hover {
+    top: 8px;
+    color: #8c8c8c;
+    background-color: transparent;
+}
+
+.theme-my .layui-layout-admin .layui-body .admin-tabs-control,
+.theme-my .layui-layout-admin .layui-body .admin-tabs-control:hover {
+    top: 8px;
+    height: 32px;
+    line-height: 32px;
+    background-color: #f5f7f9;
+    border: none;
+}
+
+.theme-my .layui-layout-admin .layui-body .admin-tabs-control.layui-icon-down {
+    border-radius: 4px;
+    background-color: #fff;
+    width: 32px;
+    right: 8px;
+}
+
+.theme-my .admin-tabs-control > .layui-nav .layui-nav-item {
+    line-height: 32px;
+}
+
+.theme-my .admin-tabs-control > .layui-nav .layui-nav-item > a {
+    height: 32px;
+    width: 32px;
+    padding: 0;
+}
+
+.theme-my .admin-tabs-control > .layui-nav .layui-nav-child {
+    top: 36px;
+    border: none;
+    border-radius: 4px;
+    box-shadow: 0 1px 6px rgba(0, 0, 0, .2);
+}
+
+.theme-my .layui-layout-admin .layui-body .admin-tabs-control.layui-icon-prev:before {
+    content: "\e603";
+}
+
+.theme-my .layui-layout-admin .layui-body .admin-tabs-control.layui-icon-next:before {
+    content: "\e602";
+}
+
+
+/* body title */
+.theme-my .layui-body-header-title {
+    border-left-color: #009688;
+}
+
+
+
+/* admin dialog */
+.theme-my .layui-layer.layui-layer-admin .layui-layer-title {
+    color: #ffffff;
+    background-color: #191a23;
+
+    border-top-left-radius: 4px;
+    border-top-right-radius: 4px;
+
+
+}
+
+
+
+.theme-my .layui-layer.layui-layer-admin .layui-layer-btn .layui-layer-btn0 {
+    border-color: #009688;
+    background-color: #009688;
+}
+
+
+.theme-my .layui-layer.layui-layer-admin .layui-layer-btn a {
+    box-shadow: 0 1px 0 rgba(0, 0, 0, .03);
+}
+
+.theme-my .layui-layer.layui-layer-admin {
+    border-radius: 4px;
+}
+
+
+
+
+/* other */
+.theme-my .more-theme-item:hover,
+.theme-my .more-theme-item.active {
+    border-color: #009688;
+}
+
+.theme-my .btn-circle {
+    background: #009688;
+}
+
+.theme-my .ball-loader > span,
+.theme-my .signal-loader > span {
+    background-color: #009688;
+}
+
+.theme-my .text-primary,
+.theme-my .layui-link {
+    color: #009688 !important;;
+}
+
+
+.theme-my .layui-card {
+    border-radius: 4px;
+    box-shadow: none;
+}
+
+.theme-my .layui-fluid {
+    padding-top: 10px;
+}
+
+
+/* button */
+.theme-my .layui-btn {
+    background-color: #009688;
+
+    box-shadow: 0 1px 0 rgba(0, 0, 0, .03);
+
+}
+
+
+/* input */
+.theme-my .layui-input:focus,
+.theme-my .layui-textarea:focus,
+.theme-my xm-select:hover {
+    border-color: #009688 !important;
+}
+
+
+
+
+
+
+/* switch */
+.theme-my .layui-form-onswitch {
+    border-color: #009688;
+    background-color: #009688;
+}
+
+/* radio */
+.theme-my .layui-form-radio > i:hover,
+.theme-my .layui-form-radioed > i,
+.theme-my .layui-form-checked i,
+.theme-my .layui-form-checked:hover i {
+    color: #009688;
+}
+
+/* checkbox */
+.theme-my .layui-form-checked[lay-skin=primary] i,
+.theme-my .layui-form-checked span,
+.theme-my .layui-form-checked:hover span {
+    border-color: #009688 !important;
+    background-color: #009688;
+}
+
+.theme-my .layui-form-checkbox[lay-skin=primary] i:hover,
+.theme-my .layui-form-checkbox[lay-skin=primary]:hover i {
+    border-color: #009688;
+}
+
+/* select */
+.theme-my .layui-form-select dl dd.layui-this {
+    background-color: #009688;
+}
+
+/* laypage */
+.theme-my .layui-laypage .layui-laypage-curr .layui-laypage-em {
+    background-color: #009688;
+}
+
+.theme-my .layui-laypage input:focus,
+.theme-my select:focus {
+    border-color: #009688 !important;
+}
+
+.theme-my .layui-laypage a:hover {
+    color: #009688;
+}
+
+/* tab */
+.theme-my .layui-tab-brief > .layui-tab-title .layui-this {
+    color: #009688;
+}
+
+.theme-my .layui-tab-brief > .layui-tab-more li.layui-this:after,
+.theme-my .layui-tab-brief > .layui-tab-title .layui-this:after {
+    border-color: #009688 !important;
+}
+
+.theme-my .layui-tab.layui-tab-vertical > .layui-tab-title > li.layui-this {
+    border-color: #009688;
+    color: #009688;
+}
+
+/* breadcrumb */
+.theme-my .layui-breadcrumb a:hover {
+    color: #009688 !important;
+}
+
+/* laydate */
+.theme-my .layui-laydate-footer span:hover,
+.theme-my .layui-laydate-header i:hover,
+.theme-my .layui-laydate-header span:hover {
+    color: #009688;
+}
+
+.theme-my .layui-laydate .layui-this {
+    background-color: #009688 !important;
+}
+
+.theme-my .layui-laydate-content td.laydate-selected {
+    background-color: rgba(0,150,136,.1);
+}
+
+.theme-my .laydate-selected:hover {
+    background-color: rgba(0,150,136,.1) !important;
+}
+
+/* timeline */
+.theme-my .layui-timeline-axis {
+    color: #009688;
+}
+
+/* transfer */
+.theme-my .layui-transfer-active .layui-btn {
+    background-color: #009688 !important;
+    border-color: #009688 !important;
+}
+
+/* progress-bar */
+.theme-my .layui-progress-bar {
+    background-color: #009688;
+}
+
+/* slider */
+.theme-my .layui-slider-bar {
+    background-color: #009688 !important;
+}
+
+.theme-colorful .layui-slider-wrap-btn {
+    border-color: #009688 !important;
+}
+
+/* steps */
+.theme-my .layui-tab.layui-steps > .layui-tab-title > li > .layui-icon {
+    color: #009688;
+}
+
+.theme-my .layui-tab.layui-steps > .layui-tab-title > li > .layui-icon.layui-icon-ok,
+.theme-my .layui-elem-quote {
+    border-color: #009688;
+}
+
+.theme-my .layui-tab.layui-steps > .layui-tab-title > li:before,
+.theme-my .layui-tab.layui-steps > .layui-tab-title > li.layui-this > .layui-icon.layui-icon-ok {
+    background-color: #009688;
+}
+
+.theme-my .layui-tab.layui-steps.layui-steps-simple > .layui-tab-title > li {
+    background-color: rgba(0,150,136,.5);
+}
+
+.theme-my .layui-tab.layui-steps.layui-steps-simple > .layui-tab-title > li.layui-this {
+    background-color: #009688;
+}
+
+.theme-my .layui-tab.layui-steps.layui-steps-simple > .layui-tab-title > li:after {
+    border-left-color: rgba(0,150,136,.5) !important;
+}
+
+.theme-my .layui-tab.layui-steps.layui-steps-simple > .layui-tab-title > li.layui-this + li:after {
+    border-left-color: #009688 !important;
+}
+
+/* xmSelect */
+.theme-my xm-select .xm-body .xm-option .xm-option-icon {
+    border-color: #009688 !important;
+}
+
+.theme-my xm-select .xm-body .xm-option.selected .xm-option-icon,
+.theme-my xm-select > .xm-body .xm-toolbar .toolbar-tag:hover,
+.theme-my .ew-xmselect-tree xm-select .xm-body .xm-option.selected .xm-option-content {
+    color: #009688 !important;
+}
+
+.theme-my xm-select .xm-label .xm-label-block,
+.theme-my xm-select > .xm-body .xm-option.hide-icon.selected {
+    background-color: #009688 !important;
+}
+
+/* tagsinput */
+.theme-my div.tagsinput span.tag {
+    background: #009688;
+}
+
+/* cascader */
+.theme-my .ew-cascader-dropdown-list-item.active,
+.theme-my .ew-cascader-dropdown-list-item.active .ew-icon-right {
+    color: #009688;
+}
+
+/* city-select */
+.theme-my .city-select a.active {
+    color: #fff !important;
+    background-color: #009688 !important;
+}
+
+.theme-my .city-select a:hover,
+.theme-my .city-select a:focus {
+    background-color: rgba(0,150,136,.07);
+    color: #009688;
+}
+
+.theme-my .city-picker-span > .title > span:hover {
+    background-color: rgba(0,150,136,.07);
+}
+
+.theme-my .city-select-tab > a.active {
+    color: #009688;
+}
+
+.theme-my .layui-layer.layui-layer-admin {
+    border-radius: 4px;
+}
+
+.theme-my .layui-btn {
+    border-radius: 4px;
+}
+
+/** ---------------------------theme-my涓婚end----------------------------------- */
diff --git a/src/main/webapp/static/css/common.css b/src/main/webapp/static/css/common.css
index f388ea3..d1a71bc 100644
--- a/src/main/webapp/static/css/common.css
+++ b/src/main/webapp/static/css/common.css
@@ -1,49 +1,225 @@
-/* 缁熶竴澶勭悊 */
-*, *::before, *::after {
-    -webkit-box-sizing: border-box;
-    box-sizing: border-box;
-    margin: 0;
-    padding: 0;
-}
-html {
-    line-height: 1.5;
-    font-size: 15px;
-    font-family: sans-serif;
-    height: 100%;
-}
+/**, *::before, *::after {*/
+/*    -webkit-box-sizing: border-box;*/
+/*    box-sizing: border-box;*/
+/*    margin: 0;*/
+/*    padding: 0;*/
+/*}*/
+
 body {
-    height: 100%;
+    background-color: #fff;
 }
 
-iframe {
+input::placeholder {
+    color: #b4b4b4;
+}
+input::-webkit-input-placeholder { /* WebKit browsers 閫傞厤璋锋瓕 */
+    color: #b4b4b4;
+}
+.layui-input input:-moz-placeholder { /* Mozilla Firefox 4 to 18 閫傞厤鐏嫄 */
+    color: #b4b4b4;
+}
+.layui-input input::-moz-placeholder { /* Mozilla Firefox 19+ 閫傞厤鐏嫄 */
+    color: #b4b4b4;
+}
+.layui-input input:-ms-input-placeholder { /* Internet Explorer 10+  閫傞厤ie*/
+    color: #b4b4b4;
+}
+
+/* layui浼樺寲 */
+.layui-form-label {
+    /*color: #595959;*/
+}
+.layui-input:focus {
+    border-color: #007bff !important;
+}
+/*鎼滅储鏍�*/
+.layui-form.layui-card-header {
+    padding: 20px 0 5px 0;
+    height: auto;
+}
+#search-box {
+    margin-left: 10px;
+    z-index: 999;
+    position: relative;
+    padding: 30px 30px 10px 30px;
+}
+#search-box .layui-inline{
+    margin-bottom: 10px;
+    margin-right: 5px;
+}
+#search-box .layui-input-inline {
+    width: 150px;
+}
+.layui-form-label{
+    font-size: 100%;
+    padding: 13px 0 9px 5px;
+    text-align: right;
+}
+#data-search-btn {
+    display: inline-block;
+    margin: 8px 0 0 10px;
+    justify-content: center;
+    align-items: center;
+}
+#data-search-btn.layui-btn-container .layui-btn{
+    margin-right: 20px;
+}
+
+/*澶村伐鍏锋爮*/
+.layui-table-tool-temp {
+    padding-right: 70px;
+}
+.layui-btn .layui-icon {
+    margin: 1px 5px;
+}
+#btn-add{
+    background: #007DDB
+}
+#btn-delete{
+    background: #ff5722
+}
+#btn-export{
+    float: right;
+}
+
+/*琛ㄦ牸*/
+.layui-table thead th {
+    font-weight: bold;
+    text-align: center;
+}
+div .layui-table-tool .layui-table-tool-self .layui-inline[title='瀵煎嚭']{
+    display: none;
+}
+.layui-form.layui-border-box.layui-table-view{
+    margin: 15px 0 35px 0;
+    width: 100%;
     border-width: 0;
 }
+.layui-table-box{
+    padding-bottom: 10px;
+}
+/*.layui-table-body.layui-table-main{*/
+/*    overflow: hidden;*/
+/*}*/
+.layui-table-page{
+    border-width: 0;
+}
+.layui-table tbody tr:hover, .layui-table thead tr, .layui-table-click, .layui-table-header, .layui-table-hover, .layui-table-mend, .layui-table-patch, .layui-table-tool, .layui-table-total, .layui-table-total tr, .layui-table[lay-even] tr:nth-child(even) {
+    background-color: #f9f9f9;
+}
+.layui-table-tool {
+    /*background-color: #fff;*/
+}
+/* table 锛堟崲琛�/璇︽儏锛夋樉绀烘帶鍒� */
+/*.layui-table-cell {*/
+/*font-size:14px;*/
+/*padding:0 5px;*/
+/*height:auto;*/
+/*overflow:visible;*/
+/*text-overflow:inherit;*/
+/*white-space:normal;*/
+/*word-break: break-all;*/
+/*}*/
+/*.layui-table-grid-down {*/
+/*display: none;*/
+/*}*/
 
-/* 甯冨眬 */
-.row::after, .row::before {
-    content: "";
-    display: table;
-    clear: both;
+/*璇︽儏*/
+#detail .layui-form-label{
+    white-space: nowrap;
+    font-size: 100%;
+    padding: 9px 0 9px 5px;
+    text-align: right;
 }
-.col-md3:empty {
-    background:rgba(0,0,0,0.04);
-    border: 1px solid rgba(0,0,0,.3);
-    min-height:32px;
+#detail {
+    padding: 25px 0;
+    margin: 0 20px 0 30px;
+}
+#detail .layui-inline {
+    margin: 10px 15px 15px 0;
+}
+#detail .layui-input-inline {
+    margin-right: 40px;
+    margin-left: 95px;
+    display: block;
+}
+.layui-bg-gray {
+    margin-top: 40px;
+}
+#prompt {
+    margin-top: 20px;
+    width: 90%;
+    text-indent: 40px;
+    color: #505050;
+}
+#data-detail-btn {
+    padding-top: 25px;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+}
+#data-detail-btn.layui-btn-container .layui-btn{
+    margin-right: 30px;
+}
+.not-null {
+    color:red;
+}
+
+#detail .layui-form-checkbox {
+    top: 10px;
+}
+
+/*鍥剧墖*/
+.cool-img {
+    cursor:pointer;
+    width: 200px;
+    height: 200px;
+}
+
+/*
+    甯冨眬
+ */
+.col:empty{min-height:32px;height: inherit;z-index:1;position:relative;box-sizing: border-box;}
+.col:empty:after{
+    z-index:0;display:flex;align-items: center;justify-content: center;
+    clear: both;content:attr(title);position:absolute;
+    background:rgba(0,0,0,0.04);top:2px;left:2px;right:2px;bottom:2px;
+    text-align:center;color:rgba(0,0,0,0.1); border-radius: inherit;
+}
+.col{
     height: inherit;
-    z-index:1;
 }
-.col-md1,.col-md10,.col-md11,.col-md12,.col-md2,.col-md3,.col-md4,.col-md5,.col-md6,.col-md7,.col-md8,.col-md9{
-    float:left;
+
+/*鏉冮檺*/
+#btn-add {
+    display: none;
 }
-.col-md1{width:8.33333333%}
-.col-md2{width:16.66666667%}
-.col-md3{width:25%}
-.col-md4{width:33.33333333%}
-.col-md5{width:41.66666667%}
-.col-md6{width:50%}
-.col-md7{width:58.33333333%}
-.col-md8{width:66.66666667%}
-.col-md9{width:75%}
-.col-md10{width:83.33333333%}
-.col-md11{width:91.66666667%}
-.col-md12{width:100%}
\ No newline at end of file
+.btn-edit {
+    display: none;
+}
+#btn-delete {
+    display: none;
+}
+#btn-export {
+    display: none;
+}
+#btn-into {
+    display: none;
+}
+
+/*淇敼澶嶉�夋棰滆壊*/
+/*.layui-form-checked[lay-skin=primary] i {*/
+/*border-color: #4c95b8!important;*/
+/*background-color: #4c95b8;*/
+/*color: #fff;*/
+/*}*/
+/*.layui-form-checkbox[lay-skin=primary]:hover i {*/
+/*border-color: #4c95b8;*/
+/*color: #fff;*/
+/*}*/
+
+/* 濯掍綋鏌ヨ 鈥斺�� 鍝嶅簲甯冨眬 */
+/* 鍋氬搷搴斿紡甯冨眬鏃讹紝涓嶅缓璁敤鍥哄畾灏哄锛屽敖閲忕敤% */
+@media only screen and (max-width: 800px) {
+
+}
diff --git a/src/main/webapp/static/css/cool.css b/src/main/webapp/static/css/cool.css
new file mode 100644
index 0000000..b592730
--- /dev/null
+++ b/src/main/webapp/static/css/cool.css
@@ -0,0 +1,48 @@
+/*鑷姩琛ュ叏*/
+.cool-auto-complete .layui-unselect.layui-form-select {
+    display: none;
+}
+
+.cool-auto-complete-div {
+    cursor: pointer;
+}
+
+.cool-auto-complete-window {
+    width: 100%;
+    display: none;
+    position: absolute;
+    line-height: normal;
+    z-index: 999;
+}
+
+.cool-auto-complete-window-input {
+    height: 28px;
+    box-sizing: border-box;
+    border: 1px solid #dedede;
+    width: 100%;
+}
+.cool-auto-complete-window-input:focus {
+    border-color: #007bff !important;
+}
+.cool-auto-complete-window-select {
+    width: 100%;
+    border: 1px solid #dedede;
+    margin: 0;
+    height: 142px;
+
+}
+
+.cool-auto-complete-window-select option:hover {
+    background-color: #f1f1f1;
+}
+
+.cool-auto-complete-window-select option{
+    padding: 3px 2px;
+}
+.cool-auto-complete-window-select option:first-child{
+    color:#aaaaaa;
+}
+
+/*.layui-table-grid-down {*/
+/*    display: none;*/
+/*}*/
diff --git a/src/main/webapp/static/css/loader.css b/src/main/webapp/static/css/loader.css
new file mode 100644
index 0000000..6990738
--- /dev/null
+++ b/src/main/webapp/static/css/loader.css
@@ -0,0 +1,59 @@
+/**鍒濆鍖栧姞杞藉眰*/
+.layuimini-loader {
+    position: fixed;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    background-color: #ffffff;
+    z-index: 999999;
+}
+
+.layuimini-loader .layuimini-loader-inner {
+    display: block;
+    position: relative;
+    left: 50%;
+    top: 50%;
+    width: 150px;
+    height: 150px;
+    margin: -75px 0 0 -75px;
+    border-radius: 50%;
+    border: 3px solid transparent;
+    border-top-color: #1E9FFF;
+    animation: spin 2s linear infinite;
+}
+
+.layuimini-loader .layuimini-loader-inner:before {
+    content: "";
+    position: absolute;
+    top: 5px;
+    left: 5px;
+    right: 5px;
+    bottom: 5px;
+    border-radius: 50%;
+    border: 3px solid transparent;
+    border-top-color: #1E9FFF;
+    animation: spin 3s linear infinite;
+}
+
+.layuimini-loader .layuimini-loader-inner:after {
+    content: "";
+    position: absolute;
+    top: 15px;
+    left: 15px;
+    right: 15px;
+    bottom: 15px;
+    border-radius: 50%;
+    border: 3px solid transparent;
+    border-top-color: #1E9FFF;
+    animation: spin 1.5s linear infinite;
+}
+
+@keyframes spin {
+    0% {
+        transform: rotate(0deg);
+    }
+    to {
+        transform: rotate(1turn);
+    }
+}
diff --git a/src/main/webapp/static/css/originTable.css b/src/main/webapp/static/css/originTable.css
new file mode 100644
index 0000000..a86612d
--- /dev/null
+++ b/src/main/webapp/static/css/originTable.css
@@ -0,0 +1,29 @@
+#originTable + .layui-table-view .layui-table-tool-temp {
+    padding-right: 0;
+}
+#originTable + .layui-table-view .layui-table-body tbody > tr td {
+    cursor: pointer;
+}
+#originTable + .layui-table-view .layui-table-body tbody > tr.layui-table-click {
+    background-color: #fff3e0;
+}
+#originTable + .layui-table-view .layui-table-body tbody > tr.layui-table-click td:last-child > div:before {
+    position: absolute;
+    right: 6px;
+    content: "\e602";
+    font-size: 12px;
+    font-style: normal;
+    font-family: layui-icon,serif !important;
+    -webkit-font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
+}
+#left-table .layui-table-grid-down {
+    display: none;
+}
+.layui-form.layui-border-box.layui-table-view {
+    border-width: 1px;
+}
+#left-table .layui-table thead th {
+    /* font-weight: bold; */
+    text-align: left;
+}
diff --git a/src/main/webapp/static/images/zy-logo-dark.png b/src/main/webapp/static/images/zy-logo-dark.png
new file mode 100644
index 0000000..df4e153
--- /dev/null
+++ b/src/main/webapp/static/images/zy-logo-dark.png
Binary files differ
diff --git a/src/main/webapp/static/images/zy-logo.png b/src/main/webapp/static/images/zy-logo.png
index 4865504..21a19b9 100644
--- a/src/main/webapp/static/images/zy-logo.png
+++ b/src/main/webapp/static/images/zy-logo.png
Binary files differ
diff --git a/src/main/webapp/static/js/apiLog/apiLog.js b/src/main/webapp/static/js/apiLog/apiLog.js
new file mode 100644
index 0000000..8e72f1a
--- /dev/null
+++ b/src/main/webapp/static/js/apiLog/apiLog.js
@@ -0,0 +1,268 @@
+var pageCurr;
+layui.config({
+    base: baseUrl + "/static/layui/lay/modules/"
+}).use(['table','laydate', 'form', 'admin'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+    var admin = layui.admin;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#apiLog',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/apiLog/list/auth',
+        page: true,
+        limit: 15,
+        limits: [15, 30, 50, 100, 200, 500],
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        height: 'full-120',
+        cols: [[
+            {type: 'checkbox'}
+            // ,{field: 'id', align: 'center',title: 'ID'}
+            // ,{field: 'uuid', align: 'center',title: '鏃ュ織缂栧彿'}
+            ,{field: 'namespace', align: 'center',title: '鍚嶇О绌洪棿'}
+            ,{field: 'url', align: 'center',title: '鎺ュ彛鍦板潃'}
+            // ,{field: 'appkey', align: 'center',title: '骞冲彴瀵嗛挜'}
+            // ,{field: 'timestamp', align: 'center',title: '鏃堕棿鎴�'}
+            // ,{field: 'clientIp', align: 'center',title: '瀹㈡埛绔疘P'}
+            ,{field: 'request', align: 'center',title: '璇锋眰鍐呭'}
+            ,{field: 'response', align: 'center',title: '鍝嶅簲鍐呭'}
+            // ,{field: 'err', align: 'center',title: '寮傚父鍐呭'}
+            ,{field: 'result$', align: 'center',title: '缁撴灉', templet: '#resTpl', width: 80}
+            // ,{field: 'status$', align: 'center',title: '鐘舵��'}
+            ,{field: 'createTime$', align: 'center',title: '娣诲姞鏃堕棿'}
+            // ,{field: 'updateTime$', align: 'center',title: '淇敼鏃堕棿'}
+            ,{field: 'memo', align: 'center',title: '澶囨敞', hide: true}
+
+            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width: 80}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data.records
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function(res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            limit();
+        }
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(apiLog)', function (obj) {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function() {
+            searchData[this.name] = this.value;
+        });
+        searchData['orderByField'] = obj.field;
+        searchData['orderByType'] = obj.type;
+        tableIns.reload({
+            where: searchData,
+            page: {curr: 1}
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(apiLog)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id).data;
+        switch(obj.event) {
+            case 'addData':
+                showEditModel();
+                break;
+            case 'deleteData':
+               if (checkStatus.length === 0) {
+                   layer.msg('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁', {icon: 2});
+                   return;
+               }
+               del(checkStatus.map(function (d) {
+                   return d.id;
+               }));
+               break;
+            case 'exportData':
+                admin.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
+                    var titles=[];
+                    var fields=[];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function() {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'apiLog': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/apiLog/export/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        dataType:'json',
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll();
+                            if (res.code === 200) {
+                                table.exportFile(titles,res.data,'xls');
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg, {icon: 2})
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(apiLog)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            case 'edit':
+                showEditModel(data);
+                break;
+            case "del":
+                del([data.id]);
+                break;
+        }
+    });
+
+    /* 寮圭獥 - 鏂板銆佷慨鏀� */
+    function showEditModel(mData) {
+        admin.open({
+            type: 1,
+            area: '600px',
+            title: (mData ? '淇敼' : '娣诲姞') + '璁㈠崟鐘舵��',
+            content: $('#editDialog').html(),
+            success: function (layero, dIndex) {
+                layDateRender(mData);
+                form.val('detail', mData);
+                form.on('submit(editSubmit)', function (data) {
+                    var loadIndex = layer.load(2);
+                    $.ajax({
+                        url: baseUrl+"/apiLog/"+(mData?'update':'add')+"/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: data.field,
+                        method: 'POST',
+                        success: function (res) {
+                            layer.close(loadIndex);
+                            if (res.code === 200){
+                                layer.close(dIndex);
+                                layer.msg(res.msg, {icon: 1});
+                                tableReload();
+                            } else if (res.code === 403){
+                                top.location.href = baseUrl+"/";
+                            }else {
+                                layer.msg(res.msg, {icon: 2});
+                            }
+                        }
+                    })
+                    return false;
+                });
+                $(layero).children('.layui-layer-content').css('overflow', 'visible');
+                layui.form.render('select');
+            }
+        });
+    }
+
+    /* 鍒犻櫎 */
+    function del(ids) {
+        layer.confirm('纭畾瑕佸垹闄ら�変腑鏁版嵁鍚楋紵', {
+            skin: 'layui-layer-admin',
+            shade: .1
+        }, function (i) {
+            layer.close(i);
+            var loadIndex = layer.load(2);
+            $.ajax({
+                url: baseUrl+"/apiLog/delete/auth",
+                headers: {'token': localStorage.getItem('token')},
+                data: {ids: ids},
+                method: 'POST',
+                success: function (res) {
+                    layer.close(loadIndex);
+                    if (res.code === 200){
+                        layer.msg(res.msg, {icon: 1});
+                        tableReload();
+                    } else if (res.code === 403){
+                        top.location.href = baseUrl+"/";
+                    } else {
+                        layer.msg(res.msg, {icon: 2});
+                    }
+                }
+            })
+        });
+    }
+
+    // 鎼滅储
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+    // 閲嶇疆
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+
+    // 鏃堕棿閫夋嫨鍣�
+    function layDateRender(data) {
+        setTimeout(function () {
+            layDate.render({
+                elem: '#createTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['createTime\\$']:null
+            });
+            layDate.render({
+                elem: '#updateTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['updateTime\\$']:null
+            });
+            layDate.render({
+                elem: '.layui-laydate-range'
+                ,type: 'datetime'
+                ,range: true
+            });
+        }, 300);
+    }
+    layDateRender();
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    tableIns.reload({
+        where: searchData,
+        page: {curr: pageCurr}
+     });
+}
diff --git a/src/main/webapp/static/js/basLift/basLift.js b/src/main/webapp/static/js/basLift/basLift.js
new file mode 100644
index 0000000..cdef2d8
--- /dev/null
+++ b/src/main/webapp/static/js/basLift/basLift.js
@@ -0,0 +1,277 @@
+var pageCurr;
+layui.config({
+    base: baseUrl + "/static/layui/lay/modules/"
+}).use(['table','laydate', 'form', 'admin'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+    var admin = layui.admin;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#basLift',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/basLift/list/auth',
+        page: true,
+        limit: 15,
+        limits: [15, 30, 50, 100, 200, 500],
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        height: 'full-120',
+        cols: [[
+            {type: 'checkbox'}
+            ,{field: 'liftNo', align: 'center',title: '鎻愬崌鏈哄彿'}
+            ,{field: 'status', align: 'center',title: '褰撳墠浠诲姟鐘舵��'}
+            ,{field: 'wrkNo', align: 'center',title: '浠诲姟鍙�'}
+            // ,{field: 'updateTime$', align: 'center',title: '淇敼鏃堕棿'}
+            // ,{field: 'updateBy$', align: 'center',title: '淇敼浜哄憳'}
+            ,{field: 'memo', align: 'center',title: '澶囨敞'}
+            ,{field: 'pakMk$', align: 'center',title: '浣滀笟鏍囪'}
+            ,{field: 'liftLock$', align: 'center',title: '鎻愬崌鏈洪攣瀹�'}
+            ,{field: 'positionArrivalFeedback', align: 'center',title: '浣嶇疆鍒拌揪鍙嶉'}
+            ,{field: 'ready$', align: 'center',title: '鍑嗗灏辩华'}
+            ,{field: 'running', align: 'center',title: '杩愯涓�'}
+            ,{field: 'mode$', align: 'center',title: '鑱旀満/鍗曟満'}
+            // ,{field: 'lineFrontHasStock', align: 'center',title: '杈撻�佺嚎鍓嶇鍏夌數鏈夎揣'}
+            // ,{field: 'forwardRotationFeedback', align: 'center',title: '杈撻�佺嚎姝h浆鍙嶉'}
+            // ,{field: 'reverseFeedback', align: 'center',title: '杈撻�佺嚎鍙嶈浆鍙嶉'}
+            // ,{field: 'motorOverload', align: 'center',title: '杈撻�佺嚎鐢垫満杩囪浇'}
+            // ,{field: 'lineEndHasStock', align: 'center',title: '杈撻�佺嚎鏈鍏夌數鏈夎揣'}
+            // ,{field: 'inConveyLineCardTrayAlarm', align: 'center',title: '杩涜緭閫佺嚎鍗℃墭鐩樻姤璀�'}
+            // ,{field: 'outConveyLineCardTrayAlarm', align: 'center',title: '鍑鸿緭閫佺嚎鍗℃墭鐩樻姤璀�'}
+            // ,{field: 'platPositionDeviationAlarm', align: 'center',title: '骞冲彴浣嶇疆鍋忓樊鎶ヨ'}
+            // ,{field: 'platTorqueDeviationAlarm', align: 'center',title: '骞冲彴鎵煩鍋忓樊鎶ヨ'}
+            // ,{field: 'platShuttleCheck', align: 'center',title: '骞冲彴鍥涘悜杞︽娴�'}
+            ,{field: 'notReady$', align: 'center',title: '鏈氨缁姸鎬�'}
+            // ,{field: 'servoError1', align: 'center',title: '浼烘湇1閿欒'}
+            // ,{field: 'servoError2', align: 'center',title: '浼烘湇2閿欒'}
+            // ,{field: 'servoError3', align: 'center',title: '浼烘湇3閿欒'}
+            // ,{field: 'servoError4', align: 'center',title: '浼烘湇4閿欒'}
+            // ,{field: 'liftActualSpeed', align: 'center',title: '鎻愬崌鏈哄疄闄呴�熷害鍙嶉'}
+
+            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:120}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data.records
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function(res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            limit();
+        }
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(basLift)', function (obj) {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function() {
+            searchData[this.name] = this.value;
+        });
+        searchData['orderByField'] = obj.field;
+        searchData['orderByType'] = obj.type;
+        tableIns.reload({
+            where: searchData,
+            page: {curr: 1}
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(basLift)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id).data;
+        switch(obj.event) {
+            case 'addData':
+                showEditModel();
+                break;
+            case 'deleteData':
+               if (checkStatus.length === 0) {
+                   layer.msg('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁', {icon: 2});
+                   return;
+               }
+               del(checkStatus.map(function (d) {
+                   return d.liftNo;
+               }));
+               break;
+            case 'exportData':
+                admin.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
+                    var titles=[];
+                    var fields=[];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function() {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'basLift': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/basLift/export/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        dataType:'json',
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll();
+                            if (res.code === 200) {
+                                table.exportFile(titles,res.data,'xls');
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg, {icon: 2})
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(basLift)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            case 'edit':
+                showEditModel(data);
+                break;
+            case "del":
+                del([data.liftNo]);
+                break;
+        }
+    });
+
+    /* 寮圭獥 - 鏂板銆佷慨鏀� */
+    function showEditModel(mData) {
+        admin.open({
+            type: 1,
+            area: '600px',
+            title: (mData ? '淇敼' : '娣诲姞') + '璁㈠崟鐘舵��',
+            content: $('#editDialog').html(),
+            success: function (layero, dIndex) {
+                layDateRender(mData);
+                form.val('detail', mData);
+                form.on('submit(editSubmit)', function (data) {
+                    var loadIndex = layer.load(2);
+                    $.ajax({
+                        url: baseUrl+"/basLift/"+(mData?'update':'add')+"/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: data.field,
+                        method: 'POST',
+                        success: function (res) {
+                            layer.close(loadIndex);
+                            if (res.code === 200){
+                                layer.close(dIndex);
+                                layer.msg(res.msg, {icon: 1});
+                                tableReload();
+                            } else if (res.code === 403){
+                                top.location.href = baseUrl+"/";
+                            }else {
+                                layer.msg(res.msg, {icon: 2});
+                            }
+                        }
+                    })
+                    return false;
+                });
+                $(layero).children('.layui-layer-content').css('overflow', 'visible');
+                layui.form.render('select');
+            }
+        });
+    }
+
+    /* 鍒犻櫎 */
+    function del(ids) {
+        layer.confirm('纭畾瑕佸垹闄ら�変腑鏁版嵁鍚楋紵', {
+            skin: 'layui-layer-admin',
+            shade: .1
+        }, function (i) {
+            layer.close(i);
+            var loadIndex = layer.load(2);
+            $.ajax({
+                url: baseUrl+"/basLift/delete/auth",
+                headers: {'token': localStorage.getItem('token')},
+                data: {ids: ids},
+                method: 'POST',
+                success: function (res) {
+                    layer.close(loadIndex);
+                    if (res.code === 200){
+                        layer.msg(res.msg, {icon: 1});
+                        tableReload();
+                    } else if (res.code === 403){
+                        top.location.href = baseUrl+"/";
+                    } else {
+                        layer.msg(res.msg, {icon: 2});
+                    }
+                }
+            })
+        });
+    }
+
+    // 鎼滅储
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+    // 閲嶇疆
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+
+    // 鏃堕棿閫夋嫨鍣�
+    function layDateRender(data) {
+        setTimeout(function () {
+            layDate.render({
+                elem: '.layui-laydate-range'
+                ,type: 'datetime'
+                ,range: true
+            });
+            layDate.render({
+                elem: '#updateTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['updateTime\\$']:null
+            });
+
+        }, 300);
+    }
+    layDateRender();
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    tableIns.reload({
+        where: searchData,
+        page: {curr: pageCurr}
+     });
+}
diff --git a/src/main/webapp/static/js/basLiftErr/basLiftErr.js b/src/main/webapp/static/js/basLiftErr/basLiftErr.js
new file mode 100644
index 0000000..8014559
--- /dev/null
+++ b/src/main/webapp/static/js/basLiftErr/basLiftErr.js
@@ -0,0 +1,260 @@
+var pageCurr;
+layui.config({
+    base: baseUrl + "/static/layui/lay/modules/"
+}).use(['table','laydate', 'form', 'admin'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+    var admin = layui.admin;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#basLiftErr',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/basLiftErr/list/auth',
+        page: true,
+        limit: 15,
+        limits: [15, 30, 50, 100, 200, 500],
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        height: 'full-120',
+        cols: [[
+            {type: 'checkbox'}
+            ,{field: 'errorCode', align: 'center',title: '寮傚父鐮�'}
+            ,{field: 'errName', align: 'center',title: '寮傚父'}
+            ,{field: 'modiUser$', align: 'center',title: '淇敼浜哄憳'}
+            ,{field: 'modiTime$', align: 'center',title: '淇敼鏃堕棿'}
+            ,{field: 'appeUser$', align: 'center',title: '娣诲姞浜哄憳'}
+            ,{field: 'appeTime$', align: 'center',title: '娣诲姞鏃堕棿'}
+
+            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:120}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data.records
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function(res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            limit();
+        }
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(basLiftErr)', function (obj) {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function() {
+            searchData[this.name] = this.value;
+        });
+        searchData['orderByField'] = obj.field;
+        searchData['orderByType'] = obj.type;
+        tableIns.reload({
+            where: searchData,
+            page: {curr: 1}
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(basLiftErr)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id).data;
+        switch(obj.event) {
+            case 'addData':
+                showEditModel();
+                break;
+            case 'deleteData':
+               if (checkStatus.length === 0) {
+                   layer.msg('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁', {icon: 2});
+                   return;
+               }
+               del(checkStatus.map(function (d) {
+                   return d.errorCode;
+               }));
+               break;
+            case 'exportData':
+                admin.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
+                    var titles=[];
+                    var fields=[];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function() {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'basLiftErr': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/basLiftErr/export/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        dataType:'json',
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll();
+                            if (res.code === 200) {
+                                table.exportFile(titles,res.data,'xls');
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg, {icon: 2})
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(basLiftErr)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            case 'edit':
+                showEditModel(data);
+                break;
+            case "del":
+                del([data.errorCode]);
+                break;
+        }
+    });
+
+    /* 寮圭獥 - 鏂板銆佷慨鏀� */
+    function showEditModel(mData) {
+        admin.open({
+            type: 1,
+            area: '600px',
+            title: (mData ? '淇敼' : '娣诲姞') + '鎻愬崌鏈哄紓甯哥爜',
+            content: $('#editDialog').html(),
+            success: function (layero, dIndex) {
+                layDateRender(mData);
+                form.val('detail', mData);
+                form.on('submit(editSubmit)', function (data) {
+                    var loadIndex = layer.load(2);
+                    $.ajax({
+                        url: baseUrl+"/basLiftErr/"+(mData?'update':'add')+"/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: data.field,
+                        method: 'POST',
+                        success: function (res) {
+                            layer.close(loadIndex);
+                            if (res.code === 200){
+                                layer.close(dIndex);
+                                layer.msg(res.msg, {icon: 1});
+                                tableReload();
+                            } else if (res.code === 403){
+                                top.location.href = baseUrl+"/";
+                            }else {
+                                layer.msg(res.msg, {icon: 2});
+                            }
+                        }
+                    })
+                    return false;
+                });
+                $(layero).children('.layui-layer-content').css('overflow', 'visible');
+                layui.form.render('select');
+            }
+        });
+    }
+
+    /* 鍒犻櫎 */
+    function del(ids) {
+        layer.confirm('纭畾瑕佸垹闄ら�変腑鏁版嵁鍚楋紵', {
+            skin: 'layui-layer-admin',
+            shade: .1
+        }, function (i) {
+            layer.close(i);
+            var loadIndex = layer.load(2);
+            $.ajax({
+                url: baseUrl+"/basLiftErr/delete/auth",
+                headers: {'token': localStorage.getItem('token')},
+                data: {ids: ids},
+                method: 'POST',
+                success: function (res) {
+                    layer.close(loadIndex);
+                    if (res.code === 200){
+                        layer.msg(res.msg, {icon: 1});
+                        tableReload();
+                    } else if (res.code === 403){
+                        top.location.href = baseUrl+"/";
+                    } else {
+                        layer.msg(res.msg, {icon: 2});
+                    }
+                }
+            })
+        });
+    }
+
+    // 鎼滅储
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+    // 閲嶇疆
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+
+    // 鏃堕棿閫夋嫨鍣�
+    function layDateRender(data) {
+        setTimeout(function () {
+            layDate.render({
+                elem: '.layui-laydate-range'
+                ,type: 'datetime'
+                ,range: true
+            });
+            layDate.render({
+                elem: '#modiTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['modiTime\\$']:null
+            });
+            layDate.render({
+                elem: '#appeTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['appeTime\\$']:null
+            });
+
+        }, 300);
+    }
+    layDateRender();
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    tableIns.reload({
+        where: searchData,
+        page: {curr: pageCurr}
+     });
+}
diff --git a/src/main/webapp/static/js/basLiftErrLog/basLiftErrLog.js b/src/main/webapp/static/js/basLiftErrLog/basLiftErrLog.js
new file mode 100644
index 0000000..6406a58
--- /dev/null
+++ b/src/main/webapp/static/js/basLiftErrLog/basLiftErrLog.js
@@ -0,0 +1,287 @@
+var pageCurr;
+layui.config({
+    base: baseUrl + "/static/layui/lay/modules/"
+}).use(['table','laydate', 'form', 'admin'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+    var admin = layui.admin;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#basLiftErrLog',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/basLiftErrLog/list/auth',
+        page: true,
+        limit: 15,
+        limits: [15, 30, 50, 100, 200, 500],
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        height: 'full-120',
+        cols: [[
+            // {type: 'checkbox'}
+            {field: 'id', align: 'center',title: '缂栧彿'}
+            // ,{field: 'uuid', align: 'center',title: '缂栧彿'}
+            ,{field: 'wrkNo', align: 'center',title: '宸ヤ綔鍙�'}
+            ,{field: 'startTime$', align: 'center',title: '鍙戠敓鏃堕棿'}
+            ,{field: 'endTime$', align: 'center',title: '缁撴潫鏃堕棿'}
+            ,{field: 'wrkSts$', align: 'center',title: '宸ヤ綔鐘舵��'}
+            ,{field: 'ioType$', align: 'center',title: '鍏ュ嚭搴撶被鍨�'}
+            ,{field: 'liftNo', align: 'center',title: '鎻愬崌鏈�'}
+            ,{field: 'plcNo', align: 'center',title: 'plc'}
+            ,{field: 'locNo', align: 'center',title: '鐩爣搴撲綅'}
+            ,{field: 'staNo', align: 'center',title: '鐩爣绔�'}
+            ,{field: 'sourceStaNo', align: 'center',title: '婧愮珯'}
+            ,{field: 'sourceLocNo', align: 'center',title: '婧愬簱浣�'}
+            ,{field: 'barcode', align: 'center',title: '鏉$爜'}
+            ,{field: 'errCode', align: 'center',title: '寮傚父鐮�'}
+            ,{field: 'error', align: 'center',title: '寮傚父'}
+            ,{field: 'status$', align: 'center',title: '寮傚父鎯呭喌'}
+            ,{field: 'systemStatus', align: 'center',title: '绯荤粺鐘舵��'}
+            ,{field: 'createTime$', align: 'center',title: '娣诲姞鏃堕棿'}
+            ,{field: 'createBy$', align: 'center',title: '娣诲姞浜哄憳'}
+            ,{field: 'updateTime$', align: 'center',title: '淇敼鏃堕棿'}
+            ,{field: 'updateBy$', align: 'center',title: '淇敼浜哄憳'}
+            ,{field: 'memo', align: 'center',title: '澶囨敞'}
+
+            // ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:120}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data.records
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function(res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            limit();
+        }
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(basLiftErrLog)', function (obj) {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function() {
+            searchData[this.name] = this.value;
+        });
+        searchData['orderByField'] = obj.field;
+        searchData['orderByType'] = obj.type;
+        tableIns.reload({
+            where: searchData,
+            page: {curr: 1}
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(basLiftErrLog)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id).data;
+        switch(obj.event) {
+            case 'addData':
+                showEditModel();
+                break;
+            case 'deleteData':
+               if (checkStatus.length === 0) {
+                   layer.msg('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁', {icon: 2});
+                   return;
+               }
+               del(checkStatus.map(function (d) {
+                   return d.id;
+               }));
+               break;
+            case 'exportData':
+                admin.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
+                    var titles=[];
+                    var fields=[];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function() {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'basLiftErrLog': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/basLiftErrLog/export/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        dataType:'json',
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll();
+                            if (res.code === 200) {
+                                table.exportFile(titles,res.data,'xls');
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg, {icon: 2})
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(basLiftErrLog)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            case 'edit':
+                showEditModel(data);
+                break;
+            case "del":
+                del([data.id]);
+                break;
+        }
+    });
+
+    /* 寮圭獥 - 鏂板銆佷慨鏀� */
+    function showEditModel(mData) {
+        admin.open({
+            type: 1,
+            area: '600px',
+            title: (mData ? '淇敼' : '娣诲姞') + '璁㈠崟鐘舵��',
+            content: $('#editDialog').html(),
+            success: function (layero, dIndex) {
+                layDateRender(mData);
+                form.val('detail', mData);
+                form.on('submit(editSubmit)', function (data) {
+                    var loadIndex = layer.load(2);
+                    $.ajax({
+                        url: baseUrl+"/basLiftErrLog/"+(mData?'update':'add')+"/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: data.field,
+                        method: 'POST',
+                        success: function (res) {
+                            layer.close(loadIndex);
+                            if (res.code === 200){
+                                layer.close(dIndex);
+                                layer.msg(res.msg, {icon: 1});
+                                tableReload();
+                            } else if (res.code === 403){
+                                top.location.href = baseUrl+"/";
+                            }else {
+                                layer.msg(res.msg, {icon: 2});
+                            }
+                        }
+                    })
+                    return false;
+                });
+                $(layero).children('.layui-layer-content').css('overflow', 'visible');
+                layui.form.render('select');
+            }
+        });
+    }
+
+    /* 鍒犻櫎 */
+    function del(ids) {
+        layer.confirm('纭畾瑕佸垹闄ら�変腑鏁版嵁鍚楋紵', {
+            skin: 'layui-layer-admin',
+            shade: .1
+        }, function (i) {
+            layer.close(i);
+            var loadIndex = layer.load(2);
+            $.ajax({
+                url: baseUrl+"/basLiftErrLog/delete/auth",
+                headers: {'token': localStorage.getItem('token')},
+                data: {ids: ids},
+                method: 'POST',
+                success: function (res) {
+                    layer.close(loadIndex);
+                    if (res.code === 200){
+                        layer.msg(res.msg, {icon: 1});
+                        tableReload();
+                    } else if (res.code === 403){
+                        top.location.href = baseUrl+"/";
+                    } else {
+                        layer.msg(res.msg, {icon: 2});
+                    }
+                }
+            })
+        });
+    }
+
+    // 鎼滅储
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+    // 閲嶇疆
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+
+    // 鏃堕棿閫夋嫨鍣�
+    function layDateRender(data) {
+        setTimeout(function () {
+            layDate.render({
+                elem: '.layui-laydate-range'
+                ,type: 'datetime'
+                ,range: true
+            });
+            layDate.render({
+                elem: '#startTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['startTime\\$']:null
+            });
+            layDate.render({
+                elem: '#endTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['endTime\\$']:null
+            });
+            layDate.render({
+                elem: '#createTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['createTime\\$']:null
+            });
+            layDate.render({
+                elem: '#updateTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['updateTime\\$']:null
+            });
+
+        }, 300);
+    }
+    layDateRender();
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    tableIns.reload({
+        where: searchData,
+        page: {curr: pageCurr}
+     });
+}
diff --git a/src/main/webapp/static/js/basLiftOpt/basLiftOpt.js b/src/main/webapp/static/js/basLiftOpt/basLiftOpt.js
new file mode 100644
index 0000000..977e32f
--- /dev/null
+++ b/src/main/webapp/static/js/basLiftOpt/basLiftOpt.js
@@ -0,0 +1,264 @@
+var pageCurr;
+layui.config({
+    base: baseUrl + "/static/layui/lay/modules/"
+}).use(['table','laydate', 'form', 'admin'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+    var admin = layui.admin;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#basLiftOpt',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/basLiftOpt/list/auth',
+        page: true,
+        limit: 15,
+        limits: [15, 30, 50, 100, 200, 500],
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        height: 'full-120',
+        cols: [[
+            // {type: 'checkbox'}
+            {field: 'id', align: 'center',title: '缂栧彿'}
+            ,{field: 'wrkNo', align: 'center',title: '浠诲姟鍙�'}
+            ,{field: 'liftNo', align: 'center',title: '鎻愬崌鏈哄彿'}
+            ,{field: 'command', align: 'center',title: '鍛戒护'}
+            ,{field: 'systemStatus', align: 'center',title: '绯荤粺鐘舵��'}
+            ,{field: 'deviceWrk', align: 'center',title: '璁惧宸ヤ綔鍙�'}
+            ,{field: 'sendTime$', align: 'center',title: '涓嬪彂鏃堕棿'}
+            ,{field: 'updateTime$', align: 'center',title: '淇敼鏃堕棿'}
+            ,{field: 'updateBy$', align: 'center',title: '淇敼浜哄憳'}
+            ,{field: 'memo', align: 'center',title: '澶囨敞'}
+
+            // ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:120}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data.records
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function(res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            limit();
+        }
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(basLiftOpt)', function (obj) {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function() {
+            searchData[this.name] = this.value;
+        });
+        searchData['orderByField'] = obj.field;
+        searchData['orderByType'] = obj.type;
+        tableIns.reload({
+            where: searchData,
+            page: {curr: 1}
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(basLiftOpt)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id).data;
+        switch(obj.event) {
+            case 'addData':
+                showEditModel();
+                break;
+            case 'deleteData':
+               if (checkStatus.length === 0) {
+                   layer.msg('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁', {icon: 2});
+                   return;
+               }
+               del(checkStatus.map(function (d) {
+                   return d.id;
+               }));
+               break;
+            case 'exportData':
+                admin.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
+                    var titles=[];
+                    var fields=[];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function() {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'basLiftOpt': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/basLiftOpt/export/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        dataType:'json',
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll();
+                            if (res.code === 200) {
+                                table.exportFile(titles,res.data,'xls');
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg, {icon: 2})
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(basLiftOpt)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            case 'edit':
+                showEditModel(data);
+                break;
+            case "del":
+                del([data.id]);
+                break;
+        }
+    });
+
+    /* 寮圭獥 - 鏂板銆佷慨鏀� */
+    function showEditModel(mData) {
+        admin.open({
+            type: 1,
+            area: '600px',
+            title: (mData ? '淇敼' : '娣诲姞') + '璁㈠崟鐘舵��',
+            content: $('#editDialog').html(),
+            success: function (layero, dIndex) {
+                layDateRender(mData);
+                form.val('detail', mData);
+                form.on('submit(editSubmit)', function (data) {
+                    var loadIndex = layer.load(2);
+                    $.ajax({
+                        url: baseUrl+"/basLiftOpt/"+(mData?'update':'add')+"/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: data.field,
+                        method: 'POST',
+                        success: function (res) {
+                            layer.close(loadIndex);
+                            if (res.code === 200){
+                                layer.close(dIndex);
+                                layer.msg(res.msg, {icon: 1});
+                                tableReload();
+                            } else if (res.code === 403){
+                                top.location.href = baseUrl+"/";
+                            }else {
+                                layer.msg(res.msg, {icon: 2});
+                            }
+                        }
+                    })
+                    return false;
+                });
+                $(layero).children('.layui-layer-content').css('overflow', 'visible');
+                layui.form.render('select');
+            }
+        });
+    }
+
+    /* 鍒犻櫎 */
+    function del(ids) {
+        layer.confirm('纭畾瑕佸垹闄ら�変腑鏁版嵁鍚楋紵', {
+            skin: 'layui-layer-admin',
+            shade: .1
+        }, function (i) {
+            layer.close(i);
+            var loadIndex = layer.load(2);
+            $.ajax({
+                url: baseUrl+"/basLiftOpt/delete/auth",
+                headers: {'token': localStorage.getItem('token')},
+                data: {ids: ids},
+                method: 'POST',
+                success: function (res) {
+                    layer.close(loadIndex);
+                    if (res.code === 200){
+                        layer.msg(res.msg, {icon: 1});
+                        tableReload();
+                    } else if (res.code === 403){
+                        top.location.href = baseUrl+"/";
+                    } else {
+                        layer.msg(res.msg, {icon: 2});
+                    }
+                }
+            })
+        });
+    }
+
+    // 鎼滅储
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+    // 閲嶇疆
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+
+    // 鏃堕棿閫夋嫨鍣�
+    function layDateRender(data) {
+        setTimeout(function () {
+            layDate.render({
+                elem: '.layui-laydate-range'
+                ,type: 'datetime'
+                ,range: true
+            });
+            layDate.render({
+                elem: '#sendTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['sendTime\\$']:null
+            });
+            layDate.render({
+                elem: '#updateTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['updateTime\\$']:null
+            });
+
+        }, 300);
+    }
+    layDateRender();
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    tableIns.reload({
+        where: searchData,
+        page: {curr: pageCurr}
+     });
+}
diff --git a/src/main/webapp/static/js/basLocSts/basLocSts.js b/src/main/webapp/static/js/basLocSts/basLocSts.js
new file mode 100644
index 0000000..47ac4ca
--- /dev/null
+++ b/src/main/webapp/static/js/basLocSts/basLocSts.js
@@ -0,0 +1,440 @@
+var pageCurr;
+layui.use(['table','laydate', 'form'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#basLocSts',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/basLocSts/list/auth',
+        page: true,
+        limit: 16,
+        limits: [16, 30, 50, 100, 200, 500],
+        even: true,
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        cols: [[
+            {type: 'checkbox', fixed: 'left'}
+//            ,{field: 'id', title: 'ID', sort: true,align: 'center', fixed: 'left', width: 80}
+            ,{field: 'locSts', align: 'center',sort:true,title: '搴撲綅鐘舵�佷唬鍙�'}
+            ,{field: 'locDesc', align: 'center',sort: true,title: '搴撲綅鐘舵�佹弿杩�'}
+            ,{field: 'modiUser$', align: 'center',title: '淇敼浜哄憳'}
+            ,{field: 'modiTime$', align: 'center',title: '淇敼鏃堕棿'}
+            // ,{field: 'appeUser$', align: 'center',title: '鍒涘缓鑰�',event: 'appeUser', style: 'text-decoration: underline;cursor:pointer'}
+            // ,{field: 'appeTime$', align: 'center',title: '娣诲姞鏃堕棿'}
+
+            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:150}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data.records
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function(res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            limit();
+        }
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(basLocSts)', function (obj) {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function() {
+            searchData[this.name] = this.value;
+        });
+        searchData['orderByField'] = obj.field;
+        searchData['orderByType'] = obj.type;
+        tableIns.reload({
+            where: searchData,
+            page: {
+                curr: 1
+            },
+            done: function (res, curr, count) {
+                if (res.code === 403) {
+                    top.location.href = baseUrl+"/";
+                }
+                pageCurr=curr;
+                limit();
+            }
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(basLocSts)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id);
+        switch(obj.event) {
+            case 'addData':
+                layer.open({
+                    type: 2,
+                    title: '鏂板',
+                    maxmin: true,
+                    area: ['500px', top.detailHeight],
+                    shadeClose: false,
+                    content: 'basLocSts_detail.html',
+                    success: function(layero, index){
+                        layer.getChildFrame('#data-detail-submit-edit', index).hide();
+                    	clearFormVal(layer.getChildFrame('#detail', index));
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                    }
+                });
+                break;
+            case 'refreshData':
+                tableIns.reload({
+                    page: {
+                        curr: pageCurr
+                    }
+                });
+                limit();
+                break;
+            case 'deleteData':
+                var data = checkStatus.data;
+                if (data.length === 0){
+                    layer.msg('璇烽�夋嫨鏁版嵁');
+                } else {
+                    layer.confirm('纭畾鍒犻櫎'+(data.length===1?'姝�':data.length)+'鏉℃暟鎹悧', function(){
+                        $.ajax({
+                            url: baseUrl+"/basLocSts/delete/auth",
+                            headers: {'token': localStorage.getItem('token')},
+                            data: {param: JSON.stringify(data)},
+                            method: 'POST',
+                            traditional:true,
+                            success: function (res) {
+                                if (res.code === 200){
+                                    layer.closeAll();
+                                    tableReload(false);
+                                } else if (res.code === 403){
+                                    top.location.href = baseUrl+"/";
+                                } else {
+                                    layer.msg(res.msg)
+                                }
+                            }
+                        })
+                    });
+                }
+                break;
+            case 'exportData':
+                layer.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
+                    var titles=[];
+                    var fields=[];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function() {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'basLocSts': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/basLocSts/export/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        dataType:'json',
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll();
+                            if (res.code === 200) {
+                                table.exportFile(titles,res.data,'xls');
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg)
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(basLocSts)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            // 璇︽儏
+            case 'detail':
+                layer.open({
+                    type: 2,
+                    title: '璇︽儏',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: false,
+                    content: 'basLocSts_detail.html',
+                    success: function(layero, index){
+                        setFormVal(layer.getChildFrame('#detail', index), data, true);
+                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
+                        layer.getChildFrame('#data-detail-submit-save,#prompt', index).hide();
+                        layer.getChildFrame('#data-detail-submit-edit', index).hide();
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                        layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                    }
+                });
+                break;
+            // 缂栬緫
+            case 'edit':
+                layer.open({
+                    type: 2,
+                    title: '淇敼',
+                    maxmin: true,
+                    area: ['500px', top.detailHeight],
+                    shadeClose: false,
+                    content: 'basLocSts_detail.html',
+                    success: function(layero, index){
+                        layer.getChildFrame('#data-detail-submit-save', index).hide();
+                        setFormVal(layer.getChildFrame('#detail', index), data, false);
+                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), false);
+                        top.convertDisabled(layer.getChildFrame('#locSts', index), true);
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                        layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                    }
+                });
+                break;
+            case 'modiUser':
+                var param = top.reObject(data).modiUser;
+                if (param === undefined) {
+                    layer.msg("鏃犳暟鎹�");
+                } else {
+                   layer.open({
+                       type: 2,
+                       title: '淇敼璇︽儏',
+                       maxmin: true,
+                       area: [top.detailWidth, top.detailHeight],
+                       shadeClose: false,
+                       content: '../user/user_detail.html',
+                       success: function(layero, index){
+                           $.ajax({
+                               url: baseUrl+"/user/"+ param +"/auth",
+                               headers: {'token': localStorage.getItem('token')},
+                               method: 'GET',
+                               success: function (res) {
+                                   if (res.code === 200){
+                                       setFormVal(layer.getChildFrame('#detail', index), res.data, true);
+                                       top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
+                                       layer.getChildFrame('#password,#createTime\\$,#status', index).parent().parent().hide();
+                                       layer.getChildFrame('#data-detail-submit,#prompt', index).hide();
+                                       layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                                       layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                                   } else if (res.code === 403){
+                                       parent.location.href = "/";
+                                   }else {
+                                       layer.msg(res.msg)
+                                   }
+                               }
+                           })
+                       }
+                   });
+                }
+                break;
+            case 'appeUser':
+                var param = top.reObject(data).appeUser;
+                if (param === undefined) {
+                    layer.msg("鏃犳暟鎹�");
+                } else {
+                   layer.open({
+                       type: 2,
+                       title: '鍒涜鎯�',
+                       maxmin: true,
+                       area: [top.detailWidth, top.detailHeight],
+                       shadeClose: false,
+                       content: '../user/user_detail.html',
+                       success: function(layero, index){
+                           $.ajax({
+                               url: baseUrl+"/user/"+ param +"/auth",
+                               headers: {'token': localStorage.getItem('token')},
+                               method: 'GET',
+                               success: function (res) {
+                                   if (res.code === 200){
+                                       setFormVal(layer.getChildFrame('#detail', index), res.data, true);
+                                       top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
+                                       layer.getChildFrame('#data-detail-submit', index).hide();
+                                       layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                                       layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                                   } else if (res.code === 403){
+                                       parent.location.href = "/";
+                                   }else {
+                                       layer.msg(res.msg)
+                                   }
+                               }
+                           })
+                       }
+                   });
+                }
+                break;
+
+        }
+    });
+
+    // 鏁版嵁淇濆瓨鍔ㄤ綔
+    form.on('submit(save)', function () {
+        if (banMsg != null){
+            layer.msg(banMsg);
+            return;
+        }
+        method("add");
+    });
+
+    // 鏁版嵁淇敼鍔ㄤ綔
+    form.on('submit(edit)', function () {
+        method("update")
+    });
+
+    function method(name){
+        var index = layer.load(1, {
+            shade: [0.5,'#000'] //0.1閫忔槑搴︾殑鑳屾櫙
+        });
+        var data = {
+//            id: $('#id').val(),
+            locSts: $('#locSts').val(),
+            locDesc: $('#locDesc').val(),
+            modiUser: $('#modiUser').val(),
+            modiTime: top.strToDate($('#modiTime\\$').val()),
+            appeUser: $('#appeUser').val(),
+            appeTime: top.strToDate($('#appeTime\\$').val()),
+
+        };
+        $.ajax({
+            url: baseUrl+"/basLocSts/"+name+"/auth",
+            headers: {'token': localStorage.getItem('token')},
+            data: top.reObject(data),
+            method: 'POST',
+            success: function (res) {
+                if (res.code === 200){
+                    parent.layer.closeAll();
+                    tableReload(true);
+                    $("#data-detail :input").each(function () {
+                        $(this).val("");
+                    });
+                } else if (res.code === 403){
+                    top.location.href = baseUrl+"/";
+                }else {
+                    layer.msg(res.msg)
+                }
+                layer.close(index);
+            }
+        })
+    }
+
+    // 鎼滅储鏍忔悳绱簨浠�
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+    // 鎼滅储鏍忛噸缃簨浠�
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+
+    // 鏃堕棿閫夋嫨鍣�
+    layDate.render({
+        elem: '#modiTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#appeTime\\$',
+        type: 'datetime'
+    });
+
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    (child ? parent.tableIns : tableIns).reload({
+        where: searchData,
+        page: {
+            curr: pageCurr
+        },
+        done: function (res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            if (res.data.length === 0 && count !== 0) {
+                tableIns.reload({
+                    where: searchData,
+                    page: {
+                        curr: pageCurr-1
+                    }
+                });
+                pageCurr -= 1;
+            }
+            limit(child);
+        }
+    });
+}
+
+function setFormVal(el, data, showImg) {
+    for (var val in data) {
+        var find = el.find(":input[id='" + val + "']");
+        find.val(data[val]);
+        if (showImg){
+            var next = find.next();
+            if (next.get(0)){
+                if (next.get(0).localName === "img") {
+                    find.hide();
+                    next.attr("src", data[val]);
+                    next.show();
+                }
+            }
+        }
+    }
+}
+
+function clearFormVal(el) {
+    $(':input', el)
+        .val('')
+        .removeAttr('checked')
+        .removeAttr('selected');
+}
+
+function detailScreen(index) {
+    var detail = layer.getChildFrame('#data-detail', index);
+    var height = detail.height()+60;
+    if (height > ($(window).height()*0.9)) {
+        height = ($(window).height()*0.9);
+    }
+    layer.style(index, {
+//        top: (($(window).height()-height)/3)+"px",
+        height: height+'px'
+    });
+}
+
+$('body').keydown(function () {
+    if (event.keyCode === 13) {
+        $("#search").click();
+    }
+});
diff --git a/src/main/webapp/static/js/basPlcerror/basPlcerror.js b/src/main/webapp/static/js/basPlcerror/basPlcerror.js
new file mode 100644
index 0000000..7bd32da
--- /dev/null
+++ b/src/main/webapp/static/js/basPlcerror/basPlcerror.js
@@ -0,0 +1,369 @@
+var pageCurr;
+layui.use(['table','laydate', 'form'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#basPlcerror',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/basPlcerror/list/auth',
+        page: true,
+        limit: 16,
+        limits: [16, 30, 50, 100, 200, 500],
+        even: true,
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        cols: [[
+            {type: 'checkbox'}
+//            ,{field: 'id', title: 'ID', sort: true,align: 'center', fixed: 'left', width: 80}
+            ,{field: 'errorCode', align: 'center',title: '寮傚父缂栧彿'}
+            ,{field: 'errorDesc', align: 'center',title: '寮傚父鎻忚堪'}
+            ,{field: 'modiTime$', align: 'center',title: '淇敼鏃堕棿'}
+            ,{field: 'modiUser$', align: 'center',title: '淇敼浜哄憳'}
+
+            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:150}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data.records
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function(res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            limit();
+            form.on('checkbox(tableCheckbox)', function (data) {
+                var _index = $(data.elem).attr('table-index')||0;
+                if(data.elem.checked){
+                    res.data[_index][data.value] = 'Y';
+                }else{
+                    res.data[_index][data.value] = 'N';
+                }
+            });
+        }
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(locMast)', function (obj) {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function() {
+            searchData[this.name] = this.value;
+        });
+        searchData['orderByField'] = obj.field;
+        searchData['orderByType'] = obj.type;
+        tableIns.reload({
+            where: searchData,
+            page: {
+                curr: 1
+            },
+            done: function (res, curr, count) {
+                if (res.code === 403) {
+                    top.location.href = baseUrl+"/";
+                }
+                pageCurr=curr;
+                limit();
+            }
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(basPlcerror)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id);
+        switch(obj.event) {
+            case 'addData':
+                layer.open({
+                    type: 2,
+                    title: '鏂板',
+                    maxmin: true,
+                    area: ['50%', top.detailHeight],
+                    content: 'basPlcerror_detail.html',
+                    success: function(layero, index){
+                        layer.getChildFrame('#data-detail-submit-edit', index).hide();
+                    	clearFormVal(layer.getChildFrame('#detail', index));
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                    }
+                });
+                break;
+            case 'deleteData':
+                var data = checkStatus.data;
+                if (data.length === 0){
+                    layer.msg('璇烽�夋嫨鏁版嵁');
+                } else {
+                    layer.confirm('纭畾鍒犻櫎'+(data.length===1?'姝�':data.length)+'鏉℃暟鎹悧', function(){
+                        $.ajax({
+                            url: baseUrl+"/basPlcerror/delete/auth",
+                            headers: {'token': localStorage.getItem('token')},
+                            data: {param: JSON.stringify(data)},
+                            method: 'POST',
+                            traditional:true,
+                            success: function (res) {
+                                if (res.code === 200){
+                                    layer.closeAll();
+                                    tableReload(false);
+                                } else if (res.code === 403){
+                                    top.location.href = baseUrl+"/";
+                                } else {
+                                    layer.msg(res.msg)
+                                }
+                            }
+                        })
+                    });
+                }
+                break;
+            case 'exportData':
+                layer.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
+                    var titles=[];
+                    var fields=[];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function() {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'basPlcerror': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/basPlcerror/export/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        dataType:'json',
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll();
+                            if (res.code === 200) {
+                                table.exportFile(titles,res.data,'xls');
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg)
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(basPlcerror)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            // 缂栬緫
+            case 'edit':
+                layer.open({
+                    type: 2,
+                    title: '淇敼',
+                    maxmin: true,
+                    area: ['50%', top.detailHeight],
+                    content: 'basPlcerror_detail.html',
+                    success: function(layero, index){
+                        layer.getChildFrame('#data-detail-submit-save', index).hide();
+                        setFormVal(layer.getChildFrame('#detail', index), data, false);
+                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), false);
+                        top.convertDisabled(layer.getChildFrame('#errorCode', index), true);
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                        layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                        layero.find('iframe')[0].contentWindow.layui.form.render('checkbox');
+                    }
+                });
+                break;
+
+        }
+    });
+
+    // 鏁版嵁淇濆瓨鍔ㄤ綔
+    form.on('submit(save)', function () {
+        if (banMsg != null){
+            layer.msg(banMsg);
+            return;
+        }
+        method("add");
+    });
+
+    // 鏁版嵁淇敼鍔ㄤ綔
+    form.on('submit(edit)', function () {
+        method("update")
+    });
+
+    function method(name){
+        var index = layer.load(1, {
+            shade: [0.5,'#000'] //0.1閫忔槑搴︾殑鑳屾櫙
+        });
+        var data = {
+//            id: $('#id').val(),
+            errorCode: $('#errorCode').val(),
+            errorDesc: $('#errorDesc').val(),
+            modiTime: top.strToDate($('#modiTime\\$').val()),
+            modiUser: $('#modiUser').val(),
+            appeTime: top.strToDate($('#appeTime\\$').val()),
+            appeUser: $('#appeUser').val(),
+
+        };
+        $.ajax({
+            url: baseUrl+"/basPlcerror/"+name+"/auth",
+            headers: {'token': localStorage.getItem('token')},
+            data: top.reObject(data),
+            method: 'POST',
+            success: function (res) {
+                if (res.code === 200){
+                    parent.layer.closeAll();
+                    parent.$(".layui-laypage-btn")[0].click();
+                    $("#data-detail :input").each(function () {
+                        $(this).val("");
+                    });
+                } else if (res.code === 403){
+                    top.location.href = baseUrl+"/";
+                }else {
+                    layer.msg(res.msg)
+                }
+                layer.close(index);
+            }
+        })
+    }
+
+    // 澶嶉�夋浜嬩欢
+    form.on('checkbox(detailCheckbox)', function (data) {
+        var el = data.elem;
+        if (el.checked) {
+            $(el).val('Y');
+        } else {
+            $(el).val('N');
+        }
+    });
+
+    // 鎼滅储鏍忔悳绱簨浠�
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+    // 鎼滅储鏍忛噸缃簨浠�
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+
+    // 鏃堕棿閫夋嫨鍣�
+    layDate.render({
+        elem: '#modiTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#appeTime\\$',
+        type: 'datetime'
+    });
+
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    (child ? parent.tableIns : tableIns).reload({
+        where: searchData,
+        page: {
+            curr: pageCurr
+        },
+        done: function (res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            if (res.data.length === 0 && count !== 0) {
+                tableIns.reload({
+                    where: searchData,
+                    page: {
+                        curr: pageCurr-1
+                    }
+                });
+                pageCurr -= 1;
+            }
+            limit(child);
+        }
+    });
+}
+
+function setFormVal(el, data, showImg) {
+    for (var val in data) {
+        var find = el.find(":input[id='" + val + "']");
+        if (find[0]!=null){
+            if (find[0].type === 'checkbox'){
+                if (data[val]==='Y'){
+                    find.attr("checked","checked");
+                    find.val('Y');
+                } else {
+                    find.remove("checked");
+                    find.val('N');
+                }
+                continue;
+            }
+        }
+        find.val(data[val]);
+        if (showImg){
+            var next = find.next();
+            if (next.get(0)){
+                if (next.get(0).localName === "img") {
+                    find.hide();
+                    next.attr("src", data[val]);
+                    next.show();
+                }
+            }
+        }
+    }
+}
+
+function clearFormVal(el) {
+    $(':input', el)
+        .val('')
+        .removeAttr('checked')
+        .removeAttr('selected');
+}
+
+function detailScreen(index) {
+    var detail = layer.getChildFrame('#data-detail', index);
+    var height = detail.height()+60;
+    if (height > ($(window).height()*0.9)) {
+        height = ($(window).height()*0.8);
+    }
+    layer.style(index, {
+//        top: (($(window).height()-height)/3)+"px",
+        height: height+'px'
+    });
+}
+
+$('body').keydown(function () {
+    if (event.keyCode === 13) {
+        $("#search").click();
+    }
+});
diff --git a/src/main/webapp/static/js/basShuttle/basShuttle.js b/src/main/webapp/static/js/basShuttle/basShuttle.js
new file mode 100644
index 0000000..e4811cb
--- /dev/null
+++ b/src/main/webapp/static/js/basShuttle/basShuttle.js
@@ -0,0 +1,279 @@
+var pageCurr;
+layui.config({
+    base: baseUrl + "/static/layui/lay/modules/"
+}).use(['table','laydate', 'form', 'admin'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+    var admin = layui.admin;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#basShuttle',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/basShuttle/list/auth',
+        page: true,
+        limit: 15,
+        limits: [15, 30, 50, 100, 200, 500],
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        height: 'full-120',
+        cols: [[
+            {type: 'checkbox'}
+            ,{field: 'shuttleNo', align: 'center',title: '鍥涘悜绌挎杞﹀彿', width: 120}
+            ,{field: 'status$', align: 'center',title: '鐘舵��'}
+            ,{field: 'shuttleStatus', align: 'center',title: '浣滀笟鎬�'}
+            ,{field: 'wrkNo', align: 'center',title: '浠诲姟鍙�'}
+            ,{field: 'idleLoc', align: 'center',title: '鏆傚瓨搴撲綅'}
+            // ,{field: 'autoCharge', align: 'center',title: '鑷姩鍏呯數'}
+            ,{field: 'chargeLine', align: 'center',title: '鐢甸噺绾�'}
+            ,{field: 'busyStatus$', align: 'center',title: '灏忚溅蹇欑姸鎬�'}
+            ,{field: 'currentCode', align: 'center',title: '浜岀淮鐮�'}
+            ,{field: 'batteryPower$', align: 'center',title: '鐢甸噺'}
+            ,{field: 'batteryTemp$', align: 'center',title: '鐢垫睜娓╁害'}
+            // ,{field: 'createBy$', align: 'center',title: '娣诲姞浜哄憳'}
+            // ,{field: 'createTime$', align: 'center',title: '娣诲姞鏃堕棿'}
+            // ,{field: 'updateBy$', align: 'center',title: '淇敼浜哄憳'}
+            // ,{field: 'updateTime$', align: 'center',title: '淇敼鏃堕棿'}
+            ,{field: 'memo', align: 'center',title: '澶囨敞'}
+            ,{field: 'liftNo', align: 'center',title: '鎻愬崌鏈哄彿'}
+            ,{field: 'pakMk$', align: 'center',title: '鏍囪'}
+
+            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:120}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data.records
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function(res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            limit();
+        }
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(basShuttle)', function (obj) {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function() {
+            searchData[this.name] = this.value;
+        });
+        searchData['orderByField'] = obj.field;
+        searchData['orderByType'] = obj.type;
+        tableIns.reload({
+            where: searchData,
+            page: {curr: 1}
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(basShuttle)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id).data;
+        switch(obj.event) {
+            case 'addData':
+                showEditModel();
+                break;
+            case 'deleteData':
+               if (checkStatus.length === 0) {
+                   layer.msg('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁', {icon: 2});
+                   return;
+               }
+               del(checkStatus.map(function (d) {
+                   return d.shuttleNo;
+               }));
+               break;
+            case 'exportData':
+                admin.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
+                    var titles=[];
+                    var fields=[];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function() {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'basShuttle': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/basShuttle/export/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        dataType:'json',
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll();
+                            if (res.code === 200) {
+                                table.exportFile(titles,res.data,'xls');
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg, {icon: 2})
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(basShuttle)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            case 'edit':
+                showEditModel(data);
+                break;
+            case "del":
+                del([data.shuttleNo]);
+                break;
+        }
+    });
+
+    /* 寮圭獥 - 鏂板銆佷慨鏀� */
+    function showEditModel(mData) {
+        admin.open({
+            type: 1,
+            area: '600px',
+            title: (mData ? '淇敼' : '娣诲姞') + '璁㈠崟鐘舵��',
+            content: $('#editDialog').html(),
+            success: function (layero, dIndex) {
+                layDateRender(mData);
+                form.val('detail', mData);
+                form.on('submit(editSubmit)', function (data) {
+                    var loadIndex = layer.load(2);
+                    $.ajax({
+                        url: baseUrl+"/basShuttle/"+(mData?'update':'add')+"/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: data.field,
+                        method: 'POST',
+                        success: function (res) {
+                            layer.close(loadIndex);
+                            if (res.code === 200){
+                                layer.close(dIndex);
+                                layer.msg(res.msg, {icon: 1});
+                                tableReload();
+                            } else if (res.code === 403){
+                                top.location.href = baseUrl+"/";
+                            }else {
+                                layer.msg(res.msg, {icon: 2});
+                            }
+                        }
+                    })
+                    return false;
+                });
+                $(layero).children('.layui-layer-content').css('overflow', 'visible');
+                layui.form.render('select');
+            }
+        });
+    }
+
+    /* 鍒犻櫎 */
+    function del(ids) {
+        layer.confirm('纭畾瑕佸垹闄ら�変腑鏁版嵁鍚楋紵', {
+            skin: 'layui-layer-admin',
+            shade: .1
+        }, function (i) {
+            layer.close(i);
+            var loadIndex = layer.load(2);
+            $.ajax({
+                url: baseUrl+"/basShuttle/delete/auth",
+                headers: {'token': localStorage.getItem('token')},
+                data: {ids: ids},
+                method: 'POST',
+                success: function (res) {
+                    layer.close(loadIndex);
+                    if (res.code === 200){
+                        layer.msg(res.msg, {icon: 1});
+                        tableReload();
+                    } else if (res.code === 403){
+                        top.location.href = baseUrl+"/";
+                    } else {
+                        layer.msg(res.msg, {icon: 2});
+                    }
+                }
+            })
+        });
+    }
+
+    // 鎼滅储
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+    // 閲嶇疆
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+
+    function clearFormVal(el) {
+        $(':input', el)
+            .val('')
+            .removeAttr('checked')
+            .removeAttr('selected');
+    }
+
+    // 鏃堕棿閫夋嫨鍣�
+    function layDateRender(data) {
+        setTimeout(function () {
+            layDate.render({
+                elem: '.layui-laydate-range'
+                ,type: 'datetime'
+                ,range: true
+            });
+            layDate.render({
+                elem: '#createTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['createTime\\$']:null
+            });
+            layDate.render({
+                elem: '#updateTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['updateTime\\$']:null
+            });
+
+        }, 300);
+    }
+    layDateRender();
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    tableIns.reload({
+        where: searchData,
+        page: {curr: pageCurr}
+     });
+}
diff --git a/src/main/webapp/static/js/basShuttleErr/basShuttleErr.js b/src/main/webapp/static/js/basShuttleErr/basShuttleErr.js
new file mode 100644
index 0000000..72559a6
--- /dev/null
+++ b/src/main/webapp/static/js/basShuttleErr/basShuttleErr.js
@@ -0,0 +1,267 @@
+var pageCurr;
+layui.config({
+    base: baseUrl + "/static/layui/lay/modules/"
+}).use(['table','laydate', 'form', 'admin'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+    var admin = layui.admin;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#basShuttleErr',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/basShuttleErr/list/auth',
+        page: true,
+        limit: 15,
+        limits: [15, 30, 50, 100, 200, 500],
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        height: 'full-120',
+        cols: [[
+            {type: 'checkbox'}
+            ,{field: 'errorCode', align: 'center',title: '寮傚父鐮�'}
+            ,{field: 'errName', align: 'center',title: '寮傚父'}
+            ,{field: 'modiUser$', align: 'center',title: '淇敼浜哄憳'}
+            ,{field: 'modiTime$', align: 'center',title: '淇敼鏃堕棿'}
+            ,{field: 'appeUser$', align: 'center',title: '娣诲姞浜哄憳'}
+            ,{field: 'appeTime$', align: 'center',title: '娣诲姞鏃堕棿'}
+
+            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:120}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data.records
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function(res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            limit();
+        }
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(basShuttleErr)', function (obj) {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function() {
+            searchData[this.name] = this.value;
+        });
+        searchData['orderByField'] = obj.field;
+        searchData['orderByType'] = obj.type;
+        tableIns.reload({
+            where: searchData,
+            page: {curr: 1}
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(basShuttleErr)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id).data;
+        switch(obj.event) {
+            case 'addData':
+                showEditModel();
+                break;
+            case 'deleteData':
+               if (checkStatus.length === 0) {
+                   layer.msg('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁', {icon: 2});
+                   return;
+               }
+               del(checkStatus.map(function (d) {
+                   return d.errorCode;
+               }));
+               break;
+            case 'exportData':
+                admin.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
+                    var titles=[];
+                    var fields=[];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function() {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'basShuttleErr': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/basShuttleErr/export/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        dataType:'json',
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll();
+                            if (res.code === 200) {
+                                table.exportFile(titles,res.data,'xls');
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg, {icon: 2})
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(basShuttleErr)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            case 'edit':
+                showEditModel(data);
+                break;
+            case "del":
+                del([data.errorCode]);
+                break;
+        }
+    });
+
+    /* 寮圭獥 - 鏂板銆佷慨鏀� */
+    function showEditModel(mData) {
+        admin.open({
+            type: 1,
+            area: '600px',
+            title: (mData ? '淇敼' : '娣诲姞') + '鍥涘悜杞﹀紓甯哥爜',
+            content: $('#editDialog').html(),
+            success: function (layero, dIndex) {
+                layDateRender(mData);
+                form.val('detail', mData);
+                form.on('submit(editSubmit)', function (data) {
+                    var loadIndex = layer.load(2);
+                    $.ajax({
+                        url: baseUrl+"/basShuttleErr/"+(mData?'update':'add')+"/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: data.field,
+                        method: 'POST',
+                        success: function (res) {
+                            layer.close(loadIndex);
+                            if (res.code === 200){
+                                layer.close(dIndex);
+                                layer.msg(res.msg, {icon: 1});
+                                tableReload();
+                            } else if (res.code === 403){
+                                top.location.href = baseUrl+"/";
+                            }else {
+                                layer.msg(res.msg, {icon: 2});
+                            }
+                        }
+                    })
+                    return false;
+                });
+                $(layero).children('.layui-layer-content').css('overflow', 'visible');
+                layui.form.render('select');
+            }
+        });
+    }
+
+    /* 鍒犻櫎 */
+    function del(ids) {
+        layer.confirm('纭畾瑕佸垹闄ら�変腑鏁版嵁鍚楋紵', {
+            skin: 'layui-layer-admin',
+            shade: .1
+        }, function (i) {
+            layer.close(i);
+            var loadIndex = layer.load(2);
+            $.ajax({
+                url: baseUrl+"/basShuttleErr/delete/auth",
+                headers: {'token': localStorage.getItem('token')},
+                data: {ids: ids},
+                method: 'POST',
+                success: function (res) {
+                    layer.close(loadIndex);
+                    if (res.code === 200){
+                        layer.msg(res.msg, {icon: 1});
+                        tableReload();
+                    } else if (res.code === 403){
+                        top.location.href = baseUrl+"/";
+                    } else {
+                        layer.msg(res.msg, {icon: 2});
+                    }
+                }
+            })
+        });
+    }
+
+    // 鎼滅储
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+    // 閲嶇疆
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+
+    function clearFormVal(el) {
+        $(':input', el)
+            .val('')
+            .removeAttr('checked')
+            .removeAttr('selected');
+    }
+
+    // 鏃堕棿閫夋嫨鍣�
+    function layDateRender(data) {
+        setTimeout(function () {
+            layDate.render({
+                elem: '.layui-laydate-range'
+                ,type: 'datetime'
+                ,range: true
+            });
+            layDate.render({
+                elem: '#modiTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['modiTime\\$']:null
+            });
+            layDate.render({
+                elem: '#appeTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['appeTime\\$']:null
+            });
+
+        }, 300);
+    }
+    layDateRender();
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    tableIns.reload({
+        where: searchData,
+        page: {curr: pageCurr}
+     });
+}
diff --git a/src/main/webapp/static/js/basShuttleErrLog/basShuttleErrLog.js b/src/main/webapp/static/js/basShuttleErrLog/basShuttleErrLog.js
new file mode 100644
index 0000000..241c6bb
--- /dev/null
+++ b/src/main/webapp/static/js/basShuttleErrLog/basShuttleErrLog.js
@@ -0,0 +1,287 @@
+var pageCurr;
+layui.config({
+    base: baseUrl + "/static/layui/lay/modules/"
+}).use(['table','laydate', 'form', 'admin'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+    var admin = layui.admin;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#basShuttleErrLog',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/basShuttleErrLog/list/auth',
+        page: true,
+        limit: 15,
+        limits: [15, 30, 50, 100, 200, 500],
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        height: 'full-120',
+        cols: [[
+            // {type: 'checkbox'}
+            {field: 'id', align: 'center',title: '缂栧彿'}
+            // ,{field: 'uuid', align: 'center',title: '缂栧彿'}
+            ,{field: 'wrkNo', align: 'center',title: '宸ヤ綔鍙�'}
+            ,{field: 'startTime$', align: 'center',title: '鍙戠敓鏃堕棿'}
+            ,{field: 'endTime$', align: 'center',title: '缁撴潫鏃堕棿'}
+            ,{field: 'wrkSts$', align: 'center',title: '宸ヤ綔鐘舵��'}
+            ,{field: 'ioType$', align: 'center',title: '鍏ュ嚭搴撶被鍨�'}
+            ,{field: 'steNo', align: 'center',title: '绌挎杞�'}
+            ,{field: 'plcNo', align: 'center',title: 'plc'}
+            ,{field: 'locNo', align: 'center',title: '鐩爣搴撲綅'}
+            ,{field: 'staNo', align: 'center',title: '鐩爣绔�'}
+            ,{field: 'sourceStaNo', align: 'center',title: '婧愮珯'}
+            ,{field: 'sourceLocNo', align: 'center',title: '婧愬簱浣�'}
+            ,{field: 'barcode', align: 'center',title: '鏉$爜'}
+            ,{field: 'errCode', align: 'center',title: '寮傚父鐮�'}
+            ,{field: 'error', align: 'center',title: '寮傚父'}
+            ,{field: 'status$', align: 'center',title: '寮傚父鎯呭喌'}
+            ,{field: 'systemStatus', align: 'center',title: '绯荤粺鐘舵��'}
+            ,{field: 'createTime$', align: 'center',title: '娣诲姞鏃堕棿'}
+            ,{field: 'createBy$', align: 'center',title: '娣诲姞浜哄憳'}
+            ,{field: 'updateTime$', align: 'center',title: '淇敼鏃堕棿'}
+            ,{field: 'updateBy$', align: 'center',title: '淇敼浜哄憳'}
+            ,{field: 'memo', align: 'center',title: '澶囨敞'}
+
+            // ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:120}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data.records
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function(res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            limit();
+        }
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(basShuttleErrLog)', function (obj) {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function() {
+            searchData[this.name] = this.value;
+        });
+        searchData['orderByField'] = obj.field;
+        searchData['orderByType'] = obj.type;
+        tableIns.reload({
+            where: searchData,
+            page: {curr: 1}
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(basShuttleErrLog)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id).data;
+        switch(obj.event) {
+            case 'addData':
+                showEditModel();
+                break;
+            case 'deleteData':
+               if (checkStatus.length === 0) {
+                   layer.msg('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁', {icon: 2});
+                   return;
+               }
+               del(checkStatus.map(function (d) {
+                   return d.id;
+               }));
+               break;
+            case 'exportData':
+                admin.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
+                    var titles=[];
+                    var fields=[];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function() {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'basShuttleErrLog': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/basShuttleErrLog/export/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        dataType:'json',
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll();
+                            if (res.code === 200) {
+                                table.exportFile(titles,res.data,'xls');
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg, {icon: 2})
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(basShuttleErrLog)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            case 'edit':
+                showEditModel(data);
+                break;
+            case "del":
+                del([data.id]);
+                break;
+        }
+    });
+
+    /* 寮圭獥 - 鏂板銆佷慨鏀� */
+    function showEditModel(mData) {
+        admin.open({
+            type: 1,
+            area: '600px',
+            title: (mData ? '淇敼' : '娣诲姞') + '璁㈠崟鐘舵��',
+            content: $('#editDialog').html(),
+            success: function (layero, dIndex) {
+                layDateRender(mData);
+                form.val('detail', mData);
+                form.on('submit(editSubmit)', function (data) {
+                    var loadIndex = layer.load(2);
+                    $.ajax({
+                        url: baseUrl+"/basShuttleErrLog/"+(mData?'update':'add')+"/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: data.field,
+                        method: 'POST',
+                        success: function (res) {
+                            layer.close(loadIndex);
+                            if (res.code === 200){
+                                layer.close(dIndex);
+                                layer.msg(res.msg, {icon: 1});
+                                tableReload();
+                            } else if (res.code === 403){
+                                top.location.href = baseUrl+"/";
+                            }else {
+                                layer.msg(res.msg, {icon: 2});
+                            }
+                        }
+                    })
+                    return false;
+                });
+                $(layero).children('.layui-layer-content').css('overflow', 'visible');
+                layui.form.render('select');
+            }
+        });
+    }
+
+    /* 鍒犻櫎 */
+    function del(ids) {
+        layer.confirm('纭畾瑕佸垹闄ら�変腑鏁版嵁鍚楋紵', {
+            skin: 'layui-layer-admin',
+            shade: .1
+        }, function (i) {
+            layer.close(i);
+            var loadIndex = layer.load(2);
+            $.ajax({
+                url: baseUrl+"/basShuttleErrLog/delete/auth",
+                headers: {'token': localStorage.getItem('token')},
+                data: {ids: ids},
+                method: 'POST',
+                success: function (res) {
+                    layer.close(loadIndex);
+                    if (res.code === 200){
+                        layer.msg(res.msg, {icon: 1});
+                        tableReload();
+                    } else if (res.code === 403){
+                        top.location.href = baseUrl+"/";
+                    } else {
+                        layer.msg(res.msg, {icon: 2});
+                    }
+                }
+            })
+        });
+    }
+
+    // 鎼滅储
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+    // 閲嶇疆
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+
+    // 鏃堕棿閫夋嫨鍣�
+    function layDateRender(data) {
+        setTimeout(function () {
+            layDate.render({
+                elem: '.layui-laydate-range'
+                ,type: 'datetime'
+                ,range: true
+            });
+            layDate.render({
+                elem: '#startTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['startTime\\$']:null
+            });
+            layDate.render({
+                elem: '#endTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['endTime\\$']:null
+            });
+            layDate.render({
+                elem: '#createTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['createTime\\$']:null
+            });
+            layDate.render({
+                elem: '#updateTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['updateTime\\$']:null
+            });
+
+        }, 300);
+    }
+    layDateRender();
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    tableIns.reload({
+        where: searchData,
+        page: {curr: pageCurr}
+     });
+}
diff --git a/src/main/webapp/static/js/basShuttleErrLog/basShuttleOpt.js b/src/main/webapp/static/js/basShuttleErrLog/basShuttleOpt.js
new file mode 100644
index 0000000..aa8aead
--- /dev/null
+++ b/src/main/webapp/static/js/basShuttleErrLog/basShuttleOpt.js
@@ -0,0 +1,275 @@
+var pageCurr;
+layui.config({
+    base: baseUrl + "/static/layui/lay/modules/"
+}).use(['table','laydate', 'form', 'admin'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+    var admin = layui.admin;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#basShuttleOpt',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/basShuttleOpt/list/auth',
+        page: true,
+        limit: 15,
+        limits: [15, 30, 50, 100, 200, 500],
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        height: 'full-120',
+        cols: [[
+            {field: 'wrkNo', align: 'center',title: '宸ヤ綔鍙�'}
+            ,{field: 'shuttleNo', align: 'center',title: '鍥涘悜杞�'}
+            ,{field: 'mode', align: 'center',title: '浣滀笟'}
+            ,{field: 'sourceLocNo', align: 'center',title: '璧风偣搴撲綅'}
+            ,{field: 'distLocNo', align: 'center',title: '鐩爣搴撲綅'}
+            ,{field: 'command', align: 'center',title: '鍛戒护'}
+            ,{field: 'systemStatus', align: 'center',title: '绯荤粺鐘舵��'}
+            ,{field: 'deviceWrk', align: 'center',title: '璁惧宸ヤ綔鍙�'}
+            ,{field: 'sendTime$', align: 'center',title: '涓嬪彂鏃堕棿'}
+            ,{field: 'updateTime$', align: 'center',title: '淇敼鏃堕棿'}
+            ,{field: 'updateBy$', align: 'center',title: '淇敼浜哄憳'}
+            ,{field: 'memo', align: 'center',title: '澶囨敞'}
+
+            // ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:120}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data.records
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function(res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            limit();
+        }
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(basShuttleOpt)', function (obj) {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function() {
+            searchData[this.name] = this.value;
+        });
+        searchData['orderByField'] = obj.field;
+        searchData['orderByType'] = obj.type;
+        tableIns.reload({
+            where: searchData,
+            page: {curr: 1}
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(basShuttleOpt)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id).data;
+        switch(obj.event) {
+            case 'addData':
+                showEditModel();
+                break;
+            case 'deleteData':
+               if (checkStatus.length === 0) {
+                   layer.msg('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁', {icon: 2});
+                   return;
+               }
+               del(checkStatus.map(function (d) {
+                   return d.id;
+               }));
+               break;
+            case 'exportData':
+                admin.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
+                    var titles=[];
+                    var fields=[];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function() {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'basShuttleOpt': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/basShuttleOpt/export/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        dataType:'json',
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll();
+                            if (res.code === 200) {
+                                table.exportFile(titles,res.data,'xls');
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg, {icon: 2})
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(basShuttleOpt)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            case 'edit':
+                showEditModel(data);
+                break;
+            case "del":
+                del([data.id]);
+                break;
+        }
+    });
+
+    /* 寮圭獥 - 鏂板銆佷慨鏀� */
+    function showEditModel(mData) {
+        admin.open({
+            type: 1,
+            area: '600px',
+            title: (mData ? '淇敼' : '娣诲姞') + '璁㈠崟鐘舵��',
+            content: $('#editDialog').html(),
+            success: function (layero, dIndex) {
+                layDateRender(mData);
+                form.val('detail', mData);
+                form.on('submit(editSubmit)', function (data) {
+                    var loadIndex = layer.load(2);
+                    $.ajax({
+                        url: baseUrl+"/basShuttleOpt/"+(mData?'update':'add')+"/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: data.field,
+                        method: 'POST',
+                        success: function (res) {
+                            layer.close(loadIndex);
+                            if (res.code === 200){
+                                layer.close(dIndex);
+                                layer.msg(res.msg, {icon: 1});
+                                tableReload();
+                            } else if (res.code === 403){
+                                top.location.href = baseUrl+"/";
+                            }else {
+                                layer.msg(res.msg, {icon: 2});
+                            }
+                        }
+                    })
+                    return false;
+                });
+                $(layero).children('.layui-layer-content').css('overflow', 'visible');
+                layui.form.render('select');
+            }
+        });
+    }
+
+    /* 鍒犻櫎 */
+    function del(ids) {
+        layer.confirm('纭畾瑕佸垹闄ら�変腑鏁版嵁鍚楋紵', {
+            skin: 'layui-layer-admin',
+            shade: .1
+        }, function (i) {
+            layer.close(i);
+            var loadIndex = layer.load(2);
+            $.ajax({
+                url: baseUrl+"/basShuttleOpt/delete/auth",
+                headers: {'token': localStorage.getItem('token')},
+                data: {ids: ids},
+                method: 'POST',
+                success: function (res) {
+                    layer.close(loadIndex);
+                    if (res.code === 200){
+                        layer.msg(res.msg, {icon: 1});
+                        tableReload();
+                    } else if (res.code === 403){
+                        top.location.href = baseUrl+"/";
+                    } else {
+                        layer.msg(res.msg, {icon: 2});
+                    }
+                }
+            })
+        });
+    }
+
+    // 鎼滅储
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+    // 閲嶇疆
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+
+    // 鏃堕棿閫夋嫨鍣�
+    function layDateRender(data) {
+        setTimeout(function () {
+            layDate.render({
+                elem: '.layui-laydate-range'
+                ,type: 'datetime'
+                ,range: true
+            });
+            layDate.render({
+                elem: '#startTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['startTime\\$']:null
+            });
+            layDate.render({
+                elem: '#endTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['endTime\\$']:null
+            });
+            layDate.render({
+                elem: '#createTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['createTime\\$']:null
+            });
+            layDate.render({
+                elem: '#updateTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['updateTime\\$']:null
+            });
+
+        }, 300);
+    }
+    layDateRender();
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    tableIns.reload({
+        where: searchData,
+        page: {curr: pageCurr}
+     });
+}
diff --git a/src/main/webapp/static/js/basWrkIotype/basWrkIotype.js b/src/main/webapp/static/js/basWrkIotype/basWrkIotype.js
new file mode 100644
index 0000000..723120b
--- /dev/null
+++ b/src/main/webapp/static/js/basWrkIotype/basWrkIotype.js
@@ -0,0 +1,443 @@
+var pageCurr;
+layui.use(['table','laydate', 'form'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#basWrkIotype',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/basWrkIotype/list/auth',
+        page: true,
+        limit: 16,
+        limits: [16, 30, 50, 100, 200, 500],
+        // skin: 'line',
+        even: true,
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        cols: [[
+            {type: 'checkbox', fixed: 'left'}
+//            ,{field: 'id', title: 'ID', sort: true,align: 'center', fixed: 'left', width: 80}
+            ,{field: 'ioType', align: 'center',sort:true,title: '鍏ュ嚭绫诲瀷浠e彿'}
+            // ,{field: 'ioPri', align: 'center',title: '涓昏'}
+            ,{field: 'ioDesc', align: 'center',title: '鍏ュ嚭绫诲瀷鎻忚堪'}
+            ,{field: 'modiUser$', align: 'center',title: '淇敼浜哄憳'}
+            ,{field: 'modiTime$', align: 'center',title: '淇敼鏃堕棿'}
+            // ,{field: 'appeUser$', align: 'center',title: '鍒涘缓鑰�',event: 'appeUser', style: 'text-decoration: underline;cursor:pointer'}
+            // ,{field: 'appeTime$', align: 'center',title: '娣诲姞鏃堕棿'}
+
+            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:150}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data.records
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function(res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            limit();
+        }
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(basWrkIotype)', function (obj) {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function() {
+            searchData[this.name] = this.value;
+        });
+        searchData['orderByField'] = obj.field;
+        searchData['orderByType'] = obj.type;
+        tableIns.reload({
+            where: searchData,
+            page: {
+                curr: 1
+            },
+            done: function (res, curr, count) {
+                if (res.code === 403) {
+                    top.location.href = baseUrl+"/";
+                }
+                pageCurr=curr;
+                limit();
+            }
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(basWrkIotype)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id);
+        switch(obj.event) {
+            case 'addData':
+                layer.open({
+                    type: 2,
+                    title: '鏂板',
+                    maxmin: true,
+                    area: ['500px', top.detailHeight],
+                    shadeClose: false,
+                    content: 'basWrkIotype_detail.html',
+                    success: function(layero, index){
+                        layer.getChildFrame('#data-detail-submit-edit', index).hide();
+                    	clearFormVal(layer.getChildFrame('#detail', index));
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                    }
+                });
+                break;
+            case 'refreshData':
+                tableIns.reload({
+                    page: {
+                        curr: pageCurr
+                    }
+                });
+                limit();
+                break;
+            case 'deleteData':
+                var data = checkStatus.data;
+                if (data.length === 0){
+                    layer.msg('璇烽�夋嫨鏁版嵁');
+                } else {
+                    layer.confirm('纭畾鍒犻櫎'+(data.length===1?'姝�':data.length)+'鏉℃暟鎹悧', function(){
+                        $.ajax({
+                            url: baseUrl+"/basWrkIotype/delete/auth",
+                            headers: {'token': localStorage.getItem('token')},
+                            data: {param: JSON.stringify(data)},
+                            method: 'POST',
+                            traditional:true,
+                            success: function (res) {
+                                if (res.code === 200){
+                                    layer.closeAll();
+                                    tableReload(false);
+                                } else if (res.code === 403){
+                                    top.location.href = baseUrl+"/";
+                                } else {
+                                    layer.msg(res.msg)
+                                }
+                            }
+                        })
+                    });
+                }
+                break;
+            case 'exportData':
+                layer.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
+                    var titles=[];
+                    var fields=[];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function() {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'basWrkIotype': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/basWrkIotype/export/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        dataType:'json',
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll();
+                            if (res.code === 200) {
+                                table.exportFile(titles,res.data,'xls');
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg)
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(basWrkIotype)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            // 璇︽儏
+            case 'detail':
+                layer.open({
+                    type: 2,
+                    title: '璇︽儏',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: false,
+                    content: 'basWrkIotype_detail.html',
+                    success: function(layero, index){
+                        setFormVal(layer.getChildFrame('#detail', index), data, true);
+                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
+                        layer.getChildFrame('#data-detail-submit-save,#prompt', index).hide();
+                        layer.getChildFrame('#data-detail-submit-edit', index).hide();
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                        layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                    }
+                });
+                break;
+            // 缂栬緫
+            case 'edit':
+                layer.open({
+                    type: 2,
+                    title: '淇敼',
+                    maxmin: true,
+                    area: ['500px', top.detailHeight],
+                    shadeClose: false,
+                    content: 'basWrkIotype_detail.html',
+                    success: function(layero, index){
+                        layer.getChildFrame('#data-detail-submit-save', index).hide();
+                        setFormVal(layer.getChildFrame('#detail', index), data, false);
+                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), false);
+                        top.convertDisabled(layer.getChildFrame('#ioType', index), true);
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                        layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                    }
+                });
+                break;
+            case 'modiUser':
+                var param = top.reObject(data).modiUser;
+                if (param === undefined) {
+                    layer.msg("鏃犳暟鎹�");
+                } else {
+                   layer.open({
+                       type: 2,
+                       title: '淇敼璇︽儏',
+                       maxmin: true,
+                       area: [top.detailWidth, top.detailHeight],
+                       shadeClose: false,
+                       content: '../user/user_detail.html',
+                       success: function(layero, index){
+                           $.ajax({
+                               url: baseUrl+"/user/"+ param +"/auth",
+                               headers: {'token': localStorage.getItem('token')},
+                               method: 'GET',
+                               success: function (res) {
+                                   if (res.code === 200){
+                                       setFormVal(layer.getChildFrame('#detail', index), res.data, true);
+                                       top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
+                                       layer.getChildFrame('#password,#createTime\\$,#status', index).parent().parent().hide();
+                                       layer.getChildFrame('#data-detail-submit,#prompt', index).hide();
+                                       layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                                       layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                                   } else if (res.code === 403){
+                                       parent.location.href = "/";
+                                   }else {
+                                       layer.msg(res.msg)
+                                   }
+                               }
+                           })
+                       }
+                   });
+                }
+                break;
+            case 'appeUser':
+                var param = top.reObject(data).appeUser;
+                if (param === undefined) {
+                    layer.msg("鏃犳暟鎹�");
+                } else {
+                   layer.open({
+                       type: 2,
+                       title: '鍒涜鎯�',
+                       maxmin: true,
+                       area: [top.detailWidth, top.detailHeight],
+                       shadeClose: false,
+                       content: '../user/user_detail.html',
+                       success: function(layero, index){
+                           $.ajax({
+                               url: baseUrl+"/user/"+ param +"/auth",
+                               headers: {'token': localStorage.getItem('token')},
+                               method: 'GET',
+                               success: function (res) {
+                                   if (res.code === 200){
+                                       setFormVal(layer.getChildFrame('#detail', index), res.data, true);
+                                       top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
+                                       layer.getChildFrame('#data-detail-submit', index).hide();
+                                       layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                                       layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                                   } else if (res.code === 403){
+                                       parent.location.href = "/";
+                                   }else {
+                                       layer.msg(res.msg)
+                                   }
+                               }
+                           })
+                       }
+                   });
+                }
+                break;
+
+        }
+    });
+
+    // 鏁版嵁淇濆瓨鍔ㄤ綔
+    form.on('submit(save)', function () {
+        if (banMsg != null){
+            layer.msg(banMsg);
+            return;
+        }
+        method("add");
+    });
+
+    // 鏁版嵁淇敼鍔ㄤ綔
+    form.on('submit(edit)', function () {
+        method("update")
+    });
+
+    function method(name){
+        var index = layer.load(1, {
+            shade: [0.5,'#000'] //0.1閫忔槑搴︾殑鑳屾櫙
+        });
+        var data = {
+//            id: $('#id').val(),
+            ioType: $('#ioType').val(),
+            ioPri: $('#ioPri').val(),
+            ioDesc: $('#ioDesc').val(),
+            modiUser: $('#modiUser').val(),
+            modiTime: top.strToDate($('#modiTime\\$').val()),
+            appeUser: $('#appeUser').val(),
+            appeTime: top.strToDate($('#appeTime\\$').val()),
+
+        };
+        $.ajax({
+            url: baseUrl+"/basWrkIotype/"+name+"/auth",
+            headers: {'token': localStorage.getItem('token')},
+            data: top.reObject(data),
+            method: 'POST',
+            success: function (res) {
+                if (res.code === 200){
+                    parent.layer.closeAll();
+                    tableReload(true);
+                    $("#data-detail :input").each(function () {
+                        $(this).val("");
+                    });
+                } else if (res.code === 403){
+                    top.location.href = baseUrl+"/";
+                }else {
+                    layer.msg(res.msg)
+                }
+                layer.close(index);
+            }
+        })
+    }
+
+    // 鎼滅储鏍忔悳绱簨浠�
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+    // 鎼滅储鏍忛噸缃簨浠�
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+
+    // 鏃堕棿閫夋嫨鍣�
+    layDate.render({
+        elem: '#modiTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#appeTime\\$',
+        type: 'datetime'
+    });
+
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    (child ? parent.tableIns : tableIns).reload({
+        where: searchData,
+        page: {
+            curr: pageCurr
+        },
+        done: function (res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            if (res.data.length === 0 && count !== 0) {
+                tableIns.reload({
+                    where: searchData,
+                    page: {
+                        curr: pageCurr-1
+                    }
+                });
+                pageCurr -= 1;
+            }
+            limit(child);
+        }
+    });
+}
+
+function setFormVal(el, data, showImg) {
+    for (var val in data) {
+        var find = el.find(":input[id='" + val + "']");
+        find.val(data[val]);
+        if (showImg){
+            var next = find.next();
+            if (next.get(0)){
+                if (next.get(0).localName === "img") {
+                    find.hide();
+                    next.attr("src", data[val]);
+                    next.show();
+                }
+            }
+        }
+    }
+}
+
+function clearFormVal(el) {
+    $(':input', el)
+        .val('')
+        .removeAttr('checked')
+        .removeAttr('selected');
+}
+
+function detailScreen(index) {
+    var detail = layer.getChildFrame('#data-detail', index);
+    var height = detail.height()+60;
+    if (height > ($(window).height()*0.9)) {
+        height = ($(window).height()*0.9);
+    }
+    layer.style(index, {
+//        top: (($(window).height()-height)/3)+"px",
+        height: height+'px'
+    });
+}
+
+$('body').keydown(function () {
+    if (event.keyCode === 13) {
+        $("#search").click();
+    }
+});
diff --git a/src/main/webapp/static/js/basWrkStatus/basWrkStatus.js b/src/main/webapp/static/js/basWrkStatus/basWrkStatus.js
new file mode 100644
index 0000000..a64f6da
--- /dev/null
+++ b/src/main/webapp/static/js/basWrkStatus/basWrkStatus.js
@@ -0,0 +1,441 @@
+var pageCurr;
+layui.use(['table','laydate', 'form'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#basWrkStatus',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/basWrkStatus/list/auth',
+        page: true,
+        limit: 16,
+        limits: [16, 30, 50, 100, 200, 500],
+        // skin: 'line',
+        even: true,
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        cols: [[
+            {type: 'checkbox', fixed: 'left'}
+//            ,{field: 'id', title: 'ID', sort: true,align: 'center', fixed: 'left', width: 80}
+            ,{field: 'wrkSts', align: 'center',sort:true,title: '浠e彿'}
+            ,{field: 'wrkDesc', align: 'center',title: '鐘舵�佹弿杩�'}
+            ,{field: 'modiUser$', align: 'center',title: '淇敼浜哄憳'}
+            ,{field: 'modiTime$', align: 'center',title: '淇敼鏃堕棿'}
+            // ,{field: 'appeUser$', align: 'center',title: '鍒涘缓鑰�',event: 'appeUser', style: 'text-decoration: underline;cursor:pointer'}
+            // ,{field: 'appeTime$', align: 'center',title: '娣诲姞鏃堕棿'}
+
+            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:150}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data.records
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function(res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            limit();
+        }
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(basWrkStatus)', function (obj) {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function() {
+            searchData[this.name] = this.value;
+        });
+        searchData['orderByField'] = obj.field;
+        searchData['orderByType'] = obj.type;
+        tableIns.reload({
+            where: searchData,
+            page: {
+                curr: 1
+            },
+            done: function (res, curr, count) {
+                if (res.code === 403) {
+                    top.location.href = baseUrl+"/";
+                }
+                pageCurr=curr;
+                limit();
+            }
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(basWrkStatus)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id);
+        switch(obj.event) {
+            case 'addData':
+                layer.open({
+                    type: 2,
+                    title: '鏂板',
+                    maxmin: true,
+                    area: ['500px', top.detailHeight],
+                    shadeClose: false,
+                    content: 'basWrkStatus_detail.html',
+                    success: function(layero, index){
+                        layer.getChildFrame('#data-detail-submit-edit', index).hide();
+                    	clearFormVal(layer.getChildFrame('#detail', index));
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                    }
+                });
+                break;
+            case 'refreshData':
+                tableIns.reload({
+                    page: {
+                        curr: pageCurr
+                    }
+                });
+                limit();
+                break;
+            case 'deleteData':
+                var data = checkStatus.data;
+                if (data.length === 0){
+                    layer.msg('璇烽�夋嫨鏁版嵁');
+                } else {
+                    layer.confirm('纭畾鍒犻櫎'+(data.length===1?'姝�':data.length)+'鏉℃暟鎹悧', function(){
+                        $.ajax({
+                            url: baseUrl+"/basWrkStatus/delete/auth",
+                            headers: {'token': localStorage.getItem('token')},
+                            data: {param: JSON.stringify(data)},
+                            method: 'POST',
+                            traditional:true,
+                            success: function (res) {
+                                if (res.code === 200){
+                                    layer.closeAll();
+                                    tableReload(false);
+                                } else if (res.code === 403){
+                                    top.location.href = baseUrl+"/";
+                                } else {
+                                    layer.msg(res.msg)
+                                }
+                            }
+                        })
+                    });
+                }
+                break;
+            case 'exportData':
+                layer.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
+                    var titles=[];
+                    var fields=[];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function() {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'basWrkStatus': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/basWrkStatus/export/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        dataType:'json',
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll();
+                            if (res.code === 200) {
+                                table.exportFile(titles,res.data,'xls');
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg)
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(basWrkStatus)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            // 璇︽儏
+            case 'detail':
+                layer.open({
+                    type: 2,
+                    title: '璇︽儏',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: false,
+                    content: 'basWrkStatus_detail.html',
+                    success: function(layero, index){
+                        setFormVal(layer.getChildFrame('#detail', index), data, true);
+                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
+                        layer.getChildFrame('#data-detail-submit-save,#prompt', index).hide();
+                        layer.getChildFrame('#data-detail-submit-edit', index).hide();
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                        layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                    }
+                });
+                break;
+            // 缂栬緫
+            case 'edit':
+                layer.open({
+                    type: 2,
+                    title: '淇敼',
+                    maxmin: true,
+                    area: ['500px', top.detailHeight],
+                    shadeClose: false,
+                    content: 'basWrkStatus_detail.html',
+                    success: function(layero, index){
+                        layer.getChildFrame('#data-detail-submit-save', index).hide();
+                        setFormVal(layer.getChildFrame('#detail', index), data, false);
+                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), false);
+                        top.convertDisabled(layer.getChildFrame('#wrkSts', index), true);
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                        layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                    }
+                });
+                break;
+            case 'modiUser':
+                var param = top.reObject(data).modiUser;
+                if (param === undefined) {
+                    layer.msg("鏃犳暟鎹�");
+                } else {
+                   layer.open({
+                       type: 2,
+                       title: '淇敼璇︽儏',
+                       maxmin: true,
+                       area: [top.detailWidth, top.detailHeight],
+                       shadeClose: false,
+                       content: '../user/user_detail.html',
+                       success: function(layero, index){
+                           $.ajax({
+                               url: baseUrl+"/user/"+ param +"/auth",
+                               headers: {'token': localStorage.getItem('token')},
+                               method: 'GET',
+                               success: function (res) {
+                                   if (res.code === 200){
+                                       setFormVal(layer.getChildFrame('#detail', index), res.data, true);
+                                       top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
+                                       layer.getChildFrame('#data-detail-submit,#prompt', index).hide();
+                                       layer.getChildFrame('#password,#createTime\\$,#status', index).parent().parent().hide();
+                                       layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                                       layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                                   } else if (res.code === 403){
+                                       parent.location.href = "/";
+                                   }else {
+                                       layer.msg(res.msg)
+                                   }
+                               }
+                           })
+                       }
+                   });
+                }
+                break;
+            case 'appeUser':
+                var param = top.reObject(data).appeUser;
+                if (param === undefined) {
+                    layer.msg("鏃犳暟鎹�");
+                } else {
+                   layer.open({
+                       type: 2,
+                       title: '鍒涜鎯�',
+                       maxmin: true,
+                       area: [top.detailWidth, top.detailHeight],
+                       shadeClose: false,
+                       content: '../user/user_detail.html',
+                       success: function(layero, index){
+                           $.ajax({
+                               url: baseUrl+"/user/"+ param +"/auth",
+                               headers: {'token': localStorage.getItem('token')},
+                               method: 'GET',
+                               success: function (res) {
+                                   if (res.code === 200){
+                                       setFormVal(layer.getChildFrame('#detail', index), res.data, true);
+                                       top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
+                                       layer.getChildFrame('#data-detail-submit', index).hide();
+                                       layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                                       layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                                   } else if (res.code === 403){
+                                       parent.location.href = "/";
+                                   }else {
+                                       layer.msg(res.msg)
+                                   }
+                               }
+                           })
+                       }
+                   });
+                }
+                break;
+
+        }
+    });
+
+    // 鏁版嵁淇濆瓨鍔ㄤ綔
+    form.on('submit(save)', function () {
+        if (banMsg != null){
+            layer.msg(banMsg);
+            return;
+        }
+        method("add");
+    });
+
+    // 鏁版嵁淇敼鍔ㄤ綔
+    form.on('submit(edit)', function () {
+        method("update")
+    });
+
+    function method(name){
+        var index = layer.load(1, {
+            shade: [0.5,'#000'] //0.1閫忔槑搴︾殑鑳屾櫙
+        });
+        var data = {
+//            id: $('#id').val(),
+            wrkSts: $('#wrkSts').val(),
+            wrkDesc: $('#wrkDesc').val(),
+            modiUser: $('#modiUser').val(),
+            modiTime: top.strToDate($('#modiTime\\$').val()),
+            appeUser: $('#appeUser').val(),
+            appeTime: top.strToDate($('#appeTime\\$').val()),
+
+        };
+        $.ajax({
+            url: baseUrl+"/basWrkStatus/"+name+"/auth",
+            headers: {'token': localStorage.getItem('token')},
+            data: top.reObject(data),
+            method: 'POST',
+            success: function (res) {
+                if (res.code === 200){
+                    parent.layer.closeAll();
+                    tableReload(true);
+                    $("#data-detail :input").each(function () {
+                        $(this).val("");
+                    });
+                } else if (res.code === 403){
+                    top.location.href = baseUrl+"/";
+                }else {
+                    layer.msg(res.msg)
+                }
+                layer.close(index);
+            }
+        })
+    }
+
+    // 鎼滅储鏍忔悳绱簨浠�
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+    // 鎼滅储鏍忛噸缃簨浠�
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+
+    // 鏃堕棿閫夋嫨鍣�
+    layDate.render({
+        elem: '#modiTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#appeTime\\$',
+        type: 'datetime'
+    });
+
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    (child ? parent.tableIns : tableIns).reload({
+        where: searchData,
+        page: {
+            curr: pageCurr
+        },
+        done: function (res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            if (res.data.length === 0 && count !== 0) {
+                tableIns.reload({
+                    where: searchData,
+                    page: {
+                        curr: pageCurr-1
+                    }
+                });
+                pageCurr -= 1;
+            }
+            limit(child);
+        }
+    });
+}
+
+function setFormVal(el, data, showImg) {
+    for (var val in data) {
+        var find = el.find(":input[id='" + val + "']");
+        find.val(data[val]);
+        if (showImg){
+            var next = find.next();
+            if (next.get(0)){
+                if (next.get(0).localName === "img") {
+                    find.hide();
+                    next.attr("src", data[val]);
+                    next.show();
+                }
+            }
+        }
+    }
+}
+
+function clearFormVal(el) {
+    $(':input', el)
+        .val('')
+        .removeAttr('checked')
+        .removeAttr('selected');
+}
+
+function detailScreen(index) {
+    var detail = layer.getChildFrame('#data-detail', index);
+    var height = detail.height()+60;
+    if (height > ($(window).height()*0.9)) {
+        height = ($(window).height()*0.9);
+    }
+    layer.style(index, {
+//        top: (($(window).height()-height)/3)+"px",
+        height: height+'px'
+    });
+}
+
+$('body').keydown(function () {
+    if (event.keyCode === 13) {
+        $("#search").click();
+    }
+});
diff --git a/src/main/webapp/static/js/config/config.js b/src/main/webapp/static/js/config/config.js
new file mode 100644
index 0000000..4043b9c
--- /dev/null
+++ b/src/main/webapp/static/js/config/config.js
@@ -0,0 +1,345 @@
+var pageCurr;
+layui.use(['table','laydate', 'form'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#config',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/config/list/auth',
+        page: true,
+        limit: 16,
+        limits: [16, 30, 50, 100, 200, 500],
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        cols: [[
+            {type: 'checkbox', fixed: 'left'}
+            ,{field: 'id', title: 'ID', sort: true,align: 'center', fixed: 'left', width: 80}
+            ,{field: 'name', align: 'center',title: '鍚嶇О'}
+            ,{field: 'code', align: 'center',title: '缂栫爜'}
+            ,{field: 'value', align: 'center',title: '瀵瑰簲鍊�'}
+            ,{field: 'type$', align: 'center',title: '绫诲瀷'}
+            ,{field: 'status$', align: 'center',title: '鐘舵��'}
+
+            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:150}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data.records
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function(res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            limit();
+        }
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(config)', function (obj) {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function() {
+            searchData[this.name] = this.value;
+        });
+        searchData['orderByField'] = obj.field;
+        searchData['orderByType'] = obj.type;
+        tableIns.reload({
+            where: searchData,
+            page: {
+                curr: 1
+            },
+            done: function (res, curr, count) {
+                if (res.code === 403) {
+                    top.location.href = baseUrl+"/";
+                }
+                pageCurr=curr;
+                limit();
+            }
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(config)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id);
+        switch(obj.event) {
+            case 'addData':
+                layer.open({
+                    type: 2,
+                    title: '鏂板',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: false,
+                    content: 'config_detail.html',
+                    success: function(layero, index){
+                    	clearFormVal(layer.getChildFrame('#detail', index));
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                    }
+                });
+                break;
+            case 'refreshData':
+                tableIns.reload({
+                    page: {
+                        curr: pageCurr
+                    }
+                });
+                limit();
+                break;
+            case 'deleteData':
+                var data = checkStatus.data;
+                var ids=[];
+                data.map(function (track) {
+                    ids.push(track.id);
+                });
+                if (ids.length === 0){
+                    layer.msg('璇烽�夋嫨鏁版嵁');
+                } else {
+                    layer.confirm('纭畾鍒犻櫎'+(ids.length===1?'姝�':ids.length)+'鏉℃暟鎹悧', function(){
+                        $.ajax({
+                            url: baseUrl+"/config/delete/auth",
+                            headers: {'token': localStorage.getItem('token')},
+                            data: {ids: ids},
+                            method: 'POST',
+                            traditional:true,
+                            success: function (res) {
+                                if (res.code === 200){
+                                    layer.closeAll();
+                                    tableReload(false);
+                                } else if (res.code === 403){
+                                    top.location.href = baseUrl+"/";
+                                } else {
+                                    layer.msg(res.msg)
+                                }
+                            }
+                        })
+                    });
+                }
+                break;
+            case 'exportData':
+                layer.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
+                    var titles=[];
+                    var fields=[];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function() {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'config': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/config/export/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        dataType:'json',
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll();
+                            if (res.code === 200) {
+                                table.exportFile(titles,res.data,'xls');
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg)
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(config)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            // 璇︽儏
+            case 'detail':
+                layer.open({
+                    type: 2,
+                    title: '璇︽儏',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: false,
+                    content: 'config_detail.html',
+                    success: function(layero, index){
+                        setFormVal(layer.getChildFrame('#detail', index), data, true);
+                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
+                        layer.getChildFrame('#data-detail-submit,#prompt', index).hide();
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                        layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                    }
+                });
+                break;
+            // 缂栬緫
+            case 'edit':
+                layer.open({
+                    type: 2,
+                    title: '淇敼',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: false,
+                    content: 'config_detail.html',
+                    success: function(layero, index){
+                        setFormVal(layer.getChildFrame('#detail', index), data, false);
+                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), false);
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                        layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                    }
+                });
+                break;
+
+        }
+    });
+
+    // 鏁版嵁淇敼鍔ㄤ綔
+    form.on('submit(edit)', function () {
+        var index = layer.load(1, {
+            shade: [0.5,'#000'] //0.1閫忔槑搴︾殑鑳屾櫙
+        });
+        var data = {
+            id: $('#id').val(),
+            name: $('#name').val(),
+            code: $('#code').val(),
+            value: $('#value').val(),
+            type: $('#type').val(),
+            status: $('#status').val(),
+
+        };
+        $.ajax({
+            url: baseUrl+"/config/edit/auth",
+            headers: {'token': localStorage.getItem('token')},
+            data: top.reObject(data),
+            method: 'POST',
+            success: function (res) {
+                if (res.code === 200){
+                    parent.layer.closeAll();
+                    tableReload(true);
+                    $("#data-detail :input").each(function () {
+                        $(this).val("");
+                    });
+                } else if (res.code === 403){
+                    top.location.href = baseUrl+"/";
+                }else {
+                    layer.msg(res.msg)
+                }
+                layer.close(index);
+            }
+        })
+    });
+
+    // 鎼滅储鏍忔悳绱簨浠�
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+    // 鎼滅储鏍忛噸缃簨浠�
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+
+    // 鏃堕棿閫夋嫨鍣�
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    (child ? parent.tableIns : tableIns).reload({
+        where: searchData,
+        page: {
+            curr: pageCurr
+        },
+        done: function (res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            if (res.data.length === 0 && count !== 0) {
+                tableIns.reload({
+                    where: searchData,
+                    page: {
+                        curr: pageCurr-1
+                    }
+                });
+                pageCurr -= 1;
+            }
+            limit(child);
+        }
+    });
+}
+
+function setFormVal(el, data, showImg) {
+    for (var val in data) {
+        var find = el.find(":input[id='" + val + "']");
+        find.val(data[val]);
+        if (showImg){
+            var next = find.next();
+            if (next.get(0)){
+                if (next.get(0).localName === "img") {
+                    find.hide();
+                    next.attr("src", data[val]);
+                    next.show();
+                }
+            }
+        }
+    }
+}
+
+function clearFormVal(el) {
+    $(':input', el)
+        .val('')
+        .removeAttr('checked')
+        .removeAttr('selected');
+}
+
+function detailScreen(index) {
+    var detail = layer.getChildFrame('#data-detail', index);
+    var height = detail.height()+60;
+    if (height > ($(window).height()*0.9)) {
+        height = ($(window).height()*0.9);
+    }
+    layer.style(index, {
+        top: (($(window).height()-height)/3)+"px",
+        height: height+'px'
+    });
+    $(".layui-layer-shade").remove();
+}
+
+$('body').keydown(function () {
+    if (event.keyCode === 13) {
+        $("#search").click();
+    }
+});
diff --git a/src/main/webapp/static/js/locMast/locMast.js b/src/main/webapp/static/js/locMast/locMast.js
new file mode 100644
index 0000000..7ee7a4e
--- /dev/null
+++ b/src/main/webapp/static/js/locMast/locMast.js
@@ -0,0 +1,590 @@
+var pageCurr;
+layui.use(['table','laydate', 'form'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#locMast',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/locMast/list/auth',
+        page: true,
+        limit: 16,
+        limits: [16, 30, 50, 100, 200, 500],
+        even: true,
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        cols: [[
+            {type: 'checkbox', fixed: 'left'}
+            ,{field: 'locNo', align: 'center',title: '搴撲綅鍙�',sort:true}
+            ,{field: 'locSts$', align: 'center',title: '搴撲綅鐘舵��',width:200}
+            ,{field: 'qrCodeValue', align: 'center',title: '浜岀淮鐮佸��', sort:true}
+            ,{field: 'row1', align: 'center',title: '鎺�', sort:true}
+            ,{field: 'bay1', align: 'center',title: '鍒�', sort:true}
+            ,{field: 'lev1', align: 'center',title: '灞�', sort:true}
+            ,{field: 'modiUser$', align: 'center',title: '淇敼浜哄憳', hide:true}
+            ,{field: 'modiTime$', align: 'center',title: '淇敼鏃堕棿', hide:true}
+
+            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:100}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data.records
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function(res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            limit();
+            form.on('checkbox(tableCheckbox)', function (data) {
+                var _index = $(data.elem).attr('table-index')||0;
+                if(data.elem.checked){
+                    res.data[_index][data.value] = 'Y';
+                }else{
+                    res.data[_index][data.value] = 'N';
+                }
+            });
+        }
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(locMast)', function (obj) {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function() {
+            searchData[this.name] = this.value;
+        });
+        searchData['orderByField'] = obj.field;
+        searchData['orderByType'] = obj.type;
+        tableIns.reload({
+            where: searchData,
+            page: {
+                curr: 1
+            },
+            done: function (res, curr, count) {
+                if (res.code === 403) {
+                    top.location.href = baseUrl+"/";
+                }
+                pageCurr=curr;
+                limit();
+            }
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(locMast)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id);
+        switch(obj.event) {
+            case 'addData':
+                layer.open({
+                    type: 2,
+                    title: '鏂板',
+                    maxmin: true,
+                    area: ['500px', top.detailHeight],
+                    shadeClose: false,
+                    content: 'locMast_detail.html',
+                    success: function(layero, index){
+                        layer.getChildFrame('#data-detail-submit-edit', index).hide();
+                    	clearFormVal(layer.getChildFrame('#detail', index));
+                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), false);
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                    }
+                });
+                break;
+            case 'refreshData':
+                tableIns.reload({
+                    page: {
+                        curr: pageCurr
+                    }
+                });
+                limit();
+                break;
+            case 'deleteData':
+                var data = checkStatus.data;
+                if (data.length === 0){
+                    layer.msg('璇烽�夋嫨鏁版嵁');
+                } else {
+                    layer.confirm('纭畾鍒犻櫎'+(data.length===1?'姝�':data.length)+'鏉℃暟鎹悧', function(){
+                        $.ajax({
+                            url: baseUrl+"/locMast/delete/auth",
+                            headers: {'token': localStorage.getItem('token')},
+                            data: {param: JSON.stringify(data)},
+                            method: 'POST',
+                            traditional:true,
+                            success: function (res) {
+                                if (res.code === 200){
+                                    layer.closeAll();
+                                    tableReload(false);
+                                } else if (res.code === 403){
+                                    top.location.href = baseUrl+"/";
+                                } else {
+                                    layer.msg(res.msg)
+                                }
+                            }
+                        })
+                    });
+                }
+                break;
+            case 'exportData':
+                layer.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
+                    var titles=[];
+                    var fields=[];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function() {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'locMast': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/locMast/export/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        dataType:'json',
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll();
+                            if (res.code === 200) {
+                                table.exportFile(titles,res.data,'xls');
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg)
+                            }
+                        }
+                    });
+                });
+                break;
+            case "init":
+                layer.prompt({title: '璇疯緭鍏ュ彛浠わ紝骞堕噸缃簱浣�', formType: 1,   shadeClose: true}, function(pass, idx){
+                    http.get(baseUrl+"/locMast/init/pwd", {pwd: pass}, function (res) {
+                        if (res.data) {
+                            layer.open({
+                                type: 1,
+                                title: '鍒濆鍖栧簱浣�',
+                                area: ["400px"],
+                                maxmin: true,
+                                shadeClose: true,
+                                content: $("#resetLocDiv"),
+                                success: function (layero, index) {
+
+                                }
+                            })
+                        } else {
+                            layer.msg("鍙d护閿欒");
+                        }
+                        layer.close(idx);
+                    })
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(locMast)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            // 璇︽儏
+            case 'detail':
+                layer.open({
+                    type: 2,
+                    title: '璇︽儏',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: false,
+                    content: 'locMast_detail.html',
+                    success: function(layero, index){
+                        setFormVal(layer.getChildFrame('#detail', index), data, true);
+                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
+                        layer.getChildFrame('#data-detail-submit-save,#prompt', index).hide();
+                        layer.getChildFrame('#data-detail-submit-edit', index).hide();
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                        layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                        layero.find('iframe')[0].contentWindow.layui.form.render('checkbox');
+                    }
+                });
+                break;
+            // 缂栬緫
+            case 'edit':
+                layer.open({
+                    type: 2,
+                    title: '淇敼',
+                    maxmin: true,
+                    area: ['500px', top.detailHeight],
+                    shadeClose: false,
+                    content: 'locMast_detail.html',
+                    success: function(layero, index){
+                        layer.getChildFrame('#data-detail-submit-save', index).hide();
+                        setFormVal(layer.getChildFrame('#detail', index), data, false);
+                        // top.convertDisabled(layer.getChildFrame('#data-detail :input', index), false);
+                        top.convertDisabled(layer.getChildFrame('#locNo', index), true);
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                        layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                        layero.find('iframe')[0].contentWindow.layui.form.render('checkbox');
+                    }
+                });
+                break;
+            case 'whsType':
+                var param = top.reObject(data).whsType;
+                if (param === undefined) {
+                    layer.msg("鏃犳暟鎹�");
+                } else {
+                   layer.open({
+                       type: 2,
+                       title: '搴撲綅璇︽儏',
+                       maxmin: true,
+                       area: [top.detailWidth, top.detailHeight],
+                       shadeClose: false,
+                       content: '../basWhs/basWhs_detail.html',
+                       success: function(layero, index){
+                           $.ajax({
+                               url: baseUrl+"/basWhs/"+ param +"/auth",
+                               headers: {'token': localStorage.getItem('token')},
+                               method: 'GET',
+                               success: function (res) {
+                                   if (res.code === 200){
+                                       setFormVal(layer.getChildFrame('#detail', index), res.data, true);
+                                       top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
+                                       layer.getChildFrame('#data-detail-submit-save,#data-detail-submit-edit,#prompt', index).hide();
+                                       layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                                       layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                                       layero.find('iframe')[0].contentWindow.layui.form.render('checkbox');
+                                   } else if (res.code === 403){
+                                       parent.location.href = "/";
+                                   }else {
+                                       layer.msg(res.msg)
+                                   }
+                               }
+                           })
+                       }
+                   });
+                }
+                break;
+            case 'modiUser':
+                var param = top.reObject(data).modiUser;
+                if (param === undefined) {
+                    layer.msg("鏃犳暟鎹�");
+                } else {
+                   layer.open({
+                       type: 2,
+                       title: '淇敼璇︽儏',
+                       maxmin: true,
+                       area: [top.detailWidth, top.detailHeight],
+                       shadeClose: false,
+                       content: '../user/user_detail.html',
+                       success: function(layero, index){
+                           $.ajax({
+                               url: baseUrl+"/user/"+ param +"/auth",
+                               headers: {'token': localStorage.getItem('token')},
+                               method: 'GET',
+                               success: function (res) {
+                                   if (res.code === 200){
+                                       setFormVal(layer.getChildFrame('#detail', index), res.data, true);
+                                       top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
+                                       layer.getChildFrame('#password,#createTime\\$,#status', index).parent().parent().hide();
+                                       layer.getChildFrame('#data-detail-submit,#prompt', index).hide();
+                                       layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                                       layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                                       layero.find('iframe')[0].contentWindow.layui.form.render('checkbox');
+                                   } else if (res.code === 403){
+                                       parent.location.href = "/";
+                                   }else {
+                                       layer.msg(res.msg)
+                                   }
+                               }
+                           })
+                       }
+                   });
+                }
+                break;
+            case 'appeUser':
+                var param = top.reObject(data).appeUser;
+                if (param === undefined) {
+                    layer.msg("鏃犳暟鎹�");
+                } else {
+                   layer.open({
+                       type: 2,
+                       title: '鍒涜鎯�',
+                       maxmin: true,
+                       area: [top.detailWidth, top.detailHeight],
+                       shadeClose: false,
+                       content: '../user/user_detail.html',
+                       success: function(layero, index){
+                           $.ajax({
+                               url: baseUrl+"/user/"+ param +"/auth",
+                               headers: {'token': localStorage.getItem('token')},
+                               method: 'GET',
+                               success: function (res) {
+                                   if (res.code === 200){
+                                       setFormVal(layer.getChildFrame('#detail', index), res.data, true);
+                                       top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
+                                       layer.getChildFrame('#data-detail-submit', index).hide();
+                                       layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                                       layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                                       layero.find('iframe')[0].contentWindow.layui.form.render('checkbox');
+                                   } else if (res.code === 403){
+                                       parent.location.href = "/";
+                                   }else {
+                                       layer.msg(res.msg)
+                                   }
+                               }
+                           })
+                       }
+                   });
+                }
+                break;
+
+        }
+    });
+
+    // 鍒濆鍖栦繚瀛�
+    form.on('submit(initDo)', function (data) {
+        $.ajax({
+            url: baseUrl+"/locMast/init/auth",
+            headers: {'token': localStorage.getItem('token')},
+            data: data.field,
+            method: 'POST',
+            async: false,
+            success: function (res) {
+                if (res.code === 200){
+                    layer.msg(res.msg);
+                    layer.closeAll();
+                    tableReload(false);
+                } else if (res.code === 403){
+                    parent.location.href = "/";
+                }else {
+                    layer.msg(res.msg)
+                }
+            }
+        })
+    });
+
+    // 鏁版嵁淇濆瓨鍔ㄤ綔
+    form.on('submit(save)', function () {
+        if (banMsg != null){
+            layer.msg(banMsg);
+            return;
+        }
+        method("add");
+    });
+
+    // 鏁版嵁淇敼鍔ㄤ綔
+    form.on('submit(edit)', function () {
+        method("update")
+    });
+
+    function method(name){
+        var index = layer.load(1, {
+            shade: [0.5,'#000'] //0.1閫忔槑搴︾殑鑳屾櫙
+        });
+        var data = {
+//            id: $('#id').val(),
+            locNo: $('#locNo').val(),
+            whsType: $('#whsType').val(),
+            pltType: $('#pltType').val(),
+            ctnType: $('#ctnType').val(),
+            locSts: $('#locSts').val(),
+            sheetNo: $('#sheetNo').val(),
+            crnNo: $('#crnNo').val(),
+            row1: $('#row1').val(),
+            bay1: $('#bay1').val(),
+            lev1: $('#lev1').val(),
+            fullPlt: $('#fullPlt').val(),
+            locType1: $('#locType1').val(),
+            outEnable: $('#outEnable').val(),
+            ioTime: top.strToDate($('#ioTime\\$').val()),
+            firstTime: top.strToDate($('#firstTime\\$').val()),
+            modiUser: $('#modiUser').val(),
+            modiTime: top.strToDate($('#modiTime\\$').val()),
+            appeUser: $('#appeUser').val(),
+            appeTime: top.strToDate($('#appeTime\\$').val()),
+            errorTime: top.strToDate($('#errorTime\\$').val()),
+            errorMemo: $('#errorMemo').val(),
+            ctnKind: $('#ctnKind').val(),
+            scWeight: $('#scWeight').val(),
+            invWh: $('#invWh').val(),
+            mk: $('#mk').val(),
+            barcode: $('#barcode').val(),
+            PdcType: $('#PdcType').val(),
+            ctnNo: $('#ctnNo').val(),
+
+        };
+        $.ajax({
+            url: baseUrl+"/locMast/"+name+"/auth",
+            headers: {'token': localStorage.getItem('token')},
+            data: top.reObject(data),
+            method: 'POST',
+            success: function (res) {
+                if (res.code === 200){
+                    parent.layer.closeAll();
+                    parent.$(".layui-laypage-btn")[0].click();
+                    $("#data-detail :input").each(function () {
+                        $(this).val("");
+                    });
+                } else if (res.code === 403){
+                    top.location.href = baseUrl+"/";
+                }else {
+                    layer.msg(res.msg)
+                }
+                layer.close(index);
+            }
+        })
+    }
+
+    // 澶嶉�夋浜嬩欢
+    form.on('checkbox(detailCheckbox)', function (data) {
+        var el = data.elem;
+        if (el.checked) {
+            $(el).val('Y');
+        } else {
+            $(el).val('N');
+        }
+    });
+
+    // 鎼滅储鏍忔悳绱簨浠�
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+    // 鎼滅储鏍忛噸缃簨浠�
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+
+    // 鏃堕棿閫夋嫨鍣�
+    layDate.render({
+        elem: '#ioTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#firstTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#modiTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#appeTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#errorTime\\$',
+        type: 'datetime'
+    });
+
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    (child ? parent.tableIns : tableIns).reload({
+        where: searchData,
+        page: {
+            curr: pageCurr
+        },
+        done: function (res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            if (res.data.length === 0 && count !== 0) {
+                tableIns.reload({
+                    where: searchData,
+                    page: {
+                        curr: pageCurr-1
+                    }
+                });
+                pageCurr -= 1;
+            }
+            limit(child);
+        }
+    });
+}
+
+function setFormVal(el, data, showImg) {
+    for (var val in data) {
+        var find = el.find(":input[id='" + val + "']");
+        if (find[0]!=null){
+            if (find[0].type === 'checkbox'){
+                if (data[val]==='Y'){
+                    find.attr("checked","checked");
+                    find.val('Y');
+                } else {
+                    find.remove("checked");
+                    find.val('N');
+                }
+                continue;
+            }
+        }
+        find.val(data[val]);
+        if (showImg){
+            var next = find.next();
+            if (next.get(0)){
+                if (next.get(0).localName === "img") {
+                    find.hide();
+                    next.attr("src", data[val]);
+                    next.show();
+                }
+            }
+        }
+    }
+}
+
+function clearFormVal(el) {
+    $(':input', el)
+        .val('')
+        .removeAttr('checked')
+        .removeAttr('selected');
+}
+
+function detailScreen(index) {
+    var detail = layer.getChildFrame('#data-detail', index);
+    var height = detail.height()+60;
+    if (height > ($(window).height()*0.9)) {
+        height = ($(window).height()*0.8);
+    }
+    layer.style(index, {
+//        top: (($(window).height()-height)/3)+"px",
+        height: height+'px'
+    });
+}
+
+$('body').keydown(function () {
+    if (event.keyCode === 13) {
+        $("#search").click();
+    }
+});
diff --git a/src/main/webapp/static/js/operateLog/operateLog.js b/src/main/webapp/static/js/operateLog/operateLog.js
new file mode 100644
index 0000000..d8c9acf
--- /dev/null
+++ b/src/main/webapp/static/js/operateLog/operateLog.js
@@ -0,0 +1,396 @@
+var pageCurr;
+layui.use(['table','laydate', 'form'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#operateLog',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/operateLog/list/auth',
+        page: true,
+        limit: 16,
+        limits: [16, 30, 50, 100, 200, 500],
+        even: true,
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        cols: [[
+            // {type: 'checkbox'}
+            {field: 'id', title: 'ID', sort: true,align: 'center', width: 80}
+            ,{field: 'userId$', align: 'center',title: '鐢ㄦ埛'}
+            ,{field: 'action', align: 'center',title: '鎿嶄綔鍐呭'}
+            ,{field: 'ip', align: 'center',title: '瀹㈡埛绔疘P'}
+            ,{field: 'request', align: 'center',title: '璇锋眰鏁版嵁'}
+            ,{field: 'response', align: 'center',title: '鍝嶅簲鏁版嵁'}
+            ,{field: 'createTime$', align: 'center',title: '娣诲姞鏃堕棿'}
+
+            // ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:100}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data.records
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function(res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            limit();
+        }
+    });
+
+    table.on('edit(operateLog)', function (obj) {
+        $('body').keydown(function () {
+            if (event.keyCode === 13) {
+                layer.confirm('淇濆瓨淇敼?', function(){
+
+                });
+            }
+        });
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(operateLog)', function (obj) {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function() {
+            searchData[this.name] = this.value;
+        });
+        searchData['orderByField'] = obj.field;
+        searchData['orderByType'] = obj.type;
+        tableIns.reload({
+            where: searchData,
+            page: {
+                curr: 1
+            },
+            done: function (res, curr, count) {
+                if (res.code === 403) {
+                    top.location.href = baseUrl+"/";
+                }
+                pageCurr=curr;
+                limit();
+            }
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(operateLog)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id);
+        switch(obj.event) {
+            case 'addData':
+                layer.open({
+                    type: 2,
+                    title: '鏂板',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: false,
+                    content: 'operateLog_detail.html',
+                    success: function(layero, index){
+                    	clearFormVal(layer.getChildFrame('#detail', index));
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                    }
+                });
+                break;
+            case 'refreshData':
+                tableIns.reload({
+                    page: {
+                        curr: pageCurr
+                    }
+                });
+                limit();
+                break;
+            case 'deleteData':
+                var data = checkStatus.data;
+                var ids=[];
+                data.map(function (track) {
+                    ids.push(track.id);
+                });
+                if (ids.length === 0){
+                    layer.msg('璇烽�夋嫨鏁版嵁');
+                } else {
+                    layer.confirm('纭畾鍒犻櫎'+(ids.length===1?'姝�':ids.length)+'鏉℃暟鎹悧', function(){
+                        $.ajax({
+                            url: baseUrl+"/operateLog/delete/auth",
+                            headers: {'token': localStorage.getItem('token')},
+                            data: {ids: ids},
+                            method: 'POST',
+                            traditional:true,
+                            success: function (res) {
+                                if (res.code === 200){
+                                    layer.closeAll();
+                                    tableReload(false);
+                                } else if (res.code === 403){
+                                    top.location.href = baseUrl+"/";
+                                } else {
+                                    layer.msg(res.msg)
+                                }
+                            }
+                        })
+                    });
+                }
+                break;
+            case 'exportData':
+                layer.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
+                    var titles=[];
+                    var fields=[];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function() {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'operateLog': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/operateLog/export/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        dataType:'json',
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll();
+                            if (res.code === 200) {
+                                table.exportFile(titles,res.data,'xls');
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg)
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(operateLog)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            // 璇︽儏
+            case 'detail':
+                layer.open({
+                    type: 2,
+                    title: '璇︽儏',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: false,
+                    content: 'operateLog_detail.html',
+                    success: function(layero, index){
+                        setFormVal(layer.getChildFrame('#detail', index), data, true);
+                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
+                        layer.getChildFrame('#data-detail-submit,#prompt', index).hide();
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                        layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                    }
+                });
+                break;
+            // 缂栬緫
+            case 'edit':
+                layer.open({
+                    type: 2,
+                    title: '淇敼',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: false,
+                    content: 'operateLog_detail.html',
+                    success: function(layero, index){
+                        setFormVal(layer.getChildFrame('#detail', index), data, false);
+                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), false);
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                        layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                    }
+                });
+                break;
+            case 'userId':
+                var param = top.reObject(data).userId;
+                if (param === undefined) {
+                    layer.msg("鏃犳暟鎹�");
+                } else {
+                   layer.open({
+                       type: 2,
+                       title: '璇︽儏',
+                       maxmin: true,
+                       area: [top.detailHeight, top.detailWidth],
+                       shadeClose: false,
+                       content: '../user/user_detail.html',
+                       success: function(layero, index){
+                           $.ajax({
+                               url: baseUrl+"/user/"+ param +"/auth",
+                               headers: {'token': localStorage.getItem('token')},
+                               method: 'GET',
+                               success: function (res) {
+                                   if (res.code === 200){
+                                       setFormVal(layer.getChildFrame('#detail', index), res.data, true);
+                                       top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
+                                       layer.getChildFrame('#data-detail-submit,#prompt', index).hide();
+                                       layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                                       layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                                   } else if (res.code === 403){
+                                       parent.location.href = "/";
+                                   }else {
+                                       layer.msg(res.msg)
+                                   }
+                               }
+                           })
+                       }
+                   });
+                }
+                break;
+
+        }
+    });
+
+    // 鏁版嵁淇敼鍔ㄤ綔
+    form.on('submit(edit)', function () {
+        var index = layer.load(1, {
+            shade: [0.5,'#000'] //0.1閫忔槑搴︾殑鑳屾櫙
+        });
+        var data = {
+            id: $('#id').val(),
+            action: $('#action').val(),
+            userId: $('#userId').val(),
+            ip: $('#ip').val(),
+            request: $('#request').val(),
+            response: $('#response').val(),
+            createTime: top.strToDate($('#createTime\\$').val()),
+
+        };
+        $.ajax({
+            url: baseUrl+"/operateLog/edit/auth",
+            headers: {'token': localStorage.getItem('token')},
+            data: top.reObject(data),
+            method: 'POST',
+            success: function (res) {
+                if (res.code === 200){
+                    parent.layer.closeAll();
+                    tableReload(true);
+                    $("#data-detail :input").each(function () {
+                        $(this).val("");
+                    });
+                } else if (res.code === 403){
+                    top.location.href = baseUrl+"/";
+                }else {
+                    layer.msg(res.msg)
+                }
+                layer.close(index);
+            }
+        })
+    });
+
+    // 鎼滅储鏍忔悳绱簨浠�
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+    // 鎼滅储鏍忛噸缃簨浠�
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+
+    // 鏃堕棿閫夋嫨鍣�
+    layDate.render({
+        elem: '#createTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '.layui-laydate-range'
+        ,type: 'datetime'
+        ,range: true
+    });
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    (child ? parent.tableIns : tableIns).reload({
+        where: searchData,
+        page: {
+            curr: pageCurr
+        },
+        done: function (res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            if (res.data.length === 0 && count !== 0) {
+                tableIns.reload({
+                    where: searchData,
+                    page: {
+                        curr: pageCurr-1
+                    }
+                });
+                pageCurr -= 1;
+            }
+            limit(child);
+        }
+    });
+}
+
+function setFormVal(el, data, showImg) {
+    for (var val in data) {
+        var find = el.find(":input[id='" + val + "']");
+        find.val(data[val]);
+        if (showImg){
+            var next = find.next();
+            if (next.get(0)){
+                if (next.get(0).localName === "img") {
+                    find.hide();
+                    next.attr("src", data[val]);
+                    next.show();
+                }
+            }
+        }
+    }
+}
+
+function clearFormVal(el) {
+    $(':input', el)
+        .val('')
+        .removeAttr('checked')
+        .removeAttr('selected');
+}
+
+function detailScreen(index) {
+    var detail = layer.getChildFrame('#data-detail', index);
+    var height = detail.height()+60;
+    if (height > ($(window).height()*0.9)) {
+        height = ($(window).height()*0.9);
+    }
+    layer.style(index, {
+        top: (($(window).height()-height)/3)+"px",
+        height: height+'px'
+    });
+    $(".layui-layer-shade").remove();
+}
+
diff --git a/src/main/webapp/static/js/permission/permission.js b/src/main/webapp/static/js/permission/permission.js
new file mode 100644
index 0000000..ca06b66
--- /dev/null
+++ b/src/main/webapp/static/js/permission/permission.js
@@ -0,0 +1,378 @@
+var pageCurr;
+layui.use(['table','laydate', 'form'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#permission',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/permission/list/auth',
+        page: true,
+        limit: 16,
+        limits: [16, 30, 50, 100, 200, 500],
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        cols: [[
+            {type: 'checkbox', fixed: 'left'}
+            ,{field: 'id', title: 'ID', sort: true,align: 'center', fixed: 'left', width: 80}
+            ,{field: 'name', align: 'center',title: '鏉冮檺鍚嶇О'}
+            ,{field: 'action', align: 'center',title: '鎺ュ彛鍦板潃'}
+            ,{field: 'resourceName', align: 'center',title: '鎵�灞炶彍鍗�',event: 'Resource', style: 'text-decoration: underline;cursor:pointer'}
+            ,{field: 'status$', align: 'center',title: '鐘舵��'}
+
+            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:150}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data.records
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function(res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            limit();
+        }
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(permission)', function (obj) {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function() {
+            searchData[this.name] = this.value;
+        });
+        searchData['orderByField'] = obj.field;
+        searchData['orderByType'] = obj.type;
+        tableIns.reload({
+            where: searchData,
+            page: {
+                curr: 1
+            },
+            done: function (res, curr, count) {
+                if (res.code === 403) {
+                    top.location.href = baseUrl+"/";
+                }
+                pageCurr=curr;
+                limit();
+            }
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(permission)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id);
+        switch(obj.event) {
+            case 'addData':
+                layer.open({
+                    type: 2,
+                    title: '鏂板',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: false,
+                    content: 'permission_detail.html',
+                    success: function(layero, index){
+                    	clearFormVal(layer.getChildFrame('#detail', index));
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                    }
+                });
+                break;
+            case 'refreshData':
+                tableIns.reload({
+                    page: {
+                        curr: pageCurr
+                    }
+                });
+                limit();
+                break;
+            case 'deleteData':
+                var data = checkStatus.data;
+                var ids=[];
+                data.map(function (track) {
+                    ids.push(track.id);
+                });
+                if (ids.length === 0){
+                    layer.msg('璇烽�夋嫨鏁版嵁');
+                } else {
+                    layer.confirm('纭畾鍒犻櫎'+(ids.length===1?'姝�':ids.length)+'鏉℃暟鎹悧', function(){
+                        $.ajax({
+                            url: baseUrl+"/permission/delete/auth",
+                            headers: {'token': localStorage.getItem('token')},
+                            data: {ids: ids},
+                            method: 'POST',
+                            traditional:true,
+                            success: function (res) {
+                                if (res.code === 200){
+                                    layer.closeAll();
+                                    tableReload(false);
+                                } else if (res.code === 403){
+                                    top.location.href = baseUrl+"/";
+                                } else {
+                                    layer.msg(res.msg)
+                                }
+                            }
+                        })
+                    });
+                }
+                break;
+            case 'exportData':
+                layer.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
+                    var titles=[];
+                    var fields=[];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function() {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'permission': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/permission/export/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        dataType:'json',
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll();
+                            if (res.code === 200) {
+                                table.exportFile(titles,res.data,'xls');
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg)
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(permission)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            // 璇︽儏
+            case 'detail':
+                layer.open({
+                    type: 2,
+                    title: '璇︽儏',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: false,
+                    content: 'permission_detail.html',
+                    success: function(layero, index){
+                        setFormVal(layer.getChildFrame('#detail', index), data, true);
+                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
+                        layer.getChildFrame('#data-detail-submit', index).hide();
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                        layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                    }
+                });
+                break;
+            // 缂栬緫
+            case 'edit':
+                layer.open({
+                    type: 2,
+                    title: '淇敼',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: false,
+                    content: 'permission_detail.html',
+                    success: function(layero, index){
+                        setFormVal(layer.getChildFrame('#detail', index), data, false);
+                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), false);
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                        layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                    }
+                });
+                break;
+            case 'Resource':
+                var param = top.reObject(data).resourceId;
+                if (param === undefined) {
+                    layer.msg("鏃犳暟鎹�");
+                } else {
+                   layer.open({
+                       type: 2,
+                       title: '鎵�灞炶鎯�',
+                       maxmin: true,
+                       area: [top.detailHeight, top.detailWidth],
+                       shadeClose: false,
+                       content: '../resource/resource_detail.html',
+                       success: function(layero, index){
+                           $.ajax({
+                               url: baseUrl+"/resource/"+ param +"/auth",
+                               headers: {'token': localStorage.getItem('token')},
+                               method: 'GET',
+                               success: function (res) {
+                                   if (res.code === 200){
+                                       setFormVal(layer.getChildFrame('#detail', index), res.data, true);
+                                       top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
+                                       layer.getChildFrame('#data-detail-submit', index).hide();
+                                       layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                                       layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                                   } else if (res.code === 403){
+                                       parent.location.href = "/";
+                                   }else {
+                                       layer.msg(res.msg)
+                                   }
+                               }
+                           })
+                       }
+                   });
+                }
+                break;
+
+        }
+    });
+
+    // 鏁版嵁淇敼鍔ㄤ綔
+    form.on('submit(edit)', function () {
+        var index = layer.load(1, {
+            shade: [0.5,'#000'] //0.1閫忔槑搴︾殑鑳屾櫙
+        });
+        var data = {
+            id: $('#id').val(),
+            name: $('#name').val(),
+            action: $('#action').val(),
+            resourceId: $('#resourceId').val(),
+            status: $('#status').val(),
+
+        };
+        $.ajax({
+            url: baseUrl+"/permission/edit/auth",
+            headers: {'token': localStorage.getItem('token')},
+            data: top.reObject(data),
+            method: 'POST',
+            success: function (res) {
+                if (res.code === 200){
+                    parent.layer.closeAll();
+                    tableReload(true);
+                    $("#data-detail :input").each(function () {
+                        $(this).val("");
+                    });
+                } else if (res.code === 403){
+                    top.location.href = baseUrl+"/";
+                }else {
+                    layer.msg(res.msg)
+                }
+                layer.close(index);
+            }
+        })
+    });
+
+    // 鎼滅储鏍忔悳绱簨浠�
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+    // 鎼滅储鏍忛噸缃簨浠�
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+
+    // 鏃堕棿閫夋嫨鍣�
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    (child ? parent.tableIns : tableIns).reload({
+        where: searchData,
+        page: {
+            curr: pageCurr
+        },
+        done: function (res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            if (res.data.length === 0 && count !== 0) {
+                tableIns.reload({
+                    where: searchData,
+                    page: {
+                        curr: pageCurr-1
+                    }
+                });
+                pageCurr -= 1;
+            }
+            limit(child);
+        }
+    });
+}
+
+function setFormVal(el, data, showImg) {
+    for (var val in data) {
+        var find = el.find(":input[id='" + val + "']");
+        find.val(data[val]);
+        if (showImg){
+            var next = find.next();
+            if (next.get(0)){
+                if (next.get(0).localName === "img") {
+                    find.hide();
+                    next.attr("src", data[val]);
+                    next.show();
+                }
+            }
+        }
+    }
+}
+
+function clearFormVal(el) {
+    $(':input', el)
+        .val('')
+        .removeAttr('checked')
+        .removeAttr('selected');
+}
+
+function detailScreen(index) {
+    var detail = layer.getChildFrame('#data-detail', index);
+    var height = detail.height()+60;
+    if (height > ($(window).height()*0.9)) {
+        height = ($(window).height()*0.9);
+    }
+    layer.style(index, {
+        top: (($(window).height()-height)/3)+"px",
+        height: height+'px'
+    });
+    $(".layui-layer-shade").remove();
+}
+
+$('body').keydown(function () {
+    if (event.keyCode === 13) {
+        $("#search").click();
+    }
+});
diff --git a/src/main/webapp/static/js/resource/resource.js b/src/main/webapp/static/js/resource/resource.js
new file mode 100644
index 0000000..5b5610d
--- /dev/null
+++ b/src/main/webapp/static/js/resource/resource.js
@@ -0,0 +1,382 @@
+var pageCurr;
+layui.use(['table','laydate', 'form'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#resource',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/resource/list/auth',
+        page: true,
+        limit: 16,
+        limits: [16, 30, 50, 100, 200, 500],
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        cols: [[
+            {type: 'checkbox', fixed: 'left'}
+            ,{field: 'id', title: 'ID', sort: true,align: 'center', fixed: 'left', width: 80}
+            ,{field: 'code', align: 'center',title: '鑿滃崟缂栫爜'}
+            ,{field: 'name', align: 'center',title: '鑿滃崟鍚嶇О'}
+            ,{field: 'resourceName', align: 'center',title: '鐖剁骇鑿滃崟'}
+            ,{field: 'level$', align: 'center',title: '鑿滃崟绛夌骇'}
+            ,{field: 'sort', align: 'center',title: '鎺掑簭'}
+            // ,{field: 'status$', align: 'center',title: '鐘舵��'}
+
+            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:150}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data.records
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function(res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            limit();
+        }
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(resource)', function (obj) {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function() {
+            searchData[this.name] = this.value;
+        });
+        searchData['orderByField'] = obj.field;
+        searchData['orderByType'] = obj.type;
+        tableIns.reload({
+            where: searchData,
+            page: {
+                curr: 1
+            },
+            done: function (res, curr, count) {
+                if (res.code === 403) {
+                    top.location.href = baseUrl+"/";
+                }
+                pageCurr=curr;
+                limit();
+            }
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(resource)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id);
+        switch(obj.event) {
+            case 'addData':
+                layer.open({
+                    type: 2,
+                    title: '鏂板',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: false,
+                    content: 'resource_detail.html',
+                    success: function(layero, index){
+                    	clearFormVal(layer.getChildFrame('#detail', index));
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                    }
+                });
+                break;
+            case 'refreshData':
+                tableIns.reload({
+                    page: {
+                        curr: pageCurr
+                    }
+                });
+                limit();
+                break;
+            case 'deleteData':
+                var data = checkStatus.data;
+                var ids=[];
+                data.map(function (track) {
+                    ids.push(track.id);
+                });
+                if (ids.length === 0){
+                    layer.msg('璇烽�夋嫨鏁版嵁');
+                } else {
+                    layer.confirm('纭畾鍒犻櫎'+(ids.length===1?'姝�':ids.length)+'鏉℃暟鎹悧', function(){
+                        $.ajax({
+                            url: baseUrl+"/resource/delete/auth",
+                            headers: {'token': localStorage.getItem('token')},
+                            data: {ids: ids},
+                            method: 'POST',
+                            traditional:true,
+                            success: function (res) {
+                                if (res.code === 200){
+                                    layer.closeAll();
+                                    tableReload(false);
+                                } else if (res.code === 403){
+                                    top.location.href = baseUrl+"/";
+                                } else {
+                                    layer.msg(res.msg)
+                                }
+                            }
+                        })
+                    });
+                }
+                break;
+            case 'exportData':
+                layer.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
+                    var titles=[];
+                    var fields=[];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function() {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'resource': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/resource/export/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        dataType:'json',
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll();
+                            if (res.code === 200) {
+                                table.exportFile(titles,res.data,'xls');
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg)
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(resource)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            // 璇︽儏
+            case 'detail':
+                layer.open({
+                    type: 2,
+                    title: '璇︽儏',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: false,
+                    content: 'resource_detail.html',
+                    success: function(layero, index){
+                        setFormVal(layer.getChildFrame('#detail', index), data, true);
+                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
+                        layer.getChildFrame('#data-detail-submit,#prompt', index).hide();
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                        layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                    }
+                });
+                break;
+            // 缂栬緫
+            case 'edit':
+                layer.open({
+                    type: 2,
+                    title: '淇敼',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: false,
+                    content: 'resource_detail.html',
+                    success: function(layero, index){
+                        setFormVal(layer.getChildFrame('#detail', index), data, false);
+                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), false);
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                        layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                    }
+                });
+                break;
+            case 'Resource':
+                var param = top.reObject(data).resourceId;
+                if (param === undefined) {
+                    layer.msg("鏃犳暟鎹�");
+                } else {
+                   layer.open({
+                       type: 2,
+                       title: '鐖剁骇璇︽儏',
+                       maxmin: true,
+                       area: [top.detailHeight, top.detailWidth],
+                       shadeClose: false,
+                       content: '../resource/resource_detail.html',
+                       success: function(layero, index){
+                           $.ajax({
+                               url: baseUrl+"/resource/"+ param +"/auth",
+                               headers: {'token': localStorage.getItem('token')},
+                               method: 'GET',
+                               success: function (res) {
+                                   if (res.code === 200){
+                                       setFormVal(layer.getChildFrame('#detail', index), res.data, true);
+                                       top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
+                                       layer.getChildFrame('#data-detail-submit,#prompt', index).hide();
+                                       layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                                       layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                                   } else if (res.code === 403){
+                                       parent.location.href = "/";
+                                   }else {
+                                       layer.msg(res.msg)
+                                   }
+                               }
+                           })
+                       }
+                   });
+                }
+                break;
+
+        }
+    });
+
+    // 鏁版嵁淇敼鍔ㄤ綔
+    form.on('submit(edit)', function () {
+        var index = layer.load(1, {
+            shade: [0.5,'#000'] //0.1閫忔槑搴︾殑鑳屾櫙
+        });
+        var data = {
+            id: $('#id').val(),
+            code: $('#code').val(),
+            name: $('#name').val(),
+            resourceId: $('#resourceId').val(),
+            level: $('#level').val(),
+            sort: $('#sort').val(),
+            status: $('#status').val(),
+
+        };
+        $.ajax({
+            url: baseUrl+"/resource/edit/auth",
+            headers: {'token': localStorage.getItem('token')},
+            data: top.reObject(data),
+            method: 'POST',
+            success: function (res) {
+                if (res.code === 200){
+                    parent.layer.closeAll();
+                    tableReload(true);
+                    $("#data-detail :input").each(function () {
+                        $(this).val("");
+                    });
+                } else if (res.code === 403){
+                    top.location.href = baseUrl+"/";
+                }else {
+                    layer.msg(res.msg)
+                }
+                layer.close(index);
+            }
+        })
+    });
+
+    // 鎼滅储鏍忔悳绱簨浠�
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+    // 鎼滅储鏍忛噸缃簨浠�
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+
+    // 鏃堕棿閫夋嫨鍣�
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    (child ? parent.tableIns : tableIns).reload({
+        where: searchData,
+        page: {
+            curr: pageCurr
+        },
+        done: function (res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            if (res.data.length === 0 && count !== 0) {
+                tableIns.reload({
+                    where: searchData,
+                    page: {
+                        curr: pageCurr-1
+                    }
+                });
+                pageCurr -= 1;
+            }
+            limit(child);
+        }
+    });
+}
+
+function setFormVal(el, data, showImg) {
+    for (var val in data) {
+        var find = el.find(":input[id='" + val + "']");
+        find.val(data[val]);
+        if (showImg){
+            var next = find.next();
+            if (next.get(0)){
+                if (next.get(0).localName === "img") {
+                    find.hide();
+                    next.attr("src", data[val]);
+                    next.show();
+                }
+            }
+        }
+    }
+}
+
+function clearFormVal(el) {
+    $(':input', el)
+        .val('')
+        .removeAttr('checked')
+        .removeAttr('selected');
+}
+
+function detailScreen(index) {
+    var detail = layer.getChildFrame('#data-detail', index);
+    var height = detail.height()+60;
+    if (height > ($(window).height()*0.9)) {
+        height = ($(window).height()*0.9);
+    }
+    layer.style(index, {
+        top: (($(window).height()-height)/3)+"px",
+        height: height+'px'
+    });
+    $(".layui-layer-shade").remove();
+}
+
+$('body').keydown(function () {
+    if (event.keyCode === 13) {
+        $("#search").click();
+    }
+});
diff --git a/src/main/webapp/static/js/role/role.js b/src/main/webapp/static/js/role/role.js
new file mode 100644
index 0000000..3bdce29
--- /dev/null
+++ b/src/main/webapp/static/js/role/role.js
@@ -0,0 +1,410 @@
+var pageCurr;
+var roleId;
+var powerTreeData;
+$(function (){
+    $.ajax({
+        url: baseUrl+"/power/list/auth",
+        headers: {'token': localStorage.getItem('token')},
+        method: 'GET',
+        success: function (res) {
+            if (res.code === 200){
+                powerTreeData = res.data;
+            } else if (res.code === 403){
+                top.location.href = baseUrl+"/";
+            } else {
+                layer.msg(res.msg)
+            }
+        }
+    })
+});
+
+layui.use(['table','laydate', 'form'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#role',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/role/list/auth',
+        page: true,
+        limit: 16,
+        limits: [16, 30, 50, 100, 200, 500],
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        cols: [[
+            {type: 'checkbox', fixed: 'left'}
+            ,{field: 'id', title: 'ID', sort: true,align: 'center', fixed: 'left', width: 80}
+            ,{field: 'code', align: 'center',title: '缂栫爜'}
+            ,{field: 'name', align: 'center',title: '鍚嶇О'}
+            ,{field: 'leader$', align: 'center',title: '涓婄骇'}
+            // ,{field: 'level$', align: 'center',title: '瑙掕壊绛夌骇'}
+
+            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:150}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data.records
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function(res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            limit();
+        }
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(role)', function (obj) {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function() {
+            searchData[this.name] = this.value;
+        });
+        searchData['orderByField'] = obj.field;
+        searchData['orderByType'] = obj.type;
+        tableIns.reload({
+            where: searchData,
+            page: {
+                curr: 1
+            },
+            done: function (res, curr, count) {
+                if (res.code === 403) {
+                    top.location.href = baseUrl+"/";
+                }
+                pageCurr=curr;
+                limit();
+            }
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(role)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id);
+        switch(obj.event) {
+            case 'addData':
+                layer.open({
+                    type: 2,
+                    title: '鏂板',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: false,
+                    content: 'role_detail.html',
+                    success: function(layero, index){
+                    	clearFormVal(layer.getChildFrame('#detail', index));
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                    }
+                });
+                break;
+            case 'refreshData':
+                tableIns.reload({
+                    page: {
+                        curr: pageCurr
+                    }
+                });
+                limit();
+                break;
+            case 'deleteData':
+                var data = checkStatus.data;
+                var ids=[];
+                data.map(function (track) {
+                    ids.push(track.id);
+                });
+                if (ids.length === 0){
+                    layer.msg('璇烽�夋嫨鏁版嵁');
+                } else {
+                    layer.confirm('纭畾鍒犻櫎'+(ids.length===1?'姝�':ids.length)+'鏉℃暟鎹悧', function(){
+                        $.ajax({
+                            url: baseUrl+"/role/delete/auth",
+                            headers: {'token': localStorage.getItem('token')},
+                            data: {ids: ids},
+                            method: 'POST',
+                            traditional:true,
+                            success: function (res) {
+                                if (res.code === 200){
+                                    layer.closeAll();
+                                    tableReload(false);
+                                } else if (res.code === 403){
+                                    top.location.href = baseUrl+"/";
+                                } else {
+                                    layer.msg(res.msg)
+                                }
+                            }
+                        })
+                    });
+                }
+                break;
+            case 'exportData':
+                layer.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
+                    var titles=[];
+                    var fields=[];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function() {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'role': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/role/export/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        dataType:'json',
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll();
+                            if (res.code === 200) {
+                                table.exportFile(titles,res.data,'xls');
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg)
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(role)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            // 璇︽儏
+            case 'detail':
+                layer.open({
+                    type: 2,
+                    title: '璇︽儏',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: false,
+                    content: 'role_detail.html',
+                    success: function(layero, index){
+                        setFormVal(layer.getChildFrame('#detail', index), data, true);
+                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
+                        layer.getChildFrame('#data-detail-submit,#prompt', index).hide();
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                        layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                    }
+                });
+                break;
+            // 缂栬緫
+            case 'edit':
+                layer.open({
+                    type: 2,
+                    title: '淇敼',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: false,
+                    content: 'role_detail.html',
+                    success: function(layero, index){
+                        setFormVal(layer.getChildFrame('#detail', index), data, false);
+                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), false);
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                        layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                    }
+                });
+                break;
+            case 'leader':
+                var param = top.reObject(data).leader;
+                if (param === undefined) {
+                    layer.msg("鏃犳暟鎹�");
+                } else {
+                   layer.open({
+                       type: 2,
+                       title: '璇︽儏',
+                       maxmin: true,
+                       area: [top.detailHeight, top.detailWidth],
+                       shadeClose: false,
+                       content: '../role/role_detail.html',
+                       success: function(layero, index){
+                           $.ajax({
+                               url: baseUrl+"/role/"+ param +"/auth",
+                               headers: {'token': localStorage.getItem('token')},
+                               method: 'GET',
+                               success: function (res) {
+                                   if (res.code === 200){
+                                       setFormVal(layer.getChildFrame('#detail', index), res.data, true);
+                                       top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
+                                       layer.getChildFrame('#data-detail-submit,#prompt', index).hide();
+                                       layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                                       layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                                   } else if (res.code === 403){
+                                       parent.location.href = "/";
+                                   }else {
+                                       layer.msg(res.msg)
+                                   }
+                               }
+                           })
+                       }
+                   });
+                }
+                break;
+            case 'power':
+                roleId = data.id;
+                layer.open({
+                    type: 2,
+                    title: data.name + ' 鏉冮檺鍒嗛厤',
+                    maxmin: true,
+                    area: [top.detailWidth/2, '85%'],
+                    shadeClose: false,
+                    content: 'role_power_detail.html',
+                    success: function(layero, index){
+                    }
+                });
+                break;
+        }
+    });
+
+    // 鏁版嵁淇敼鍔ㄤ綔
+    form.on('submit(edit)', function () {
+        var index = layer.load(1, {
+            shade: [0.5,'#000'] //0.1閫忔槑搴︾殑鑳屾櫙
+        });
+        var data = {
+            id: $('#id').val(),
+            code: $('#code').val(),
+            name: $('#name').val(),
+            leader: $('#leader').val(),
+            level: $('#level').val(),
+
+        };
+        $.ajax({
+            url: baseUrl+"/role/edit/auth",
+            headers: {'token': localStorage.getItem('token')},
+            data: top.reObject(data),
+            method: 'POST',
+            success: function (res) {
+                if (res.code === 200){
+                    parent.layer.closeAll();
+                    tableReload(true);
+                    $("#data-detail :input").each(function () {
+                        $(this).val("");
+                    });
+                } else if (res.code === 403){
+                    top.location.href = baseUrl+"/";
+                }else {
+                    layer.msg(res.msg)
+                }
+                layer.close(index);
+            }
+        })
+    });
+
+    // 鎼滅储鏍忔悳绱簨浠�
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+    // 鎼滅储鏍忛噸缃簨浠�
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+
+    // 鏃堕棿閫夋嫨鍣�
+
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    (child ? parent.tableIns : tableIns).reload({
+        where: searchData,
+        page: {
+            curr: pageCurr
+        },
+        done: function (res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            if (res.data.length === 0 && count !== 0) {
+                tableIns.reload({
+                    where: searchData,
+                    page: {
+                        curr: pageCurr-1
+                    }
+                });
+                pageCurr -= 1;
+            }
+            limit(child);
+        }
+    });
+}
+
+function setFormVal(el, data, showImg) {
+    for (var val in data) {
+        var find = el.find(":input[id='" + val + "']");
+        find.val(data[val]);
+        if (showImg){
+            var next = find.next();
+            if (next.get(0)){
+                if (next.get(0).localName === "img") {
+                    find.hide();
+                    next.attr("src", data[val]);
+                    next.show();
+                }
+            }
+        }
+    }
+}
+
+function clearFormVal(el) {
+    $(':input', el)
+        .val('')
+        .removeAttr('checked')
+        .removeAttr('selected');
+}
+
+function detailScreen(index) {
+    var detail = layer.getChildFrame('#data-detail', index);
+    var height = detail.height()+60;
+    if (height > ($(window).height()*0.9)) {
+        height = ($(window).height()*0.9);
+    }
+    layer.style(index, {
+        top: (($(window).height()-height)/3)+"px",
+        height: height+'px'
+    });
+    $(".layui-layer-shade").remove();
+}
+
+$('body').keydown(function () {
+    if (event.keyCode === 13) {
+        $("#search").click();
+    }
+});
diff --git a/src/main/webapp/static/js/role/rolePower.js b/src/main/webapp/static/js/role/rolePower.js
new file mode 100644
index 0000000..212e2ba
--- /dev/null
+++ b/src/main/webapp/static/js/role/rolePower.js
@@ -0,0 +1,82 @@
+layui.use(['form', 'tree'], function() {
+    var form = layui.form;
+    var tree = layui.tree;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+
+    // 鏉冮檺鍒嗛厤鏍戝舰鍥�
+    var powerTree = tree.render({
+        elem: '#power-tree',
+        id: 'powerTree',
+        showCheckbox: true,
+        data: parent.powerTreeData,
+        isJump: true
+    });
+
+    loadPower();
+    function loadPower(){
+        $.ajax({
+            url: baseUrl+"/power/"+parent.roleId+"/auth",
+            headers: {'token': localStorage.getItem('token')},
+            method: 'GET',
+            beforeSend: function () {
+                layer.load(1, {shade: [0.1,'#fff']});
+            },
+            success: function (res) {
+                if (res.code === 200){
+                    tree.setChecked('powerTree', res.data);
+                } else if (res.code === 403){
+                    top.location.href = baseUrl+"/";
+                } else {
+                    layer.msg(res.msg)
+                }
+                layer.closeAll("loading");
+            }
+        });
+    }
+
+    // 鏁版嵁淇敼鍔ㄤ綔
+    form.on('submit(save)', function () {
+        var param = [];
+        var checkData = tree.getChecked('powerTree');
+        checkData.map(function (obj) {
+            obj.children.map(function (resource) {
+
+                var childrens = [];
+                resource.children.map(function (resource) {
+                    childrens.push(resource.id);
+                });
+                var one = {
+                    'two': resource.id,
+                    'three': childrens
+                };
+                param.push(one);
+            })
+        });
+        $.ajax({
+            url: baseUrl+"/power/auth",
+            traditional: true,
+            headers: {'token': localStorage.getItem('token')},
+            data: {
+                'roleId': parent.roleId,
+                'powers': JSON.stringify(param)
+            },
+            method: 'POST',
+            success: function (res) {
+                if (res.code === 200){
+                    parent.layer.closeAll();
+                    parent.layer.msg(res.msg);
+                } else if (res.code === 403){
+                    top.location.href = baseUrl+"/";
+                } else {
+                    layer.msg(res.msg)
+                }
+            }
+        });
+    });
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
\ No newline at end of file
diff --git a/src/main/webapp/static/js/user/user.js b/src/main/webapp/static/js/user/user.js
new file mode 100644
index 0000000..0e06c7e
--- /dev/null
+++ b/src/main/webapp/static/js/user/user.js
@@ -0,0 +1,238 @@
+var pageCurr;
+var tableData;
+var insTb2;
+layui.config({
+    base: baseUrl + "/static/layui/lay/modules/"
+}).use(['table','laydate', 'form', 'util', 'admin'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+    var admin = layui.admin;
+    var util = layui.util;
+
+    insTb2 = table.render({
+        elem: '#userTable',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/user/list/auth',
+        page: true,
+        limit: 15,
+        limits: [15, 30, 50, 100, 200, 500],
+        toolbar: '#userToolbar',
+        height: 'full-100',
+        cols: [[
+            {type: 'checkbox'}
+            // ,{field: 'hostName', align: 'center',title: '鎺堟潈鍟嗘埛', templet: '#hostTpl', width: 140}
+            // ,{field: 'nickname', align: 'center',title: '鐢ㄦ埛鍚�'}
+            ,{field: 'username', align: 'center',title: '鐧诲綍璐︽埛'}
+            ,{field: 'mobile', align: 'center',title: '鎵嬫満鍙�'}
+            // ,{field: 'deptName', align: 'center',title: '鎵�灞為儴闂�'}
+            ,{field: 'roleName', align: 'center',title: '瑙掕壊'}
+            ,{field: 'email', align: 'center',title: '閭'}
+            // ,{field: 'sex$', align: 'center',title: '鎬у埆'}
+            ,{field: 'createTime$', align: 'center',title: '娉ㄥ唽鏃堕棿', hide: true}
+            ,{field: 'status$', align: 'center',title: '鐘舵��', templet: '#statusTpl', width: 120, unresize: true}
+
+            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:170}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data.records
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function(res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            tableData = table.cache.userTable;
+            pageCurr=curr;
+            limit();
+        }
+    });
+    /* 琛ㄦ牸2鎼滅储 */
+    form.on('submit(userTbSearch)', function (data) {
+        insTb2.reload({where: data.field, page: {curr: 1}});
+        return false;
+    });
+
+    /* 琛ㄦ牸2澶村伐鍏锋爮鐐瑰嚮浜嬩欢 */
+    table.on('toolbar(userTable)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id).data;
+        if (obj.event === 'add') { // 娣诲姞
+            showEditModel()
+        } else if (obj.event === 'del') { // 鍒犻櫎
+            if (checkStatus.length === 0) {
+                layer.msg('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁', {icon: 2});
+                return;
+            }
+            del(checkStatus.map(function (d) {
+                return d.id;
+            }));
+        }
+    });
+
+    // 淇敼鐘舵��
+    form.on('switch(statusSwitch)', function (obj) {
+        var index  = obj.othis.parents('tr').attr("data-index");
+        var data = tableData[index];
+        data[this.name] = obj.elem.checked?1:0;
+        http.post(baseUrl+"/user/edit/auth", {id: data.id, status: data[this.name]}, function (res) {
+            layer.msg(res.msg, {icon: 1});
+        })
+    })
+
+    /* 琛ㄦ牸2宸ュ叿鏉$偣鍑讳簨浠� */
+    table.on('tool(userTable)', function (obj) {
+        var data = obj.data;
+        switch (obj.event) {
+            // 缂栬緫
+            case 'edit':
+                showEditModel(data)
+                break;
+            // 鍒犻櫎
+            case 'del':
+                del([data.id]);
+                break;
+            // 閲嶇疆瀵嗙爜
+            case 'resetPwd':
+                admin.open({
+                    type: 1,
+                    title: '閲嶇疆瀵嗙爜',
+                    offset: '150px',
+                    area: ['360px'],
+                    shade: 0.1,
+                    shadeClose: true,
+                    content: $("#resetpwd-window").html(),
+                    success: function(layero, index){
+                        layer.iframeAuto(index);
+                        $('#resetUserId').val(data.id);
+                    }
+                });
+                break;
+        }
+    });
+
+    /* 鏄剧ず琛ㄥ崟寮圭獥 */
+    function showEditModel(mData) {
+        admin.open({
+            type: 1,
+            area: '600px',
+            title: (mData ? '淇敼' : '娣诲姞') + '鐢ㄦ埛',
+            content: $('#editDialog').html(),
+            success: function (layero, dIndex) {
+                // 鍥炴樉琛ㄥ崟鏁版嵁
+                form.val('detail', mData);
+                // 琛ㄥ崟鎻愪氦浜嬩欢
+                form.on('submit(editSubmit)', function (data) {
+                    if (isEmpty(data.field.roleId)) {
+                        layer.msg('璇烽�夋嫨瑙掕壊', {icon: 2});
+                        return false;
+                    }
+                    var loadIndex = layer.load(2);
+                    $.ajax({
+                        url: baseUrl+"/user/"+(mData?'update':'add')+"/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: data.field,
+                        method: 'POST',
+                        success: function (res) {
+                            layer.close(loadIndex);
+                            if (res.code === 200){
+                                layer.close(dIndex);
+                                layer.msg(res.msg, {icon: 1});
+                                $(".layui-laypage-btn")[0].click();
+                            } else if (res.code === 403){
+                                top.location.href = baseUrl+"/";
+                            }else {
+                                layer.msg(res.msg, {icon: 2});
+                            }
+                        }
+                    })
+                    return false;
+                });
+                // 寮圭獥涓嶅嚭鐜版粴鍔ㄦ潯
+                $(layero).children('.layui-layer-content').css('overflow', 'visible');
+                layui.form.render('select');
+            }
+        });
+    }
+
+
+    /* 鍒犻櫎璁㈠崟 */
+    function del(ids) {
+        layer.confirm('纭畾瑕佸垹闄ら�変腑鏁版嵁鍚楋紵', {
+            skin: 'layui-layer-admin',
+            shade: .1
+        }, function (i) {
+            layer.close(i);
+            var loadIndex = layer.load(2);
+            $.ajax({
+                url: baseUrl+"/user/delete/auth",
+                headers: {'token': localStorage.getItem('token')},
+                data: {ids: ids},
+                method: 'POST',
+                success: function (res) {
+                    layer.close(loadIndex);
+                    if (res.code === 200){
+                        layer.msg(res.msg, {icon: 1});
+                        $(".layui-laypage-btn")[0].click();
+                    } else if (res.code === 403){
+                        top.location.href = baseUrl+"/";
+                    }else {
+                        layer.msg(res.msg, {icon: 2});
+                    }
+                }
+            })
+
+        });
+    }
+
+    // 閲嶇疆瀵嗙爜
+    form.on('submit(savePwd)', function (data) {
+        $.ajax({
+            url: baseUrl+"/user/update/auth",
+            headers: {'token': localStorage.getItem('token')},
+            data: {
+                id: data.field.resetUserId,
+                password: hex_md5(data.field.resetPassword)
+            },
+            method: 'POST',
+            success: function (res) {
+                if (res.code === 200){
+                    layer.closeAll();
+                    layer.msg("閲嶇疆瀵嗙爜鎴愬姛", {icon: 1});
+                } else if (res.code === 403){
+                    top.location.href = baseUrl+"/";
+                }else {
+                    layer.msg(res.msg, {icon: 2})
+                }
+            }
+        })
+        return false;
+    })
+
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    (child ? parent.tableIns : tableIns).reload({
+        where: searchData,
+        page: {
+            curr: pageCurr
+        }
+    });
+}
+
diff --git a/src/main/webapp/static/js/userLogin/userLogin.js b/src/main/webapp/static/js/userLogin/userLogin.js
new file mode 100644
index 0000000..f0907ef
--- /dev/null
+++ b/src/main/webapp/static/js/userLogin/userLogin.js
@@ -0,0 +1,369 @@
+var pageCurr;
+layui.use(['table','laydate', 'form'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#userLogin',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/userLogin/list/auth',
+        page: true,
+        limit: 16,
+        limits: [16, 30, 50, 100, 200, 500],
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        cols: [[
+            {type: 'checkbox', fixed: 'left'}
+            ,{field: 'id', title: 'ID', sort: true,align: 'center', fixed: 'left', width: 80}
+            ,{field: 'userUsername', align: 'center',title: '鍛樺伐',event: 'User', style: 'text-decoration: underline;cursor:pointer'}
+            ,{field: 'token', align: 'center',title: '鍑瘉鍊�'}
+            ,{field: 'createTime$', align: 'center',title: '娣诲姞鏃堕棿'}
+
+            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:150}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data.records
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function(res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            limit();
+        }
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(userLogin)', function (obj) {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function() {
+            searchData[this.name] = this.value;
+        });
+        searchData['orderByField'] = obj.field;
+        searchData['orderByType'] = obj.type;
+        tableIns.reload({
+            where: searchData,
+            page: {
+                curr: 1
+            },
+            done: function (res, curr, count) {
+                if (res.code === 403) {
+                    top.location.href = baseUrl+"/";
+                }
+                pageCurr=curr;
+                limit();
+            }
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(userLogin)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id);
+        switch(obj.event) {
+            case 'addData':
+                layer.open({
+                    type: 2,
+                    title: '鏂板',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: false,
+                    content: 'userLogin_detail.html',
+                    success: function(layero, index){
+                    	clearFormVal(layer.getChildFrame('#detail', index));
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                    }
+                });
+                break;
+            case 'refreshData':
+                tableIns.reload({
+                    page: {
+                        curr: pageCurr
+                    }
+                });
+                limit();
+                break;
+            case 'deleteData':
+                var data = checkStatus.data;
+                var ids=[];
+                data.map(function (track) {
+                    ids.push(track.id);
+                });
+                if (ids.length === 0){
+                    layer.msg('璇烽�夋嫨鏁版嵁');
+                } else {
+                    layer.confirm('纭畾鍒犻櫎'+(ids.length===1?'姝�':ids.length)+'鏉℃暟鎹悧', function(){
+                        $.ajax({
+                            url: baseUrl+"/userLogin/delete/auth",
+                            headers: {'token': localStorage.getItem('token')},
+                            data: {ids: ids},
+                            method: 'POST',
+                            traditional:true,
+                            success: function (res) {
+                                if (res.code === 200){
+                                    layer.closeAll();
+                                    tableReload(false);
+                                } else if (res.code === 403){
+                                    top.location.href = baseUrl+"/";
+                                } else {
+                                    layer.msg(res.msg)
+                                }
+                            }
+                        })
+                    });
+                }
+                break;
+            case 'exportData':
+                layer.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function() {
+                    var titles = [];
+                    var fields = [];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function () {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'userLogin': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/userLogin/export/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        dataType: 'json',
+                        contentType: 'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll();
+                            if (res.code === 200) {
+                                table.exportFile(titles, res.data, 'xls');
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg)
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(userLogin)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            // 璇︽儏
+            case 'detail':
+                layer.open({
+                    type: 2,
+                    title: '璇︽儏',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: false,
+                    content: 'userLogin_detail.html',
+                    success: function(layero, index){
+                        setFormVal(layer.getChildFrame('#detail', index), data);
+                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
+                        layer.getChildFrame('#data-detail-submit,#prompt', index).hide();
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                        layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                    }
+                });
+                break;
+            // 缂栬緫
+            case 'edit':
+                layer.open({
+                    type: 2,
+                    title: '淇敼',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: false,
+                    content: 'userLogin_detail.html',
+                    success: function(layero, index){
+                        setFormVal(layer.getChildFrame('#detail', index), data);
+                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), false);
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                        layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                    }
+                });
+                break;
+            case 'User':
+                var param = top.reObject(data).userId;
+                if (param === undefined) {
+                    layer.msg("鏃犳暟鎹�");
+                } else {
+                    layer.open({
+                        type: 2,
+                        title: '璇︽儏',
+                        maxmin: true,
+                        area: [top.detailHeight, top.detailWidth],
+                        shadeClose: false,
+                        content: '../user/user_detail.html',
+                        success: function(layero, index){
+                            $.ajax({
+                                url: baseUrl+"/user/"+ param +"/auth",
+                                headers: {'token': localStorage.getItem('token')},
+                                method: 'GET',
+                                success: function (res) {
+                                    if (res.code === 200){
+                                        setFormVal(layer.getChildFrame('#detail', index), res.data);
+                                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
+                                        layer.getChildFrame('#data-detail-submit,#prompt', index).hide();
+                                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                                        layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                                    } else if (res.code === 403){
+                                        parent.location.href = "/";
+                                    }else {
+                                        layer.msg(res.msg)
+                                    }
+                                }
+                            })
+                        }
+                    });
+                }
+                break;
+
+        }
+    });
+
+    // 鏁版嵁淇敼鍔ㄤ綔
+    form.on('submit(edit)', function () {
+        var index = layer.load(1, {
+            shade: [0.5,'#000'] //0.1閫忔槑搴︾殑鑳屾櫙
+        });
+        var data = {
+            id: $('#id').val(),
+            userId: $('#userId').val(),
+            token: $('#token').val(),
+            createTime: top.strToDate($('#createTime\\$').val()),
+
+        };
+        $.ajax({
+            url: baseUrl+"/userLogin/edit/auth",
+            headers: {'token': localStorage.getItem('token')},
+            data: top.reObject(data),
+            method: 'POST',
+            success: function (res) {
+                if (res.code === 200){
+                    parent.layer.closeAll();
+                    tableReload(true);
+                    $("#data-detail :input").each(function () {
+                        $(this).val("");
+                    });
+                } else if (res.code === 403){
+                    top.location.href = baseUrl+"/";
+                }else {
+                    layer.msg(res.msg)
+                }
+                layer.close(index);
+            }
+        })
+    });
+
+    // 鎼滅储鏍忔悳绱簨浠�
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+    // 鎼滅储鏍忛噸缃簨浠�
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+
+    // 鏃堕棿閫夋嫨鍣�
+    layDate.render({
+        elem: '#createTime\\$',
+        type: 'datetime'
+    });
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    (child ? parent.tableIns : tableIns).reload({
+        where: searchData,
+        page: {
+            curr: pageCurr
+        },
+        done: function (res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            if (res.data.length === 0 && count !== 0) {
+                tableIns.reload({
+                    where: searchData,
+                    page: {
+                        curr: pageCurr-1
+                    }
+                });
+                pageCurr -= 1;
+            }
+            limit(child);
+        }
+    });
+}
+
+function setFormVal(el, data) {
+    for (var val in data) {
+        el.find(":input[id='" + val + "']").val(data[val]);
+    }
+}
+
+function clearFormVal(el) {
+    $(':input', el)
+        .val('')
+        .removeAttr('checked')
+        .removeAttr('selected');
+}
+
+function detailScreen(index) {
+    var detail = layer.getChildFrame('#data-detail', index);
+    var height = detail.height()+60;
+    if (height > ($(window).height()*0.9)) {
+        height = ($(window).height()*0.9);
+    }
+    layer.style(index, {
+        top: (($(window).height()-height)/3)+"px",
+        height: height+'px'
+    });
+    $(".layui-layer-shade").remove();
+}
+
+$('body').keydown(function () {
+    if (event.keyCode === 13) {
+        $("#search").click();
+    }
+});
diff --git a/src/main/webapp/static/js/wrkLastno/wrkLastno.js b/src/main/webapp/static/js/wrkLastno/wrkLastno.js
new file mode 100644
index 0000000..97e1769
--- /dev/null
+++ b/src/main/webapp/static/js/wrkLastno/wrkLastno.js
@@ -0,0 +1,475 @@
+var pageCurr;
+layui.use(['table','laydate', 'form'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#wrkLastno',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/wrkLastno/list/auth',
+        page: true,
+        limit: 16,
+        limits: [16, 30, 50, 100, 200, 500],
+        even: true,
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        cols: [[
+            {type: 'checkbox', fixed: 'left'}
+            ,{field: 'wrkMk', align: 'center',title: '绫诲瀷'}
+            ,{field: 'sno', align: 'center',title: '璧峰ID'}
+            ,{field: 'wrkNo', align: 'center',title: '褰撳墠ID', style: 'color: #AA3130;font-weight: bold'}
+            ,{field: 'eno', align: 'center',title: '缁堟ID'}
+            ,{field: 'memoM', align: 'center',title: '澶囨敞'}
+            ,{field: 'modiUser$', align: 'center',title: '淇敼浜哄憳'}
+            ,{field: 'modiTime$', align: 'center',title: '淇敼鏃堕棿'}
+            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate'}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data.records
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function(res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            limit();
+            form.on('checkbox(tableCheckbox)', function (data) {
+                var _index = $(data.elem).attr('table-index')||0;
+                if(data.elem.checked){
+                    res.data[_index][data.value] = 'Y';
+                }else{
+                    res.data[_index][data.value] = 'N';
+                }
+            });
+        }
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(wrkLastno)', function (obj) {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function() {
+            searchData[this.name] = this.value;
+        });
+        searchData['orderByField'] = obj.field;
+        searchData['orderByType'] = obj.type;
+        tableIns.reload({
+            where: searchData,
+            page: {
+                curr: 1
+            },
+            done: function (res, curr, count) {
+                if (res.code === 403) {
+                    top.location.href = baseUrl+"/";
+                }
+                pageCurr=curr;
+                limit();
+            }
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(wrkLastno)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id);
+        switch(obj.event) {
+            case 'addData':
+                layer.open({
+                    type: 2,
+                    title: '鏂板',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: false,
+                    content: 'wrkLastno_detail.html',
+                    success: function(layero, index){
+                        layer.getChildFrame('#data-detail-submit-edit', index).hide();
+                    	clearFormVal(layer.getChildFrame('#detail', index));
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                    }
+                });
+                break;
+            case 'refreshData':
+                tableIns.reload({
+                    page: {
+                        curr: pageCurr
+                    }
+                });
+                limit();
+                break;
+            case 'deleteData':
+                var data = checkStatus.data;
+                if (data.length === 0){
+                    layer.msg('璇烽�夋嫨鏁版嵁');
+                } else {
+                    layer.confirm('纭畾鍒犻櫎'+(data.length===1?'姝�':data.length)+'鏉℃暟鎹悧', function(){
+                        $.ajax({
+                            url: baseUrl+"/wrkLastno/delete/auth",
+                            headers: {'token': localStorage.getItem('token')},
+                            data: {param: JSON.stringify(data)},
+                            method: 'POST',
+                            traditional:true,
+                            success: function (res) {
+                                if (res.code === 200){
+                                    layer.closeAll();
+                                    tableReload(false);
+                                } else if (res.code === 403){
+                                    top.location.href = baseUrl+"/";
+                                } else {
+                                    layer.msg(res.msg)
+                                }
+                            }
+                        })
+                    });
+                }
+                break;
+            case 'exportData':
+                layer.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
+                    var titles=[];
+                    var fields=[];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function() {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'wrkLastno': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/wrkLastno/export/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        dataType:'json',
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll();
+                            if (res.code === 200) {
+                                table.exportFile(titles,res.data,'xls');
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg)
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(wrkLastno)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            // 璇︽儏
+            case 'detail':
+                layer.open({
+                    type: 2,
+                    title: '璇︽儏',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: false,
+                    content: 'wrkLastno_detail.html',
+                    success: function(layero, index){
+                        setFormVal(layer.getChildFrame('#detail', index), data, true);
+                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
+                        layer.getChildFrame('#data-detail-submit-save,#data-detail-submit-edit,#prompt', index).hide();
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                        layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                        layero.find('iframe')[0].contentWindow.layui.form.render('checkbox');
+                    }
+                });
+                break;
+            // 缂栬緫
+            case 'edit':
+                layer.open({
+                    type: 2,
+                    title: '淇敼',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: false,
+                    content: 'wrkLastno_detail.html',
+                    success: function(layero, index){
+                        layer.getChildFrame('#data-detail-submit-save', index).hide();
+                        setFormVal(layer.getChildFrame('#detail', index), data, false);
+                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), false);
+                        top.convertDisabled(layer.getChildFrame('#wrkMk', index), true);
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                        layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                        layero.find('iframe')[0].contentWindow.layui.form.render('checkbox');
+                    }
+                });
+                break;
+            case 'modiUser':
+                var param = top.reObject(data).modiUser;
+                if (param === undefined) {
+                    layer.msg("鏃犳暟鎹�");
+                } else {
+                   layer.open({
+                       type: 2,
+                       title: '淇敼璇︽儏',
+                       maxmin: true,
+                       area: [top.detailWidth, top.detailHeight],
+                       shadeClose: false,
+                       content: '../user/user_detail.html',
+                       success: function(layero, index){
+                           $.ajax({
+                               url: baseUrl+"/user/"+ param +"/auth",
+                               headers: {'token': localStorage.getItem('token')},
+                               method: 'GET',
+                               success: function (res) {
+                                   if (res.code === 200){
+                                       setFormVal(layer.getChildFrame('#detail', index), res.data, true);
+                                       top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
+                                       layer.getChildFrame('#password,#createTime\\$,#status', index).parent().parent().hide();
+                                       layer.getChildFrame('#data-detail-submit-save,#data-detail-submit-edit,#prompt', index).hide();
+                                       layer.getChildFrame('##dealDownLine', index).hide();layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                                       layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                                       layero.find('iframe')[0].contentWindow.layui.form.render('checkbox');
+                                   } else if (res.code === 403){
+                                       parent.location.href = "/";
+                                   }else {
+                                       layer.msg(res.msg)
+                                   }
+                               }
+                           })
+                       }
+                   });
+                }
+                break;
+            case 'appeUser':
+                var param = top.reObject(data).appeUser;
+                if (param === undefined) {
+                    layer.msg("鏃犳暟鎹�");
+                } else {
+                   layer.open({
+                       type: 2,
+                       title: '鍒涜鎯�',
+                       maxmin: true,
+                       area: [top.detailWidth, top.detailHeight],
+                       shadeClose: false,
+                       content: '../user/user_detail.html',
+                       success: function(layero, index){
+                           $.ajax({
+                               url: baseUrl+"/user/"+ param +"/auth",
+                               headers: {'token': localStorage.getItem('token')},
+                               method: 'GET',
+                               success: function (res) {
+                                   if (res.code === 200){
+                                       setFormVal(layer.getChildFrame('#detail', index), res.data, true);
+                                       top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
+                                       layer.getChildFrame('#data-detail-submit-save,#data-detail-submit-edit,#prompt', index).hide();
+                                       layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                                       layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                                       layero.find('iframe')[0].contentWindow.layui.form.render('checkbox');
+                                   } else if (res.code === 403){
+                                       parent.location.href = "/";
+                                   }else {
+                                       layer.msg(res.msg)
+                                   }
+                               }
+                           })
+                       }
+                   });
+                }
+                break;
+
+        }
+    });
+
+    // 鏁版嵁淇濆瓨鍔ㄤ綔
+    form.on('submit(save)', function () {
+        if (banMsg != null){
+            layer.msg(banMsg);
+            return;
+        }
+        method("add");
+    });
+
+    // 鏁版嵁淇敼鍔ㄤ綔
+    form.on('submit(edit)', function () {
+        method("update")
+    });
+
+    function method(name){
+        var index = layer.load(1, {
+            shade: [0.5,'#000'] //0.1閫忔槑搴︾殑鑳屾櫙
+        });
+        var data = {
+//            id: $('#id').val(),
+            wrkMk: $('#wrkMk').val(),
+            wrkNo: $('#wrkNo').val(),
+            modiUser: $('#modiUser').val(),
+            modiTime: top.strToDate($('#modiTime\\$').val()),
+            appeUser: $('#appeUser').val(),
+            appeTime: top.strToDate($('#appeTime\\$').val()),
+            sNo: $('#sno').val(),
+            eNo: $('#eno').val(),
+            memoM: $('#memoM').val(),
+
+        };
+        $.ajax({
+            url: baseUrl+"/wrkLastno/"+name+"/auth",
+            headers: {'token': localStorage.getItem('token')},
+            data: top.reObject(data),
+            method: 'POST',
+            success: function (res) {
+                if (res.code === 200){
+                    parent.layer.closeAll();
+                    parent.$(".layui-laypage-btn")[0].click();
+                    $("#data-detail :input").each(function () {
+                        $(this).val("");
+                    });
+                } else if (res.code === 403){
+                    top.location.href = baseUrl+"/";
+                }else {
+                    layer.msg(res.msg)
+                }
+                layer.close(index);
+            }
+        })
+    }
+
+    // 澶嶉�夋浜嬩欢
+    form.on('checkbox(detailCheckbox)', function (data) {
+        var el = data.elem;
+        if (el.checked) {
+            $(el).val('Y');
+        } else {
+            $(el).val('N');
+        }
+    });
+
+    // 鎼滅储鏍忔悳绱簨浠�
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+    // 鎼滅储鏍忛噸缃簨浠�
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+
+    // 鏃堕棿閫夋嫨鍣�
+    layDate.render({
+        elem: '#modiTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#appeTime\\$',
+        type: 'datetime'
+    });
+
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    (child ? parent.tableIns : tableIns).reload({
+        where: searchData,
+        page: {
+            curr: pageCurr
+        },
+        done: function (res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            if (res.data.length === 0 && count !== 0) {
+                tableIns.reload({
+                    where: searchData,
+                    page: {
+                        curr: pageCurr-1
+                    }
+                });
+                pageCurr -= 1;
+            }
+            limit(child);
+        }
+    });
+}
+
+function setFormVal(el, data, showImg) {
+    for (var val in data) {
+        var find = el.find(":input[id='" + val + "']");
+        if (find[0]!=null){
+            if (find[0].type === 'checkbox'){
+                if (data[val]==='Y'){
+                    find.attr("checked","checked");
+                    find.val('Y');
+                } else {
+                    find.remove("checked");
+                    find.val('N');
+                }
+                continue;
+            }
+        }
+        find.val(data[val]);
+        if (showImg){
+            var next = find.next();
+            if (next.get(0)){
+                if (next.get(0).localName === "img") {
+                    find.hide();
+                    next.attr("src", data[val]);
+                    next.show();
+                }
+            }
+        }
+    }
+}
+
+function clearFormVal(el) {
+    $(':input', el)
+        .val('')
+        .removeAttr('checked')
+        .removeAttr('selected');
+}
+
+function detailScreen(index) {
+    var detail = layer.getChildFrame('#data-detail', index);
+    var height = detail.height()+60;
+    if (height > ($(window).height()*0.9)) {
+        height = ($(window).height()*0.8);
+    }
+    layer.style(index, {
+//        top: (($(window).height()-height)/3)+"px",
+        height: height+'px'
+    });
+}
+
+$('body').keydown(function () {
+    if (event.keyCode === 13) {
+        $("#search").click();
+    }
+});
diff --git a/src/main/webapp/static/js/wrkMastLog/wrkMastLog.js b/src/main/webapp/static/js/wrkMastLog/wrkMastLog.js
new file mode 100644
index 0000000..c782e4c
--- /dev/null
+++ b/src/main/webapp/static/js/wrkMastLog/wrkMastLog.js
@@ -0,0 +1,532 @@
+var pageCurr;
+var wrkNo;
+var ioTime;
+layui.use(['table','laydate', 'form'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#wrkMastLog',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/wrkMastLog/list/auth',
+        page: true,
+        limit: 16,
+        limits: [16, 30, 50, 100, 200, 500],
+        even: true,
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        cols: [[
+            // {type: 'checkbox'}
+//            ,{field: 'id', title: 'ID', sort: true,align: 'center', fixed: 'left', width: 80}
+//             ,{field: 'id', align: 'center',title: '缂栧彿'}
+            {field: 'wrkNo', align: 'center',title: '宸ヤ綔鍙�',event: 'wrkNo', sort: true}
+            ,{field: 'ioTime$', align: 'center',title: '宸ヤ綔鏃堕棿', width:160, sort: true}
+            ,{field: 'wrkSts$', align: 'center',title: '宸ヤ綔鐘舵��', width:160}
+            ,{field: 'ioType$', align: 'center',title: '鍏ュ嚭搴撶被鍨�', width:160}
+            ,{field: 'ioPri', align: 'center',title: '浼樺厛绾�'}
+            ,{field: 'sourceStaNo$', align: 'center',title: '婧愮珯'}
+            ,{field: 'staNo$', align: 'center',title: '鐩爣绔�'}
+            ,{field: 'sourceLocNo$', align: 'center',title: '婧愬簱浣�'}
+            ,{field: 'locNo$', align: 'center',title: '鐩爣搴撲綅'}
+            // ,{field: 'picking', align: 'center',title: '鎷f枡', templet:function(row){
+            //         var html = "<input value='picking' type='checkbox' lay-skin='primary' lay-filter='tableCheckbox' table-index='"+row.LAY_TABLE_INDEX+"'";
+            //         if(row.picking === 'Y'){html += " checked ";}
+            //         html += ">";
+            //         return html;
+            //     }}
+            // ,{field: 'exitMk', align: 'center',title: '閫�鍑�', templet:function(row){
+            //         var html = "<input value='exitMk' type='checkbox' lay-skin='primary' lay-filter='tableCheckbox' table-index='"+row.LAY_TABLE_INDEX+"'";
+            //         if(row.exitMk === 'Y'){html += " checked ";}
+            //         html += ">";
+            //         return html;
+            //     }}
+            // ,{field: 'emptyMk', align: 'center',title: '绌烘澘', templet:function(row){
+            //         var html = "<input value='emptyMk' type='checkbox' lay-skin='primary' lay-filter='tableCheckbox' table-index='"+row.LAY_TABLE_INDEX+"'";
+            //         if(row.emptyMk === 'Y'){html += " checked ";}
+            //         html += ">";
+            //         return html;
+            //     }}
+            //
+            // ,{field: 'crnStrTime$', align: 'center',title: '鍫嗗灈鏈哄惎鍔ㄦ椂闂�'}
+            // ,{field: 'crnEndTime$', align: 'center',title: '鍫嗗灈鏈哄仠姝㈡椂闂�'}
+            // ,{field: 'plcStrTime$', align: 'center',title: '鎷f枡鏃堕棿'}
+            ,{field: 'modiUser$', align: 'center',title: '淇敼浜哄憳', hide:true}
+            ,{field: 'modiTime$', align: 'center',title: '淇敼鏃堕棿', hide:true}
+            // ,{field: 'appeUser$', align: 'center',title: '鍒涘缓鑰�',event: 'appeUser', style: 'cursor:pointer'}
+            // ,{field: 'appeTime$', align: 'center',title: '娣诲姞鏃堕棿'}
+            ,{field: 'barcode', align: 'center',title: '鏉$爜'}
+            // ,{field: 'fullPlt', align: 'center',title: '婊℃澘', templet:function(row){
+            //         var html = "<input value='fullPlt' type='checkbox' lay-skin='primary' lay-filter='tableCheckbox' table-index='"+row.LAY_TABLE_INDEX+"'";
+            //         if(row.fullPlt === 'Y'){html += " checked ";}
+            //         html += ">";
+            //         return html;
+            //     }}
+
+            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width: 80}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data.records
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function(res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            limit();
+            form.on('checkbox(tableCheckbox)', function (data) {
+                var _index = $(data.elem).attr('table-index')||0;
+                if(data.elem.checked){
+                    res.data[_index][data.value] = 'Y';
+                }else{
+                    res.data[_index][data.value] = 'N';
+                }
+            });
+        }
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(wrkMastLog)', function (obj) {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function() {
+            searchData[this.name] = this.value;
+        });
+        searchData['orderByField'] = obj.field;
+        searchData['orderByType'] = obj.type;
+        tableIns.reload({
+            where: searchData,
+            page: {
+                curr: 1
+            },
+            done: function (res, curr, count) {
+                if (res.code === 403) {
+                    top.location.href = baseUrl+"/";
+                }
+                pageCurr=curr;
+                limit();
+            }
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(wrkMastLog)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id);
+        switch(obj.event) {
+            case 'addData':
+                layer.open({
+                    type: 2,
+                    title: '鏂板',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: false,
+                    content: 'wrkMastLog_detail.html',
+                    success: function(layero, index){
+                        layer.getChildFrame('#data-detail-submit-edit', index).hide();
+                    	clearFormVal(layer.getChildFrame('#detail', index));
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                    }
+                });
+                break;
+            case 'refreshData':
+                tableIns.reload({
+                    page: {
+                        curr: pageCurr
+                    }
+                });
+                limit();
+                break;
+            case 'deleteData':
+                var data = checkStatus.data;
+                if (data.length === 0){
+                    layer.msg('璇烽�夋嫨鏁版嵁');
+                } else {
+                    layer.confirm('纭畾鍒犻櫎'+(data.length===1?'姝�':data.length)+'鏉℃暟鎹悧', function(){
+                        $.ajax({
+                            url: baseUrl+"/wrkMastLog/delete/auth",
+                            headers: {'token': localStorage.getItem('token')},
+                            data: {param: JSON.stringify(data)},
+                            method: 'POST',
+                            traditional:true,
+                            success: function (res) {
+                                if (res.code === 200){
+                                    layer.closeAll();
+                                    tableReload(false);
+                                } else if (res.code === 403){
+                                    top.location.href = baseUrl+"/";
+                                } else {
+                                    layer.msg(res.msg)
+                                }
+                            }
+                        })
+                    });
+                }
+                break;
+            case 'exportData':
+                layer.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
+                    var titles=[];
+                    var fields=[];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function() {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'wrkMastLog': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/wrkMastLog/export/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        dataType:'json',
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll();
+                            if (res.code === 200) {
+                                table.exportFile(titles,res.data,'xls');
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg)
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(wrkMastLog)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            // 鏄庣粏灞曠ず
+            case 'detlShow':
+                wrkNo = data.wrkNo;
+                ioTime =  data.ioTime;
+                // 琛ㄦ牸涓嬫柟鏄剧ず
+                // locDetl(data.wrkNo);
+                // 寮瑰眰鏄剧ず
+                layer.open({
+                    type: 2,
+                    title: '宸ヤ綔鏄庣粏鍘嗗彶妗�',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: true,
+                    content: 'wrkDetlLog.html',
+                    success: function(layero, index){
+                    }
+                });
+                break;
+            // 璇︽儏
+            case 'detail':
+                layer.open({
+                    type: 2,
+                    title: '璇︽儏',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: false,
+                    content: 'wrkMastLog_detail.html',
+                    success: function(layero, index){
+                        setFormVal(layer.getChildFrame('#detail', index), data, true);
+                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
+                        layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                        layero.find('iframe')[0].contentWindow.layui.form.render('checkbox');
+                        layer.getChildFrame('#data-detail-submit-save,#data-detail-submit-edit,#prompt', index).hide();
+                        layer.getChildFrame('##dealDownLine', index).hide();
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+
+                    }
+                });
+                break;
+        }
+    });
+
+    // 鏁版嵁淇濆瓨鍔ㄤ綔
+    form.on('submit(save)', function () {
+        if (banMsg != null){
+            layer.msg(banMsg);
+            return;
+        }
+        method("add");
+    });
+
+    // 鏁版嵁淇敼鍔ㄤ綔
+    form.on('submit(edit)', function () {
+        method("update")
+    });
+
+    function method(name){
+        var index = layer.load(1, {
+            shade: [0.5,'#000'] //0.1閫忔槑搴︾殑鑳屾櫙
+        });
+        var data = {
+//            id: $('#id').val(),
+            id: $('#id').val(),
+            wrkNo: $('#wrkNo').val(),
+            invWh: $('#invWh').val(),
+            ymd: top.strToDate($('#ymd\\$').val()),
+            mk: $('#mk').val(),
+            whsType: $('#whsType').val(),
+            wrkSts: $('#wrkSts').val(),
+            ioType: $('#ioType').val(),
+            crnNo: $('#crnNo').val(),
+            sheetNo: $('#sheetNo').val(),
+            ioPri: $('#ioPri').val(),
+            wrkDate: top.strToDate($('#wrkDate\\$').val()),
+            locNo: $('#locNo').val(),
+            staNo: $('#staNo').val(),
+            sourceStaNo: $('#sourceStaNo').val(),
+            sourceLocNo: $('#sourceLocNo').val(),
+            locSts: $('#locSts').val(),
+            picking: $('#picking').val(),
+            linkMis: $('#linkMis').val(),
+            onlineYn: $('#onlineYn').val(),
+            updMk: $('#updMk').val(),
+            exitMk: $('#exitMk').val(),
+            pltType: $('#pltType').val(),
+            emptyMk: $('#emptyMk').val(),
+            ioTime: top.strToDate($('#ioTime\\$').val()),
+            ctnType: $('#ctnType').val(),
+            packed: $('#packed').val(),
+            oveMk: $('#oveMk').val(),
+            mtnType: $('#mtnType').val(),
+            userNo: $('#userNo').val(),
+            crnStrTime: top.strToDate($('#crnStrTime\\$').val()),
+            crnEndTime: top.strToDate($('#crnEndTime\\$').val()),
+            plcStrTime: top.strToDate($('#plcStrTime\\$').val()),
+            crnPosTime: top.strToDate($('#crnPosTime\\$').val()),
+            loadTime: $('#loadTime').val(),
+            expTime: $('#expTime').val(),
+            refWrkno: $('#refWrkno').val(),
+            refIotime: top.strToDate($('#refIotime\\$').val()),
+            modiUser: $('#modiUser').val(),
+            modiTime: top.strToDate($('#modiTime\\$').val()),
+            appeUser: $('#appeUser').val(),
+            appeTime: top.strToDate($('#appeTime\\$').val()),
+            pauseMk: $('#pauseMk').val(),
+            errorTime: top.strToDate($('#errorTime\\$').val()),
+            errorMemo: $('#errorMemo').val(),
+            ctnKind: $('#ctnKind').val(),
+            manuType: $('#manuType').val(),
+            memoM: $('#memoM').val(),
+            scWeight: $('#scWeight').val(),
+            logMk: $('#logMk').val(),
+            logErrTime: top.strToDate($('#logErrTime\\$').val()),
+            logErrMemo: $('#logErrMemo').val(),
+            barcode: $('#barcode').val(),
+            PdcType: $('#PdcType').val(),
+            ctnNo: $('#ctnNo').val(),
+            fullPlt: $('#fullPlt').val(),
+
+        };
+        $.ajax({
+            url: baseUrl+"/wrkMastLog/"+name+"/auth",
+            headers: {'token': localStorage.getItem('token')},
+            data: top.reObject(data),
+            method: 'POST',
+            success: function (res) {
+                if (res.code === 200){
+                    parent.layer.closeAll();
+                    parent.$(".layui-laypage-btn")[0].click();
+                    $("#data-detail :input").each(function () {
+                        $(this).val("");
+                    });
+                } else if (res.code === 403){
+                    top.location.href = baseUrl+"/";
+                }else {
+                    layer.msg(res.msg)
+                }
+                layer.close(index);
+            }
+        })
+    }
+
+    // 澶嶉�夋浜嬩欢
+    form.on('checkbox(detailCheckbox)', function (data) {
+        var el = data.elem;
+        if (el.checked) {
+            $(el).val('Y');
+        } else {
+            $(el).val('N');
+        }
+    });
+
+    // 鎼滅储鏍忔悳绱簨浠�
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+    // 鎼滅储鏍忛噸缃簨浠�
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+
+    // 鏃堕棿閫夋嫨鍣�
+    layDate.render({
+        elem: '#ymd\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#wrkDate\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#ioTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#crnStrTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#crnEndTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#plcStrTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#crnPosTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#refIotime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#modiTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#appeTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#errorTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#logErrTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '.layui-laydate-range'
+        ,type: 'datetime'
+        ,range: true
+    });
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    (child ? parent.tableIns : tableIns).reload({
+        where: searchData,
+        page: {
+            curr: pageCurr
+        },
+        done: function (res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            if (res.data.length === 0 && count !== 0) {
+                tableIns.reload({
+                    where: searchData,
+                    page: {
+                        curr: pageCurr-1
+                    }
+                });
+                pageCurr -= 1;
+            }
+            limit(child);
+        }
+    });
+}
+
+function setFormVal(el, data, showImg) {
+    for (var val in data) {
+        var find = el.find(":input[id='" + val + "']");
+        if (find[0]!=null){
+            if (find[0].type === 'checkbox'){
+                if (data[val]==='Y'){
+                    find.attr("checked","checked");
+                    find.val('Y');
+                } else {
+                    find.remove("checked");
+                    find.val('N');
+                }
+                continue;
+            }
+        }
+        find.val(data[val]);
+        if (showImg){
+            var next = find.next();
+            if (next.get(0)){
+                if (next.get(0).localName === "img") {
+                    find.hide();
+                    next.attr("src", data[val]);
+                    next.show();
+                }
+            }
+        }
+    }
+}
+
+function clearFormVal(el) {
+    $(':input', el)
+        .val('')
+        .removeAttr('checked')
+        .removeAttr('selected');
+}
+
+function detailScreen(index) {
+    var detail = layer.getChildFrame('#data-detail', index);
+    var height = detail.height()+60;
+    if (height > ($(window).height()*0.9)) {
+        height = ($(window).height()*0.8);
+    }
+    layer.style(index, {
+//        top: (($(window).height()-height)/3)+"px",
+        height: height+'px'
+    });
+}
+
+$('body').keydown(function () {
+    if (event.keyCode === 13) {
+        $("#search").click();
+    }
+});
diff --git a/src/main/webapp/static/layui/lay/modules/admin.js b/src/main/webapp/static/layui/lay/modules/admin.js
new file mode 100644
index 0000000..fc8a4c4
--- /dev/null
+++ b/src/main/webapp/static/layui/lay/modules/admin.js
@@ -0,0 +1,1667 @@
+锘�/** EasyWeb iframe v3.1.8 date:2020-05-04 License By http://easyweb.vip */
+
+layui.define(['layer'], function (exports) {
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var setter = layui.cache;
+    var bodyDOM = '.layui-layout-admin>.layui-body';
+    var tabDOM = bodyDOM + '>.layui-tab';
+    var sideDOM = '.layui-layout-admin>.layui-side>.layui-side-scroll';
+    var headerDOM = '.layui-layout-admin>.layui-header';
+    var navFilter = 'admin-side-nav';
+    var admin = {version: '3.1.8', layerData: {}};
+
+    /** 璁剧疆渚ф爮鎶樺彔 */
+    admin.flexible = function (expand) {
+        if (window !== top && !admin.isTop() && top.layui && top.layui.admin) return top.layui.admin.flexible(expand);
+        var $layout = $('.layui-layout-admin');
+        var isExapnd = $layout.hasClass('admin-nav-mini');
+        if (expand === undefined) expand = isExapnd;
+        if (isExapnd === expand) {
+            if (window.sideFlexTimer) clearTimeout(window.sideFlexTimer);
+            $layout.addClass('admin-side-flexible');
+            window.sideFlexTimer = setTimeout(function () {
+                $layout.removeClass('admin-side-flexible');
+            }, 600);
+            if (expand) {
+                admin.hideTableScrollBar();
+                $layout.removeClass('admin-nav-mini');
+            } else {
+                $layout.addClass('admin-nav-mini');
+            }
+            layui.event.call(this, 'admin', 'flexible({*})', {expand: expand});
+        }
+    };
+
+    /** 璁剧疆瀵艰埅鏍忛�変腑 */
+    admin.activeNav = function (url) {
+        if (window !== top && !admin.isTop() && top.layui && top.layui.admin) return top.layui.admin.activeNav(url);
+        if (!url) return console.warn('active url is null');
+        $(sideDOM + '>.layui-nav .layui-nav-item .layui-nav-child dd.layui-this').removeClass('layui-this');
+        $(sideDOM + '>.layui-nav .layui-nav-item.layui-this').removeClass('layui-this');
+        var $a = $(sideDOM + '>.layui-nav a[lay-href="' + url + '"]');
+        if ($a.length === 0) return console.warn(url + ' not found');
+        var isMini = $('.layui-layout-admin').hasClass('admin-nav-mini');
+        if ($(sideDOM + '>.layui-nav').attr('lay-shrink') === '_all') {  // 鎵嬮鐞存晥鏋�
+            var $pChilds = $a.parent('dd').parents('.layui-nav-child');
+            if (!isMini) {
+                $(sideDOM + '>.layui-nav .layui-nav-itemed>.layui-nav-child').not($pChilds)
+                    .css('display', 'block').slideUp('fast', function () {
+                    $(this).css('display', '');
+                });
+            }
+            $(sideDOM + '>.layui-nav .layui-nav-itemed').not($pChilds.parent()).removeClass('layui-nav-itemed');
+        }
+        $a.parent().addClass('layui-this');  // 閫変腑褰撳墠
+        // 灞曞紑鎵�鏈夌埗绾�
+        var $asParents = $a.parent('dd').parents('.layui-nav-child').parent();
+        if (!isMini) {
+            var $childs = $asParents.not('.layui-nav-itemed').children('.layui-nav-child');
+            $childs.slideDown('fast', function () {
+                if ($(this).is($childs.last())) {
+                    $childs.css('display', '');
+                    // 鑿滃崟瓒呭嚭灞忓箷鑷姩婊氬姩
+                    var topBeyond = $a.offset().top + $a.outerHeight() + 30 - admin.getPageHeight();
+                    var topDisparity = 50 + 65 - $a.offset().top;
+                    if (topBeyond > 0) {
+                        $(sideDOM).animate({'scrollTop': $(sideDOM).scrollTop() + topBeyond}, 300);
+                    } else if (topDisparity > 0) {
+                        $(sideDOM).animate({'scrollTop': $(sideDOM).scrollTop() - topDisparity}, 300);
+                    }
+                }
+            });
+        }
+        $asParents.addClass('layui-nav-itemed');
+        // 閫傞厤澶氱郴缁熸ā寮�
+        $('ul[lay-filter="' + navFilter + '"]').addClass('layui-hide');
+        var $aUl = $a.parents('.layui-nav');
+        $aUl.removeClass('layui-hide');
+        $(headerDOM + '>.layui-nav>.layui-nav-item').removeClass('layui-this');
+        $(headerDOM + '>.layui-nav>.layui-nav-item>a[nav-bind="' + $aUl.attr('nav-id') + '"]').parent().addClass('layui-this');
+    };
+
+    /** 鍙充晶寮瑰嚭 */
+    admin.popupRight = function (param) {
+        param.anim = -1;
+        param.offset = 'r';
+        param.move = false;
+        param.fixed = true;
+        if (param.area === undefined) param.area = '336px';
+        if (param.title === undefined) param.title = false;
+        if (param.closeBtn === undefined) param.closeBtn = false;
+        if (param.shadeClose === undefined) param.shadeClose = true;
+        if (param.skin === undefined) param.skin = 'layui-anim layui-anim-rl layui-layer-adminRight';
+        return admin.open(param);
+    };
+
+    /** 灏佽layer.open */
+    admin.open = function (param) {
+        if (param.content && param.type === 2) param.url = undefined;  // 鍙傛暟绾犳
+        if (param.url && (param.type === 2 || param.type === undefined)) param.type = 1;  // 鍙傛暟绾犳
+        if (param.area === undefined) param.area = param.type === 2 ? ['360px', '300px'] : '360px';
+        if (param.offset === undefined) param.offset = '70px';
+        if (param.shade === undefined) param.shade = .1;
+        if (param.fixed === undefined) param.fixed = false;
+        if (param.resize === undefined) param.resize = false;
+        if (param.skin === undefined) param.skin = 'layui-layer-admin';
+        var eCallBack = param.end;
+        param.end = function () {
+            layer.closeAll('tips');  // 鍏抽棴琛ㄥ崟楠岃瘉鐨則ips
+            eCallBack && eCallBack();
+        };
+        if (param.url) {
+            var sCallBack = param.success;
+            param.success = function (layero, index) {
+                $(layero).data('tpl', param.tpl || '');
+                admin.reloadLayer(index, param.url, sCallBack);
+            };
+        } else if (param.tpl && param.content) {
+            param.content = admin.util.tpl(param.content, param.data, setter.tplOpen, setter.tplClose);
+        }
+        var layIndex = layer.open(param);
+        if (param.data) admin.layerData['d' + layIndex] = param.data;
+        return layIndex;
+    };
+
+    /** 鑾峰彇寮圭獥鏁版嵁 */
+    admin.getLayerData = function (index, key) {
+        if (index === undefined) {
+            index = parent.layer.getFrameIndex(window.name);
+            if (index === undefined) return null;
+            else return parent.layui.admin.getLayerData(parseInt(index), key);
+        } else if (isNaN(index)) {
+            index = admin.getLayerIndex(index);
+        }
+        if (index === undefined) return;
+        var layerData = admin.layerData['d' + index];
+        if (key && layerData) return layerData[key];
+        return layerData;
+    };
+
+    /** 鏀惧叆寮圭獥鏁版嵁 */
+    admin.putLayerData = function (key, value, index) {
+        if (index === undefined) {
+            index = parent.layer.getFrameIndex(window.name);
+            if (index === undefined) return;
+            else return parent.layui.admin.putLayerData(key, value, parseInt(index));
+        } else if (isNaN(index)) {
+            index = admin.getLayerIndex(index);
+        }
+        if (index === undefined) return;
+        var layerData = admin.getLayerData(index);
+        if (!layerData) layerData = {};
+        layerData[key] = value;
+        admin.layerData['d' + index] = layerData;
+    };
+
+    /** 鍒锋柊url鏂瑰紡鐨刲ayer */
+    admin.reloadLayer = function (index, url, success) {
+        if (typeof url === 'function') {
+            success = url;
+            url = undefined;
+        }
+        if (isNaN(index)) index = admin.getLayerIndex(index);
+        if (index === undefined) return;
+        var $layero = $('#layui-layer' + index);
+        if (url === undefined) url = $layero.data('url');
+        if (!url) return;
+        $layero.data('url', url);
+        admin.showLoading($layero);
+        admin.ajax({
+            url: url,
+            dataType: 'html',
+            success: function (res) {
+                admin.removeLoading($layero, false);
+                if (typeof res !== 'string') res = JSON.stringify(res);
+                var tpl = $layero.data('tpl');
+                // 妯℃澘瑙f瀽
+                if (tpl === true || tpl === 'true') {
+                    var data = admin.getLayerData(index) || {};
+                    data.layerIndex = index;
+                    // 妯℃澘閲岄潰鏈夊姩鎬佹ā鏉垮鐞�
+                    var $html = $('<div>' + res + '</div>'), tplAll = {};
+                    $html.find('script,[tpl-ignore]').each(function (i) {
+                        var $this = $(this);
+                        tplAll['temp_' + i] = $this[0].outerHTML;
+                        $this.after('${temp_' + i + '}').remove();
+                    });
+                    res = admin.util.tpl($html.html(), data, setter.tplOpen, setter.tplClose);
+                    for (var f in tplAll) res = res.replace('${' + f + '}', tplAll[f]);
+                }
+                $layero.children('.layui-layer-content').html(res);
+                admin.renderTpl('#layui-layer' + index + ' [ew-tpl]');
+                success && success($layero[0], index);
+            }
+        });
+    };
+
+    /** 灏佽layer.alert */
+    admin.alert = function (content, options, yes) {
+        if (typeof options === 'function') {
+            yes = options;
+            options = {};
+        }
+        if (options.skin === undefined) options.skin = 'layui-layer-admin';
+        if (options.shade === undefined) options.shade = .1;
+        return layer.alert(content, options, yes);
+    };
+
+    /** 灏佽layer.confirm */
+    admin.confirm = function (content, options, yes, cancel) {
+        if (typeof options === 'function') {
+            cancel = yes;
+            yes = options;
+            options = {};
+        }
+        if (options.skin === undefined) options.skin = 'layui-layer-admin';
+        if (options.shade === undefined) options.shade = .1;
+        return layer.confirm(content, options, yes, cancel);
+    };
+
+    /** 灏佽layer.prompt */
+    admin.prompt = function (options, yes) {
+        if (typeof options === 'function') {
+            yes = options;
+            options = {};
+        }
+        if (options.skin === undefined) options.skin = 'layui-layer-admin layui-layer-prompt';
+        if (options.shade === undefined) options.shade = .1;
+        return layer.prompt(options, yes);
+    };
+
+    /** 灏佽ajax璇锋眰锛岃繑鍥炴暟鎹被鍨嬩负json */
+    admin.req = function (url, data, success, method, option) {
+        if (typeof data === 'function') {
+            option = method;
+            method = success;
+            success = data;
+            data = {};
+        }
+        if (method !== undefined && typeof method !== 'string') {
+            option = method;
+            method = undefined;
+        }
+        if (!method) method = 'GET';
+        if (typeof data === 'string') {
+            if (!option) option = {};
+            if (!option.contentType) option.contentType = 'application/json;charset=UTF-8';
+        } else if (setter.reqPutToPost) {
+            if ('put' === method.toLowerCase()) {
+                method = 'POST';
+                data._method = 'PUT';
+            } else if ('delete' === method.toLowerCase()) {
+                method = 'GET';
+                data._method = 'DELETE';
+            }
+        }
+        return admin.ajax($.extend({
+            url: (setter.baseServer || '') + url, data: data, type: method, dataType: 'json', success: success
+        }, option));
+    };
+
+    /** 灏佽ajax璇锋眰 */
+    admin.ajax = function (param) {
+        var oldParam = admin.util.deepClone(param);
+        if (!param.dataType) param.dataType = 'json';
+        if (!param.headers) param.headers = {};
+        // 缁熶竴璁剧疆header
+        var headers = setter.getAjaxHeaders(param.url);
+        if (headers) {
+            for (var i = 0; i < headers.length; i++) {
+                if (param.headers[headers[i].name] === undefined) param.headers[headers[i].name] = headers[i].value;
+            }
+        }
+        // success棰勫鐞�
+        var success = param.success;
+        param.success = function (result, status, xhr) {
+            var before = setter.ajaxSuccessBefore(admin.parseJSON(result), param.url, {
+                param: oldParam, reload: function (p) {
+                    admin.ajax($.extend(true, oldParam, p));
+                }, update: function (r) {
+                    result = r;
+                }, xhr: xhr
+            });
+            if (before !== false) success && success(result, status, xhr);
+            else param.cancel && param.cancel();
+        };
+        param.error = function (xhr, status) {
+            param.success({code: xhr.status, msg: xhr.statusText}, status, xhr);
+        };
+        // 瑙e喅缂撳瓨闂
+        if (layui.cache.version && (!setter.apiNoCache || param.dataType.toLowerCase() !== 'json')) {
+            if (param.url.indexOf('?') === -1) param.url += '?v=';
+            else param.url += '&v=';
+            if (layui.cache.version === true) param.url += new Date().getTime();
+            else param.url += layui.cache.version;
+        }
+        return $.ajax(param);
+    };
+
+    /** 瑙f瀽json */
+    admin.parseJSON = function (str) {
+        if (typeof str === 'string') {
+            try {
+                return JSON.parse(str);
+            } catch (e) {
+            }
+        }
+        return str;
+    };
+
+    /** 鏄剧ず鍔犺浇鍔ㄧ敾 */
+    admin.showLoading = function (elem, type, opacity, size) {
+        if (elem !== undefined && (typeof elem !== 'string') && !(elem instanceof $)) {
+            type = elem.type;
+            opacity = elem.opacity;
+            size = elem.size;
+            elem = elem.elem;
+        }
+        if (type === undefined) type = setter.defaultLoading || 1;
+        if (size === undefined) size = 'sm';
+        if (elem === undefined) elem = 'body';
+        var loader = [
+            '<div class="ball-loader ' + size + '"><span></span><span></span><span></span><span></span></div>',
+            '<div class="rubik-loader ' + size + '"></div>',
+            '<div class="signal-loader ' + size + '"><span></span><span></span><span></span><span></span></div>',
+            '<div class="layui-loader ' + size + '"><i class="layui-icon layui-icon-loading layui-anim layui-anim-rotate layui-anim-loop"></i></div>'
+        ];
+        $(elem).addClass('page-no-scroll');  // 绂佺敤婊氬姩鏉�
+        $(elem).scrollTop(0);
+        var $loading = $(elem).children('.page-loading');
+        if ($loading.length <= 0) {
+            $(elem).append('<div class="page-loading">' + loader[type - 1] + '</div>');
+            $loading = $(elem).children('.page-loading');
+        }
+        if (opacity !== undefined) $loading.css('background-color', 'rgba(255,255,255,' + opacity + ')');
+        $loading.show();
+    };
+
+    /** 绉婚櫎鍔犺浇鍔ㄧ敾 */
+    admin.removeLoading = function (elem, fade, del) {
+        if (elem === undefined) elem = 'body';
+        if (fade === undefined) fade = true;
+        var $loading = $(elem).children('.page-loading');
+        if (del) $loading.remove();
+        else if (fade) $loading.fadeOut('fast');
+        else $loading.hide();
+        $(elem).removeClass('page-no-scroll');
+    };
+
+    /** 缂撳瓨涓存椂鏁版嵁 */
+    admin.putTempData = function (key, value, local) {
+        var tableName = local ? setter.tableName : setter.tableName + '_tempData';
+        if (value === undefined || value === null) {
+            if (local) layui.data(tableName, {key: key, remove: true});
+            else layui.sessionData(tableName, {key: key, remove: true});
+        } else {
+            if (local) layui.data(tableName, {key: key, value: value});
+            else layui.sessionData(tableName, {key: key, value: value});
+        }
+    };
+
+    /** 鑾峰彇缂撳瓨涓存椂鏁版嵁 */
+    admin.getTempData = function (key, local) {
+        if (typeof key === 'boolean') {
+            local = key;
+            key = undefined;
+        }
+        var tableName = local ? setter.tableName : setter.tableName + '_tempData';
+        var tempData = local ? layui.data(tableName) : layui.sessionData(tableName);
+        if (!key) return tempData;
+        return tempData ? tempData[key] : undefined;
+    };
+
+    /** 婊戝姩閫夐」鍗� */
+    admin.rollPage = function (d) {
+        if (window !== top && !admin.isTop() && top.layui && top.layui.admin) return top.layui.admin.rollPage(d);
+        var $tabTitle = $(tabDOM + '>.layui-tab-title');
+        var left = $tabTitle.scrollLeft();
+        if ('left' === d) {
+            $tabTitle.animate({'scrollLeft': left - 120}, 100);
+        } else if ('auto' === d) {
+            var autoLeft = 0;
+            $tabTitle.children("li").each(function () {
+                if ($(this).hasClass('layui-this')) return false;
+                else autoLeft += $(this).outerWidth();
+            });
+            $tabTitle.animate({'scrollLeft': autoLeft - 120}, 100);
+        } else {
+            $tabTitle.animate({'scrollLeft': left + 120}, 100);
+        }
+    };
+
+    /** 鍒锋柊褰撳墠閫夐」鍗� */
+    admin.refresh = function (url, isIndex) {
+        if (window !== top && !admin.isTop() && top.layui && top.layui.admin) return top.layui.admin.refresh(url);
+        var $iframe;
+        if (!url) {
+            $iframe = $(tabDOM + '>.layui-tab-content>.layui-tab-item.layui-show>.admin-iframe');
+            if (!$iframe || $iframe.length <= 0) $iframe = $(bodyDOM + '>div>.admin-iframe');
+        } else {
+            $iframe = $(tabDOM + '>.layui-tab-content>.layui-tab-item>.admin-iframe[lay-id="' + url + '"]');
+            if (!$iframe || $iframe.length <= 0) $iframe = $(bodyDOM + '>.admin-iframe');
+        }
+        if (!$iframe || !$iframe[0]) return console.warn(url + ' is not found');
+        try {
+            if (isIndex && $iframe[0].contentWindow.refreshTab) {
+                $iframe[0].contentWindow.refreshTab();
+            } else {
+                admin.showLoading({elem: $iframe.parent(), size: ''});
+                $iframe[0].contentWindow.location.reload();
+            }
+        } catch (e) {
+            console.warn(e);
+            $iframe.attr('src', $iframe.attr('src'));
+        }
+    };
+
+    /** 鍏抽棴褰撳墠閫夐」鍗� */
+    admin.closeThisTabs = function (url) {
+        if (window !== top && !admin.isTop() && top.layui && top.layui.admin) return top.layui.admin.closeThisTabs(url);
+        admin.closeTabOperNav();
+        var $title = $(tabDOM + '>.layui-tab-title');
+        if (!url) {
+            if ($title.find('li').first().hasClass('layui-this')) return layer.msg('涓婚〉涓嶈兘鍏抽棴', {icon: 2});
+            $title.find('li.layui-this').find('.layui-tab-close').trigger('click');
+        } else {
+            if (url === $title.find('li').first().attr('lay-id')) return layer.msg('涓婚〉涓嶈兘鍏抽棴', {icon: 2});
+            $title.find('li[lay-id="' + url + '"]').find('.layui-tab-close').trigger('click');
+        }
+    };
+
+    /** 鍏抽棴鍏朵粬閫夐」鍗� */
+    admin.closeOtherTabs = function (url) {
+        if (window !== top && !admin.isTop() && top.layui && top.layui.admin) return top.layui.admin.closeOtherTabs(url);
+        if (!url) {
+            $(tabDOM + '>.layui-tab-title li:gt(0):not(.layui-this)').find('.layui-tab-close').trigger('click');
+        } else {
+            $(tabDOM + '>.layui-tab-title li:gt(0)').each(function () {
+                if (url !== $(this).attr('lay-id')) $(this).find('.layui-tab-close').trigger('click');
+            });
+        }
+        admin.closeTabOperNav();
+    };
+
+    /** 鍏抽棴鎵�鏈夐�夐」鍗� */
+    admin.closeAllTabs = function () {
+        if (window !== top && !admin.isTop() && top.layui && top.layui.admin) return top.layui.admin.closeAllTabs();
+        $(tabDOM + '>.layui-tab-title li:gt(0)').find('.layui-tab-close').trigger('click');
+        $(tabDOM + '>.layui-tab-title li:eq(0)').trigger('click');
+        admin.closeTabOperNav();
+    };
+
+    /** 鍏抽棴閫夐」鍗℃搷浣滆彍鍗� */
+    admin.closeTabOperNav = function () {
+        if (window !== top && !admin.isTop() && top.layui && top.layui.admin) return top.layui.admin.closeTabOperNav();
+        $('.layui-icon-down .layui-nav .layui-nav-child').removeClass('layui-show');
+    };
+
+    /** 璁剧疆涓婚 */
+    admin.changeTheme = function (theme, win, noCache, noChild) {
+        if (!noCache) admin.putSetting('defaultTheme', theme);
+        if (!win) win = top;
+        admin.removeTheme(win);
+        if (theme) {
+            try {
+                var $body = win.layui.jquery('body');
+                $body.addClass(theme);
+                $body.data('theme', theme);
+            } catch (e) {
+            }
+        }
+        if (noChild) return;
+        var ifs = win.frames;
+        for (var i = 0; i < ifs.length; i++) admin.changeTheme(theme, ifs[i], true, false);
+    };
+
+    /** 绉婚櫎涓婚 */
+    admin.removeTheme = function (w) {
+        if (!w) w = window;
+        try {
+            var $body = w.layui.jquery('body');
+            var theme = $body.data('theme');
+            if (theme) $body.removeClass(theme);
+            $body.removeData('theme');
+        } catch (e) {
+        }
+    };
+
+    /** 鍏抽棴褰撳墠iframe灞傚脊绐� */
+    admin.closeThisDialog = function () {
+        return admin.closeDialog();
+    };
+
+    /** 鍏抽棴elem鎵�鍦ㄧ殑椤甸潰灞傚脊绐� */
+    admin.closeDialog = function (elem) {
+        if (elem) layer.close(admin.getLayerIndex(elem));
+        else parent.layer.close(parent.layer.getFrameIndex(window.name));
+    };
+
+    /** 鑾峰彇椤甸潰灞傚脊绐楃殑index */
+    admin.getLayerIndex = function (elem) {
+        if (!elem) return parent.layer.getFrameIndex(window.name);
+        var id = $(elem).parents('.layui-layer').first().attr('id');
+        if (id && id.length >= 11) return id.substring(11);
+    };
+
+    /** 璁╁綋鍓嶇殑iframe寮瑰眰鑷�傚簲楂樺害 */
+    admin.iframeAuto = function () {
+        return parent.layer.iframeAuto(parent.layer.getFrameIndex(window.name));
+    };
+
+    /** 鑾峰彇娴忚鍣ㄩ珮搴� */
+    admin.getPageHeight = function () {
+        return document.documentElement.clientHeight || document.body.clientHeight;
+    };
+
+    /** 鑾峰彇娴忚鍣ㄥ搴� */
+    admin.getPageWidth = function () {
+        return document.documentElement.clientWidth || document.body.clientWidth;
+    };
+
+    /** 缁戝畾琛ㄥ崟寮圭獥 */
+    admin.modelForm = function (layero, btnFilter, formFilter) {
+        var $layero = $(layero);
+        $layero.addClass('layui-form');
+        if (formFilter) $layero.attr('lay-filter', formFilter);
+        // 纭畾鎸夐挳缁戝畾submit
+        var $btnSubmit = $layero.find('.layui-layer-btn .layui-layer-btn0');
+        $btnSubmit.attr('lay-submit', '');
+        $btnSubmit.attr('lay-filter', btnFilter);
+    };
+
+    /** loading鎸夐挳 */
+    admin.btnLoading = function (elem, text, loading) {
+        if (text !== undefined && (typeof text === 'boolean')) {
+            loading = text;
+            text = undefined;
+        }
+        if (text === undefined) text = '&nbsp;鍔犺浇涓�';
+        if (loading === undefined) loading = true;
+        var $elem = $(elem);
+        if (loading) {
+            $elem.addClass('ew-btn-loading');
+            $elem.prepend('<span class="ew-btn-loading-text"><i class="layui-icon layui-icon-loading layui-anim layui-anim-rotate layui-anim-loop"></i>' + text + '</span>');
+            $elem.attr('disabled', 'disabled').prop('disabled', true);
+        } else {
+            $elem.removeClass('ew-btn-loading');
+            $elem.children('.ew-btn-loading-text').remove();
+            $elem.removeProp('disabled').removeAttr('disabled');
+        }
+    };
+
+    /** 榧犳爣绉诲叆渚ц竟鏍忚嚜鍔ㄥ睍寮� */
+    admin.openSideAutoExpand = function () {
+        var $side = $('.layui-layout-admin>.layui-side');
+        $side.off('mouseenter.openSideAutoExpand').on("mouseenter.openSideAutoExpand", function () {
+            if (!$(this).parent().hasClass('admin-nav-mini')) return;
+            admin.flexible(true);
+            $(this).addClass('side-mini-hover');
+        });
+        $side.off('mouseleave.openSideAutoExpand').on("mouseleave.openSideAutoExpand", function () {
+            if (!$(this).hasClass('side-mini-hover')) return;
+            admin.flexible(false);
+            $(this).removeClass('side-mini-hover');
+        });
+    };
+
+    /** 琛ㄦ牸鍗曞厓鏍艰秴鍑哄唴瀹硅嚜鍔ㄥ睍寮� */
+    admin.openCellAutoExpand = function () {
+        var $body = $('body');
+        $body.off('mouseenter.openCellAutoExpand').on('mouseenter.openCellAutoExpand', '.layui-table-view td', function () {
+            $(this).find('.layui-table-grid-down').trigger('click');
+        });
+        $body.off('mouseleave.openCellAutoExpand').on('mouseleave.openCellAutoExpand', '.layui-table-tips>.layui-layer-content', function () {
+            $('.layui-table-tips-c').trigger('click');
+        });
+    };
+
+    /** open浜嬩欢瑙f瀽layer鍙傛暟 */
+    admin.parseLayerOption = function (option) {
+        // 鏁扮粍绫诲瀷杩涜杞崲
+        for (var f in option) {
+            if (!option.hasOwnProperty(f)) continue;
+            if (option[f] && option[f].toString().indexOf(',') !== -1) option[f] = option[f].toString().split(',');
+        }
+        // function绫诲瀷鍙傛暟杞崲
+        var fs = {'success': 'layero,index', 'cancel': 'index,layero', 'end': '', 'full': '', 'min': '', 'restore': ''};
+        for (var k in fs) {
+            if (!fs.hasOwnProperty(k) || !option[k]) continue;
+            try {
+                if (/^[a-zA-Z_]+[a-zA-Z0-9_]+$/.test(option[k])) option[k] += '()';
+                option[k] = new Function(fs[k], option[k]);
+            } catch (e) {
+                option[k] = undefined;
+            }
+        }
+        // content鍙栧唴瀹�
+        if (option.content && (typeof option.content === 'string') && option.content.indexOf('#') === 0) {
+            if ($(option.content).is('script')) option.content = $(option.content).html();
+            else option.content = $(option.content);
+        }
+        if (option.type === undefined && option.url === undefined) option.type = 2;  // 榛樿涓篿frame绫诲瀷
+        return option;
+    };
+
+    /** 瀛楃涓插舰寮忕殑parent.parent杞瑆indow瀵硅薄 */
+    admin.strToWin = function (str) {
+        var win = window;
+        if (!str) return win;
+        var ws = str.split('.');
+        for (var i = 0; i < ws.length; i++) win = win[ws[i]];
+        return win;
+    };
+
+    /** 瑙e喅鎶樺彔渚ц竟鏍忚〃鏍兼粴鍔ㄦ潯闂幇 */
+    admin.hideTableScrollBar = function (win) {
+        if (admin.getPageWidth() <= 768) return;
+        if (!win) {
+            var $iframe = $(tabDOM + '>.layui-tab-content>.layui-tab-item.layui-show>.admin-iframe');
+            if ($iframe.length <= 0) $iframe = $(bodyDOM + '>div>.admin-iframe');
+            if ($iframe.length > 0) win = $iframe[0].contentWindow;
+        }
+        try {  // 鍙兘浼氳法鍩�
+            if (window.hsbTimer) clearTimeout(window.hsbTimer);
+            win.layui.jquery('.layui-table-body.layui-table-main').addClass('no-scrollbar');
+            window.hsbTimer = setTimeout(function () {
+                win.layui.jquery('.layui-table-body.layui-table-main').removeClass('no-scrollbar');
+            }, 800);
+        } catch (e) {
+        }
+    };
+
+    /** 鍒ゆ柇鏄惁鏄富妗嗘灦 */
+    admin.isTop = function () {
+        return $(bodyDOM).length > 0;
+    };
+
+    /** admin鎻愪緵鐨勪簨浠� */
+    admin.events = {
+        /* 鎶樺彔渚у鑸� */
+        flexible: function () {
+            admin.strToWin($(this).data('window')).layui.admin.flexible();
+        },
+        /* 鍒锋柊涓讳綋閮ㄥ垎 */
+        refresh: function () {
+            admin.strToWin($(this).data('window')).layui.admin.refresh();
+        },
+        /* 鍚庨�� */
+        back: function () {
+            admin.strToWin($(this).data('window')).history.back();
+        },
+        /* 璁剧疆涓婚 */
+        theme: function () {
+            var option = admin.util.deepClone($(this).data());
+            admin.strToWin(option.window).layui.admin.popupRight($.extend({
+                id: 'layer-theme', url: option.url || 'tpl/tpl-theme.html'
+            }, admin.parseLayerOption(option)));
+        },
+        /* 鎵撳紑渚跨 */
+        note: function () {
+            var option = admin.util.deepClone($(this).data());
+            admin.strToWin(option.window).layui.admin.popupRight($.extend({
+                id: 'layer-note', url: option.url || 'tpl/tpl-note.html'
+            }, admin.parseLayerOption(option)));
+        },
+        /* 鎵撳紑娑堟伅 */
+        message: function () {
+            var option = admin.util.deepClone($(this).data());
+            admin.strToWin(option.window).layui.admin.popupRight($.extend({
+                id: 'layer-notice', url: option.url || 'tpl/tpl-message.html'
+            }, admin.parseLayerOption(option)));
+        },
+        /* 鎵撳紑淇敼瀵嗙爜寮圭獥 */
+        psw: function () {
+            var option = admin.util.deepClone($(this).data());
+            admin.strToWin(option.window).layui.admin.open($.extend({
+                id: 'layer-psw', title: '淇敼瀵嗙爜', shade: 0, url: option.url || 'tpl/tpl-password.html'
+            }, admin.parseLayerOption(option)));
+        },
+        /* 閫�鍑虹櫥褰� */
+        logout: function () {
+            var option = admin.util.deepClone($(this).data());
+            admin.unlockScreen();
+
+            function doLogout() {
+                if (option.ajax) {
+                    var loadIndex = layer.load(2);
+                    admin.req(option.ajax, function (res) {
+                        layer.close(loadIndex);
+                        if (option.parseData) {
+                            try {
+                                var parseData = new Function('res', option.parseData);
+                                res = parseData(res);
+                            } catch (e) {
+                                console.error(e);
+                            }
+                        }
+                        if (res.code == (option.code || 0)) {
+                            setter.removeToken && setter.removeToken();
+                            location.replace(option.url || '/');
+                        } else {
+                            layer.msg(res.msg, {icon: 2});
+                        }
+                    }, option.method || 'delete');
+                } else {
+                    setter.removeToken && setter.removeToken();
+                    location.replace(option.url || '/');
+                }
+            }
+
+            if (false === option.confirm || 'false' === option.confirm) return doLogout();
+            admin.strToWin(option.window).layui.layer.confirm(option.content || '纭畾瑕侀��鍑虹櫥褰曞悧锛�', $.extend({
+                title: '娓╅Θ鎻愮ず', skin: 'layui-layer-admin', shade: .1
+            }, admin.parseLayerOption(option)), function () {
+                doLogout();
+            });
+        },
+        /* 鎵撳紑寮圭獥 */
+        open: function () {
+            var option = admin.util.deepClone($(this).data());
+            admin.strToWin(option.window).layui.admin.open(admin.parseLayerOption(option));
+        },
+        /* 鎵撳紑鍙充晶寮圭獥 */
+        popupRight: function () {
+            var option = admin.util.deepClone($(this).data());
+            admin.strToWin(option.window).layui.admin.popupRight(admin.parseLayerOption(option));
+        },
+        /* 鍏ㄥ睆 */
+        fullScreen: function () {
+            var ac = 'layui-icon-screen-full', ic = 'layui-icon-screen-restore';
+            var $ti = $(this).find('i');
+            var isFullscreen = document.fullscreenElement || document.msFullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || false;
+            if (isFullscreen) {
+                var efs = document.exitFullscreen || document.webkitExitFullscreen || document.mozCancelFullScreen || document.msExitFullscreen;
+                if (efs) {
+                    efs.call(document);
+                } else if (window.ActiveXObject) {
+                    var ws = new ActiveXObject('WScript.Shell');
+                    ws && ws.SendKeys('{F11}');
+                }
+                $ti.addClass(ac).removeClass(ic);
+            } else {
+                var el = document.documentElement;
+                var rfs = el.requestFullscreen || el.webkitRequestFullscreen || el.mozRequestFullScreen || el.msRequestFullscreen;
+                if (rfs) {
+                    rfs.call(el);
+                } else if (window.ActiveXObject) {
+                    var wss = new ActiveXObject('WScript.Shell');
+                    wss && wss.SendKeys('{F11}');
+                }
+                $ti.addClass(ic).removeClass(ac);
+            }
+        },
+        /* 宸︽粦鍔╰ab */
+        leftPage: function () {
+            admin.strToWin($(this).data('window')).layui.admin.rollPage('left');
+        },
+        /* 鍙虫粦鍔╰ab */
+        rightPage: function () {
+            admin.strToWin($(this).data('window')).layui.admin.rollPage();
+        },
+        /* 鍏抽棴褰撳墠閫夐」鍗� */
+        closeThisTabs: function () {
+            var url = $(this).data('url');
+            admin.strToWin($(this).data('window')).layui.admin.closeThisTabs(url);
+        },
+        /* 鍏抽棴鍏朵粬閫夐」鍗� */
+        closeOtherTabs: function () {
+            admin.strToWin($(this).data('window')).layui.admin.closeOtherTabs();
+        },
+        /* 鍏抽棴鎵�鏈夐�夐」鍗� */
+        closeAllTabs: function () {
+            admin.strToWin($(this).data('window')).layui.admin.closeAllTabs();
+        },
+        /* 鍏抽棴褰撳墠寮圭獥(鏅鸿兘) */
+        closeDialog: function () {
+            if ($(this).parents('.layui-layer').length > 0) admin.closeDialog(this);
+            else admin.closeDialog();
+        },
+        /* 鍏抽棴褰撳墠iframe寮圭獥 */
+        closeIframeDialog: function () {
+            admin.closeDialog();
+        },
+        /* 鍏抽棴褰撳墠椤甸潰灞傚脊绐� */
+        closePageDialog: function () {
+            admin.closeDialog(this);
+        },
+        /* 閿佸睆 */
+        lockScreen: function () {
+            admin.strToWin($(this).data('window')).layui.admin.lockScreen($(this).data('url'));
+        }
+    };
+
+    /** 閫夋嫨浣嶇疆 */
+    admin.chooseLocation = function (param) {
+        var dialogTitle = param.title;  // 寮圭獥鏍囬
+        var onSelect = param.onSelect;  // 閫夋嫨鍥炶皟
+        var needCity = param.needCity;  // 鏄惁杩斿洖琛屾斂鍖�
+        var mapCenter = param.center;  // 鍦板浘涓績
+        var defaultZoom = param.defaultZoom;  // 鍦板浘榛樿缂╂斁绾у埆
+        var pointZoom = param.pointZoom;  // 閫変腑鏃跺湴鍥剧缉鏀剧骇鍒�
+        var searchKeywords = param.keywords;  // poi妫�绱㈠叧閿瓧
+        var searchPageSize = param.pageSize;  // poi妫�绱㈡渶澶ф暟閲�
+        var mapJsUrl = param.mapJsUrl;  // 楂樺痉鍦板浘js鐨剈rl
+        if (dialogTitle === undefined) dialogTitle = '閫夋嫨浣嶇疆';
+        if (defaultZoom === undefined) defaultZoom = 11;
+        if (pointZoom === undefined) pointZoom = 17;
+        if (searchKeywords === undefined) searchKeywords = '';
+        if (searchPageSize === undefined) searchPageSize = 30;
+        if (mapJsUrl === undefined) mapJsUrl = 'https://webapi.amap.com/maps?v=1.4.14&key=006d995d433058322319fa797f2876f5';
+        var isSelMove = false, selLocation;
+        // 鎼滅储闄勮繎
+        var searchNearBy = function (lat, lng) {
+            AMap.service(['AMap.PlaceSearch'], function () {
+                var placeSearch = new AMap.PlaceSearch({
+                    type: '', pageSize: searchPageSize, pageIndex: 1
+                });
+                var cpoint = [lng, lat];
+                placeSearch.searchNearBy(searchKeywords, cpoint, 1000, function (status, result) {
+                    if (status === 'complete') {
+                        var pois = result.poiList.pois;
+                        var htmlList = '';
+                        for (var i = 0; i < pois.length; i++) {
+                            var poiItem = pois[i];
+                            if (poiItem.location !== undefined) {
+                                htmlList += '<div data-lng="' + poiItem.location.lng + '" data-lat="' + poiItem.location.lat + '" class="ew-map-select-search-list-item">';
+                                htmlList += '     <div class="ew-map-select-search-list-item-title">' + poiItem.name + '</div>';
+                                htmlList += '     <div class="ew-map-select-search-list-item-address">' + poiItem.address + '</div>';
+                                htmlList += '     <div class="ew-map-select-search-list-item-icon-ok layui-hide"><i class="layui-icon layui-icon-ok-circle"></i></div>';
+                                htmlList += '</div>';
+                            }
+                        }
+                        $('#ew-map-select-pois').html(htmlList);
+                    }
+                });
+            });
+        };
+        // 娓叉煋鍦板浘
+        var renderMap = function () {
+            var mapOption = {
+                resizeEnable: true, // 鐩戞帶鍦板浘瀹瑰櫒灏哄鍙樺寲
+                zoom: defaultZoom  // 鍒濈缉鏀剧骇鍒�
+            };
+            mapCenter && (mapOption.center = mapCenter);
+            var map = new AMap.Map('ew-map-select-map', mapOption);
+            // 鍦板浘鍔犺浇瀹屾垚
+            map.on('complete', function () {
+                var center = map.getCenter();
+                searchNearBy(center.lat, center.lng);
+            });
+            // 鍦板浘绉诲姩缁撴潫浜嬩欢
+            map.on('moveend', function () {
+                if (isSelMove) {
+                    isSelMove = false;
+                } else {
+                    $('#ew-map-select-tips').addClass('layui-hide');
+                    $('#ew-map-select-center-img').removeClass('bounceInDown');
+                    setTimeout(function () {
+                        $('#ew-map-select-center-img').addClass('bounceInDown');
+                    });
+                    var center = map.getCenter();
+                    searchNearBy(center.lat, center.lng);
+                }
+            });
+            // poi鍒楄〃鐐瑰嚮浜嬩欢
+            $('#ew-map-select-pois').off('click').on('click', '.ew-map-select-search-list-item', function () {
+                $('#ew-map-select-tips').addClass('layui-hide');
+                $('#ew-map-select-pois .ew-map-select-search-list-item-icon-ok').addClass('layui-hide');
+                $(this).find('.ew-map-select-search-list-item-icon-ok').removeClass('layui-hide');
+                $('#ew-map-select-center-img').removeClass('bounceInDown');
+                setTimeout(function () {
+                    $('#ew-map-select-center-img').addClass('bounceInDown');
+                });
+                var lng = $(this).data('lng');
+                var lat = $(this).data('lat');
+                var name = $(this).find('.ew-map-select-search-list-item-title').text();
+                var address = $(this).find('.ew-map-select-search-list-item-address').text();
+                selLocation = {name: name, address: address, lat: lat, lng: lng};
+                isSelMove = true;
+                map.setZoomAndCenter(pointZoom, [lng, lat]);
+            });
+            // 纭畾鎸夐挳鐐瑰嚮浜嬩欢
+            $('#ew-map-select-btn-ok').click(function () {
+                if (selLocation === undefined) {
+                    layer.msg('璇风偣鍑讳綅缃垪琛ㄩ�夋嫨', {icon: 2, anim: 6});
+                } else if (onSelect) {
+                    if (needCity) {
+                        var loadIndex = layer.load(2);
+                        map.setCenter([selLocation.lng, selLocation.lat]);
+                        map.getCity(function (result) {
+                            layer.close(loadIndex);
+                            selLocation.city = result;
+                            admin.closeDialog('#ew-map-select-btn-ok');
+                            onSelect(selLocation);
+                        });
+                    } else {
+                        admin.closeDialog('#ew-map-select-btn-ok');
+                        onSelect(selLocation);
+                    }
+                } else {
+                    admin.closeDialog('#ew-map-select-btn-ok');
+                }
+            });
+            // 鎼滅储鎻愮ず
+            var $inputSearch = $('#ew-map-select-input-search');
+            $inputSearch.off('input').on('input', function () {
+                var keywords = $(this).val();
+                var $selectTips = $('#ew-map-select-tips');
+                if (!keywords) {
+                    $selectTips.html('');
+                    $selectTips.addClass('layui-hide');
+                }
+                AMap.plugin('AMap.Autocomplete', function () {
+                    var autoComplete = new AMap.Autocomplete({city: '鍏ㄥ浗'});
+                    autoComplete.search(keywords, function (status, result) {
+                        if (result.tips) {
+                            var tips = result.tips;
+                            var htmlList = '';
+                            for (var i = 0; i < tips.length; i++) {
+                                var tipItem = tips[i];
+                                if (tipItem.location !== undefined) {
+                                    htmlList += '<div data-lng="' + tipItem.location.lng + '" data-lat="' + tipItem.location.lat + '" class="ew-map-select-search-list-item">';
+                                    htmlList += '     <div class="ew-map-select-search-list-item-icon-search"><i class="layui-icon layui-icon-search"></i></div>';
+                                    htmlList += '     <div class="ew-map-select-search-list-item-title">' + tipItem.name + '</div>';
+                                    htmlList += '     <div class="ew-map-select-search-list-item-address">' + tipItem.address + '</div>';
+                                    htmlList += '</div>';
+                                }
+                            }
+                            $selectTips.html(htmlList);
+                            if (tips.length === 0) $('#ew-map-select-tips').addClass('layui-hide');
+                            else $('#ew-map-select-tips').removeClass('layui-hide');
+                        } else {
+                            $selectTips.html('');
+                            $selectTips.addClass('layui-hide');
+                        }
+                    });
+                });
+            });
+            $inputSearch.off('blur').on('blur', function () {
+                var keywords = $(this).val();
+                var $selectTips = $('#ew-map-select-tips');
+                if (!keywords) {
+                    $selectTips.html('');
+                    $selectTips.addClass('layui-hide');
+                }
+            });
+            $inputSearch.off('focus').on('focus', function () {
+                var keywords = $(this).val();
+                if (keywords) $('#ew-map-select-tips').removeClass('layui-hide');
+            });
+            // tips鍒楄〃鐐瑰嚮浜嬩欢
+            $('#ew-map-select-tips').off('click').on('click', '.ew-map-select-search-list-item', function () {
+                $('#ew-map-select-tips').addClass('layui-hide');
+                var lng = $(this).data('lng');
+                var lat = $(this).data('lat');
+                selLocation = undefined;
+                map.setZoomAndCenter(pointZoom, [lng, lat]);
+            });
+        };
+        // 鏄剧ず寮圭獥
+        var htmlStr = [
+            '<div class="ew-map-select-tool" style="position: relative;">',
+            '     鎼滅储锛�<input id="ew-map-select-input-search" class="layui-input icon-search inline-block" style="width: 190px;" placeholder="杈撳叆鍏抽敭瀛楁悳绱�" autocomplete="off" />',
+            '     <button id="ew-map-select-btn-ok" class="layui-btn icon-btn pull-right" type="button"><i class="layui-icon">&#xe605;</i>纭畾</button>',
+            '     <div id="ew-map-select-tips" class="ew-map-select-search-list layui-hide">',
+            '     </div>',
+            '</div>',
+            '<div class="layui-row ew-map-select">',
+            '     <div class="layui-col-sm7 ew-map-select-map-group" style="position: relative;">',
+            '          <div id="ew-map-select-map"></div>',
+            '          <i id="ew-map-select-center-img2" class="layui-icon layui-icon-add-1"></i>',
+            '          <img id="ew-map-select-center-img" src="https://3gimg.qq.com/lightmap/components/locationPicker2/image/marker.png" alt=""/>',
+            '     </div>',
+            '     <div id="ew-map-select-pois" class="layui-col-sm5 ew-map-select-search-list">',
+            '     </div>',
+            '</div>'].join('');
+        admin.open({
+            id: 'ew-map-select', type: 1, title: dialogTitle, area: '750px', content: htmlStr,
+            success: function (layero, dIndex) {
+                var $content = $(layero).children('.layui-layer-content');
+                $content.css('overflow', 'visible');
+                admin.showLoading($content);
+                if (undefined === window.AMap) {
+                    $.getScript(mapJsUrl, function () {
+                        renderMap();
+                        admin.removeLoading($content);
+                    });
+                } else {
+                    renderMap();
+                    admin.removeLoading($content);
+                }
+            }
+        });
+    };
+
+    /** 瑁佸壀鍥剧墖 */
+    admin.cropImg = function (param) {
+        var uploadedImageType = 'image/jpeg';  // 褰撳墠鍥剧墖鐨勭被鍨�
+        var aspectRatio = param.aspectRatio;  // 瑁佸壀姣斾緥
+        var imgSrc = param.imgSrc;  // 瑁佸壀鍥剧墖
+        var imgType = param.imgType;  // 鍥剧墖绫诲瀷
+        var onCrop = param.onCrop;  // 瑁佸壀瀹屾垚鍥炶皟
+        var limitSize = param.limitSize;  // 闄愬埗閫夋嫨鐨勫浘鐗囧ぇ灏�
+        var acceptMime = param.acceptMime;  // 闄愬埗閫夋嫨鐨勫浘鐗囩被鍨�
+        var imgExts = param.exts;  // 闄愬埗閫夋嫨鐨勫浘鐗囩被鍨�
+        var dialogTitle = param.title;  // 寮圭獥鐨勬爣棰�
+        if (aspectRatio === undefined) aspectRatio = 1;
+        if (dialogTitle === undefined) dialogTitle = '瑁佸壀鍥剧墖';
+        if (imgType) uploadedImageType = imgType;
+        layui.use(['Cropper', 'upload'], function () {
+            var Cropper = layui.Cropper, upload = layui.upload;
+
+            // 娓叉煋缁勪欢
+            function renderElem() {
+                var imgCropper, $cropImg = $('#ew-crop-img');
+                // 涓婁紶鏂囦欢鎸夐挳缁戝畾浜嬩欢
+                var uploadOptions = {
+                    elem: '#ew-crop-img-upload', auto: false, drag: false,
+                    choose: function (obj) {
+                        obj.preview(function (index, file, result) {
+                            uploadedImageType = file.type;
+                            $cropImg.attr('src', result);
+                            if (!imgSrc || !imgCropper) {
+                                imgSrc = result;
+                                renderElem();
+                            } else {
+                                imgCropper.destroy();
+                                imgCropper = new Cropper($cropImg[0], options);
+                            }
+                        });
+                    }
+                };
+                if (limitSize !== undefined) uploadOptions.size = limitSize;
+                if (acceptMime !== undefined) uploadOptions.acceptMime = acceptMime;
+                if (imgExts !== undefined) uploadOptions.exts = imgExts;
+                upload.render(uploadOptions);
+                // 娌℃湁浼犲浘鐗囪Е鍙戜笂浼犲浘鐗�
+                if (!imgSrc) return $('#ew-crop-img-upload').trigger('click');
+                // 娓叉煋瑁佸壀缁勪欢
+                var options = {aspectRatio: aspectRatio, preview: '#ew-crop-img-preview'};
+                imgCropper = new Cropper($cropImg[0], options);
+                // 鎿嶄綔鎸夐挳缁戝畾浜嬩欢
+                $('.ew-crop-tool').on('click', '[data-method]', function () {
+                    var data = $(this).data(), cropped, result;
+                    if (!imgCropper || !data.method) return;
+                    data = $.extend({}, data);
+                    cropped = imgCropper.cropped;
+                    switch (data.method) {
+                        case 'rotate':
+                            if (cropped && options.viewMode > 0) imgCropper.clear();
+                            break;
+                        case 'getCroppedCanvas':
+                            if (uploadedImageType === 'image/jpeg') {
+                                if (!data.option) data.option = {};
+                                data.option.fillColor = '#fff';
+                            }
+                            break;
+                    }
+                    result = imgCropper[data.method](data.option, data.secondOption);
+                    switch (data.method) {
+                        case 'rotate':
+                            if (cropped && options.viewMode > 0) imgCropper.crop();
+                            break;
+                        case 'scaleX':
+                        case 'scaleY':
+                            $(this).data('option', -data.option);
+                            break;
+                        case 'getCroppedCanvas':
+                            if (result) {
+                                onCrop && onCrop(result.toDataURL(uploadedImageType));
+                                admin.closeDialog('#ew-crop-img');
+                            } else {
+                                layer.msg('瑁佸壀澶辫触', {icon: 2, anim: 6});
+                            }
+                            break;
+                    }
+                });
+            }
+
+            // 鏄剧ず寮圭獥
+            var htmlStr = [
+                '<div class="layui-row">',
+                '     <div class="layui-col-sm8" style="min-height: 9rem;">',
+                '          <img id="ew-crop-img" src="', imgSrc || '', '" style="max-width:100%;" alt=""/>',
+                '     </div>',
+                '     <div class="layui-col-sm4 layui-hide-xs" style="padding: 15px;text-align: center;">',
+                '          <div id="ew-crop-img-preview" style="width: 100%;height: 9rem;overflow: hidden;display: inline-block;border: 1px solid #dddddd;"></div>',
+                '     </div>',
+                '</div>',
+                '<div class="text-center ew-crop-tool" style="padding: 15px 10px 5px 0;">',
+                '     <div class="layui-btn-group" style="margin-bottom: 10px;margin-left: 10px;">',
+                '          <button title="鏀惧ぇ" data-method="zoom" data-option="0.1" class="layui-btn icon-btn" type="button"><i class="layui-icon layui-icon-add-1"></i></button>',
+                '          <button title="缂╁皬" data-method="zoom" data-option="-0.1" class="layui-btn icon-btn" type="button"><span style="display: inline-block;width: 12px;height: 2.5px;background: rgba(255, 255, 255, 0.9);vertical-align: middle;margin: 0 4px;"></span></button>',
+                '     </div>',
+                '     <div class="layui-btn-group layui-hide-xs" style="margin-bottom: 10px;">',
+                '          <button title="鍚戝乏鏃嬭浆" data-method="rotate" data-option="-45" class="layui-btn icon-btn" type="button"><i class="layui-icon layui-icon-refresh-1" style="transform: rotateY(180deg) rotate(40deg);display: inline-block;"></i></button>',
+                '          <button title="鍚戝彸鏃嬭浆" data-method="rotate" data-option="45" class="layui-btn icon-btn" type="button"><i class="layui-icon layui-icon-refresh-1" style="transform: rotate(30deg);display: inline-block;"></i></button>',
+                '     </div>',
+                '     <div class="layui-btn-group" style="margin-bottom: 10px;">',
+                '          <button title="宸︾Щ" data-method="move" data-option="-10" data-second-option="0" class="layui-btn icon-btn" type="button"><i class="layui-icon layui-icon-left"></i></button>',
+                '          <button title="鍙崇Щ" data-method="move" data-option="10" data-second-option="0" class="layui-btn icon-btn" type="button"><i class="layui-icon layui-icon-right"></i></button>',
+                '          <button title="涓婄Щ" data-method="move" data-option="0" data-second-option="-10" class="layui-btn icon-btn" type="button"><i class="layui-icon layui-icon-up"></i></button>',
+                '          <button title="涓嬬Щ" data-method="move" data-option="0" data-second-option="10" class="layui-btn icon-btn" type="button"><i class="layui-icon layui-icon-down"></i></button>',
+                '     </div>',
+                '     <div class="layui-btn-group" style="margin-bottom: 10px;">',
+                '          <button title="宸﹀彸缈昏浆" data-method="scaleX" data-option="-1" class="layui-btn icon-btn" type="button" style="position: relative;width: 41px;"><i class="layui-icon layui-icon-triangle-r" style="position: absolute;left: 9px;top: 0;transform: rotateY(180deg);font-size: 16px;"></i><i class="layui-icon layui-icon-triangle-r" style="position: absolute; right: 3px; top: 0;font-size: 16px;"></i></button>',
+                '          <button title="涓婁笅缈昏浆" data-method="scaleY" data-option="-1" class="layui-btn icon-btn" type="button" style="position: relative;width: 41px;"><i class="layui-icon layui-icon-triangle-d" style="position: absolute;left: 11px;top: 6px;transform: rotateX(180deg);line-height: normal;font-size: 16px;"></i><i class="layui-icon layui-icon-triangle-d" style="position: absolute; left: 11px; top: 14px;line-height: normal;font-size: 16px;"></i></button>',
+                '     </div>',
+                '     <div class="layui-btn-group" style="margin-bottom: 10px;">',
+                '          <button title="閲嶆柊寮�濮�" data-method="reset" class="layui-btn icon-btn" type="button"><i class="layui-icon layui-icon-refresh"></i></button>',
+                '          <button title="閫夋嫨鍥剧墖" id="ew-crop-img-upload" class="layui-btn icon-btn" type="button" style="border-radius: 0 2px 2px 0;"><i class="layui-icon layui-icon-upload-drag"></i></button>',
+                '     </div>',
+                '     <button data-method="getCroppedCanvas" data-option="{ &quot;maxWidth&quot;: 4096, &quot;maxHeight&quot;: 4096 }" class="layui-btn icon-btn" type="button" style="margin-left: 10px;margin-bottom: 10px;"><i class="layui-icon">&#xe605;</i>瀹屾垚</button>',
+                '</div>'].join('');
+            admin.open({
+                title: dialogTitle, area: '665px', type: 1, content: htmlStr,
+                success: function (layero, dIndex) {
+                    $(layero).children('.layui-layer-content').css('overflow', 'visible');
+                    renderElem();
+                }
+            });
+        });
+    };
+
+    /** 宸ュ叿绫� */
+    admin.util = {
+        /* 鐧惧害鍦板浘鍧愭爣杞珮寰峰湴鍥惧潗鏍� */
+        Convert_BD09_To_GCJ02: function (point) {
+            var x_pi = (3.14159265358979324 * 3000.0) / 180.0;
+            var x = point.lng - 0.0065, y = point.lat - 0.006;
+            var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);
+            var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);
+            return {lng: z * Math.cos(theta), lat: z * Math.sin(theta)};
+        },
+        /* 楂樺痉鍦板浘鍧愭爣杞櫨搴﹀湴鍥惧潗鏍� */
+        Convert_GCJ02_To_BD09: function (point) {
+            var x_pi = (3.14159265358979324 * 3000.0) / 180.0;
+            var x = point.lng, y = point.lat;
+            var z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi);
+            var theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi);
+            return {lng: z * Math.cos(theta) + 0.0065, lat: z * Math.sin(theta) + 0.006};
+        },
+        /* 鍔ㄦ�佹暟瀛� */
+        animateNum: function (elem, isThd, delay, grain) {
+            isThd = isThd === null || isThd === undefined || isThd === true || isThd === 'true';  // 鏄惁鏄崈鍒嗕綅
+            delay = isNaN(delay) ? 500 : delay;   // 鍔ㄧ敾寤惰繜
+            grain = isNaN(grain) ? 100 : grain;   // 鍔ㄧ敾绮掑害
+            var getPref = function (str) {
+                var pref = '';
+                for (var i = 0; i < str.length; i++) if (!isNaN(str.charAt(i))) return pref; else pref += str.charAt(i);
+            }, getSuf = function (str) {
+                var suf = '';
+                for (var i = str.length - 1; i >= 0; i--) if (!isNaN(str.charAt(i))) return suf; else suf = str.charAt(i) + suf;
+            }, toThd = function (num, isThd) {
+                if (!isThd) return num;
+                if (!/^[0-9]+.?[0-9]*$/.test(num)) return num;
+                num = num.toString();
+                return num.replace(num.indexOf('.') > 0 ? /(\d)(?=(\d{3})+(?:\.))/g : /(\d)(?=(\d{3})+(?:$))/g, '$1,');
+            };
+            $(elem).each(function () {
+                var $this = $(this);
+                var num = $this.data('num');
+                if (!num) {
+                    num = $this.text().replace(/,/g, '');  // 鍐呭
+                    $this.data('num', num);
+                }
+                var flag = 'INPUT,TEXTAREA'.indexOf($this.get(0).tagName) >= 0;  // 鏄惁鏄緭鍏ユ
+                var pref = getPref(num.toString()), suf = getSuf(num.toString());
+                var strNum = num.toString().replace(pref, '').replace(suf, '');
+                if (isNaN(strNum * 1) || strNum === '0') {
+                    flag ? $this.val(num) : $this.html(num);
+                    return console.error('not a number');
+                }
+                var int_dec = strNum.split('.');
+                var deciLen = int_dec[1] ? int_dec[1].length : 0;
+                var startNum = 0.0, endNum = strNum;
+                if (Math.abs(endNum * 1) > 10) startNum = parseFloat(int_dec[0].substring(0, int_dec[0].length - 1) + (int_dec[1] ? '.0' + int_dec[1] : ''));
+                var oft = (endNum - startNum) / grain, temp = 0;
+                var mTime = setInterval(function () {
+                    var str = pref + toThd(startNum.toFixed(deciLen), isThd) + suf;
+                    flag ? $this.val(str) : $this.html(str);
+                    startNum += oft;
+                    temp++;
+                    if (Math.abs(startNum) >= Math.abs(endNum * 1) || temp > 5000) {
+                        str = pref + toThd(endNum, isThd) + suf;
+                        flag ? $this.val(str) : $this.html(str);
+                        clearInterval(mTime);
+                    }
+                }, delay / grain);
+            });
+        },
+        /* 娣卞害鍏嬮殕瀵硅薄 */
+        deepClone: function (obj) {
+            var result;
+            var oClass = admin.util.isClass(obj);
+            if (oClass === 'Object') result = {};
+            else if (oClass === 'Array') result = [];
+            else return obj;
+            for (var key in obj) {
+                if (!obj.hasOwnProperty(key)) continue;
+                var copy = obj[key], cClass = admin.util.isClass(copy);
+                if (cClass === 'Object') result[key] = arguments.callee(copy); // 閫掑綊璋冪敤
+                else if (cClass === 'Array') result[key] = arguments.callee(copy);
+                else result[key] = obj[key];
+            }
+            return result;
+        },
+        /* 鑾峰彇鍙橀噺绫诲瀷 */
+        isClass: function (o) {
+            if (o === null) return 'Null';
+            if (o === undefined) return 'Undefined';
+            return Object.prototype.toString.call(o).slice(8, -1);
+        },
+        /* 鍒ゆ柇瀵屾枃鏈槸鍚︿负绌� */
+        fullTextIsEmpty: function (text) {
+            if (!text) return true;
+            var noTexts = ['img', 'audio', 'video', 'iframe', 'object'];
+            for (var i = 0; i < noTexts.length; i++) {
+                if (text.indexOf('<' + noTexts[i]) > -1) return false;
+            }
+            var str = text.replace(/\s*/g, '');  // 鍘绘帀鎵�鏈夌┖鏍�
+            if (!str) return true;
+            str = str.replace(/&nbsp;/ig, '');  // 鍘绘帀鎵�鏈�&nbsp;
+            if (!str) return true;
+            str = str.replace(/<[^>]+>/g, '');   // 鍘绘帀鎵�鏈塰tml鏍囩
+            return !str;
+        },
+        /* 绉婚櫎鍏冪礌鐨剆tyle */
+        removeStyle: function (elem, names) {
+            if (typeof names === 'string') names = [names];
+            for (var i = 0; i < names.length; i++) $(elem).css(names[i], '');
+        },
+        /* 婊氬姩鍒伴《閮� */
+        scrollTop: function (elem) {
+            $(elem || 'html,body').animate({scrollTop: 0}, 300);
+        },
+        /* 妯℃澘瑙f瀽 */
+        tpl: function (html, data, openCode, closeCode) {
+            if (html === undefined || html === null || typeof html !== 'string') return html;
+            if (!data) data = {};
+            if (!openCode) openCode = '{{';
+            if (!closeCode) closeCode = '}}';
+            var tool = {
+                exp: function (str) {
+                    return new RegExp(str, 'g');
+                },
+                // 鍖归厤婊¤冻瑙勫垯鍐呭
+                query: function (type, _, __) {
+                    var types = ['#([\\s\\S])+?', '([^{#}])*?'][type || 0];
+                    return tool.exp((_ || '') + openCode + types + closeCode + (__ || ''));
+                },
+                escape: function (str) {
+                    return String(str || '').replace(/&(?!#?[a-zA-Z0-9]+;)/g, '&amp;')
+                        .replace(/</g, '&lt;').replace(/>/g, '&gt;')
+                        .replace(/'/g, '&#39;').replace(/"/g, '&quot;');
+                },
+                error: function (e, tplog) {
+                    console.error('Laytpl Error锛�' + e + '\n' + (tplog || ''));
+                },
+                parse: function (tpl, data) {
+                    var tplog = tpl;
+                    try {
+                        var jss = tool.exp('^' + openCode + '#'), jsse = tool.exp(closeCode + '$');
+                        tpl = tpl.replace(tool.exp(openCode + '#'), openCode + '# ')
+                            .replace(tool.exp(closeCode + '}'), '} ' + closeCode).replace(/\\/g, '\\\\')
+                            // 涓嶅尮閰嶆寚瀹氬尯鍩熺殑鍐呭
+                            .replace(tool.exp(openCode + '!(.+?)!' + closeCode), function (str) {
+                                str = str.replace(tool.exp('^' + openCode + '!'), '')
+                                    .replace(tool.exp('!' + closeCode), '')
+                                    .replace(tool.exp(openCode + '|' + closeCode), function (tag) {
+                                        return tag.replace(/(.)/g, '\\$1')
+                                    });
+                                return str
+                            })
+                            // 鍖归厤JS瑙勫垯鍐呭
+                            .replace(/(?="|')/g, '\\').replace(tool.query(), function (str) {
+                                str = str.replace(jss, '').replace(jsse, '');
+                                return '";' + str.replace(/\\/g, '') + ';view+="';
+                            })
+                            // 鍖归厤鏅�氬瓧娈�
+                            .replace(tool.query(1), function (str) {
+                                var start = '"+(';
+                                if (str.replace(/\s/g, '') === openCode + closeCode) return '';
+                                str = str.replace(tool.exp(openCode + '|' + closeCode), '');
+                                if (/^=/.test(str)) {
+                                    str = str.replace(/^=/, '');
+                                    start = '"+_escape_(';
+                                }
+                                return start + str.replace(/\\/g, '') + ')+"';
+                            })
+                            // 鎹㈣绗﹀鐞�
+                            .replace(/\r\n/g, '\\r\\n" + "').replace(/\n/g, '\\n" + "').replace(/\r/g, '\\r" + "');
+                        tpl = '"use strict";var view = "' + tpl + '";return view;';
+                        tpl = new Function('d, _escape_', tpl);
+                        return tpl(data, tool.escape);
+                    } catch (e) {
+                        tool.error(e, tplog);
+                        return tplog;
+                    }
+                }
+            };
+            return tool.parse(html, data);
+        },
+        /* 娓叉煋鍔ㄦ�佹ā鏉� */
+        render: function (option) {
+            if (typeof option.url === 'string') {
+                option.success = function (res) {
+                    admin.util.render($.extend({}, option, {url: res}));
+                };
+                if (option.ajax === 'ajax') admin.ajax(option);
+                else admin.req(option.url, option.where, option.success, option.method, option);
+                return;
+            }
+            var html = admin.util.tpl(option.tpl, option.url,
+                option.open || setter.tplOpen, option.close || setter.tplClose);
+            $(option.elem).next('[ew-tpl-rs]').remove();
+            $(option.elem).after(html);
+            $(option.elem).next().attr('ew-tpl-rs', '');
+            option.done && option.done(option.url);
+        }
+    };
+
+    /** 閿佸睆鍔熻兘 */
+    admin.lockScreen = function (url) {
+        if (window !== top && !admin.isTop() && top.layui && top.layui.admin) return top.layui.admin.lockScreen(url);
+        if (!url) url = 'tpl/tpl-lock-screen.html';
+        var $lock = $('#ew-lock-screen-group');
+        if ($lock.length > 0) {
+            $lock.fadeIn('fast');
+            admin.isLockScreen = true;
+            admin.putTempData('isLockScreen', admin.isLockScreen, true);
+        } else {
+            var loadIndex = layer.load(2);
+            admin.ajax({
+                url: url, dataType: 'html',
+                success: function (res) {
+                    layer.close(loadIndex);
+                    if (typeof res === 'string') {
+                        $('body').append('<div id="ew-lock-screen-group">' + res + '</div>');
+                        admin.isLockScreen = true;
+                        admin.putTempData('isLockScreen', admin.isLockScreen, true);
+                        admin.putTempData('lockScreenUrl', url, true);
+                    } else {
+                        console.error(res);
+                        layer.msg(JSON.stringify(res), {icon: 2, anim: 6});
+                    }
+                }
+            });
+        }
+    };
+
+    /** 瑙i櫎閿佸睆 */
+    admin.unlockScreen = function (isRemove) {
+        if (window !== top && !admin.isTop() && top.layui && top.layui.admin) return top.layui.admin.unlockScreen(isRemove);
+        var $lock = $('#ew-lock-screen-group');
+        isRemove ? $lock.remove() : $lock.fadeOut('fast');
+        admin.isLockScreen = false;
+        admin.putTempData('isLockScreen', null, true);
+    };
+
+    /** tips鏂规硶灏佽 */
+    admin.tips = function (option) {
+        return layer.tips(option.text, option.elem, {
+            tips: [option.direction || 1, option.bg || '#191a23'],
+            tipsMore: option.tipsMore, time: option.time || -1,
+            success: function (layero) {
+                var $content = $(layero).children('.layui-layer-content');
+                if (option.padding || option.padding === 0) $content.css('padding', option.padding);
+                if (option.color) $content.css('color', option.color);
+                if (option.bgImg) $content.css('background-image', option.bgImg).children('.layui-layer-TipsG').css('z-index', '-1');
+                if (option.fontSize) $content.css('font-size', option.fontSize);
+                if (!option.offset) return;
+                var offset = option.offset.split(',');
+                var top = offset[0], left = offset.length > 1 ? offset[1] : undefined;
+                if (top) $(layero).css('margin-top', top);
+                if (left) $(layero).css('margin-left', left);
+            }
+        });
+    };
+
+    /** 娓叉煋鍔ㄦ�佹ā鏉� */
+    admin.renderTpl = function (elem) {
+        if (!layui.admin) layui.admin = admin;
+
+        // 瑙f瀽鏁版嵁
+        function parseData(data) {
+            if (!data) return;
+            try {
+                return new Function('return ' + data + ';')();
+            } catch (e) {
+                console.error(e + '\nlay-data: ' + data);
+            }
+        }
+
+        $(elem || '[ew-tpl]').each(function () {
+            var $this = $(this);
+            var option = admin.util.deepClone($(this).data());
+            option.elem = $this;
+            option.tpl = $this.html();
+            option.url = parseData($this.attr('ew-tpl'));
+            option.headers = parseData(option.headers);
+            option.where = parseData(option.where);
+            if (option.done) {
+                try {
+                    option.done = new Function('res', option.done);
+                } catch (e) {
+                    console.error(e + '\nlay-data:' + option.done);
+                    option.done = undefined;
+                }
+            }
+            admin.util.render(option);
+        });
+    };
+
+    /** 浜嬩欢鐩戝惉 */
+    admin.on = function (events, callback) {
+        return layui.onevent.call(this, 'admin', events, callback);
+    };
+
+    /** 淇敼閰嶇疆淇℃伅 */
+    admin.putSetting = function (key, value) {
+        setter[key] = value;
+        admin.putTempData(key, value, true);
+    };
+
+    /** 鎭㈠閰嶇疆淇℃伅 */
+    admin.recoverState = function () {
+        // 鎭㈠閿佸睆鐘舵��
+        if (admin.getTempData('isLockScreen', true)) admin.lockScreen(admin.getTempData('lockScreenUrl', true));
+        // 鎭㈠閰嶇疆鐨勪富棰�
+        if (setter.defaultTheme) admin.changeTheme(setter.defaultTheme, window, true, true);
+        // 鎭㈠椤佃剼鐘舵�併�佸鑸澶�
+        if (setter.closeFooter) $('body').addClass('close-footer');
+        if (setter.navArrow !== undefined) {
+            var $nav = $(sideDOM + '>.layui-nav-tree');
+            $nav.removeClass('arrow2 arrow3');
+            if (setter.navArrow) $nav.addClass(setter.navArrow);
+        }
+        // 鎭㈠tab鑷姩鍒锋柊
+        if (setter.pageTabs && setter.tabAutoRefresh == 'true') $(tabDOM).attr('lay-autoRefresh', 'true');
+    };
+
+    /* 浜嬩欢鐩戝惉 */
+    admin.on = function (events, callback) {
+        return layui.onevent.call(this, 'admin', events, callback);
+    };
+
+    /** 渚у鑸姌鍙犵姸鎬佷笅榧犳爣缁忚繃鏃犻檺鎮诞鏁堟灉 */
+    var navItemDOM = '.layui-layout-admin.admin-nav-mini>.layui-side .layui-nav .layui-nav-item';
+    $(document).on('mouseenter', navItemDOM + ',' + navItemDOM + ' .layui-nav-child>dd', function () {
+        if (admin.getPageWidth() > 768) {
+            var $that = $(this), $navChild = $that.find('>.layui-nav-child');
+            if ($navChild.length > 0) {
+                $that.addClass('admin-nav-hover');
+                $navChild.css('left', $that.offset().left + $that.outerWidth());
+                var top = $that.offset().top;
+                if (top + $navChild.outerHeight() > admin.getPageHeight()) {
+                    top = top - $navChild.outerHeight() + $that.outerHeight();
+                    if (top < 60) top = 60;
+                    $navChild.addClass('show-top');
+                }
+                $navChild.css('top', top);
+                $navChild.addClass('ew-anim-drop-in');
+            } else if ($that.hasClass('layui-nav-item')) {
+                admin.tips({elem: $that, text: $that.find('cite').text(), direction: 2, offset: '12px'});
+            }
+        }
+    }).on('mouseleave', navItemDOM + ',' + navItemDOM + ' .layui-nav-child>dd', function () {
+        layer.closeAll('tips');
+        var $this = $(this);
+        $this.removeClass('admin-nav-hover');
+        var $child = $this.find('>.layui-nav-child');
+        $child.removeClass('show-top ew-anim-drop-in');
+        $child.css({'left': 'auto', 'top': 'auto'});
+    });
+
+    /** 鎵�鏈塭w-event */
+    $(document).on('click', '*[ew-event]', function () {
+        var te = admin.events[$(this).attr('ew-event')];
+        te && te.call(this, $(this));
+    });
+
+    /** 鎵�鏈塴ay-tips澶勭悊 */
+    $(document).on('mouseenter', '*[lay-tips]', function () {
+        var $this = $(this);
+        admin.tips({
+            elem: $this, text: $this.attr('lay-tips'), direction: $this.attr('lay-direction'),
+            bg: $this.attr('lay-bg'), offset: $this.attr('lay-offset'),
+            padding: $this.attr('lay-padding'), color: $this.attr('lay-color'),
+            bgImg: $this.attr('lay-bgImg'), fontSize: $this.attr('lay-fontSize')
+        });
+    }).on('mouseleave', '*[lay-tips]', function () {
+        layer.closeAll('tips');
+    });
+
+    /** 琛ㄥ崟鎼滅储灞曞紑鏇村 */
+    $(document).on('click', '.form-search-expand,[search-expand]', function () {
+        var $this = $(this);
+        var $form = $this.parents('.layui-form').first();
+        var expand = $this.data('expand');
+        var change = $this.attr('search-expand');
+        if (expand === undefined || expand === true) {
+            expand = true;
+            $this.data('expand', false);
+            $this.html('鏀惰捣 <i class="layui-icon layui-icon-up"></i>');
+            var $elem = $form.find('.form-search-show-expand');
+            $elem.attr('expand-show', '');
+            $elem.removeClass('form-search-show-expand');
+        } else {
+            expand = false;
+            $this.data('expand', true);
+            $this.html('灞曞紑 <i class="layui-icon layui-icon-down"></i>');
+            $form.find('[expand-show]').addClass('form-search-show-expand');
+        }
+        if (!change) return;
+        new Function('d', change)({expand: expand, elem: $this});
+    });
+
+    /** select浣跨敤fixed瀹氫綅鏄剧ず */
+    $(document).on('click.ew-sel-fixed', '.ew-select-fixed .layui-form-select .layui-select-title', function () {
+        var $this = $(this), $dl = $this.parent().children('dl'), tTop = $this.offset().top;
+        var tWidth = $this.outerWidth(), tHeight = $this.outerHeight(), scrollT = $(document).scrollTop();
+        var dWidth = $dl.outerWidth(), dHeight = $dl.outerHeight();
+        var top = tTop + tHeight + 5 - scrollT, left = $this.offset().left;
+        if (top + dHeight > admin.getPageHeight()) top = top - dHeight - tHeight - 10;
+        if (left + dWidth > admin.getPageWidth()) left = left - dWidth + tWidth;
+        $dl.css({'left': left, 'top': top, 'min-width': tWidth});
+    });
+
+    /** 鐢ㄤ簬婊氬姩鏃跺叧闂竴浜沠ixed鐨勭粍浠� */
+    admin.hideFixedEl = function () {
+        $('.ew-select-fixed .layui-form-select').removeClass('layui-form-selected layui-form-selectup');  // select
+        $('body>.layui-laydate').remove();  // laydate
+    };
+
+    /** 鍨傜洿瀵艰埅鏍忓睍寮�鎶樺彔澧炲姞杩囨浮鏁堟灉 */
+    $(document).on('click', '.layui-nav-tree>.layui-nav-item a', function () {
+        var $this = $(this), $child = $this.siblings('.layui-nav-child'), $parent = $this.parent();
+        if ($child.length === 0) return;
+        if ($parent.hasClass('admin-nav-hover')) return;
+        if ($parent.hasClass('layui-nav-itemed')) {  // 鍥犱负layui浼氬鐞嗕竴閬嶆墍浠ヨ繖閲岀姸鎬佹槸鐩稿弽鐨�
+            $child.css('display', 'none').slideDown('fast', function () {
+                $(this).css('display', '');
+            });
+        } else {
+            $child.css('display', 'block').slideUp('fast', function () {
+                $(this).css('display', '');
+            });
+        }
+        if ($this.parents('.layui-nav').attr('lay-shrink') === '_all') {  // 鎵嬮鐞存晥鏋�
+            var $siblings = $this.parent().siblings('.layui-nav-itemed');
+            $siblings.children('.layui-nav-child').css('display', 'block').slideUp('fast', function () {
+                $(this).css('display', '');
+            });
+            $siblings.removeClass('layui-nav-itemed');
+        }
+    });
+    $('.layui-nav-tree[lay-shrink="all"]').attr('lay-shrink', '_all');  // 璁﹍ayui涓嶅鐞嗘墜椋庣惔鏁堟灉
+
+    /** 鎶樺彔闈㈡澘灞曞紑鎶樺彔澧炲姞杩囨浮鏁堟灉 */
+    $(document).on('click', '.layui-collapse>.layui-colla-item>.layui-colla-title', function () {
+        var $this = $(this), $content = $this.siblings('.layui-colla-content')
+            , $collapse = $this.parent().parent(), isNone = $content.hasClass('layui-show');
+        if (isNone) {  // 鍥犱负layui浼氬鐞嗕竴閬嶆墍浠ヨ繖閲岀姸鎬佹槸鐩稿弽鐨�
+            $content.removeClass('layui-show').slideDown('fast').addClass('layui-show');
+        } else {
+            $content.css('display', 'block').slideUp('fast', function () {
+                $(this).css('display', '');
+            });
+        }
+        $this.children('.layui-colla-icon').html('&#xe602;')
+            .css({'transition': 'all .3s', 'transform': 'rotate(' + (isNone ? '90deg' : '0deg') + ')'});
+        if ($collapse.attr('lay-shrink') === '_all') {  // 鎵嬮鐞存晥鏋�
+            var $show = $collapse.children('.layui-colla-item').children('.layui-colla-content.layui-show').not($content);
+            $show.css('display', 'block').slideUp('fast', function () {
+                $(this).css('display', '');
+            });
+            $show.removeClass('layui-show');
+            $show.siblings('.layui-colla-title').children('.layui-colla-icon').html('&#xe602;')
+                .css({'transition': 'all .3s', 'transform': 'rotate(0deg)'});
+        }
+    });
+    $('.layui-collapse[lay-accordion]').attr('lay-shrink', '_all').removeAttr('lay-accordion');  // 璁﹍ayui涓嶅鐞嗘墜椋庣惔鏁堟灉
+
+    /** 琛ㄥ崟楠岃瘉tips鎻愮ず鏍峰紡淇敼 */
+    layer.oldTips = layer.tips;
+    layer.tips = function (content, follow, options) {
+        var $fFip;  // 鍒ゆ柇鏄惁鏄〃鍗曢獙璇佽皟鐢ㄧ殑tips
+        if ($(follow).length > 0 && $(follow).parents('.layui-form').length > 0) {
+            if ($(follow).is('input') || $(follow).is('textarea')) {
+                $fFip = $(follow);
+            } else if ($(follow).hasClass('layui-form-select') || $(follow).hasClass('layui-form-radio')
+                || $(follow).hasClass('layui-form-checkbox') || $(follow).hasClass('layui-form-switch')) {
+                $fFip = $(follow).prev();
+            }
+        }
+        if (!$fFip) return layer.oldTips(content, follow, options);
+        options.tips = [$fFip.attr('lay-direction') || 3, $fFip.attr('lay-bg') || '#ff4c4c'];
+        setTimeout(function () {
+            options.success = function (layero) {
+                $(layero).children('.layui-layer-content').css('padding', '6px 12px');
+            };
+            layer.oldTips(content, follow, options);
+        }, 100);
+    };
+
+    /** 鎵�鏈塭w-href澶勭悊 */
+    $(document).on('click', '*[ew-href]', function () {
+        var $this = $(this);
+        var href = $this.attr('ew-href');
+        if (!href || href === '#') return;
+        if (href.indexOf('javascript:') === 0) return new Function(href.substring(11))();
+        var title = $this.attr('ew-title') || $this.text();
+        var win = $this.data('window');
+        win ? (win = admin.strToWin(win)) : (win = top);
+        var end = $this.attr('ew-end');
+        try {
+            if (end) end = new Function(end);
+            else end = undefined;
+        } catch (e) {
+            console.error(e);
+        }
+        if (win.layui && win.layui.index) win.layui.index.openTab({title: title || '', url: href, end: end});
+        else location.href = href;
+    });
+
+    /** 甯姪榧犳爣鍙抽敭鑿滃崟瀹屾垚鐐瑰嚮绌虹櫧鍏抽棴鐨勫姛鑳� */
+    if (!layui.contextMenu) {
+        $(document).off('click.ctxMenu').on('click.ctxMenu', function () {
+            try {
+                var ifs = top.window.frames;
+                for (var i = 0; i < ifs.length; i++) {
+                    var tif = ifs[i];
+                    try {  // 鍙兘浼氳法鍩�
+                        if (tif.layui && tif.layui.jquery) tif.layui.jquery('body>.ctxMenu').remove();
+                    } catch (e) {
+                    }
+                }
+                try {  // 鍙兘浼氳法鍩�
+                    if (top.layui && top.layui.jquery) top.layui.jquery('body>.ctxMenu').remove();
+                } catch (e) {
+                }
+            } catch (e) {
+            }
+        });
+    }
+
+    /** 璇诲彇缂撳瓨鐨勯厤缃俊鎭� */
+    setter = $.extend({
+        pageTabs: true, cacheTab: true, openTabCtxMenu: true, maxTabNum: 20, tableName: 'easyweb-iframe',
+        apiNoCache: true, ajaxSuccessBefore: function (res, url, obj) {
+            return admin.ajaxSuccessBefore ? admin.ajaxSuccessBefore(res, url, obj) : true;
+        }, getAjaxHeaders: function (res, url, obj) {
+            return admin.getAjaxHeaders ? admin.getAjaxHeaders(res, url, obj) : [];
+        }
+    }, setter);
+    var cache = admin.getTempData(true);
+    if (cache) {
+        var keys = ['pageTabs', 'cacheTab', 'defaultTheme', 'navArrow', 'closeFooter', 'tabAutoRefresh'];
+        for (var i = 0; i < keys.length; i++) if (cache[keys[i]] !== undefined) setter[keys[i]] = cache[keys[i]];
+    }
+    admin.recoverState();  // 鎭㈠鏈湴閰嶇疆
+    admin.renderTpl();  // 娓叉煋鍔ㄦ�佹ā鏉�
+    admin.setter = setter;
+    if (layui.device().ios) $('body').addClass('ios-iframe-body');  // ios娴忚鍣╥frame鍏煎
+    exports('admin', admin);
+});
diff --git a/src/main/webapp/static/layui/lay/modules/contextMenu.js b/src/main/webapp/static/layui/lay/modules/contextMenu.js
new file mode 100644
index 0000000..2655031
--- /dev/null
+++ b/src/main/webapp/static/layui/lay/modules/contextMenu.js
@@ -0,0 +1,228 @@
+/** 鍙抽敭鑿滃崟妯″潡 date:2019-02-08   License By http://easyweb.vip */
+layui.define(["jquery"], function (exports) {
+    var $ = layui.jquery;
+
+    var contextMenu = {
+        // 缁戝畾鍏冪礌
+        bind: function (elem, items) {
+            $(elem).bind('contextmenu', function (e) {
+                contextMenu.show(items, e.clientX, e.clientY, e);
+                return false;
+            });
+        },
+        // 鍦ㄦ寚瀹氬潗鏍囨樉绀鸿彍鍗�
+        show: function (items, x, y, e) {
+            var xy = 'left: ' + x + 'px; top: ' + y + 'px;';
+            var htmlStr = '<div class="ctxMenu" style="' + xy + '">';
+            htmlStr += contextMenu.getHtml(items, '');
+            htmlStr += '   </div>';
+            contextMenu.remove();
+            $('body').append(htmlStr);
+            // 璋冩暣婧㈠嚭浣嶇疆
+            var $ctxMenu = $('.ctxMenu');
+            if (x + $ctxMenu.outerWidth() > contextMenu.getPageWidth()) {
+                x -= $ctxMenu.outerWidth();
+            }
+            if (y + $ctxMenu.outerHeight() > contextMenu.getPageHeight()) {
+                y = y - $ctxMenu.outerHeight();
+                if (y < 0) {
+                    y = 0;
+                }
+            }
+            $ctxMenu.css({'top': y, 'left': x});
+            // 娣诲姞item鐐瑰嚮浜嬩欢
+            contextMenu.setEvents(items, e);
+            // 鏄剧ず瀛愯彍鍗曚簨浠�
+            $('.ctxMenu-item').on('mouseenter', function (e) {
+                e.stopPropagation();
+                $(this).parent().find('.ctxMenu-sub').css('display', 'none');
+                if (!$(this).hasClass('haveMore')) return;
+                var $item = $(this).find('>a');
+                var $sub = $(this).find('>.ctxMenu-sub');
+                var top = $item.offset().top - $('body,html').scrollTop();
+                var left = $item.offset().left + $item.outerWidth() - $('body,html').scrollLeft();
+                if (left + $sub.outerWidth() > contextMenu.getPageWidth()) {
+                    left = $item.offset().left - $sub.outerWidth();
+                }
+                if (top + $sub.outerHeight() > contextMenu.getPageHeight()) {
+                    top = top - $sub.outerHeight() + $item.outerHeight();
+                    if (top < 0) {
+                        top = 0;
+                    }
+                }
+                $(this).find('>.ctxMenu-sub').css({
+                    'top': top,
+                    'left': left,
+                    'display': 'block'
+                });
+            })/*.on('mouseleave', function () {
+                $(this).find('>.ctxMenu-sub').css('display', 'none');
+            })*/;
+        },
+        // 绉婚櫎鎵�鏈�
+        remove: function () {
+            var ifs = parent.window.frames;
+            for (var i = 0; i < ifs.length; i++) {
+                var tif = ifs[i];
+                try {
+                    tif.layui.jquery('body>.ctxMenu').remove();
+                } catch (e) {
+                }
+            }
+            try {
+                parent.layui.jquery('body>.ctxMenu').remove();
+            } catch (e) {
+            }
+        },
+        // 璁剧疆浜嬩欢鐩戝惉
+        setEvents: function (items, event) {
+            $('.ctxMenu').off('click').on('click', '[lay-id]', function (e) {
+                var itemId = $(this).attr('lay-id');
+                var item = getItemById(itemId, items);
+                item.click && item.click(e, event);
+            });
+
+            function getItemById(id, list) {
+                for (var i = 0; i < list.length; i++) {
+                    var one = list[i];
+                    if (id == one.itemId) {
+                        return one;
+                    } else if (one.subs && one.subs.length > 0) {
+                        var temp = getItemById(id, one.subs);
+                        if (temp) {
+                            return temp;
+                        }
+                    }
+                }
+            }
+        },
+        // 鏋勫缓鏃犻檺绾�
+        getHtml: function (items, pid) {
+            var htmlStr = '';
+            for (var i = 0; i < items.length; i++) {
+                var item = items[i];
+                item.itemId = 'ctxMenu-' + pid + i;
+                if (item.subs && item.subs.length > 0) {
+                    htmlStr += '<div class="ctxMenu-item haveMore" lay-id="' + item.itemId + '">';
+                    htmlStr += '<a>';
+                    if (item.icon) {
+                        htmlStr += '<i class="' + item.icon + ' ctx-icon"></i>';
+                    }
+                    htmlStr += item.name;
+                    htmlStr += '<i class="layui-icon layui-icon-right icon-more"></i>';
+                    htmlStr += '</a>';
+                    htmlStr += '<div class="ctxMenu-sub" style="display: none;">';
+                    htmlStr += contextMenu.getHtml(item.subs, pid + i);
+                    htmlStr += '</div>';
+                } else {
+                    htmlStr += '<div class="ctxMenu-item" lay-id="' + item.itemId + '">';
+                    htmlStr += '<a>';
+                    if (item.icon) {
+                        htmlStr += '<i class="' + item.icon + ' ctx-icon"></i>';
+                    }
+                    htmlStr += item.name;
+                    htmlStr += '</a>';
+                }
+                htmlStr += '</div>';
+                if (item.hr == true) {
+                    htmlStr += '<hr/>';
+                }
+            }
+            return htmlStr;
+        },
+        // 鑾峰彇css浠g爜
+        getCommonCss: function () {
+            var cssStr = '.ctxMenu, .ctxMenu-sub {';
+            cssStr += '        max-width: 250px;';
+            cssStr += '        min-width: 110px;';
+            cssStr += '        background: white;';
+            cssStr += '        border-radius: 2px;';
+            cssStr += '        padding: 5px 0;';
+            cssStr += '        white-space: nowrap;';
+            cssStr += '        position: fixed;';
+            cssStr += '        z-index: 2147483647;';
+            cssStr += '        box-shadow: 0 2px 4px rgba(0, 0, 0, .12);';
+            cssStr += '        border: 1px solid #d2d2d2;';
+            cssStr += '        overflow: visible;';
+            cssStr += '   }';
+
+            cssStr += '   .ctxMenu-item {';
+            cssStr += '        position: relative;';
+            cssStr += '   }';
+
+            cssStr += '   .ctxMenu-item > a {';
+            cssStr += '        font-size: 14px;';
+            cssStr += '        color: #666;';
+            cssStr += '        padding: 0 26px 0 35px;';
+            cssStr += '        cursor: pointer;';
+            cssStr += '        display: block;';
+            cssStr += '        line-height: 36px;';
+            cssStr += '        text-decoration: none;';
+            cssStr += '        position: relative;';
+            cssStr += '   }';
+
+            cssStr += '   .ctxMenu-item > a:hover {';
+            cssStr += '        background: #f2f2f2;';
+            cssStr += '        color: #666;';
+            cssStr += '   }';
+
+            cssStr += '   .ctxMenu-item > a > .icon-more {';
+            cssStr += '        position: absolute;';
+            cssStr += '        right: 5px;';
+            cssStr += '        top: 0;';
+            cssStr += '        font-size: 12px;';
+            cssStr += '        color: #666;';
+            cssStr += '   }';
+
+            cssStr += '   .ctxMenu-item > a > .ctx-icon {';
+            cssStr += '        position: absolute;';
+            cssStr += '        left: 12px;';
+            cssStr += '        top: 0;';
+            cssStr += '        font-size: 15px;';
+            cssStr += '        color: #666;';
+            cssStr += '   }';
+
+            cssStr += '   .ctxMenu hr {';
+            cssStr += '        background-color: #e6e6e6;';
+            cssStr += '        clear: both;';
+            cssStr += '        margin: 5px 0;';
+            cssStr += '        border: 0;';
+            cssStr += '        height: 1px;';
+            cssStr += '   }';
+
+            cssStr += '   .ctx-ic-lg {';
+            cssStr += '        font-size: 18px !important;';
+            cssStr += '        left: 11px !important;';
+            cssStr += '    }';
+            return cssStr;
+        },
+        // 鑾峰彇娴忚鍣ㄩ珮搴�
+        getPageHeight: function () {
+            return document.documentElement.clientHeight || document.body.clientHeight;
+        },
+        // 鑾峰彇娴忚鍣ㄥ搴�
+        getPageWidth: function () {
+            return document.documentElement.clientWidth || document.body.clientWidth;
+        },
+    };
+
+    // 鐐瑰嚮浠绘剰浣嶇疆鍏抽棴鑿滃崟
+    $(document).off('click.ctxMenu').on('click.ctxMenu', function () {
+        contextMenu.remove();
+    });
+
+    // 鐐瑰嚮鏈夊瓙鑿滃崟鐨勮妭鐐逛笉鍏抽棴鑿滃崟
+    $(document).off('click.ctxMenuMore').on('click.ctxMenuMore', '.ctxMenu-item', function (e) {
+        if ($(this).hasClass('haveMore')) {
+            if (e !== void 0) {
+                e.preventDefault();
+                e.stopPropagation();
+            }
+        } else {
+            contextMenu.remove();
+        }
+    });
+
+    $('head').append('<style id="ew-css-ctx">' + contextMenu.getCommonCss() + '</style>');
+    exports("contextMenu", contextMenu);
+});
\ No newline at end of file
diff --git a/src/main/webapp/static/layui/lay/modules/index.js b/src/main/webapp/static/layui/lay/modules/index.js
new file mode 100644
index 0000000..93d9297
--- /dev/null
+++ b/src/main/webapp/static/layui/lay/modules/index.js
@@ -0,0 +1,302 @@
+/** EasyWeb iframe v3.1.8 date:2020-05-04 License By http://easyweb.vip */
+
+layui.define(['layer', 'element', 'admin'], function (exports) {
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var element = layui.element;
+    var admin = layui.admin;
+    var setter = admin.setter;
+    var headerDOM = '.layui-layout-admin>.layui-header';
+    var sideDOM = '.layui-layout-admin>.layui-side>.layui-side-scroll';
+    var bodyDOM = '.layui-layout-admin>.layui-body';
+    var tabDOM = bodyDOM + '>.layui-tab';
+    var titleDOM = bodyDOM + '>.layui-body-header';
+    var tabFilter = 'admin-pagetabs';
+    var navFilter = 'admin-side-nav';
+    var tabEndCall = {};  // Tab鍏抽棴鐨勪簨浠跺洖璋�
+    var mIsAddTab = false;  // 鏄惁鏄坊鍔燭ab锛屾坊鍔燭ab鐨勬椂鍊欏垏鎹笉鑷姩鍒锋柊
+    var index = {homeUrl: undefined, mTabPosition: undefined, mTabList: []};
+
+    /** 娓叉煋涓讳綋閮ㄥ垎 */
+    index.loadView = function (param) {
+        if (!param.menuPath) return layer.msg('url涓嶈兘涓虹┖', {icon: 2, anim: 6});
+        if (setter.pageTabs) {  // 澶氭爣绛炬ā寮�
+            var flag;  // 閫夐」鍗℃槸鍚﹀凡娣诲姞
+            $(tabDOM + '>.layui-tab-title>li').each(function () {
+                if ($(this).attr('lay-id') === param.menuPath) flag = true;
+            });
+            if (!flag) {  // 娣诲姞閫夐」鍗�
+                if (index.mTabList.length + 1 >= setter.maxTabNum) {
+                    layer.msg('鏈�澶氭墦寮�' + setter.maxTabNum + '涓�夐」鍗�', {icon: 2, anim: 6});
+                    return admin.activeNav(index.mTabPosition);
+                }
+                mIsAddTab = true;
+                element.tabAdd(tabFilter, {
+                    id: param.menuPath, title: '<span class="title">' + (param.menuName || '') + '</span>',
+                    content: '<iframe class="admin-iframe" lay-id="' + param.menuPath + '" src="' + param.menuPath +
+                        '" onload="layui.index.hideLoading(this);" frameborder="0"></iframe>'
+                });
+                admin.showLoading({elem: $('iframe[lay-id="' + param.menuPath + '"]').parent(), size: ''});
+                if (param.menuPath !== index.homeUrl) index.mTabList.push(param);  // 璁板綍tab
+                if (setter.cacheTab) admin.putTempData('indexTabs', index.mTabList);  // 缂撳瓨tab
+            }
+            if (!param.noChange) element.tabChange(tabFilter, param.menuPath);  // 鍒囨崲鍒版tab
+        } else {  // 鍗曟爣绛炬ā寮�
+            admin.activeNav(param.menuPath);
+            var $contentDom = $(bodyDOM + '>div>.admin-iframe');
+            if ($contentDom.length === 0) {
+                $(bodyDOM).html([
+                    '<div class="layui-body-header">',
+                    '   <span class="layui-body-header-title"></span>',
+                    '   <span class="layui-breadcrumb pull-right" lay-filter="admin-body-breadcrumb" style="visibility: visible;"></span>',
+                    '</div>',
+                    '<div style="-webkit-overflow-scrolling: touch;">',
+                    '   <iframe class="admin-iframe" lay-id="', param.menuPath, '" src="', param.menuPath, '"',
+                    '      onload="layui.index.hideLoading(this);" frameborder="0"></iframe>',
+                    '</div>'].join(''));
+                admin.showLoading({elem: $('iframe[lay-id="' + param.menuPath + '"]').parent(), size: ''});
+            } else {
+                admin.showLoading({elem: $contentDom.parent(), size: ''});
+                $contentDom.attr('lay-id', param.menuPath).attr('src', param.menuPath);
+            }
+            $('[lay-filter="admin-body-breadcrumb"]').html(index.getBreadcrumbHtml(param.menuPath));
+            index.mTabList.splice(0, index.mTabList.length);
+            if (param.menuPath === index.homeUrl) {
+                index.mTabPosition = undefined;
+                index.setTabTitle($(param.menuName).text() || $(sideDOM + ' [lay-href="' + index.homeUrl + '"]').text() || '涓婚〉');
+            } else {
+                index.mTabPosition = param.menuPath;
+                index.mTabList.push(param);
+                index.setTabTitle(param.menuName);
+            }
+            if (!setter.cacheTab) return;
+            admin.putTempData('indexTabs', index.mTabList);
+            admin.putTempData('tabPosition', index.mTabPosition);
+        }
+        if (admin.getPageWidth() <= 768) admin.flexible(true); // 绉诲姩绔嚜鍔ㄦ敹璧蜂晶瀵艰埅
+    };
+
+    /** 鍔犺浇涓婚〉 */
+    index.loadHome = function (param) {
+        var cacheTabs = admin.getTempData('indexTabs');  // 鑾峰彇缂撳瓨tab
+        var cachePosition = admin.getTempData('tabPosition');
+        var recover = (param.loadSetting === undefined || param.loadSetting) && (setter.cacheTab && cacheTabs && cacheTabs.length > 0);
+        index.homeUrl = param.menuPath;
+        param.noChange = cachePosition ? recover : false;
+        if (setter.pageTabs || !recover) index.loadView(param);
+        if (recover) {  // 鎭㈠缂撳瓨tab
+            for (var i = 0; i < cacheTabs.length; i++) {
+                cacheTabs[i].noChange = cacheTabs[i].menuPath !== cachePosition;
+                if (!cacheTabs[i].noChange || (setter.pageTabs && !param.onlyLast)) index.loadView(cacheTabs[i]);
+            }
+        }
+        admin.removeLoading(undefined, false);
+    };
+
+    /** 鎵撳紑tab */
+    index.openTab = function (param) {
+        if (window !== top && !admin.isTop() && top.layui && top.layui.index) return top.layui.index.openTab(param);
+        if (param.end) tabEndCall[param.url] = param.end;
+        index.loadView({menuPath: param.url, menuName: param.title});
+    };
+
+    /** 鍏抽棴tab */
+    index.closeTab = function (url) {
+        if (window !== top && !admin.isTop() && top.layui && top.layui.index) return top.layui.index.closeTab(url);
+        element.tabDelete(tabFilter, url);
+    };
+
+    /** 璁剧疆鏄惁璁板繂Tab */
+    index.setTabCache = function (isCache) {
+        if (window !== top && !admin.isTop() && top.layui && top.layui.index) return top.layui.index.setTabCache(isCache);
+        admin.putSetting('cacheTab', isCache);
+        if (!isCache) return index.clearTabCache();
+        admin.putTempData('indexTabs', index.mTabList);
+        admin.putTempData('tabPosition', index.mTabPosition);
+    };
+
+    /** 娓呴櫎tab璁板繂 */
+    index.clearTabCache = function () {
+        admin.putTempData('indexTabs', null);
+        admin.putTempData('tabPosition', null);
+    };
+
+    /** 璁剧疆tab鏍囬 */
+    index.setTabTitle = function (title, tabId) {
+        if (window !== top && !admin.isTop() && top.layui && top.layui.index) return top.layui.index.setTabTitle(title, tabId);
+        if (setter.pageTabs) {
+            if (!tabId) tabId = $(tabDOM + '>.layui-tab-title>li.layui-this').attr('lay-id');
+            if (tabId) $(tabDOM + '>.layui-tab-title>li[lay-id="' + tabId + '"] .title').html(title || '');
+        } else if (title) {
+            $(titleDOM + '>.layui-body-header-title').html(title);
+            $(titleDOM).addClass('show');
+            $(headerDOM).css('box-shadow', '0 1px 0 0 rgba(0, 0, 0, .03)');
+        } else {
+            $(titleDOM).removeClass('show');
+            $(headerDOM).css('box-shadow', '');
+        }
+    };
+
+    /** 鑷畾涔塼ab鏍囬 */
+    index.setTabTitleHtml = function (html) {
+        if (window !== top && !admin.isTop() && top.layui && top.layui.index) return top.layui.index.setTabTitleHtml(html);
+        if (setter.pageTabs) return;
+        if (!html) return $(titleDOM).removeClass('show');
+        $(titleDOM).html(html);
+        $(titleDOM).addClass('show');
+    };
+
+    /** 鑾峰彇闈㈠寘灞� */
+    index.getBreadcrumb = function (tabId) {
+        if (!tabId) tabId = $(bodyDOM + '>div>.admin-iframe').attr('lay-id');
+        var breadcrumb = [];
+        var $href = $(sideDOM).find('[lay-href="' + tabId + '"]');
+        if ($href.length > 0) breadcrumb.push($href.text().replace(/(^\s*)|(\s*$)/g, ''));
+        while (true) {
+            $href = $href.parent('dd').parent('dl').prev('a');
+            if ($href.length === 0) break;
+            breadcrumb.unshift($href.text().replace(/(^\s*)|(\s*$)/g, ''));
+        }
+        return breadcrumb;
+    };
+
+    /** 鑾峰彇闈㈠寘灞戠粨鏋� */
+    index.getBreadcrumbHtml = function (tabId) {
+        var breadcrumb = index.getBreadcrumb(tabId);
+        var htmlStr = tabId === index.homeUrl ? '' : ('<a ew-href="' + index.homeUrl + '">棣栭〉</a>');
+        for (var i = 0; i < breadcrumb.length - 1; i++) {
+            if (htmlStr) htmlStr += '<span lay-separator="">/</span>';
+            htmlStr += ('<a><cite>' + breadcrumb[i] + '</cite></a>');
+        }
+        return htmlStr;
+    };
+
+    /** 鍏抽棴loading */
+    index.hideLoading = function (url) {
+        if (typeof url !== 'string') url = $(url).attr('lay-id');
+        admin.removeLoading($('iframe[lay-id="' + url + '"],' + bodyDOM + ' iframe[lay-id]').parent(), false);
+    };
+
+    /** 绉诲姩璁惧閬僵灞� */
+    var siteShadeDom = '.layui-layout-admin .site-mobile-shade';
+    if ($(siteShadeDom).length === 0) $('.layui-layout-admin').append('<div class="site-mobile-shade"></div>');
+    $(siteShadeDom).click(function () {
+        admin.flexible(true);
+    });
+
+    /** 琛ュ厖tab鐨刣om */
+    if (setter.pageTabs && $(tabDOM).length === 0) {
+        $(bodyDOM).html([
+            '<div class="layui-tab" lay-allowClose="true" lay-filter="', tabFilter, '" lay-autoRefresh="', setter.tabAutoRefresh == 'true', '">',
+            '   <ul class="layui-tab-title"></ul><div class="layui-tab-content"></div>',
+            '</div>',
+            '<div class="layui-icon admin-tabs-control layui-icon-prev" ew-event="leftPage"></div>',
+            '<div class="layui-icon admin-tabs-control layui-icon-next" ew-event="rightPage"></div>',
+            '<div class="layui-icon admin-tabs-control layui-icon-down">',
+            '   <ul class="layui-nav" lay-filter="admin-pagetabs-nav">',
+            '      <li class="layui-nav-item" lay-unselect>',
+            '         <dl class="layui-nav-child layui-anim-fadein">',
+            '            <dd ew-event="closeThisTabs" lay-unselect><a>鍏抽棴褰撳墠鏍囩椤�</a></dd>',
+            '            <dd ew-event="closeOtherTabs" lay-unselect><a>鍏抽棴鍏跺畠鏍囩椤�</a></dd>',
+            '            <dd ew-event="closeAllTabs" lay-unselect><a>鍏抽棴鍏ㄩ儴鏍囩椤�</a></dd>',
+            '         </dl>',
+            '      </li>',
+            '   </ul>',
+            '</div>'
+        ].join(''));
+        element.render('nav', 'admin-pagetabs-nav');
+    }
+
+    /** 渚у鑸偣鍑荤洃鍚� */
+    element.on('nav(' + navFilter + ')', function (elem) {
+        var $that = $(elem);
+        var href = $that.attr('lay-href');
+        if (!href || href === '#') return;
+        if (href.indexOf('javascript:') === 0) return new Function(href.substring(11))();
+        var name = $that.attr('ew-title') || $that.text().replace(/(^\s*)|(\s*$)/g, '');
+        var end = $that.attr('ew-end');
+        try {
+            if (end) end = new Function(end);
+            else end = undefined;
+        } catch (e) {
+            console.error(e);
+        }
+        index.openTab({url: href, title: name, end: end});
+        layui.event.call(this, 'admin', 'side({*})', {href: href});
+    });
+
+    /** tab鍒囨崲鐩戝惉 */
+    element.on('tab(' + tabFilter + ')', function () {
+        var layId = $(this).attr('lay-id');
+        index.mTabPosition = (layId !== index.homeUrl ? layId : undefined);  // 璁板綍褰撳墠Tab浣嶇疆
+        if (setter.cacheTab) admin.putTempData('tabPosition', index.mTabPosition);
+        admin.activeNav(layId);
+        admin.rollPage('auto');
+        if ($(tabDOM).attr('lay-autoRefresh') == 'true' && !mIsAddTab) admin.refresh(layId, true);  // 鍒囨崲tab鍒锋柊
+        mIsAddTab = false;
+        layui.event.call(this, 'admin', 'tab({*})', {layId: layId});
+    });
+
+    /** tab鍒犻櫎鐩戝惉 */
+    element.on('tabDelete(' + tabFilter + ')', function (data) {
+        var mTab = index.mTabList[data.index - 1];
+        if (mTab) {
+            index.mTabList.splice(data.index - 1, 1);
+            if (setter.cacheTab) admin.putTempData('indexTabs', index.mTabList);
+            tabEndCall[mTab.menuPath] && tabEndCall[mTab.menuPath].call();
+            layui.event.call(this, 'admin', 'tabDelete({*})', {layId: mTab.menuPath});
+        }
+        if ($(tabDOM + '>.layui-tab-title>li.layui-this').length === 0)
+            $(tabDOM + '>.layui-tab-title>li:last').trigger('click');  // 瑙e喅鍒犻櫎鍚庡彲鑳芥棤閫変腑bug
+    });
+
+    /** 澶氱郴缁熷垏鎹簨浠� */
+    $(document).off('click.navMore').on('click.navMore', '[nav-bind]', function () {
+        var navId = $(this).attr('nav-bind');
+        $('ul[lay-filter="' + navFilter + '"]').addClass('layui-hide');
+        $('ul[nav-id="' + navId + '"]').removeClass('layui-hide');
+        $(headerDOM + '>.layui-nav .layui-nav-item').removeClass('layui-this');
+        $(this).parent('.layui-nav-item').addClass('layui-this');
+        if (admin.getPageWidth() <= 768) admin.flexible(false);  // 灞曞紑渚ц竟鏍�
+        layui.event.call(this, 'admin', 'nav({*})', {navId: navId});
+    });
+
+    /** 寮�鍚疶ab鍙抽敭鑿滃崟 */
+    if (setter.openTabCtxMenu && setter.pageTabs) {
+        layui.use('contextMenu', function () {
+            if (!layui.contextMenu) return;
+            $(tabDOM + '>.layui-tab-title').off('contextmenu.tab').on('contextmenu.tab', 'li', function (e) {
+                var layId = $(this).attr('lay-id');
+                layui.contextMenu.show([{
+                    icon: 'layui-icon layui-icon-refresh',
+                    name: '鍒锋柊褰撳墠',
+                    click: function () {
+                        element.tabChange(tabFilter, layId);
+                        if ('true' != $(tabDOM).attr('lay-autoRefresh')) admin.refresh(layId);
+                    }
+                }, {
+                    icon: 'layui-icon layui-icon-close-fill ctx-ic-lg',
+                    name: '鍏抽棴褰撳墠',
+                    click: function () {
+                        admin.closeThisTabs(layId);
+                    }
+                }, {
+                    icon: 'layui-icon layui-icon-unlink',
+                    name: '鍏抽棴鍏朵粬',
+                    click: function () {
+                        admin.closeOtherTabs(layId);
+                    }
+                }, {
+                    icon: 'layui-icon layui-icon-close ctx-ic-lg',
+                    name: '鍏抽棴鍏ㄩ儴',
+                    click: function () {
+                        admin.closeAllTabs();
+                    }
+                }], e.clientX, e.clientY);
+                return false;
+            });
+        });
+    }
+
+    exports('index', index);
+});
diff --git a/src/main/webapp/static/layui/lay/modules/notice/1.wav b/src/main/webapp/static/layui/lay/modules/notice/1.wav
new file mode 100644
index 0000000..9c765d5
--- /dev/null
+++ b/src/main/webapp/static/layui/lay/modules/notice/1.wav
Binary files differ
diff --git a/src/main/webapp/static/layui/lay/modules/notice/2.wav b/src/main/webapp/static/layui/lay/modules/notice/2.wav
new file mode 100644
index 0000000..920f729
--- /dev/null
+++ b/src/main/webapp/static/layui/lay/modules/notice/2.wav
Binary files differ
diff --git a/src/main/webapp/static/layui/lay/modules/notice/3.wav b/src/main/webapp/static/layui/lay/modules/notice/3.wav
new file mode 100644
index 0000000..617cb1e
--- /dev/null
+++ b/src/main/webapp/static/layui/lay/modules/notice/3.wav
Binary files differ
diff --git a/src/main/webapp/static/layui/lay/modules/notice/4.wav b/src/main/webapp/static/layui/lay/modules/notice/4.wav
new file mode 100644
index 0000000..34679f9
--- /dev/null
+++ b/src/main/webapp/static/layui/lay/modules/notice/4.wav
Binary files differ
diff --git a/src/main/webapp/static/layui/lay/modules/notice/5.wav b/src/main/webapp/static/layui/lay/modules/notice/5.wav
new file mode 100644
index 0000000..400feb8
--- /dev/null
+++ b/src/main/webapp/static/layui/lay/modules/notice/5.wav
Binary files differ
diff --git a/src/main/webapp/static/layui/lay/modules/notice/6.wav b/src/main/webapp/static/layui/lay/modules/notice/6.wav
new file mode 100644
index 0000000..9d1beae
--- /dev/null
+++ b/src/main/webapp/static/layui/lay/modules/notice/6.wav
Binary files differ
diff --git a/src/main/webapp/static/layui/lay/modules/notice/notice.css b/src/main/webapp/static/layui/lay/modules/notice/notice.css
new file mode 100644
index 0000000..d723149
--- /dev/null
+++ b/src/main/webapp/static/layui/lay/modules/notice/notice.css
@@ -0,0 +1,1929 @@
+.iziToast-capsule {
+    font-size: 0;
+    height: 0;
+    width: 100%;
+    transform: translateZ(0);
+    backface-visibility: hidden;
+    transition: transform 0.5s cubic-bezier(0.25, 0.8, 0.25, 1), height 0.5s cubic-bezier(0.25, 0.8, 0.25, 1);
+}
+
+.iziToast-capsule, .iziToast-capsule * {
+    box-sizing: border-box;
+}
+
+.iziToast-overlay {
+    display: block;
+    position: fixed;
+    top: -100px;
+    left: 0;
+    right: 0;
+    bottom: -100px;
+    z-index: 19891100;
+}
+
+.iziToast {
+    display: inline-block;
+    clear: both;
+    position: relative;
+    font-family: 'Lato', Tahoma, Arial;
+    font-size: 14px;
+    padding: 8px 45px 9px 0;
+    background: #fff;
+    border-color: #fff;
+    width: 100%;
+    pointer-events: all;
+    cursor: default;
+    transform: translateX(0);
+    -webkit-touch-callout: none /* iOS Safari */;
+    -webkit-user-select: none /* Chrome/Safari/Opera */;
+    -khtml-user-select: none /* Konqueror */;
+    -moz-user-select: none /* Firefox */;
+    -ms-user-select: none /* Internet Explorer/Edge */;
+    user-select: none;
+    min-height: 45px;
+    box-shadow: 0 2px 12px 0 rgba(0, 0, 0, .1);
+    max-width: 90%;
+    margin: 5px 0;
+    border-radius: 4px;
+}
+
+.iziToast > .iziToast-progressbar {
+    position: absolute;
+    left: 0;
+    bottom: 0;
+    width: 100%;
+    z-index: 1;
+    background: rgba(255, 255, 255, 0.5);
+}
+
+.iziToast > .iziToast-progressbar > div {
+    height: 2px;
+    width: 100%;
+    background: #dddddd;
+    border-radius: 0 0 3px 3px;
+}
+
+.iziToast.iziToast-theme-dark > .iziToast-progressbar > div {
+    background: #fff;
+}
+
+.iziToast.iziToast-balloon:before {
+    content: '';
+    position: absolute;
+    right: 8px;
+    left: auto;
+    width: 0px;
+    height: 0px;
+    top: 100%;
+    border-right: 0px solid transparent;
+    border-left: 15px solid transparent;
+    border-top: 10px solid #000;
+    border-top-color: inherit;
+    border-radius: 0;
+}
+
+.iziToast.iziToast-balloon .iziToast-progressbar {
+    top: 0;
+    bottom: auto;
+}
+
+.iziToast.iziToast-balloon > div {
+    border-radius: 0 0 0 3px;
+}
+
+.iziToast > .iziToast-cover {
+    position: absolute;
+    left: 0;
+    top: 0;
+    bottom: 0;
+    height: 100%;
+    margin: 0;
+    background-size: 100%;
+    background-position: 50% 50%;
+    background-repeat: no-repeat;
+}
+
+.iziToast > .iziToast-close {
+    position: absolute;
+    right: 0;
+    top: 0;
+    border: 0;
+    padding: 0;
+    opacity: 0.6;
+    width: 42px;
+    height: 100%;
+    background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAJPAAACTwBcGfW0QAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAD3SURBVFiF1ZdtDoMgDEBfdi4PwAX8vLFn0qT7wxantojKupmQmCi8R4tSACpgjC2ICCUbEBa8ingjsU1AXRBeR8aLN64FiknswN8CYefBBDQ3whuFESy7WyQMeC0ipEI0A+0FeBvHUFN8xPaUhAH/iKoWsnXHGegy4J0yxialOfaHJAz4bhRzQzgDvdGnz4GbAonZbCQMuBm1K/kcFu8Mp1N2cFFpsxsMuJqqbIGExGl4loARajU1twskJLLhIsID7+tvUoDnIjTg5T9DPH9EBrz8rxjPzciAl9+O8SxI8CzJ8CxKFfh3ynK8Dyb8wNHM/XDqejx/AtNyPO87tNybAAAAAElFTkSuQmCC") no-repeat 50% 50%;
+    background-size: 8px;
+    cursor: pointer;
+    outline: none;
+}
+
+.iziToast > .iziToast-close:hover {
+    opacity: 1;
+}
+
+.iziToast > .iziToast-body {
+    position: relative;
+    padding: 0 0 0 10px;
+    height: auto;
+    min-height: 28px;
+    margin: 0 0 0 15px;
+    text-align: left;
+}
+
+.iziToast > .iziToast-body:after {
+    content: "";
+    display: table;
+    clear: both;
+}
+
+.iziToast > .iziToast-body .iziToast-texts {
+    margin: 6px 0;
+    padding-right: 2px;
+    display: inline-block;
+    float: left;
+}
+
+.iziToast > .iziToast-body .iziToast-inputs {
+    min-height: 19px;
+    float: left;
+    margin: 3px -2px;
+}
+
+.iziToast > .iziToast-body .iziToast-inputs > input:not([type=checkbox]):not([type=radio]),
+.iziToast > .iziToast-body .iziToast-inputs > select {
+    position: relative;
+    display: inline-block;
+    margin: 2px;
+    border-radius: 2px;
+    border: 0;
+    padding: 4px 7px;
+    font-size: 13px;
+    letter-spacing: 0.02em;
+    background: rgba(0, 0, 0, 0.1);
+    color: #000;
+    box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.2);
+    min-height: 26px;
+}
+
+.iziToast > .iziToast-body .iziToast-inputs > input:not([type=checkbox]):not([type=radio]):focus,
+.iziToast > .iziToast-body .iziToast-inputs > select:focus {
+    box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.6);
+}
+
+.iziToast > .iziToast-body .iziToast-buttons {
+    min-height: 17px;
+    float: left;
+    margin: 4px 0 0 0;
+}
+
+.iziToast > .iziToast-body .iziToast-buttons > a,
+.iziToast > .iziToast-body .iziToast-buttons > button,
+.iziToast > .iziToast-body .iziToast-buttons > input:not([type=checkbox]):not([type=radio]) {
+    position: relative;
+    display: inline-block;
+    margin: 2px;
+    border-radius: 2px;
+    border: 0;
+    padding: 5px 10px;
+    font-size: 12px;
+    letter-spacing: 0.02em;
+    cursor: pointer;
+    background: rgba(0, 0, 0, 0.1);
+    color: #555;
+}
+
+.iziToast > .iziToast-body .iziToast-buttons > a:hover,
+.iziToast > .iziToast-body .iziToast-buttons > button:hover,
+.iziToast > .iziToast-body .iziToast-buttons > input:not([type=checkbox]):not([type=radio]):hover {
+    background: rgba(0, 0, 0, 0.15);
+}
+
+.iziToast > .iziToast-body .iziToast-buttons > a:focus,
+.iziToast > .iziToast-body .iziToast-buttons > button:focus,
+.iziToast > .iziToast-body .iziToast-buttons > input:not([type=checkbox]):not([type=radio]):focus {
+    box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.6);
+}
+
+.iziToast > .iziToast-body .iziToast-buttons > a:active,
+.iziToast > .iziToast-body .iziToast-buttons > button:active,
+.iziToast > .iziToast-body .iziToast-buttons > input:not([type=checkbox]):not([type=radio]):active {
+    top: 1px;
+}
+
+.iziToast > .iziToast-body .iziToast-icon {
+    height: 100%;
+    position: absolute;
+    left: 0;
+    top: 50%;
+    display: table;
+    font-size: 23px;
+    line-height: 24px;
+    margin-top: -11px;
+    color: #000;
+    width: 24px;
+    height: 24px;
+}
+
+.iziToast > .iziToast-body .iziToast-icon.ico-info {
+    background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTU1NzcxMTk5MzYwIiBjbGFzcz0iaWNvbiIgc3R5bGU9IiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjEwODAzIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyMDAiPjxkZWZzPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PC9zdHlsZT48L2RlZnM+PHBhdGggZD0iTTUxMiAyOC40MTZjLTI2Ny40Njg4IDAtNDg0LjI0OTYgMjE2LjgzMi00ODQuMjQ5NiA0ODQuMjQ5NiAwIDI2Ny40MTc2IDIxNi44MzIgNDg0LjI0OTYgNDg0LjI0OTYgNDg0LjI0OTYgMjY3LjQxNzYgMCA0ODQuMzAwOC0yMTYuODMyIDQ4NC4zMDA4LTQ4NC4yNDk2Qzk5Ni4zMDA4IDI0NS4yNDggNzc5LjQxNzYgMjguNDE2IDUxMiAyOC40MTZ6TTQ1NS41MjY0IDI0NS4wOTQ0QzQ3MC4zMjMyIDIyOS44ODggNDkwLjcwMDggMjIxLjMzNzYgNTExLjc5NTIgMjIxLjY0NDhjMjEuMTk2OC0wLjIwNDggNDEuNzc5MiA4LjI0MzIgNTYuNTI0OCAyMy40NDk2IDE1LjAwMTYgMTQuNzk2OCAyMy4yOTYgMzUuMTIzMiAyMy4wOTEyIDU2LjExNTIgMC4yMDQ4IDIxLjE5NjgtOC4yOTQ0IDQxLjU3NDQtMjMuMzk4NCA1Ni4yMTc2LTE0LjY5NDQgMTQuNjk0NC0zNC43MTM2IDIzLjA0LTU1LjM5ODQgMjMuMDRMNTExLjc5NTIgMzgwLjQ2NzJjLTIwLjk5MiAwLjIwNDgtNDEuMzY5Ni04LjE0MDgtNTYuMDY0LTIzLjE0MjRDNDQwLjY3ODQgMzQyLjY4MTYgNDMyLjMzMjggMzIyLjMwNCA0MzIuNTM3NiAzMDEuMjA5NiA0MzIuMzMyOCAyODAuMjE3NiA0NDAuNjc4NCAyNTkuODkxMiA0NTUuNTI2NCAyNDUuMDk0NHpNNjI3LjYwOTYgNzY4LjE1MzZsMCAxMy40MTQ0IDAgMjIuMjIwOEwzOTYuMjg4IDgwMy43ODg4bDAtNTcuMTM5MiAyMS42MDY0LTAuNzY4YzEwLjI0LTAuNDYwOCAxNC41OTItMi43MTM2IDE2Ljk5ODQtNC43NjE2bDEuMjI4OC01LjQyNzJjMC45NzI4LTUuNTgwOCAxLjYzODQtMTQuNDM4NCAxLjU4NzItMjUuOTA3Mkw0MzcuNzA4OCA1MDcuOTA0YzAuMjU2LTE3Ljc2NjQtMi4zNTUyLTI5LjkwMDgtMy40ODE2LTMyLjU2MzJsMCAwTDQzMS42MTYgNDc0LjA2MDhDNDI4Ljg1MTIgNDczLjA4OCA0MjMuOTM2IDQ3Mi4wNjQgNDE3LjE3NzYgNDcxLjY1NDRMMzk2LjI4OCA0NzAuMzc0NCAzOTYuMjg4IDQxMy40OTEybDE4OS40OTEyIDAgMCAyOTYuMjk0NGMtMC4zMDcyIDE3LjcxNTIgMi40MDY0IDI5Ljc5ODQgMy40MzA0IDMyLjU2MzJsMC4wNTEyIDAgMi43MTM2IDEuMTc3NmMyLjgxNiAwLjk3MjggNy43ODI0IDEuOTk2OCAxNC42OTQ0IDIuMzU1MmwyMC44ODk2IDEuMjhMNjI3LjU1ODQgNzY4LjE1MzZ6IiBwLWlkPSIxMDgwNCIgZmlsbD0iIzQwOUVGRiI+PC9wYXRoPjwvc3ZnPg==") no-repeat 50% 50%;
+    background-size: 85%;
+}
+
+.iziToast > .iziToast-body .iziToast-icon.ico-warning {
+    background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTU1NzcwODczNzUzIiBjbGFzcz0iaWNvbiIgc3R5bGU9IiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjUxMTgiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PGRlZnM+PHN0eWxlIHR5cGU9InRleHQvY3NzIj48L3N0eWxlPjwvZGVmcz48cGF0aCBkPSJNNTEyLjAyMzI3MyAxMDI0Qzc5NC43NjM2MzYgMTAyNCAxMDI0IDc5NC43ODY5MDkgMTAyNCA1MTEuOTc2NzI3IDEwMjQgMjI5LjIzNjM2NCA3OTQuNzg2OTA5LTAuMDIzMjczIDUxMi4wMjMyNzMtMC4wMjMyNzNTMCAyMjkuMjEzMDkxIDAgNTExLjk3NjcyN0MwIDc5NC43ODY5MDkgMjI5LjIzNjM2NCAxMDI0IDUxMi4wMjMyNzMgMTAyNE00NjkuMzQxMDkxIDc2OGMwLTIzLjU1MiAxOC45MjA3MjctNDIuNjU4OTA5IDQyLjcwNTQ1NS00Mi42NTg5MDkgMjMuNTUyIDAgNDIuNjU4OTA5IDE4LjkyMDcyNyA0Mi42NTg5MDkgNDIuNjU4OTA5IDAgMjMuNTc1MjczLTE4LjkyMDcyNyA0Mi43MDU0NTUtNDIuNjU4OTA5IDQyLjcwNTQ1NUM0ODguNDcxMjczIDgxMC43MDU0NTUgNDY5LjM0MTA5MSA3OTEuNzM4MTgyIDQ2OS4zNDEwOTEgNzY4TTQ2OS4zNDEwOTEgMjU1LjgxMzgxOGMwLTIzLjQ1ODkwOSAxOC45MjA3MjctNDIuNDcyNzI3IDQyLjcwNTQ1NS00Mi40NzI3MjcgMjMuNTUyIDAgNDIuNjU4OTA5IDE5LjQzMjcyNyA0Mi42NTg5MDkgNDIuNDcyNzI3bDAgMzQxLjczNjcyN2MwIDIzLjQ1ODkwOS0xOC45MjA3MjcgNDIuNDcyNzI3LTQyLjY1ODkwOSA0Mi40NzI3MjctMjMuNTc1MjczIDAtNDIuNzA1NDU1LTE5LjQzMjcyNy00Mi43MDU0NTUtNDIuNDcyNzI3TDQ2OS4zNDEwOTEgMjU1LjgxMzgxOHoiIHAtaWQ9IjUxMTkiIGZpbGw9IiNmZjk5MDAiPjwvcGF0aD48L3N2Zz4=") no-repeat 50% 50%;
+    background-size: 85%;
+}
+
+.iziToast > .iziToast-body .iziToast-icon.ico-error {
+    background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTU1NzcwNDI1NDkwIiBjbGFzcz0iaWNvbiIgc3R5bGU9IiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjEyNjUiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PGRlZnM+PHN0eWxlIHR5cGU9InRleHQvY3NzIj48L3N0eWxlPjwvZGVmcz48cGF0aCBkPSJNNTExLjk5NjQxOCAyMy41MjA2OTNjLTI2OS43NjcwNSAwLTQ4OC40NTQ3NDggMjE4LjY4ODcyMS00ODguNDU0NzQ4IDQ4OC40NTQ3NDggMCAyNjkuNzY4MDczIDIxOC42ODg3MjEgNDg4LjQ1MzcyNCA0ODguNDU0NzQ4IDQ4OC40NTM3MjQgMjY5Ljc2NjAyNyAwIDQ4OC40NTQ3NDgtMjE4LjY4NTY1MSA0ODguNDU0NzQ4LTQ4OC40NTM3MjRDMTAwMC40NTExNjYgMjQyLjIwOTQxNCA3ODEuNzYyNDQ1IDIzLjUyMDY5MyA1MTEuOTk2NDE4IDIzLjUyMDY5M3pNNzY5LjMzNDM5MSA3MTUuMTU1OTU2bC01NC4xNTY0MzQgNTQuMTU2NDM0TDUxMS45OTY0MTggNTY2LjEyOTgyOCAzMDguODEzODU2IDc2OS4zMTIzOWwtNTQuMTU1NDExLTU0LjE1NjQzNEw0NTcuODQxMDA4IDUxMS45NzU0NDEgMjU0LjY1ODQ0NiAzMDguNzkyODc4bDU0LjE1NTQxMS01NC4xNTU0MTFMNTExLjk5NjQxOCA0NTcuODIwMDNsMjAzLjE4MjU2Mi0yMDMuMTgyNTYyIDU0LjE1NjQzNCA1NC4xNTU0MTFMNTY2LjE1MTgyOSA1MTEuOTc1NDQxIDc2OS4zMzQzOTEgNzE1LjE1NTk1NnoiIHAtaWQ9IjEyNjYiIGZpbGw9IiNGNTZDNkMiPjwvcGF0aD48L3N2Zz4=") no-repeat 50% 50%;
+    background-size: 80%;
+}
+
+.iziToast > .iziToast-body .iziToast-icon.ico-success {
+    background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTU1NzcwNTI2MjA3IiBjbGFzcz0iaWNvbiIgc3R5bGU9IiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjQ5NjUiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PGRlZnM+PHN0eWxlIHR5cGU9InRleHQvY3NzIj48L3N0eWxlPjwvZGVmcz48cGF0aCBkPSJNMTAyNCA1MTEuOTk5NTAyYzAgMjgyLjc3MDU1Ny0yMjkuMjI5OTQxIDUxMi4wMDA0OTgtNTExLjk5OTUwMiA1MTIuMDAwNDk4LTI4Mi43Njk1NjEgMC01MTIuMDAwNDk4LTIyOS4yMjk5NDEtNTEyLjAwMDQ5OC01MTIuMDAwNDk4IDAtMjgyLjc2ODU2NiAyMjkuMjMwOTM2LTUxMS45OTk1MDIgNTEyLjAwMDQ5OC01MTEuOTk5NTAyQzc5NC43NjkwNjQgMCAxMDI0IDIyOS4yMzA5MzYgMTAyNCA1MTEuOTk5NTAyek03OTYuNTc3MDgxIDM3OC4zMTc3MTNsLTQ4LjQ1OTA1MS00OC40NTkwNTEtMjk3LjA3ODM4NyAyOTcuMDc3MzkyTDI3Ny4yNjc4NTIgNDUzLjE2NTI1OGwtNDguNDU4MDU2IDQ4LjQ1ODA1NiAyMjIuMjI4ODUxIDIyMi4yMzA4NDJMNzk2LjU3NzA4MSAzNzguMzE3NzEzeiIgcC1pZD0iNDk2NiIgZmlsbD0iIzY3YzIzYSI+PC9wYXRoPjwvc3ZnPg==") no-repeat 50% 50%;
+    background-size: 85%;
+}
+
+.iziToast > .iziToast-body .iziToast-icon.ico-question {
+    background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAQAAAAAYLlVAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QAAKqNIzIAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfhCQkUEhFovxTxAAAEDklEQVRo3s2ZTWgTQRTHf03ipTRUqghNSgsRjHgQrFUQC6JgD1Kak3gQUUoPqRdBglf1oBehBws9Cn4cGk+1SOmh2upBxAYVoeJHrR9tgq0i1Cq0lqYeks7MbpPdmU00/c8hm9n33v/t7Nt5M2+qMEWQI0QIibZKRrQpHvLL2KI2wnQzzBKrDm2RIeKEy01dTYKUI7G1ZRknQXV5yP10kTYgly1NF/5S6duZ8ES+1iZodyaocrjXxE0OFeifYYgp0mRIkwFChAkRJsIxGgrIP+I0n82fvZW5dc/zkss0O2o1c5mX6/TmaDWl77RFe5YkUW3tKEmyFv0lOvXJ/fTYnmCEFuMRbGHEZqVHLyT9DFjUJmkzJl9DG5MWWwM6Llif/gF1nukB6nhgGwUXdFrE+wiURA8QoM9i0zEWWpXQW+ZsyeRrOMuyEo5Fv4gmy4dXPvqcC+pH2VRYaMwy+OWG+iLGCgm0W0Kv9HdvR8ASjmKCXpuK/bxiV/76A/v5UdDIZuKcJGjrnec5KZ7wwsWFOp6xPX/9mt2sqDe7FO+Kf/fXHBPPDWpdXGhTpLvUG9VKwh1xMDDjkvu+cNDFBTk7ptX1QkKZ850m3duu6fcrWxwdaFFyREJ2j4vOpKP6Du6z4uJCv8sYJIVkCnJBGGZaBONO3roY2EqNrSfIPi7SKP4fdXyNUd6I6wbSAHEl33tFLe+FlSsusnK90A0+oEPcuufZgXnOi+u9LrKSJQZQw6LwqBnv2CKsfHORbFbyQhA6xN/pEuihSdj56Co7LWRjPiKie6gkB2LiKuUqK5kiPkLiz1QJ9K1cNXBAMoUCigNpQ9IqDtMI1HKA4/jyvUsaoSyZLA5kjOjDPFZen8Ql5TsvBskUgjciIPSX3QAXC86DT7VWvlEh/xZ+ij9BDVWJ0QL0SbZq6QaFxoLPcXPmBLveLCc4wXdDK6s+6/vwhCSniFLPXW0NJe5UB8zKCsviqpc7vGPVQFcyZbyPwGD+d5ZnxmNWlhG4xSBZZjivjIWHEQgoDkSMjMwTo54569JSE5IpA7EyJSMTyGTUAUFlO1ZKOtaHTMeL1PhYYFTcihmY2cQ5+ullj7EDkiVfVez2sCTz8yiv84djhg7IJVk81xFWJlPdfHBG0flkRC/zQFZ+DSllNtfDdUsOMCliyGX5uOzU3ZhIXFDof4m1gDuKbEx0t2YS25gVGpcMnr/I1kx3c6piB8P8ZoqEwfMX3ZyCXynJTmq/U7NUXqfUzCbWL1wqVKBQUeESzQYoUlW8TAcVL1RCxUu1G6BYXfFyfQ4VPbDI4T8d2WzgQ6sc/vmxnTsqfHCZQzUJxm1h5dxS5Tu6lQgTZ0ipqRVqSwzTbbLHMt+c19iO76tsx/cLZub+Ali+tYC93olEAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE3LTA5LTA5VDIwOjE4OjE3KzAyOjAwjKtfjgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNy0wOS0wOVQyMDoxODoxNyswMjowMP325zIAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAAAAElFTkSuQmCC") no-repeat 50% 50%;
+    background-size: 85%;
+}
+
+.iziToast > .iziToast-body .iziToast-icon.ico-load {
+    background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTQ1NTUyMzAyOTE3IiBjbGFzcz0iaWNvbiIgc3R5bGU9IiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjQyNDAiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PGRlZnM+PHN0eWxlIHR5cGU9InRleHQvY3NzIj48L3N0eWxlPjwvZGVmcz48cGF0aCBkPSJNNTEyIDY0YzI0Ny4yIDAgNDQ4IDIwMC44IDQ0OCA0NDhoLTY0YzAtMjEyLTE3Mi0zODQtMzg0LTM4NFY2NHogbTAgODMyYy0yMTIgMC0zODQtMTcyLTM4NC0zODRINjRjMCAyNDcuMiAyMDAuOCA0NDggNDQ4IDQ0OHYtNjR6IiBwLWlkPSI0MjQxIiBmaWxsPSIjMUU5RkZGIj48L3BhdGg+PC9zdmc+') no-repeat 50% 50%;
+    background-size: 85%;
+    animation: rotating 1.2s linear infinite
+}
+
+@keyframes rotating {
+    from {
+        transform: rotate(0)
+    }
+    to {
+        transform: rotate(360deg)
+    }
+}
+
+.iziToast > .iziToast-body .iziToast-title {
+    padding: 0;
+    margin: 0 0 10px 0;
+    line-height: 16px;
+    font-size: 14px;
+    text-align: left;
+    float: left;
+    color: #303133;
+    white-space: normal;
+}
+
+.iziToast > .iziToast-body .iziToast-message {
+    padding: 0;
+    margin: 0;
+    font-size: 14px;
+    line-height: 16px;
+    text-align: left;
+    float: left;
+    color: #606266;
+    white-space: normal;
+}
+
+.iziToast.iziToast-animateInside .iziToast-title,
+.iziToast.iziToast-animateInside .iziToast-message,
+.iziToast.iziToast-animateInside .iziToast-icon,
+.iziToast.iziToast-animateInside .iziToast-buttons-child,
+.iziToast.iziToast-animateInside .iziToast-inputs-child {
+    opacity: 0;
+}
+
+.iziToast-target {
+    position: relative;
+    width: 100%;
+    margin: 0 auto;
+}
+
+.iziToast-target .iziToast-capsule {
+    overflow: hidden;
+}
+
+.iziToast-target .iziToast-capsule:after {
+    visibility: hidden;
+    display: block;
+    font-size: 0;
+    content: " ";
+    clear: both;
+    height: 0;
+}
+
+.iziToast-target .iziToast-capsule .iziToast {
+    width: 100%;
+    float: left;
+}
+
+.iziToast-wrapper {
+    z-index: 19891101;
+    position: fixed;
+    width: 100%;
+    pointer-events: none;
+    display: flex;
+    flex-direction: column;
+}
+
+.iziToast-wrapper .iziToast.iziToast-balloon:before {
+    border-right: 0 solid transparent;
+    border-left: 15px solid transparent;
+    border-top: 10px solid #000;
+    border-top-color: inherit;
+    right: 8px;
+    left: auto;
+}
+
+.iziToast-wrapper-bottomLeft {
+    left: 0;
+    bottom: 0;
+    text-align: left;
+}
+
+.iziToast-wrapper-bottomLeft .iziToast.iziToast-balloon:before {
+    border-right: 15px solid transparent;
+    border-left: 0 solid transparent;
+    right: auto;
+    left: 8px;
+}
+
+.iziToast-wrapper-bottomRight {
+    right: 0;
+    bottom: 0;
+    text-align: right;
+}
+
+.iziToast-wrapper-topLeft {
+    left: 0;
+    top: 0;
+    text-align: left;
+}
+
+.iziToast-wrapper-topLeft .iziToast.iziToast-balloon:before {
+    border-right: 15px solid transparent;
+    border-left: 0 solid transparent;
+    right: auto;
+    left: 8px;
+}
+
+.iziToast-wrapper-topRight {
+    top: 0;
+    right: 0;
+    text-align: right;
+}
+
+.iziToast-wrapper-topCenter {
+    top: 0;
+    left: 0;
+    right: 0;
+    text-align: center;
+}
+
+.iziToast-wrapper-bottomCenter {
+    bottom: 0;
+    left: 0;
+    right: 0;
+    text-align: center;
+}
+
+.iziToast-wrapper-center {
+    top: 0;
+    bottom: 0;
+    left: 0;
+    right: 0;
+    text-align: center;
+    justify-content: center;
+    flex-flow: column;
+    align-items: center;
+}
+
+.iziToast-rtl {
+    direction: rtl;
+    padding: 8px 0 9px 45px;
+    font-family: Tahoma, 'Lato', Arial;
+}
+
+.iziToast-rtl .iziToast-cover {
+    left: auto;
+    right: 0;
+}
+
+.iziToast-rtl .iziToast-close {
+    right: auto;
+    left: 0;
+}
+
+.iziToast-rtl .iziToast-body {
+    padding: 0 10px 0 0;
+    margin: 0 16px 0 0;
+    text-align: right;
+}
+
+.iziToast-rtl .iziToast-body .iziToast-buttons,
+.iziToast-rtl .iziToast-body .iziToast-inputs,
+.iziToast-rtl .iziToast-body .iziToast-texts,
+.iziToast-rtl .iziToast-body .iziToast-title,
+.iziToast-rtl .iziToast-body .iziToast-message {
+    float: right;
+    text-align: right;
+}
+
+.iziToast-rtl .iziToast-body .iziToast-icon {
+    left: auto;
+    right: 0;
+}
+
+@media only screen and (min-width: 568px) {
+    .iziToast-wrapper {
+        padding: 10px 15px;
+    }
+
+    .iziToast {
+        width: auto;
+    }
+
+    .iziToast:not(.iziToast-rtl) .iziToast-cover {
+        border-radius: 3px 0 0 3px;
+    }
+
+    .iziToast.iziToast-rtl .iziToast-cover {
+        border-radius: 0 3px 3px 0;
+    }
+
+    .iziToast.iziToast-color-dark:after {
+        box-shadow: inset 0 -10px 20px -10px rgba(255, 255, 255, 0.3), 0 10px 10px -5px rgba(0, 0, 0, 0.25);
+    }
+
+    .iziToast.iziToast-balloon .iziToast-progressbar {
+        background: transparent;
+    }
+
+    .iziToast.iziToast-balloon:after {
+        box-shadow: 0 10px 10px -5px rgba(0, 0, 0, 0.25), inset 0 10px 20px -5px rgba(0, 0, 0, 0.25);
+    }
+
+    .iziToast-target .iziToast:after {
+        box-shadow: inset 0 -10px 20px -10px rgba(0, 0, 0, 0.2), inset 0 0 5px rgba(0, 0, 0, 0.1);
+    }
+}
+
+.iziToast.iziToast-theme-dark {
+    background: #565c70;
+    border-color: #565c70;
+}
+
+.iziToast.iziToast-theme-dark .iziToast-title {
+    color: #fff;
+}
+
+.iziToast.iziToast-theme-dark .iziToast-message {
+    color: rgba(255, 255, 255, 0.9);
+    font-weight: 300;
+}
+
+.iziToast.iziToast-theme-dark .iziToast-close {
+    background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZc7J/AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QAAKqNIzIAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfgCR4OIQIPSao6AAAAwElEQVRIx72VUQ6EIAwFmz2XB+AConhjzqTJ7JeGKhLYlyx/BGdoBVpjIpMJNjgIZDKTkQHYmYfwmR2AfAqGFBcO2QjXZCd24bEggvd1KBx+xlwoDpYmvnBUUy68DYXD77ESr8WDtYqvxRex7a8oHP4Wo1Mkt5I68Mc+qYqv1h5OsZmZsQ3gj/02h6cO/KEYx29hu3R+VTTwz6D3TymIP1E8RvEiiVdZfEzicxYLiljSxKIqlnW5seitTW6uYnv/Aqh4whX3mEUrAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTA5LTMwVDE0OjMzOjAyKzAyOjAwl6RMVgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wOS0zMFQxNDozMzowMiswMjowMOb59OoAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAAAAElFTkSuQmCC") no-repeat 50% 50%;
+    background-size: 8px;
+}
+
+.iziToast.iziToast-theme-dark .iziToast-icon {
+    color: #fff;
+}
+
+.iziToast.iziToast-theme-dark .iziToast-icon.ico-info {
+    background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTQxNjQ5NjA1MTc2IiBjbGFzcz0iaWNvbiIgc3R5bGU9IiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjM1MzIiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCI+PGRlZnM+PHN0eWxlIHR5cGU9InRleHQvY3NzIj48L3N0eWxlPjwvZGVmcz48cGF0aCBkPSJNODUxLjE3MTU1NiA3MTcuOTM3Nzc4YzMuMjQyNjY3IDExLjk0NjY2NyAyLjg0NDQ0NCAyNC40NjIyMjItMS40MjIyMjMgMzYuNDA4ODg5YTYyLjkxOTExMSA2Mi45MTkxMTEgMCAwIDEtMjEuOTU5MTExIDI5LjUyNTMzMyA2NS4yNTE1NTYgNjUuMjUxNTU2IDAgMCAxLTM4LjkxMiAxMi41MTU1NTZIMTc4LjExOTExMWE2NC44NTMzMzMgNjQuODUzMzMzIDAgMCAxLTM4Ljc5ODIyMi0xMi41NzI0NDUgNjIuMjM2NDQ0IDYyLjIzNjQ0NCAwIDAgMS0yMi4wMTYtMjkuNTI1MzMzIDYwLjY0MzU1NiA2MC42NDM1NTYgMCAwIDEtMS4zNjUzMzMtMzYuNDA4ODg5YzMuNTg0LTEzLjE0MTMzMyAxMS40MzQ2NjctMjQuNTc2IDIyLjY5ODY2Ni0zMy4xMDkzMzNsNTguNDgxNzc4LTQ0LjAzMmE0MC43MzI0NDQgNDAuNzMyNDQ0IDAgMCAwIDE2LjQ5Nzc3OC0zMi43MTExMTJ2LTIwMy4wOTMzMzNjMC0zNS4yMTQyMjIgNy4xNjgtNjkuNTE4MjIyIDIxLjIxOTU1NS0xMDEuNzE3MzMzIDEzLjY1MzMzMy0zMS4xNzUxMTEgMzMuMTA5MzMzLTU5LjE2NDQ0NCA1Ny44NTYtODMuMTE0NjY3QTI2OC44NTY4ODkgMjY4Ljg1Njg4OSAwIDAgMSA0MTQuNzIgMTUyLjA2NHYtMjguNTAxMzMzQzQxNC43MiA4Ni44MTI0NDQgNDQ1LjYxMDY2NyA1Ni44ODg4ODkgNDgzLjU1NTU1NiA1Ni44ODg4ODljMzcuOTQ0ODg5IDAgNjguODM1NTU2IDI5LjkyMzU1NiA2OC44MzU1NTUgNjYuNjczNzc4djI4LjUwMTMzM2MxMi4zNDQ4ODkgMy4xODU3NzggMjQuNDYyMjIyIDcuMTY4IDM2LjIzODIyMiAxMi4wMDM1NTZhMjY4LjY4NjIyMiAyNjguNjg2MjIyIDAgMCAxIDg1Ljc4ODQ0NSA1Ni4wMzU1NTVjMjQuNzQ2NjY3IDI0LjAwNzExMSA0NC4yMDI2NjcgNTEuOTM5NTU2IDU3Ljc5OTExMSA4My4wNTc3NzggMTQuMTA4NDQ0IDMyLjMxMjg4OSAyMS4yMTk1NTYgNjYuNTYgMjEuMjE5NTU1IDEwMS44MzExMTF2MjAzLjA5MzMzM2MwIDEyLjg1Njg4OSA2LjAzMDIyMiAyNC44NjA0NDQgMTYuNTU0NjY3IDMyLjcxMTExMWw1OC40ODE3NzggNDQuMDMyYzExLjIwNzExMSA4LjUzMzMzMyAxOS4wNTc3NzggMTkuOTExMTExIDIyLjc1NTU1NSAzMy4wNTI0NDV6TTM5OC4yMjIyMjIgODU2LjE3Nzc3OFY4NTMuMzMzMzMzaDE3MC42NjY2Njd2Mi44NDQ0NDVDNTY4Ljg4ODg4OSA5MzUuOTM2IDUzMC42MDI2NjcgOTY3LjExMTExMSA0ODMuNTU1NTU2IDk2Ny4xMTExMTFTMzk4LjIyMjIyMiA5MzUuOTM2IDM5OC4yMjIyMjIgODU2LjE3Nzc3OHoiIHAtaWQ9IjM1MzMiIGZpbGw9IiNmZmZmZmYiPjwvcGF0aD48L3N2Zz4=") no-repeat 50% 50%;
+    background-size: 85%;
+}
+
+.iziToast.iziToast-theme-dark .iziToast-icon.ico-warning {
+    background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTQxNjUxMTE1OTQ4IiBjbGFzcz0iaWNvbiIgc3R5bGU9IiIgdmlld0JveD0iMCAwIDEwMjUgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjUwOTYiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTI4LjEyNSIgaGVpZ2h0PSIxMjgiPjxkZWZzPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PC9zdHlsZT48L2RlZnM+PHBhdGggZD0iTTk4NC4wMjI5NTAwMiA3NDYuODc1NDk3NUw2NDEuOTY0NjA3NTIgMTMwLjM4MDY1Yy0zMC40OTE4NDI1LTU0Ljg2MTUwMjUtNzcuOTMxMzE1LTg2LjMzNTY3MjUtMTMwLjE0MzUxLTg2LjMzNTY3MjUtNTIuMjkxNTc1IDAtOTkuNzQwOTcgMzEuNTEzODYtMTMwLjE0MzUxIDg2LjQzNDg5NzVMMzkuOTc2NDU1MDIgNzQ2LjgyNTg4NUM5Ljk2MDg5MjUyIDgwMC45NjMwNDUgNy45MTY4NTc1MiA4NTguMDE3NDIgMzQuMzUwMzk3NTIgOTAzLjM1MzMyMjVjMjYuNTEyOTIgNDUuNDc0ODE3NSA3Ny4xOTcwNSA3MS41NjEwNyAxMzkuMDczNzYgNzEuNTYxMDdoNjc3LjIyMDU0NzVjNjEuOTA2NDc3NSAwIDExMi41OTA2MDc1LTI2LjA4NjI1MjUgMTM5LjAxNDIyNS03MS40OTE2MTI1IDI2LjQ4MzE1MjUtNDUuMjc2MzY3NSAyNC40MjkxOTUtMTAyLjM0MDY2NS01LjYzNTk4LTE1Ni41NDcyODI1ek05MTEuNzU3MzgyNTIgODU3Ljk5NzU3NWMtOS44OTI3MzI1IDE2Ljk4NzMyLTMyLjE1ODgyMjUgMjYuNzMxMjE1LTYxLjExMjY3NzUgMjYuNzMxMjE1SDE3My40MjQxNTc1MmMtMjguOTQzOTMyNSAwLTUxLjIyOTg2NzUtOS43NjM3NC02MS4xNjIyOS0yNi43OTA3NS0xMC4wMjE3MjUtMTcuMTg1NzctNy42MTA1NTc1LTQxLjc0Mzk1NzUgNi41ODg1NC02Ny4zNzM3NzVsMzQxLjcxMTA1NS02MTYuMzY1ODU1YzE0LjA2MDE4MjUtMjUuMzkxNjc3NSAzMi43NTQxNzI1LTM5Ljk1NzkwNzUgNTEuMjU5NjM1LTM5Ljk1NzkwNzUgMTguNDk1NTQgMCAzNy4xOTk0NTI1IDE0LjU2NjIzIDUxLjMwOTI0NzUgMzkuOTM4MDYyNWwzNDIuMDI4NTc1IDYxNi40NDUyMzVjMTQuMjI4ODY1IDI1LjY0OTY2MjUgMTYuNjQwMDMyNSA1MC4xODgwMDUgNi41OTg0NjI1IDY3LjM3Mzc3NXoiIGZpbGw9IiNmZmZmZmYiIHAtaWQ9IjUwOTciPjwvcGF0aD48cGF0aCBkPSJNNTEyLjAxOTU0NzUyIDYzMC4yODYxMjI1YTQ1LjA4Nzg0IDQ1LjA4Nzg0IDAgMCAwIDQ1LjA5Nzc2MjUtNDUuMDA4NDZWMzc0LjY1Mjc1NWE0NS4wNzc5MTc1IDQ1LjA3NzkxNzUgMCAwIDAtNDUuMDk3NzYyNS00NS4wMDg0NiA0NS4wODc4NCA0NS4wODc4NCAwIDAgMC00NS4wOTc3NjI1IDQ1LjAwODQ2djIxMC42MTQ5ODVhNDUuMDg3ODQgNDUuMDg3ODQgMCAwIDAgNDUuMDk3NzYyNSA0NS4wMTgzODI1ek01MTIuMDE5NTQ3NTIgNjc1LjM3Mzk2MjVhNjAuMTcwMDQgNjAuMTcwMDQgMCAwIDAtNjAuMTMwMzUgNjAuMTMwMzVjMCAzMy4xNDExNSAyNi45MTk3NDI1IDYwLjEzMDM1IDYwLjEzMDM1IDYwLjEzMDM1IDMzLjE0MTE1IDAgNjAuMTMwMzUtMjYuOTE5NzQyNSA2MC4xMzAzNS02MC4xMzAzNSAwLTMzLjE0MTE1LTI2LjkxOTc0MjUtNjAuMTMwMzUtNjAuMTMwMzUtNjAuMTMwMzV6IiBmaWxsPSIjZmZmZmZmIiBwLWlkPSI1MDk4Ij48L3BhdGg+PC9zdmc+") no-repeat 50% 50%;
+    background-size: 85%;
+}
+
+.iziToast.iziToast-theme-dark .iziToast-icon.ico-error {
+    background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTQxNjUxMzE1NTQ3IiBjbGFzcz0iaWNvbiIgc3R5bGU9IiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjY4MDYiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCI+PGRlZnM+PHN0eWxlIHR5cGU9InRleHQvY3NzIj48L3N0eWxlPjwvZGVmcz48cGF0aCBkPSJNNzcyLjI2NjY2NyA4ODMuMmMyNS42IDI1LjYgNjQgMjUuNiA4OS42IDAgMjUuNi0yNS42IDI1LjYtNjQgMC04OS42TDIzMC40IDE2Mi4xMzMzMzNjLTI1LjYtMjUuNi02NC0yNS42LTg5LjYgMC0yNS42IDI1LjYtMjUuNiA2NCAwIDg5LjZsNjMxLjQ2NjY2NyA2MzEuNDY2NjY3eiIgcC1pZD0iNjgwNyIgZmlsbD0iI2ZmZmZmZiI+PC9wYXRoPjxwYXRoIGQ9Ik04NjEuODY2NjY3IDI1MS43MzMzMzNjMjUuNi0yNS42IDI1LjYtNjQgMC04OS42LTI1LjYtMjUuNi02NC0yNS42LTg5LjYgMEwxNDAuOCA3OTMuNmMtMjUuNiAyNS42LTI1LjYgNjQgMCA4OS42czY0IDI1LjYgODkuNiAwbDYzMS40NjY2NjctNjMxLjQ2NjY2N3oiIHAtaWQ9IjY4MDgiIGZpbGw9IiNmZmZmZmYiPjwvcGF0aD48L3N2Zz4=") no-repeat 50% 50%;
+    background-size: 80%;
+}
+
+.iziToast.iziToast-theme-dark .iziToast-icon.ico-success {
+    background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTQxNjUxMjQyNTMxIiBjbGFzcz0iaWNvbiIgc3R5bGU9IiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjYwMjMiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCI+PGRlZnM+PHN0eWxlIHR5cGU9InRleHQvY3NzIj48L3N0eWxlPjwvZGVmcz48cGF0aCBkPSJNNDA0LjI1MTQyOCA4MDkuNjEwN2MtMTEuNjY0MTAyIDAtMjMuMzI3MTc5LTQuNDQ4NzgyLTMyLjIyNTc2Ny0xMy4zNDczNjlMODMuOTgwMDk4IDUwOC4yMTk4MTVjLTE3Ljc5ODE5OS0xNy43OTcxNzUtMTcuNzk4MTk5LTQ2LjY1MzMzNSAwLTY0LjQ1MTUzM3M0Ni42NTMzMzUtMTcuNzk4MTk5IDY0LjQ1MTUzNCAwbDI4OC4wNDQ1MzkgMjg4LjA0MjQ5MWMxNy43OTgxOTkgMTcuNzk4MTk5IDE3Ljc5ODE5OSA0Ni42NTQzNTkgMCA2NC40NTI1NTgtOC44OTc1NjMgOC44OTg1ODctMjAuNTYxNjY1IDEzLjM0NzM2OS0zMi4yMjQ3NDMgMTMuMzQ3MzY5eiIgcC1pZD0iNjAyNCIgZmlsbD0iI2ZmZmZmZiI+PC9wYXRoPjxwYXRoIGQ9Ik00MDQuMjczOTUzIDgwOS42MTE3MjNjLTExLjY2NDEwMiAwLTIzLjMyNjE1NS00LjQ0OTgwNi0zMi4yMjU3NjYtMTMuMzQ4MzkyLTE3Ljc5ODE5OS0xNy43OTcxNzUtMTcuNzk5MjIyLTQ2LjY1MzMzNS0wLjAwMTAyNC02NC40NTE1MzRMODc2LjEwMTgxMyAyMjcuNzM1NjQ2YzE3Ljc5NjE1MS0xNy43OTgxOTkgNDYuNjUzMzM1LTE3Ljc5OTIyMiA2NC40NTE1MzMtMC4wMDEwMjQgMTcuNzk4MTk5IDE3Ljc5NzE3NSAxNy43OTkyMjIgNDYuNjUzMzM1IDAuMDAxMDI0IDY0LjQ1MTUzM0w0MzYuNTAwNzQ0IDc5Ni4yNjIzMDdjLTguODk4NTg3IDguODk4NTg3LTIwLjU2MjY4OSAxMy4zNDk0MTctMzIuMjI2NzkxIDEzLjM0OTQxNnoiIHAtaWQ9IjYwMjUiIGZpbGw9IiNmZmZmZmYiPjwvcGF0aD48L3N2Zz4=") no-repeat 50% 50%;
+    background-size: 85%;
+}
+
+.iziToast.iziToast-theme-dark .iziToast-icon.ico-question {
+    background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAQAAAAAYLlVAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QAAKqNIzIAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfhCQkUEg18vki+AAAETUlEQVRo3s1ZTWhbRxD+VlIuxsLFCYVIIQYVopBDoK5bKDWUBupDMNbJ5FBKg/FBziUQdE9yaC+FHBrwsdCfQ9RTGoLxwWl+DqHEojUFFydxnB9bInZDqOsErBrr6yGvs/ueX97bldTKo4Pe7puZb3Z33s7srIIjMY1jyCEjP6ImvyX8pF64arSHznKC06wzijY5xSKz7YbuYokV2lODsyyxqz3gSY6z6gCuqcpxJluFH+Z8U+D/0jyHoxFUBHgfvsGHIS9WMIUlVFFDFTUAGWSRQRY5HMeBEP6b+Ew9dh/7INd2jGeO59kfKdXP85zbIbfGQVf4sYC3N1hm3lo6zzIbPvk6x+zBk7wQGMEMB5xncIAzAS0XrFySSV72iS1yyBVcdA1x0afrsoUJgdFfY2+z8ADAXl7zz0KcwJiPfZKpVuABgClO+nRG+QIHDdfb4qlWwUXvKW4Z7vi6L4J9vg+vbfCeCeZH2RfOdMOc/HbCA4BvIW6EMQz7XK/ltd+hP+VzR9mgva2YSfyGI17fA7ynnocqeQNFfIJ0oHsdv6CC2+rXGBN6cQdveY3fcVRtmy/HDete+93zy8jA8zV7YkwYMrjHzRddRsCdiVCwwmh6wg9iTNC7Y9XIF1iS7kbUpsvvGEdPuTfSgAEjRpR096x0liPFD/Eqt2NMuBQzB2XhrACAApjFsuQFh9XdGAX70B3oSuNdnMVBaX+sopYxjwVpHFBVACyKTXNoktjD+6Ll8xhenS9MAAkAI/Lux2YNUOs4I413Ypg1SgEAu7kpFvWjaeJe0fJHDGe/cNaZBkekudw8PMA+0fMwlndZeAsJ5KR/qhUDUJCnSiyvRsolkJHGUgvjH8QXDgZopEzKMKDqCKrwEQ4C6MH7GEXC665buLJG8hlQc4LP4paxfJrOqYVYYY2UARfEIazTbgDg2dB98GebzJd54b8L/iWNdLyooeR6CHyZ+6xk0yKxkYg6nEVSUG4VJ9QJ9cxRCxO+9WiOyvgUeexXP1hLGH5nGuBWVtiSp4vqe3VP0UFWI9Wan4Er3v8q7jjPWVtm4FtcQQMrOKO2nOQCM5AyDMi56FDrKHA/1nyppS1ppBpYaE8wciEjGI2AaeM41kI4doDX4XiT3Qm1gevyruCgZg9P8xIv8m1nCzTKq6oiJ9xTMiZ505P5m8cdZ0CnZMVXHVljM7WMBzxpyDxygtdxoCEFTaMIWbZU85UvBjgUMYy0fBaAF8V1Lj9qWQ1aMZ5f4k9r+AGMSkMP1vZoZih6k6sicc5h/OFHM9vDqU/VIU7zJZdYYsKGH4g4nAJMGiXZRds1pVMoZ69RM5vfkbh0qkBhsnS2RLMLilQdL9MBHS9UAh0v1e6CYnXHy/WeeCcvLDwl/9OVze69tPKM+M+v7eJN6OzFpWdEF0ucDbhVNFXadnVrmJFlkVNGTS2M6pzmhMvltfPhnN2B63sVuL7fcNP3D1TSk2ihosPrAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE3LTA5LTA5VDIwOjE4OjEzKzAyOjAweOR7nQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNy0wOS0wOVQyMDoxODoxMyswMjowMAm5wyEAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAAAAElFTkSuQmCC") no-repeat 50% 50%;
+    background-size: 85%;
+}
+
+.iziToast.iziToast-theme-dark .iziToast-buttons > a,
+.iziToast.iziToast-theme-dark .iziToast-buttons > button,
+.iziToast.iziToast-theme-dark .iziToast-buttons > input {
+    color: #fff;
+    background: rgba(255, 255, 255, 0.1);
+}
+
+.iziToast.iziToast-theme-dark .iziToast-buttons > a:hover,
+.iziToast.iziToast-theme-dark .iziToast-buttons > button:hover,
+.iziToast.iziToast-theme-dark .iziToast-buttons > input:hover {
+    background: rgba(255, 255, 255, 0.2);
+}
+
+.iziToast.iziToast-theme-dark .iziToast-buttons > a:focus,
+.iziToast.iziToast-theme-dark .iziToast-buttons > button:focus,
+.iziToast.iziToast-theme-dark .iziToast-buttons > input:focus {
+    box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.6);
+}
+
+.iziToast.iziToast-theme-dark.iziToast-color-red {
+    background: #F56C6C;
+    border-color: #F56C6C;
+}
+
+.iziToast.iziToast-theme-dark.iziToast-color-orange {
+    background: #E6A23C;
+    border-color: #E6A23C;
+}
+
+.iziToast.iziToast-theme-dark.iziToast-color-yellow {
+    background: rgba(255, 249, 178, 0.9);
+    border-color: rgba(255, 249, 178, 0.9);
+}
+
+.iziToast.iziToast-theme-dark.iziToast-color-blue {
+    background: #409EFF;
+    border-color: #409EFF;
+}
+
+.iziToast.iziToast-theme-dark.iziToast-color-green {
+    background: #67C23A;
+    border-color: #67C23A;
+}
+
+.iziToast.iziToast-layout2 .iziToast-body .iziToast-texts,
+.iziToast.iziToast-layout2 .iziToast-body .iziToast-message {
+    width: 100%;
+}
+
+.iziToast.iziToast-layout3 {
+    border-radius: 2px;
+}
+
+.iziToast.iziToast-layout3::after {
+    display: none;
+}
+
+.iziToast.revealIn,
+.iziToast .revealIn {
+    -webkit-animation: iziT-revealIn 1s cubic-bezier(0.25, 1.6, 0.25, 1) both;
+    -moz-animation: iziT-revealIn 1s cubic-bezier(0.25, 1.6, 0.25, 1) both;
+    animation: iziT-revealIn 1s cubic-bezier(0.25, 1.6, 0.25, 1) both;
+}
+
+.iziToast.slideIn,
+.iziToast .slideIn {
+    -webkit-animation: iziT-slideIn 1s cubic-bezier(0.16, 0.81, 0.32, 1) both;
+    -moz-animation: iziT-slideIn 1s cubic-bezier(0.16, 0.81, 0.32, 1) both;
+    animation: iziT-slideIn 1s cubic-bezier(0.16, 0.81, 0.32, 1) both;
+}
+
+.iziToast.bounceInLeft {
+    -webkit-animation: iziT-bounceInLeft 0.7s ease-in-out both;
+    animation: iziT-bounceInLeft 0.7s ease-in-out both;
+}
+
+.iziToast.bounceInRight {
+    -webkit-animation: iziT-bounceInRight 0.85s ease-in-out both;
+    animation: iziT-bounceInRight 0.85s ease-in-out both;
+}
+
+.iziToast.bounceInDown {
+    -webkit-animation: iziT-bounceInDown 0.7s ease-in-out both;
+    animation: iziT-bounceInDown 0.7s ease-in-out both;
+}
+
+.iziToast.bounceInUp {
+    -webkit-animation: iziT-bounceInUp 0.7s ease-in-out both;
+    animation: iziT-bounceInUp 0.7s ease-in-out both;
+}
+
+.iziToast.fadeIn,
+.iziToast .fadeIn {
+    -webkit-animation: iziT-fadeIn 0.5s ease both;
+    animation: iziT-fadeIn 0.5s ease both;
+}
+
+.iziToast.fadeInUp {
+    -webkit-animation: iziT-fadeInUp 0.7s ease both;
+    animation: iziT-fadeInUp 0.7s ease both;
+}
+
+.iziToast.fadeInDown {
+    -webkit-animation: iziT-fadeInDown 0.7s ease both;
+    animation: iziT-fadeInDown 0.7s ease both;
+}
+
+.iziToast.fadeInLeft {
+    -webkit-animation: iziT-fadeInLeft 0.85s cubic-bezier(0.25, 0.8, 0.25, 1) both;
+    animation: iziT-fadeInLeft 0.85s cubic-bezier(0.25, 0.8, 0.25, 1) both;
+}
+
+.iziToast.fadeInRight {
+    -webkit-animation: iziT-fadeInRight 0.85s cubic-bezier(0.25, 0.8, 0.25, 1) both;
+    animation: iziT-fadeInRight 0.85s cubic-bezier(0.25, 0.8, 0.25, 1) both;
+}
+
+.iziToast.flipInX {
+    -webkit-animation: iziT-flipInX 0.85s cubic-bezier(0.35, 0, 0.25, 1) both;
+    animation: iziT-flipInX 0.85s cubic-bezier(0.35, 0, 0.25, 1) both;
+}
+
+.iziToast.fadeOut {
+    -webkit-animation: iziT-fadeOut 0.7s ease both;
+    animation: iziT-fadeOut 0.7s ease both;
+}
+
+.iziToast.fadeOutDown {
+    -webkit-animation: iziT-fadeOutDown 0.7s cubic-bezier(0.4, 0.45, 0.15, 0.91) both;
+    animation: iziT-fadeOutDown 0.7s cubic-bezier(0.4, 0.45, 0.15, 0.91) both;
+}
+
+.iziToast.fadeOutUp {
+    -webkit-animation: iziT-fadeOutUp 0.7s cubic-bezier(0.4, 0.45, 0.15, 0.91) both;
+    animation: iziT-fadeOutUp 0.7s cubic-bezier(0.4, 0.45, 0.15, 0.91) both;
+}
+
+.iziToast.fadeOutLeft {
+    -webkit-animation: iziT-fadeOutLeft 0.5s ease both;
+    animation: iziT-fadeOutLeft 0.5s ease both;
+}
+
+.iziToast.fadeOutRight {
+    -webkit-animation: iziT-fadeOutRight 0.5s ease both;
+    animation: iziT-fadeOutRight 0.5s ease both;
+}
+
+.iziToast.flipOutX {
+    -webkit-backface-visibility: visible !important;
+    backface-visibility: visible !important;
+    -webkit-animation: iziT-flipOutX 0.7s cubic-bezier(0.4, 0.45, 0.15, 0.91) both;
+    animation: iziT-flipOutX 0.7s cubic-bezier(0.4, 0.45, 0.15, 0.91) both;
+}
+
+.iziToast-overlay.fadeIn {
+    -webkit-animation: iziT-fadeIn 0.5s ease both;
+    animation: iziT-fadeIn 0.5s ease both;
+}
+
+.iziToast-overlay.fadeOut {
+    -webkit-animation: iziT-fadeOut 0.7s ease both;
+    animation: iziT-fadeOut 0.7s ease both;
+}
+
+@-webkit-keyframes iziT-revealIn {
+    0% {
+        opacity: 0;
+        -webkit-transform: scale3d(0.3, 0.3, 1);
+    }
+    100% {
+        opacity: 1;
+    }
+}
+
+@-moz-keyframes iziT-revealIn {
+    0% {
+        opacity: 0;
+        -moz-transform: scale3d(0.3, 0.3, 1);
+    }
+    100% {
+        opacity: 1;
+    }
+}
+
+@-webkit-keyframes iziT-slideIn {
+    0% {
+        opacity: 0;
+        -webkit-transform: translateX(50px);
+    }
+    100% {
+        opacity: 1;
+        -webkit-transform: translateX(0);
+    }
+}
+
+@-moz-keyframes iziT-slideIn {
+    0% {
+        opacity: 0;
+        -moz-transform: translateX(50px);
+    }
+    100% {
+        opacity: 1;
+        -moz-transform: translateX(0);
+    }
+}
+
+@-webkit-keyframes iziT-bounceInLeft {
+    0% {
+        opacity: 0;
+        -webkit-transform: translateX(280px);
+    }
+    50% {
+        opacity: 1;
+        -webkit-transform: translateX(-20px);
+    }
+    70% {
+        -webkit-transform: translateX(10px);
+    }
+    100% {
+        -webkit-transform: translateX(0);
+    }
+}
+
+@-webkit-keyframes iziT-bounceInRight {
+    0% {
+        opacity: 0;
+        -webkit-transform: translateX(-280px);
+    }
+    50% {
+        opacity: 1;
+        -webkit-transform: translateX(20px);
+    }
+    70% {
+        -webkit-transform: translateX(-10px);
+    }
+    100% {
+        -webkit-transform: translateX(0);
+    }
+}
+
+@-webkit-keyframes iziT-bounceInDown {
+    0% {
+        opacity: 0;
+        -webkit-transform: translateY(-200px);
+    }
+    50% {
+        opacity: 1;
+        -webkit-transform: translateY(10px);
+    }
+    70% {
+        -webkit-transform: translateY(-5px);
+    }
+    100% {
+        -webkit-transform: translateY(0);
+    }
+}
+
+@-webkit-keyframes iziT-bounceInUp {
+    0% {
+        opacity: 0;
+        -webkit-transform: translateY(200px);
+    }
+    50% {
+        opacity: 1;
+        -webkit-transform: translateY(-10px);
+    }
+    70% {
+        -webkit-transform: translateY(5px);
+    }
+    100% {
+        -webkit-transform: translateY(0);
+    }
+}
+
+@-webkit-keyframes iziT-fadeIn {
+    from {
+        opacity: 0;
+    }
+    to {
+        opacity: 1;
+    }
+}
+
+@-webkit-keyframes iziT-fadeInUp {
+    from {
+        opacity: 0;
+        -webkit-transform: translate3d(0, 100%, 0);
+        transform: translate3d(0, 100%, 0);
+    }
+    to {
+        opacity: 1;
+        -webkit-transform: none;
+        transform: none;
+    }
+}
+
+@-webkit-keyframes iziT-fadeInDown {
+    from {
+        opacity: 0;
+        -webkit-transform: translate3d(0, -100%, 0);
+        transform: translate3d(0, -100%, 0);
+    }
+    to {
+        opacity: 1;
+        -webkit-transform: none;
+        transform: none;
+    }
+}
+
+@-webkit-keyframes iziT-fadeInLeft {
+    from {
+        opacity: 0;
+        -webkit-transform: translate3d(300px, 0, 0);
+        transform: translate3d(300px, 0, 0);
+    }
+    to {
+        opacity: 1;
+        -webkit-transform: none;
+        transform: none;
+    }
+}
+
+@-webkit-keyframes iziT-fadeInRight {
+    from {
+        opacity: 0;
+        -webkit-transform: translate3d(-300px, 0, 0);
+        transform: translate3d(-300px, 0, 0);
+    }
+    to {
+        opacity: 1;
+        -webkit-transform: none;
+        transform: none;
+    }
+}
+
+@-webkit-keyframes iziT-flipInX {
+    from {
+        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+        transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+        opacity: 0;
+    }
+    40% {
+        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+        transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    }
+    60% {
+        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+        transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+        opacity: 1;
+    }
+    80% {
+        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+        transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+    }
+    to {
+        -webkit-transform: perspective(400px);
+        transform: perspective(400px);
+    }
+}
+
+@-webkit-keyframes iziT-fadeOut {
+    from {
+        opacity: 1;
+    }
+    to {
+        opacity: 0;
+    }
+}
+
+@-webkit-keyframes iziT-fadeOutDown {
+    from {
+        opacity: 1;
+    }
+    to {
+        opacity: 0;
+        -webkit-transform: translate3d(0, 100%, 0);
+        transform: translate3d(0, 100%, 0);
+    }
+}
+
+@-webkit-keyframes iziT-fadeOutUp {
+    from {
+        opacity: 1;
+    }
+    to {
+        opacity: 0;
+        -webkit-transform: translate3d(0, -100%, 0);
+        transform: translate3d(0, -100%, 0);
+    }
+}
+
+@-webkit-keyframes iziT-fadeOutLeft {
+    from {
+        opacity: 1;
+    }
+    to {
+        opacity: 0;
+        -webkit-transform: translate3d(-200px, 0, 0);
+        transform: translate3d(-200px, 0, 0);
+    }
+}
+
+@-webkit-keyframes iziT-fadeOutRight {
+    from {
+        opacity: 1;
+    }
+    to {
+        opacity: 0;
+        -webkit-transform: translate3d(200px, 0, 0);
+        transform: translate3d(200px, 0, 0);
+    }
+}
+
+@-webkit-keyframes iziT-flipOutX {
+    from {
+        -webkit-transform: perspective(400px);
+        transform: perspective(400px);
+    }
+    30% {
+        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+        transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+        opacity: 1;
+    }
+    to {
+        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+        transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+        opacity: 0;
+    }
+}
+
+@-moz-keyframes iziT-revealIn {
+    0% {
+        opacity: 0;
+        transform: scale3d(0.3, 0.3, 1);
+    }
+    100% {
+        opacity: 1;
+    }
+}
+
+@-webkit-keyframes iziT-revealIn {
+    0% {
+        opacity: 0;
+        transform: scale3d(0.3, 0.3, 1);
+    }
+    100% {
+        opacity: 1;
+    }
+}
+
+@-o-keyframes iziT-revealIn {
+    0% {
+        opacity: 0;
+        transform: scale3d(0.3, 0.3, 1);
+    }
+    100% {
+        opacity: 1;
+    }
+}
+
+@keyframes iziT-revealIn {
+    0% {
+        opacity: 0;
+        transform: scale3d(0.3, 0.3, 1);
+    }
+    100% {
+        opacity: 1;
+    }
+}
+
+@-moz-keyframes iziT-slideIn {
+    0% {
+        opacity: 0;
+        transform: translateX(50px);
+    }
+    100% {
+        opacity: 1;
+        transform: translateX(0);
+    }
+}
+
+@-webkit-keyframes iziT-slideIn {
+    0% {
+        opacity: 0;
+        transform: translateX(50px);
+    }
+    100% {
+        opacity: 1;
+        transform: translateX(0);
+    }
+}
+
+@-o-keyframes iziT-slideIn {
+    0% {
+        opacity: 0;
+        transform: translateX(50px);
+    }
+    100% {
+        opacity: 1;
+        transform: translateX(0);
+    }
+}
+
+@keyframes iziT-slideIn {
+    0% {
+        opacity: 0;
+        transform: translateX(50px);
+    }
+    100% {
+        opacity: 1;
+        transform: translateX(0);
+    }
+}
+
+@-moz-keyframes iziT-bounceInLeft {
+    0% {
+        opacity: 0;
+        transform: translateX(280px);
+    }
+    50% {
+        opacity: 1;
+        transform: translateX(-20px);
+    }
+    70% {
+        transform: translateX(10px);
+    }
+    100% {
+        transform: translateX(0);
+    }
+}
+
+@-webkit-keyframes iziT-bounceInLeft {
+    0% {
+        opacity: 0;
+        transform: translateX(280px);
+    }
+    50% {
+        opacity: 1;
+        transform: translateX(-20px);
+    }
+    70% {
+        transform: translateX(10px);
+    }
+    100% {
+        transform: translateX(0);
+    }
+}
+
+@-o-keyframes iziT-bounceInLeft {
+    0% {
+        opacity: 0;
+        transform: translateX(280px);
+    }
+    50% {
+        opacity: 1;
+        transform: translateX(-20px);
+    }
+    70% {
+        transform: translateX(10px);
+    }
+    100% {
+        transform: translateX(0);
+    }
+}
+
+@keyframes iziT-bounceInLeft {
+    0% {
+        opacity: 0;
+        transform: translateX(280px);
+    }
+    50% {
+        opacity: 1;
+        transform: translateX(-20px);
+    }
+    70% {
+        transform: translateX(10px);
+    }
+    100% {
+        transform: translateX(0);
+    }
+}
+
+@-moz-keyframes iziT-bounceInRight {
+    0% {
+        opacity: 0;
+        transform: translateX(-280px);
+    }
+    50% {
+        opacity: 1;
+        transform: translateX(20px);
+    }
+    70% {
+        transform: translateX(-10px);
+    }
+    100% {
+        transform: translateX(0);
+    }
+}
+
+@-webkit-keyframes iziT-bounceInRight {
+    0% {
+        opacity: 0;
+        transform: translateX(-280px);
+    }
+    50% {
+        opacity: 1;
+        transform: translateX(20px);
+    }
+    70% {
+        transform: translateX(-10px);
+    }
+    100% {
+        transform: translateX(0);
+    }
+}
+
+@-o-keyframes iziT-bounceInRight {
+    0% {
+        opacity: 0;
+        transform: translateX(-280px);
+    }
+    50% {
+        opacity: 1;
+        transform: translateX(20px);
+    }
+    70% {
+        transform: translateX(-10px);
+    }
+    100% {
+        transform: translateX(0);
+    }
+}
+
+@keyframes iziT-bounceInRight {
+    0% {
+        opacity: 0;
+        transform: translateX(-280px);
+    }
+    50% {
+        opacity: 1;
+        transform: translateX(20px);
+    }
+    70% {
+        transform: translateX(-10px);
+    }
+    100% {
+        transform: translateX(0);
+    }
+}
+
+@-moz-keyframes iziT-bounceInDown {
+    0% {
+        opacity: 0;
+        transform: translateY(-200px);
+    }
+    50% {
+        opacity: 1;
+        transform: translateY(10px);
+    }
+    70% {
+        transform: translateY(-5px);
+    }
+    100% {
+        transform: translateY(0);
+    }
+}
+
+@-webkit-keyframes iziT-bounceInDown {
+    0% {
+        opacity: 0;
+        transform: translateY(-200px);
+    }
+    50% {
+        opacity: 1;
+        transform: translateY(10px);
+    }
+    70% {
+        transform: translateY(-5px);
+    }
+    100% {
+        transform: translateY(0);
+    }
+}
+
+@-o-keyframes iziT-bounceInDown {
+    0% {
+        opacity: 0;
+        transform: translateY(-200px);
+    }
+    50% {
+        opacity: 1;
+        transform: translateY(10px);
+    }
+    70% {
+        transform: translateY(-5px);
+    }
+    100% {
+        transform: translateY(0);
+    }
+}
+
+@keyframes iziT-bounceInDown {
+    0% {
+        opacity: 0;
+        transform: translateY(-200px);
+    }
+    50% {
+        opacity: 1;
+        transform: translateY(10px);
+    }
+    70% {
+        transform: translateY(-5px);
+    }
+    100% {
+        transform: translateY(0);
+    }
+}
+
+@-moz-keyframes iziT-bounceInUp {
+    0% {
+        opacity: 0;
+        transform: translateY(200px);
+    }
+    50% {
+        opacity: 1;
+        transform: translateY(-10px);
+    }
+    70% {
+        transform: translateY(5px);
+    }
+    100% {
+        transform: translateY(0);
+    }
+}
+
+@-webkit-keyframes iziT-bounceInUp {
+    0% {
+        opacity: 0;
+        transform: translateY(200px);
+    }
+    50% {
+        opacity: 1;
+        transform: translateY(-10px);
+    }
+    70% {
+        transform: translateY(5px);
+    }
+    100% {
+        transform: translateY(0);
+    }
+}
+
+@-o-keyframes iziT-bounceInUp {
+    0% {
+        opacity: 0;
+        transform: translateY(200px);
+    }
+    50% {
+        opacity: 1;
+        transform: translateY(-10px);
+    }
+    70% {
+        transform: translateY(5px);
+    }
+    100% {
+        transform: translateY(0);
+    }
+}
+
+@keyframes iziT-bounceInUp {
+    0% {
+        opacity: 0;
+        transform: translateY(200px);
+    }
+    50% {
+        opacity: 1;
+        transform: translateY(-10px);
+    }
+    70% {
+        transform: translateY(5px);
+    }
+    100% {
+        transform: translateY(0);
+    }
+}
+
+@-moz-keyframes iziT-fadeIn {
+    from {
+        opacity: 0;
+    }
+    to {
+        opacity: 1;
+    }
+}
+
+@-webkit-keyframes iziT-fadeIn {
+    from {
+        opacity: 0;
+    }
+    to {
+        opacity: 1;
+    }
+}
+
+@-o-keyframes iziT-fadeIn {
+    from {
+        opacity: 0;
+    }
+    to {
+        opacity: 1;
+    }
+}
+
+@keyframes iziT-fadeIn {
+    from {
+        opacity: 0;
+    }
+    to {
+        opacity: 1;
+    }
+}
+
+@-moz-keyframes iziT-fadeInUp {
+    from {
+        opacity: 0;
+        -webkit-transform: translate3d(0, 100%, 0);
+        transform: translate3d(0, 100%, 0);
+    }
+    to {
+        opacity: 1;
+        -webkit-transform: none;
+        transform: none;
+    }
+}
+
+@-webkit-keyframes iziT-fadeInUp {
+    from {
+        opacity: 0;
+        -webkit-transform: translate3d(0, 100%, 0);
+        transform: translate3d(0, 100%, 0);
+    }
+    to {
+        opacity: 1;
+        -webkit-transform: none;
+        transform: none;
+    }
+}
+
+@-o-keyframes iziT-fadeInUp {
+    from {
+        opacity: 0;
+        -webkit-transform: translate3d(0, 100%, 0);
+        transform: translate3d(0, 100%, 0);
+    }
+    to {
+        opacity: 1;
+        -webkit-transform: none;
+        transform: none;
+    }
+}
+
+@keyframes iziT-fadeInUp {
+    from {
+        opacity: 0;
+        -webkit-transform: translate3d(0, 100%, 0);
+        transform: translate3d(0, 100%, 0);
+    }
+    to {
+        opacity: 1;
+        -webkit-transform: none;
+        transform: none;
+    }
+}
+
+@-moz-keyframes iziT-fadeInDown {
+    from {
+        opacity: 0;
+        -webkit-transform: translate3d(0, -100%, 0);
+        transform: translate3d(0, -100%, 0);
+    }
+    to {
+        opacity: 1;
+        -webkit-transform: none;
+        transform: none;
+    }
+}
+
+@-webkit-keyframes iziT-fadeInDown {
+    from {
+        opacity: 0;
+        -webkit-transform: translate3d(0, -100%, 0);
+        transform: translate3d(0, -100%, 0);
+    }
+    to {
+        opacity: 1;
+        -webkit-transform: none;
+        transform: none;
+    }
+}
+
+@-o-keyframes iziT-fadeInDown {
+    from {
+        opacity: 0;
+        -webkit-transform: translate3d(0, -100%, 0);
+        transform: translate3d(0, -100%, 0);
+    }
+    to {
+        opacity: 1;
+        -webkit-transform: none;
+        transform: none;
+    }
+}
+
+@keyframes iziT-fadeInDown {
+    from {
+        opacity: 0;
+        -webkit-transform: translate3d(0, -100%, 0);
+        transform: translate3d(0, -100%, 0);
+    }
+    to {
+        opacity: 1;
+        -webkit-transform: none;
+        transform: none;
+    }
+}
+
+@-moz-keyframes iziT-fadeInLeft {
+    from {
+        opacity: 0;
+        -webkit-transform: translate3d(300px, 0, 0);
+        transform: translate3d(300px, 0, 0);
+    }
+    to {
+        opacity: 1;
+        -webkit-transform: none;
+        transform: none;
+    }
+}
+
+@-webkit-keyframes iziT-fadeInLeft {
+    from {
+        opacity: 0;
+        -webkit-transform: translate3d(300px, 0, 0);
+        transform: translate3d(300px, 0, 0);
+    }
+    to {
+        opacity: 1;
+        -webkit-transform: none;
+        transform: none;
+    }
+}
+
+@-o-keyframes iziT-fadeInLeft {
+    from {
+        opacity: 0;
+        -webkit-transform: translate3d(300px, 0, 0);
+        transform: translate3d(300px, 0, 0);
+    }
+    to {
+        opacity: 1;
+        -webkit-transform: none;
+        transform: none;
+    }
+}
+
+@keyframes iziT-fadeInLeft {
+    from {
+        opacity: 0;
+        -webkit-transform: translate3d(300px, 0, 0);
+        transform: translate3d(300px, 0, 0);
+    }
+    to {
+        opacity: 1;
+        -webkit-transform: none;
+        transform: none;
+    }
+}
+
+@-moz-keyframes iziT-fadeInRight {
+    from {
+        opacity: 0;
+        -webkit-transform: translate3d(-300px, 0, 0);
+        transform: translate3d(-300px, 0, 0);
+    }
+    to {
+        opacity: 1;
+        -webkit-transform: none;
+        transform: none;
+    }
+}
+
+@-webkit-keyframes iziT-fadeInRight {
+    from {
+        opacity: 0;
+        -webkit-transform: translate3d(-300px, 0, 0);
+        transform: translate3d(-300px, 0, 0);
+    }
+    to {
+        opacity: 1;
+        -webkit-transform: none;
+        transform: none;
+    }
+}
+
+@-o-keyframes iziT-fadeInRight {
+    from {
+        opacity: 0;
+        -webkit-transform: translate3d(-300px, 0, 0);
+        transform: translate3d(-300px, 0, 0);
+    }
+    to {
+        opacity: 1;
+        -webkit-transform: none;
+        transform: none;
+    }
+}
+
+@keyframes iziT-fadeInRight {
+    from {
+        opacity: 0;
+        -webkit-transform: translate3d(-300px, 0, 0);
+        transform: translate3d(-300px, 0, 0);
+    }
+    to {
+        opacity: 1;
+        -webkit-transform: none;
+        transform: none;
+    }
+}
+
+@-moz-keyframes iziT-flipInX {
+    from {
+        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+        transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+        opacity: 0;
+    }
+    40% {
+        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+        transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    }
+    60% {
+        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+        transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+        opacity: 1;
+    }
+    80% {
+        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+        transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+    }
+    to {
+        -webkit-transform: perspective(400px);
+        transform: perspective(400px);
+    }
+}
+
+@-webkit-keyframes iziT-flipInX {
+    from {
+        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+        transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+        opacity: 0;
+    }
+    40% {
+        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+        transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    }
+    60% {
+        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+        transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+        opacity: 1;
+    }
+    80% {
+        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+        transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+    }
+    to {
+        -webkit-transform: perspective(400px);
+        transform: perspective(400px);
+    }
+}
+
+@-o-keyframes iziT-flipInX {
+    from {
+        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+        transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+        opacity: 0;
+    }
+    40% {
+        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+        transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    }
+    60% {
+        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+        transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+        opacity: 1;
+    }
+    80% {
+        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+        transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+    }
+    to {
+        -webkit-transform: perspective(400px);
+        transform: perspective(400px);
+    }
+}
+
+@keyframes iziT-flipInX {
+    from {
+        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+        transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+        opacity: 0;
+    }
+    40% {
+        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+        transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    }
+    60% {
+        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+        transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+        opacity: 1;
+    }
+    80% {
+        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+        transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+    }
+    to {
+        -webkit-transform: perspective(400px);
+        transform: perspective(400px);
+    }
+}
+
+@-moz-keyframes iziT-fadeOut {
+    from {
+        opacity: 1;
+    }
+    to {
+        opacity: 0;
+    }
+}
+
+@-webkit-keyframes iziT-fadeOut {
+    from {
+        opacity: 1;
+    }
+    to {
+        opacity: 0;
+    }
+}
+
+@-o-keyframes iziT-fadeOut {
+    from {
+        opacity: 1;
+    }
+    to {
+        opacity: 0;
+    }
+}
+
+@keyframes iziT-fadeOut {
+    from {
+        opacity: 1;
+    }
+    to {
+        opacity: 0;
+    }
+}
+
+@-moz-keyframes iziT-fadeOutDown {
+    from {
+        opacity: 1;
+    }
+    to {
+        opacity: 0;
+        -webkit-transform: translate3d(0, 100%, 0);
+        transform: translate3d(0, 100%, 0);
+    }
+}
+
+@-webkit-keyframes iziT-fadeOutDown {
+    from {
+        opacity: 1;
+    }
+    to {
+        opacity: 0;
+        -webkit-transform: translate3d(0, 100%, 0);
+        transform: translate3d(0, 100%, 0);
+    }
+}
+
+@-o-keyframes iziT-fadeOutDown {
+    from {
+        opacity: 1;
+    }
+    to {
+        opacity: 0;
+        -webkit-transform: translate3d(0, 100%, 0);
+        transform: translate3d(0, 100%, 0);
+    }
+}
+
+@keyframes iziT-fadeOutDown {
+    from {
+        opacity: 1;
+    }
+    to {
+        opacity: 0;
+        -webkit-transform: translate3d(0, 100%, 0);
+        transform: translate3d(0, 100%, 0);
+    }
+}
+
+@-moz-keyframes iziT-fadeOutUp {
+    from {
+        opacity: 1;
+    }
+    to {
+        opacity: 0;
+        -webkit-transform: translate3d(0, -100%, 0);
+        transform: translate3d(0, -100%, 0);
+    }
+}
+
+@-webkit-keyframes iziT-fadeOutUp {
+    from {
+        opacity: 1;
+    }
+    to {
+        opacity: 0;
+        -webkit-transform: translate3d(0, -100%, 0);
+        transform: translate3d(0, -100%, 0);
+    }
+}
+
+@-o-keyframes iziT-fadeOutUp {
+    from {
+        opacity: 1;
+    }
+    to {
+        opacity: 0;
+        -webkit-transform: translate3d(0, -100%, 0);
+        transform: translate3d(0, -100%, 0);
+    }
+}
+
+@keyframes iziT-fadeOutUp {
+    from {
+        opacity: 1;
+    }
+    to {
+        opacity: 0;
+        -webkit-transform: translate3d(0, -100%, 0);
+        transform: translate3d(0, -100%, 0);
+    }
+}
+
+@-moz-keyframes iziT-fadeOutLeft {
+    from {
+        opacity: 1;
+    }
+    to {
+        opacity: 0;
+        -webkit-transform: translate3d(-200px, 0, 0);
+        transform: translate3d(-200px, 0, 0);
+    }
+}
+
+@-webkit-keyframes iziT-fadeOutLeft {
+    from {
+        opacity: 1;
+    }
+    to {
+        opacity: 0;
+        -webkit-transform: translate3d(-200px, 0, 0);
+        transform: translate3d(-200px, 0, 0);
+    }
+}
+
+@-o-keyframes iziT-fadeOutLeft {
+    from {
+        opacity: 1;
+    }
+    to {
+        opacity: 0;
+        -webkit-transform: translate3d(-200px, 0, 0);
+        transform: translate3d(-200px, 0, 0);
+    }
+}
+
+@keyframes iziT-fadeOutLeft {
+    from {
+        opacity: 1;
+    }
+    to {
+        opacity: 0;
+        -webkit-transform: translate3d(-200px, 0, 0);
+        transform: translate3d(-200px, 0, 0);
+    }
+}
+
+@-moz-keyframes iziT-fadeOutRight {
+    from {
+        opacity: 1;
+    }
+    to {
+        opacity: 0;
+        -webkit-transform: translate3d(200px, 0, 0);
+        transform: translate3d(200px, 0, 0);
+    }
+}
+
+@-webkit-keyframes iziT-fadeOutRight {
+    from {
+        opacity: 1;
+    }
+    to {
+        opacity: 0;
+        -webkit-transform: translate3d(200px, 0, 0);
+        transform: translate3d(200px, 0, 0);
+    }
+}
+
+@-o-keyframes iziT-fadeOutRight {
+    from {
+        opacity: 1;
+    }
+    to {
+        opacity: 0;
+        -webkit-transform: translate3d(200px, 0, 0);
+        transform: translate3d(200px, 0, 0);
+    }
+}
+
+@keyframes iziT-fadeOutRight {
+    from {
+        opacity: 1;
+    }
+    to {
+        opacity: 0;
+        -webkit-transform: translate3d(200px, 0, 0);
+        transform: translate3d(200px, 0, 0);
+    }
+}
+
+@-moz-keyframes iziT-flipOutX {
+    from {
+        -webkit-transform: perspective(400px);
+        transform: perspective(400px);
+    }
+    30% {
+        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+        transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+        opacity: 1;
+    }
+    to {
+        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+        transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+        opacity: 0;
+    }
+}
+
+@-webkit-keyframes iziT-flipOutX {
+    from {
+        -webkit-transform: perspective(400px);
+        transform: perspective(400px);
+    }
+    30% {
+        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+        transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+        opacity: 1;
+    }
+    to {
+        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+        transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+        opacity: 0;
+    }
+}
+
+@-o-keyframes iziT-flipOutX {
+    from {
+        -webkit-transform: perspective(400px);
+        transform: perspective(400px);
+    }
+    30% {
+        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+        transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+        opacity: 1;
+    }
+    to {
+        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+        transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+        opacity: 0;
+    }
+}
+
+@keyframes iziT-flipOutX {
+    from {
+        -webkit-transform: perspective(400px);
+        transform: perspective(400px);
+    }
+    30% {
+        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+        transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+        opacity: 1;
+    }
+    to {
+        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+        transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+        opacity: 0;
+    }
+}
diff --git a/src/main/webapp/static/layui/lay/modules/notice/notice.js b/src/main/webapp/static/layui/lay/modules/notice/notice.js
new file mode 100644
index 0000000..d414a51
--- /dev/null
+++ b/src/main/webapp/static/layui/lay/modules/notice/notice.js
@@ -0,0 +1,1241 @@
+layui.define([], function (exports) {
+    var PLUGIN_NAME = 'iziToast';  // 鏍峰紡绫诲悕
+    var BODY = document.querySelector('body');
+    var ISMOBILE = (/Mobi/.test(navigator.userAgent)) ? true : false;
+    var MOBILEWIDTH = 568;
+    var ISCHROME = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
+    var ISFIREFOX = typeof InstallTrigger !== 'undefined';
+    var ACCEPTSTOUCH = 'ontouchstart' in document.documentElement;
+    // 鏄剧ず鍖哄煙
+    var POSITIONS = ['bottomRight', 'bottomLeft', 'bottomCenter', 'topRight', 'topLeft', 'topCenter', 'center'];
+    // 榛樿涓婚
+    var THEMES = {
+        info: {
+            color: 'blue',
+            icon: 'ico-info'
+        },
+        success: {
+            color: 'green',
+            icon: 'ico-success'
+        },
+        warning: {
+            color: 'orange',
+            icon: 'ico-warning'
+        },
+        error: {
+            color: 'red',
+            icon: 'ico-error'
+        },
+        question: {
+            color: 'yellow',
+            icon: 'ico-question'
+        }
+    };
+    var CONFIG = {};  // 鍏ㄥ眬閰嶇疆
+    // 榛樿閰嶇疆
+    var defaults = {
+        id: null,
+        className: '',  // 鑷畾涔塩lass锛岀敤绌烘牸鍒嗗壊
+        title: '',  // 鏍囬
+        titleColor: '',  // 鏍囬鏂囧瓧棰滆壊
+        titleSize: '',  // 鏍囬鏂囧瓧澶у皬
+        titleLineHeight: '',  // 鏍囬楂樺害
+        message: '',  // 鍐呭
+        messageColor: '',  // 鍐呭鏂囧瓧棰滆壊
+        messageSize: '',  // 鍐呭鏂囧瓧澶у皬
+        messageLineHeight: '',  // 鍐呭楂樺害
+        backgroundColor: '',  // 鑳屾櫙棰滆壊
+        theme: 'light', // dark
+        color: '', // 鑳屾櫙棰滆壊
+        icon: '',  // 鍥炬爣
+        iconText: '',  // 鍥炬爣鏂囧瓧
+        iconColor: '',  // 鍥炬爣棰滆壊
+        iconUrl: null,  // 鍥炬爣鍦板潃
+        image: '',  // 鏄惁鏄剧ず鍥剧墖
+        imageWidth: 60,  // 鍥剧墖瀹藉害
+        maxWidth: null,  // 鏈�澶у搴�
+        zindex: null,  //
+        layout: 2,  // 甯冨眬绫诲瀷
+        balloon: false,  // 姘旀场
+        close: true,  // 鏄惁鏄剧ず鍏抽棴鎸夐挳
+        closeOnEscape: false,
+        closeOnClick: false,  // 鐐瑰嚮鍏抽棴
+        displayMode: 0,  // 0鏃犻檺鍒�,1瀛樺湪灏变笉鍙戝嚭,2閿�姣佷箣鍓�
+        position: 'topRight', // bottomRight, bottomLeft, topRight, topLeft, topCenter, bottomCenter, center
+        target: '',  // 鏄剧ず浣嶇疆
+        targetFirst: null,  // 鎻掑叆椤哄簭
+        timeout: 5000,  // 鍏抽棴鏃堕棿锛宖alse涓嶈嚜鍔ㄥ叧闂�
+        rtl: false,  // 鍐呭灞呭彸
+        animateInside: false,  // 杩涘叆鍔ㄧ敾鏁堟灉
+        drag: true,  // 鏄惁鍙粦鍔ㄧЩ闄�
+        pauseOnHover: true,  // 榧犳爣绉诲叆鏆傚仠杩涘害鏉℃椂闂�
+        resetOnHover: false,  // 榧犳爣绉诲叆閲嶇疆杩涘害鏉℃椂闂�
+        progressBar: true,  // 鏄惁鏄剧ず杩涘害鏉�
+        progressBarColor: '',  // 杩涘害鏉¢鑹�
+        progressBarEasing: 'linear',  // 杩涘害鏉″姩鐢绘晥鏋�
+        overlay: false,  // 鏄惁鏄剧ず閬僵灞�
+        overlayClose: false,  // 鐐瑰嚮閬僵灞傛槸鍚﹀叧闂�
+        overlayColor: 'rgba(0, 0, 0, 0.1)',  // 閬僵灞傞鑹�
+        transitionIn: 'fadeInLeft', // bounceInLeft, bounceInRight, bounceInUp, bounceInDown, fadeIn, fadeInDown, fadeInUp, fadeInLeft, fadeInRight, flipInX
+        transitionOut: 'fadeOutRight', // fadeOut, fadeOutUp, fadeOutDown, fadeOutLeft, fadeOutRight, flipOutX
+        transitionInMobile: 'bounceInDown',  // 绉诲姩绔繘鍏ュ姩鐢�
+        transitionOutMobile: 'fadeOutUp',  // 绉诲姩绔��鍑哄姩鐢�
+        buttons: {},  // 鎿嶄綔鎸夐挳
+        inputs: {},  // 杈撳叆妗�
+        audio: '',  // 闊虫晥
+        onOpening: function () {
+        },
+        onOpened: function () {
+        },
+        onClosing: function () {
+        },
+        onClosed: function () {
+        }
+    };
+
+    var $iziToast = {
+        children: {},
+        setSetting: function (ref, option, value) {
+            $iziToast.children[ref][option] = value;
+        },
+        getSetting: function (ref, option) {
+            return $iziToast.children[ref][option];
+        },
+        // 鍏ㄥ眬璁剧疆
+        settings: function (options) {
+            $iziToast.destroy();  // 鍏ㄩ儴閿�姣佷箣鍓嶇殑閫氱煡
+            CONFIG = options;
+            defaults = extend(defaults, options || {});
+        },
+        // 鍏抽棴鎵�鏈夐�氱煡
+        destroy: function () {
+            forEach(document.querySelectorAll('.' + PLUGIN_NAME + '-overlay'), function (element, index) {
+                element.remove();
+            });
+            forEach(document.querySelectorAll('.' + PLUGIN_NAME + '-wrapper'), function (element, index) {
+                element.remove();
+            });
+            forEach(document.querySelectorAll('.' + PLUGIN_NAME), function (element, index) {
+                element.remove();
+            });
+            this.children = {};
+            // 绉婚櫎浜嬩欢鐩戝惉
+            document.removeEventListener(PLUGIN_NAME + '-opened', {}, false);
+            document.removeEventListener(PLUGIN_NAME + '-opening', {}, false);
+            document.removeEventListener(PLUGIN_NAME + '-closing', {}, false);
+            document.removeEventListener(PLUGIN_NAME + '-closed', {}, false);
+            document.removeEventListener('keyup', {}, false);
+            CONFIG = {};  // 绉婚櫎鍏ㄥ眬閰嶇疆
+        },
+        // msg绫诲瀷
+        msg: function (msg, options) {
+            if (options.icon == 4) {
+                options.overlay = true;
+                options.timeout = false;
+                options.drag = false;
+                options.displayMode = 0;
+            }
+            var icons = ['ico-success', 'ico-error', 'ico-warning', 'ico-load', 'ico-info'];
+            options.icon = icons[options.icon - 1];
+            var theme = {
+                message: msg,
+                position: 'topCenter',
+                transitionIn: 'bounceInDown',
+                transitionOut: 'fadeOut',
+                transitionOutMobile: 'fadeOut',
+                progressBar: false,
+                close: false,
+                layout: 1,
+                audio: ''
+            };
+            var settings = extend(CONFIG, options || {});
+            settings = extend(theme, settings || {});
+            this.show(settings);
+        }
+    };
+
+    // 鍏抽棴鎸囧畾鐨勯�氱煡
+    $iziToast.hide = function (options, $toast, closedBy) {
+        if (typeof $toast != 'object') {
+            $toast = document.querySelector($toast);
+        }
+        var that = this;
+        var settings = extend(this.children[$toast.getAttribute('data-iziToast-ref')], options || {});
+        settings.closedBy = closedBy || null;
+        delete settings.time.REMAINING;
+        $toast.classList.add(PLUGIN_NAME + '-closing');
+        // 绉婚櫎閬僵灞�
+        (function () {
+            var $overlay = document.querySelector('.' + PLUGIN_NAME + '-overlay');
+            if ($overlay !== null) {
+                var refs = $overlay.getAttribute('data-iziToast-ref');
+                refs = refs.split(',');
+                var index = refs.indexOf(String(settings.ref));
+                if (index !== -1) {
+                    refs.splice(index, 1);
+                }
+                $overlay.setAttribute('data-iziToast-ref', refs.join());
+                if (refs.length === 0) {
+                    $overlay.classList.remove('fadeIn');
+                    $overlay.classList.add('fadeOut');
+                    setTimeout(function () {
+                        $overlay.remove();
+                    }, 700);
+                }
+            }
+        })();
+        // 绉婚櫎鍔ㄧ敾
+        if (settings.transitionIn) {
+            $toast.classList.remove(settings.transitionIn);
+        }
+        if (settings.transitionInMobile) {
+            $toast.classList.remove(settings.transitionInMobile);
+        }
+        if (ISMOBILE || window.innerWidth <= MOBILEWIDTH) {
+            if (settings.transitionOutMobile)
+                $toast.classList.add(settings.transitionOutMobile);
+        } else {
+            if (settings.transitionOut)
+                $toast.classList.add(settings.transitionOut);
+        }
+        var H = $toast.parentNode.offsetHeight;
+        $toast.parentNode.style.height = H + 'px';
+        $toast.style.pointerEvents = 'none';
+        if (!ISMOBILE || window.innerWidth > MOBILEWIDTH) {
+            $toast.parentNode.style.transitionDelay = '0.2s';
+        }
+        try {
+            var event = new CustomEvent(PLUGIN_NAME + '-closing', {detail: settings, bubbles: true, cancelable: true});
+            document.dispatchEvent(event);
+        } catch (ex) {
+            console.warn(ex);
+        }
+        setTimeout(function () {
+            $toast.parentNode.style.height = '0px';
+            $toast.parentNode.style.overflow = '';
+            setTimeout(function () {
+                delete that.children[settings.ref];
+                $toast.parentNode.remove();
+                try {
+                    var event = new CustomEvent(PLUGIN_NAME + '-closed', {
+                        detail: settings,
+                        bubbles: true,
+                        cancelable: true
+                    });
+                    document.dispatchEvent(event);
+                } catch (ex) {
+                    console.warn(ex);
+                }
+                if (typeof settings.onClosed !== 'undefined') {
+                    settings.onClosed.apply(null, [settings, $toast, closedBy]);
+                }
+            }, 1000);
+        }, 200);
+        // 鍥炶皟鍏抽棴浜嬩欢
+        if (typeof settings.onClosing !== 'undefined') {
+            settings.onClosing.apply(null, [settings, $toast, closedBy]);
+        }
+    };
+
+    // 鏄剧ず閫氱煡
+    $iziToast.show = function (options) {
+        var that = this;
+        // Merge user options with defaults
+        var settings = extend(CONFIG, options || {});
+        settings = extend(defaults, settings);
+        settings.time = {};
+        if (settings.id === null) {
+            settings.id = generateId(settings.title + settings.message + settings.color);
+        }
+        if (settings.displayMode == 1 || settings.displayMode == 'once') {
+            try {
+                if (document.querySelectorAll('.' + PLUGIN_NAME + '#' + settings.id).length > 0) {
+                    return false;
+                }
+            } catch (exc) {
+                console.warn('[' + PLUGIN_NAME + '] Could not find an element with this selector: ' + '#' + settings.id + '. Try to set an valid id.');
+            }
+        }
+        if (settings.displayMode == 2 || settings.displayMode == 'replace') {
+            try {
+                forEach(document.querySelectorAll('.' + PLUGIN_NAME + '#' + settings.id), function (element, index) {
+                    that.hide(settings, element, 'replaced');
+                });
+            } catch (exc) {
+                console.warn('[' + PLUGIN_NAME + '] Could not find an element with this selector: ' + '#' + settings.id + '. Try to set an valid id.');
+            }
+        }
+        settings.ref = new Date().getTime() + Math.floor((Math.random() * 10000000) + 1);
+        $iziToast.children[settings.ref] = settings;
+        var $DOM = {
+            body: document.querySelector('body'),
+            overlay: document.createElement('div'),
+            toast: document.createElement('div'),
+            toastBody: document.createElement('div'),
+            toastTexts: document.createElement('div'),
+            toastCapsule: document.createElement('div'),
+            cover: document.createElement('div'),
+            buttons: document.createElement('div'),
+            inputs: document.createElement('div'),
+            icon: !settings.iconUrl ? document.createElement('i') : document.createElement('img'),
+            wrapper: null
+        };
+        $DOM.toast.setAttribute('data-iziToast-ref', settings.ref);
+        $DOM.toast.appendChild($DOM.toastBody);
+        $DOM.toastCapsule.appendChild($DOM.toast);
+        // CSS Settings
+        (function () {
+            $DOM.toast.classList.add(PLUGIN_NAME);
+            $DOM.toast.classList.add(PLUGIN_NAME + '-opening');
+            $DOM.toastCapsule.classList.add(PLUGIN_NAME + '-capsule');
+            $DOM.toastBody.classList.add(PLUGIN_NAME + '-body');
+            $DOM.toastTexts.classList.add(PLUGIN_NAME + '-texts');
+            if (ISMOBILE || window.innerWidth <= MOBILEWIDTH) {
+                if (settings.transitionInMobile)
+                    $DOM.toast.classList.add(settings.transitionInMobile);
+            } else {
+                if (settings.transitionIn)
+                    $DOM.toast.classList.add(settings.transitionIn);
+            }
+            if (settings.className) {
+                var classes = settings.className.split(' ');
+                forEach(classes, function (value, index) {
+                    $DOM.toast.classList.add(value);
+                });
+            }
+            if (settings.id) {
+                $DOM.toast.id = settings.id;
+            }
+            if (settings.rtl) {
+                $DOM.toast.classList.add(PLUGIN_NAME + '-rtl');
+                $DOM.toast.setAttribute('dir', 'rtl');
+            }
+            if (settings.layout > 1) {
+                $DOM.toast.classList.add(PLUGIN_NAME + '-layout' + settings.layout);
+            }
+            if (settings.balloon) {
+                $DOM.toast.classList.add(PLUGIN_NAME + '-balloon');
+            }
+            if (settings.maxWidth) {
+                if (!isNaN(settings.maxWidth)) {
+                    $DOM.toast.style.maxWidth = settings.maxWidth + 'px';
+                } else {
+                    $DOM.toast.style.maxWidth = settings.maxWidth;
+                }
+            }
+            if (settings.theme !== '' || settings.theme !== 'light') {
+                $DOM.toast.classList.add(PLUGIN_NAME + '-theme-' + settings.theme);
+            }
+            if (settings.color) { //#, rgb, rgba, hsl
+                if (isColor(settings.color)) {
+                    $DOM.toast.style.background = settings.color;
+                } else {
+                    $DOM.toast.classList.add(PLUGIN_NAME + '-color-' + settings.color);
+                }
+            }
+            if (settings.backgroundColor) {
+                $DOM.toast.style.background = settings.backgroundColor;
+                if (settings.balloon) {
+                    $DOM.toast.style.borderColor = settings.backgroundColor;
+                }
+            }
+        })();
+        // Cover image
+        (function () {
+            if (settings.image) {
+                $DOM.cover.classList.add(PLUGIN_NAME + '-cover');
+                $DOM.cover.style.width = settings.imageWidth + 'px';
+                if (isBase64(settings.image.replace(/ /g, ''))) {
+                    $DOM.cover.style.backgroundImage = 'url(data:image/png;base64,' + settings.image.replace(/ /g, '') + ')';
+                } else {
+                    $DOM.cover.style.backgroundImage = 'url(' + settings.image + ')';
+                }
+                if (settings.rtl) {
+                    $DOM.toastBody.style.marginRight = (settings.imageWidth) + 'px';
+                } else {
+                    $DOM.toastBody.style.marginLeft = (settings.imageWidth) + 'px';
+                }
+                $DOM.toast.appendChild($DOM.cover);
+            }
+        })();
+        // Button close
+        (function () {
+            if (settings.close) {
+                $DOM.buttonClose = document.createElement('button');
+                // $DOM.buttonClose.type = 'button';
+                $DOM.buttonClose.setAttribute('type', 'button');
+                $DOM.buttonClose.classList.add(PLUGIN_NAME + '-close');
+                $DOM.buttonClose.addEventListener('click', function (e) {
+                    var button = e.target;
+                    that.hide(settings, $DOM.toast, 'button');
+                });
+                $DOM.toast.appendChild($DOM.buttonClose);
+            } else {
+                if (settings.rtl) {
+                    $DOM.toast.style.paddingLeft = '18px';
+                } else {
+                    $DOM.toast.style.paddingRight = '18px';
+                }
+            }
+        })();
+        // Progress Bar & Timeout
+        (function () {
+            if (settings.progressBar) {
+                $DOM.progressBar = document.createElement('div');
+                $DOM.progressBarDiv = document.createElement('div');
+                $DOM.progressBar.classList.add(PLUGIN_NAME + '-progressbar');
+                $DOM.progressBarDiv.style.background = settings.progressBarColor;
+                $DOM.progressBar.appendChild($DOM.progressBarDiv);
+                $DOM.toast.appendChild($DOM.progressBar);
+            }
+            if (settings.timeout) {
+                if (settings.pauseOnHover && !settings.resetOnHover) {
+                    $DOM.toast.addEventListener('mouseenter', function (e) {
+                        that.progress(settings, $DOM.toast).pause();
+                    });
+                    $DOM.toast.addEventListener('mouseleave', function (e) {
+                        that.progress(settings, $DOM.toast).resume();
+                    });
+                }
+                if (settings.resetOnHover) {
+                    $DOM.toast.addEventListener('mouseenter', function (e) {
+                        that.progress(settings, $DOM.toast).reset();
+                    });
+                    $DOM.toast.addEventListener('mouseleave', function (e) {
+                        that.progress(settings, $DOM.toast).start();
+                    });
+                }
+            }
+        })();
+        // Icon
+        (function () {
+            if (settings.iconUrl) {
+                $DOM.icon.setAttribute('class', PLUGIN_NAME + '-icon');
+                $DOM.icon.setAttribute('src', settings.iconUrl);
+            } else if (settings.icon) {
+                $DOM.icon.setAttribute('class', PLUGIN_NAME + '-icon ' + settings.icon);
+                if (settings.iconText) {
+                    $DOM.icon.appendChild(document.createTextNode(settings.iconText));
+                }
+                if (settings.iconColor) {
+                    $DOM.icon.style.color = settings.iconColor;
+                }
+            }
+            if (settings.icon || settings.iconUrl) {
+                if (settings.rtl) {
+                    $DOM.toastBody.style.paddingRight = '33px';
+                } else {
+                    $DOM.toastBody.style.paddingLeft = '33px';
+                }
+                $DOM.toastBody.appendChild($DOM.icon);
+            }
+
+        })();
+        // Title & Message
+        (function () {
+            if (settings.title.length > 0) {
+                $DOM.strong = document.createElement('strong');
+                $DOM.strong.classList.add(PLUGIN_NAME + '-title');
+                $DOM.strong.appendChild(createFragElem(settings.title));
+                $DOM.toastTexts.appendChild($DOM.strong);
+                if (settings.titleColor) {
+                    $DOM.strong.style.color = settings.titleColor;
+                }
+                if (settings.titleSize) {
+                    if (!isNaN(settings.titleSize)) {
+                        $DOM.strong.style.fontSize = settings.titleSize + 'px';
+                    } else {
+                        $DOM.strong.style.fontSize = settings.titleSize;
+                    }
+                }
+                if (settings.titleLineHeight) {
+                    if (!isNaN(settings.titleSize)) {
+                        $DOM.strong.style.lineHeight = settings.titleLineHeight + 'px';
+                    } else {
+                        $DOM.strong.style.lineHeight = settings.titleLineHeight;
+                    }
+                }
+            }
+            if (settings.message.length > 0) {
+                $DOM.p = document.createElement('p');
+                $DOM.p.classList.add(PLUGIN_NAME + '-message');
+                $DOM.p.appendChild(createFragElem(settings.message));
+                $DOM.toastTexts.appendChild($DOM.p);
+                if (settings.messageColor) {
+                    $DOM.p.style.color = settings.messageColor;
+                }
+                if (settings.messageSize) {
+                    if (!isNaN(settings.titleSize)) {
+                        $DOM.p.style.fontSize = settings.messageSize + 'px';
+                    } else {
+                        $DOM.p.style.fontSize = settings.messageSize;
+                    }
+                }
+                if (settings.messageLineHeight) {
+                    if (!isNaN(settings.titleSize)) {
+                        $DOM.p.style.lineHeight = settings.messageLineHeight + 'px';
+                    } else {
+                        $DOM.p.style.lineHeight = settings.messageLineHeight;
+                    }
+                }
+            }
+            if (settings.title.length > 0 && settings.message.length > 0) {
+                if (settings.rtl) {
+                    $DOM.strong.style.marginLeft = '10px';
+                } else if (settings.layout != 2 && !settings.rtl) {
+                    $DOM.strong.style.marginRight = '10px';
+                    $DOM.strong.style.marginBottom = '0px';
+                }
+            }
+        })();
+        $DOM.toastBody.appendChild($DOM.toastTexts);
+        // Inputs
+        var $inputs;
+        (function () {
+            if (settings.inputs.length > 0) {
+                $DOM.inputs.classList.add(PLUGIN_NAME + '-inputs');
+                forEach(settings.inputs, function (value, index) {
+                    $DOM.inputs.appendChild(createFragElem(value[0]));
+                    $inputs = $DOM.inputs.childNodes;
+                    $inputs[index].classList.add(PLUGIN_NAME + '-inputs-child');
+                    if (value[3]) {
+                        setTimeout(function () {
+                            $inputs[index].focus();
+                        }, 300);
+                    }
+                    $inputs[index].addEventListener(value[1], function (e) {
+                        var ts = value[2];
+                        return ts(that, $DOM.toast, this, e);
+                    });
+                });
+                $DOM.toastBody.appendChild($DOM.inputs);
+            }
+        })();
+        // Buttons
+        (function () {
+            if (settings.buttons.length > 0) {
+                $DOM.buttons.classList.add(PLUGIN_NAME + '-buttons');
+                forEach(settings.buttons, function (value, index) {
+                    $DOM.buttons.appendChild(createFragElem(value[0]));
+                    var $btns = $DOM.buttons.childNodes;
+                    $btns[index].classList.add(PLUGIN_NAME + '-buttons-child');
+                    if (value[2]) {
+                        setTimeout(function () {
+                            $btns[index].focus();
+                        }, 300);
+                    }
+                    $btns[index].addEventListener('click', function (e) {
+                        e.preventDefault();
+                        var ts = value[1];
+                        return ts(that, $DOM.toast, this, e, $inputs);
+                    });
+                });
+            }
+            $DOM.toastTexts.appendChild($DOM.buttons);
+        })();
+        if (settings.message.length > 0 && (settings.inputs.length > 0 || settings.buttons.length > 0)) {
+            $DOM.p.style.marginBottom = '0';
+        }
+        if (settings.inputs.length > 0 || settings.buttons.length > 0) {
+            if (settings.rtl) {
+                $DOM.toastTexts.style.marginLeft = '10px';
+            } else {
+                $DOM.toastTexts.style.marginRight = '10px';
+            }
+            if (settings.inputs.length > 0 && settings.buttons.length > 0) {
+                if (settings.rtl) {
+                    $DOM.inputs.style.marginLeft = '8px';
+                } else {
+                    $DOM.inputs.style.marginRight = '8px';
+                }
+            }
+        }
+        // Wrap
+        (function () {
+            $DOM.toastCapsule.style.visibility = 'hidden';
+            setTimeout(function () {
+                var H = $DOM.toast.offsetHeight;
+                var style = $DOM.toast.currentStyle || window.getComputedStyle($DOM.toast);
+                var marginTop = style.marginTop;
+                marginTop = marginTop.split('px');
+                marginTop = parseInt(marginTop[0]);
+                var marginBottom = style.marginBottom;
+                marginBottom = marginBottom.split('px');
+                marginBottom = parseInt(marginBottom[0]);
+
+                $DOM.toastCapsule.style.visibility = '';
+                $DOM.toastCapsule.style.height = (H + marginBottom + marginTop) + 'px';
+
+                setTimeout(function () {
+                    $DOM.toastCapsule.style.height = 'auto';
+                    if (settings.target) {
+                        $DOM.toastCapsule.style.overflow = 'visible';
+                    }
+                }, 500);
+
+                if (settings.timeout) {
+                    that.progress(settings, $DOM.toast).start();
+                }
+            }, 100);
+        })();
+        // Target
+        (function () {
+            var position = settings.position;
+            if (settings.target) {
+                $DOM.wrapper = document.querySelector(settings.target);
+                $DOM.wrapper.classList.add(PLUGIN_NAME + '-target');
+                if (settings.targetFirst) {
+                    $DOM.wrapper.insertBefore($DOM.toastCapsule, $DOM.wrapper.firstChild);
+                } else {
+                    $DOM.wrapper.appendChild($DOM.toastCapsule);
+                }
+            } else {
+                if (POSITIONS.indexOf(settings.position) == -1) {
+                    console.warn('[' + PLUGIN_NAME + '] Incorrect position.\nIt can be 鈥� ' + POSITIONS);
+                    return;
+                }
+                if (ISMOBILE || window.innerWidth <= MOBILEWIDTH) {
+                    if (settings.position == 'bottomLeft' || settings.position == 'bottomRight' || settings.position == 'bottomCenter') {
+                        position = PLUGIN_NAME + '-wrapper-bottomCenter';
+                    } else if (settings.position == 'topLeft' || settings.position == 'topRight' || settings.position == 'topCenter') {
+                        position = PLUGIN_NAME + '-wrapper-topCenter';
+                    } else {
+                        position = PLUGIN_NAME + '-wrapper-center';
+                    }
+                } else {
+                    position = PLUGIN_NAME + '-wrapper-' + position;
+                }
+                $DOM.wrapper = document.querySelector('.' + PLUGIN_NAME + '-wrapper.' + position);
+                if (!$DOM.wrapper) {
+                    $DOM.wrapper = document.createElement('div');
+                    $DOM.wrapper.classList.add(PLUGIN_NAME + '-wrapper');
+                    $DOM.wrapper.classList.add(position);
+                    document.body.appendChild($DOM.wrapper);
+                }
+                var targetFirst = settings.targetFirst;
+                if ((targetFirst == undefined || targetFirst == null) && (settings.position == 'topLeft' || settings.position == 'topCenter' || settings.position == 'topRight')) {
+                    targetFirst = true;
+                }
+                if (targetFirst) {
+                    $DOM.wrapper.insertBefore($DOM.toastCapsule, $DOM.wrapper.firstChild);
+                } else {
+                    $DOM.wrapper.appendChild($DOM.toastCapsule);
+                }
+            }
+            if (!isNaN(settings.zindex)) {
+                $DOM.wrapper.style.zIndex = settings.zindex;
+            } else {
+                console.warn('[' + PLUGIN_NAME + '] Invalid zIndex.');
+            }
+        })();
+        // Overlay
+        (function () {
+            if (settings.overlay) {
+                if (document.querySelector('.' + PLUGIN_NAME + '-overlay.fadeIn') !== null) {
+                    $DOM.overlay = document.querySelector('.' + PLUGIN_NAME + '-overlay');
+                    $DOM.overlay.setAttribute('data-iziToast-ref', $DOM.overlay.getAttribute('data-iziToast-ref') + ',' + settings.ref);
+                    if (!isNaN(settings.zindex) && settings.zindex !== null) {
+                        $DOM.overlay.style.zIndex = settings.zindex - 1;
+                    }
+                } else {
+                    $DOM.overlay.classList.add(PLUGIN_NAME + '-overlay');
+                    $DOM.overlay.classList.add('fadeIn');
+                    $DOM.overlay.style.background = settings.overlayColor;
+                    $DOM.overlay.setAttribute('data-iziToast-ref', settings.ref);
+                    if (!isNaN(settings.zindex) && settings.zindex !== null) {
+                        $DOM.overlay.style.zIndex = settings.zindex - 1;
+                    }
+                    document.querySelector('body').appendChild($DOM.overlay);
+                }
+                if (settings.overlayClose) {
+                    $DOM.overlay.removeEventListener('click', {});
+                    $DOM.overlay.addEventListener('click', function (e) {
+                        that.hide(settings, $DOM.toast, 'overlay');
+                    });
+                } else {
+                    $DOM.overlay.removeEventListener('click', {});
+                }
+            }
+        })();
+        // Inside animations
+        (function () {
+            if (settings.animateInside) {
+                $DOM.toast.classList.add(PLUGIN_NAME + '-animateInside');
+                var animationTimes = [200, 100, 300];
+                if (settings.transitionIn == 'bounceInLeft' || settings.transitionIn == 'bounceInRight') {
+                    animationTimes = [400, 200, 400];
+                }
+                if (settings.title.length > 0) {
+                    setTimeout(function () {
+                        $DOM.strong.classList.add('slideIn');
+                    }, animationTimes[0]);
+                }
+                if (settings.message.length > 0) {
+                    setTimeout(function () {
+                        $DOM.p.classList.add('slideIn');
+                    }, animationTimes[1]);
+                }
+                if (settings.icon || settings.iconUrl) {
+                    setTimeout(function () {
+                        $DOM.icon.classList.add('revealIn');
+                    }, animationTimes[2]);
+                }
+                var counter = 150;
+                if (settings.buttons.length > 0 && $DOM.buttons) {
+                    setTimeout(function () {
+                        forEach($DOM.buttons.childNodes, function (element, index) {
+                            setTimeout(function () {
+                                element.classList.add('revealIn');
+                            }, counter);
+                            counter = counter + 150;
+                        });
+                    }, settings.inputs.length > 0 ? 150 : 0);
+                }
+                if (settings.inputs.length > 0 && $DOM.inputs) {
+                    counter = 150;
+                    forEach($DOM.inputs.childNodes, function (element, index) {
+                        setTimeout(function () {
+                            element.classList.add('revealIn');
+                        }, counter);
+                        counter = counter + 150;
+                    });
+                }
+            }
+        })();
+        settings.onOpening.apply(null, [settings, $DOM.toast]);
+        try {
+            var event = new CustomEvent(PLUGIN_NAME + '-opening', {detail: settings, bubbles: true, cancelable: true});
+            document.dispatchEvent(event);
+        } catch (ex) {
+            console.warn(ex);
+        }
+        setTimeout(function () {
+            $DOM.toast.classList.remove(PLUGIN_NAME + '-opening');
+            $DOM.toast.classList.add(PLUGIN_NAME + '-opened');
+            try {
+                var event = new CustomEvent(PLUGIN_NAME + '-opened', {
+                    detail: settings,
+                    bubbles: true,
+                    cancelable: true
+                });
+                document.dispatchEvent(event);
+            } catch (ex) {
+                console.warn(ex);
+            }
+            settings.onOpened.apply(null, [settings, $DOM.toast]);
+        }, 1000);
+        if (settings.drag) {
+            if (ACCEPTSTOUCH) {
+                $DOM.toast.addEventListener('touchstart', function (e) {
+                    drag.startMoving(this, that, settings, e);
+                }, false);
+                $DOM.toast.addEventListener('touchend', function (e) {
+                    drag.stopMoving(this, e);
+                }, false);
+            } else {
+                $DOM.toast.addEventListener('mousedown', function (e) {
+                    e.preventDefault();
+                    drag.startMoving(this, that, settings, e);
+                }, false);
+                $DOM.toast.addEventListener('mouseup', function (e) {
+                    e.preventDefault();
+                    drag.stopMoving(this, e);
+                }, false);
+            }
+        }
+        if (settings.closeOnEscape) {
+            document.addEventListener('keyup', function (evt) {
+                evt = evt || window.event;
+                if (evt.keyCode == 27) {
+                    that.hide(settings, $DOM.toast, 'esc');
+                }
+            });
+        }
+        if (settings.closeOnClick) {
+            $DOM.toast.addEventListener('click', function (evt) {
+                that.hide(settings, $DOM.toast, 'toast');
+            });
+        }
+        // 鎾斁澹伴煶
+        if (settings.audio) {
+            that.playSound(settings.audio);
+        }
+        that.toast = $DOM.toast;
+    };
+
+    // 鎺у埗杩涘害鏉�
+    $iziToast.progress = function (options, $toast, callback) {
+        var that = this,
+            ref = $toast.getAttribute('data-iziToast-ref'),
+            settings = extend(this.children[ref], options || {}),
+            $elem = $toast.querySelector('.' + PLUGIN_NAME + '-progressbar div');
+        return {
+            start: function () {
+                if (typeof settings.time.REMAINING == 'undefined') {
+                    $toast.classList.remove(PLUGIN_NAME + '-reseted');
+                    if ($elem !== null) {
+                        $elem.style.transition = 'width ' + settings.timeout + 'ms ' + settings.progressBarEasing;
+                        $elem.style.width = '0%';
+                    }
+                    settings.time.START = new Date().getTime();
+                    settings.time.END = settings.time.START + settings.timeout;
+                    settings.time.TIMER = setTimeout(function () {
+                        clearTimeout(settings.time.TIMER);
+                        if (!$toast.classList.contains(PLUGIN_NAME + '-closing')) {
+                            that.hide(settings, $toast, 'timeout');
+                            if (typeof callback === 'function') {
+                                callback.apply(that);
+                            }
+                        }
+                    }, settings.timeout);
+                    that.setSetting(ref, 'time', settings.time);
+                }
+            },
+            pause: function () {
+                if (typeof settings.time.START !== 'undefined' && !$toast.classList.contains(PLUGIN_NAME + '-paused') && !$toast.classList.contains(PLUGIN_NAME + '-reseted')) {
+                    $toast.classList.add(PLUGIN_NAME + '-paused');
+                    settings.time.REMAINING = settings.time.END - new Date().getTime();
+                    clearTimeout(settings.time.TIMER);
+                    that.setSetting(ref, 'time', settings.time);
+                    if ($elem !== null) {
+                        var computedStyle = window.getComputedStyle($elem),
+                            propertyWidth = computedStyle.getPropertyValue('width');
+                        $elem.style.transition = 'none';
+                        $elem.style.width = propertyWidth;
+                    }
+                    if (typeof callback === 'function') {
+                        setTimeout(function () {
+                            callback.apply(that);
+                        }, 10);
+                    }
+                }
+            },
+            resume: function () {
+                if (typeof settings.time.REMAINING !== 'undefined') {
+                    $toast.classList.remove(PLUGIN_NAME + '-paused');
+                    if ($elem !== null) {
+                        $elem.style.transition = 'width ' + settings.time.REMAINING + 'ms ' + settings.progressBarEasing;
+                        $elem.style.width = '0%';
+                    }
+                    settings.time.END = new Date().getTime() + settings.time.REMAINING;
+                    settings.time.TIMER = setTimeout(function () {
+                        clearTimeout(settings.time.TIMER);
+                        if (!$toast.classList.contains(PLUGIN_NAME + '-closing')) {
+                            that.hide(settings, $toast, 'timeout');
+                            if (typeof callback === 'function') {
+                                callback.apply(that);
+                            }
+                        }
+                    }, settings.time.REMAINING);
+                    that.setSetting(ref, 'time', settings.time);
+                } else {
+                    this.start();
+                }
+            },
+            reset: function () {
+                clearTimeout(settings.time.TIMER);
+                delete settings.time.REMAINING;
+                that.setSetting(ref, 'time', settings.time);
+                $toast.classList.add(PLUGIN_NAME + '-reseted');
+                $toast.classList.remove(PLUGIN_NAME + '-paused');
+                if ($elem !== null) {
+                    $elem.style.transition = 'none';
+                    $elem.style.width = '100%';
+                }
+                if (typeof callback === 'function') {
+                    setTimeout(function () {
+                        callback.apply(that);
+                    }, 10);
+                }
+            }
+        };
+    };
+
+    // 鍒ゆ柇鏄惁鏄痠e9浠ヤ笅鐗堟湰
+    var isIE9_ = function () {
+        var userAgent = navigator.userAgent;
+        if (window.navigator.userAgent.indexOf("MSIE") >= 1) {
+            var reIE = new RegExp("MSIE (\\d+\\.\\d+);");
+            reIE.test(userAgent);
+            var fIEVersion = parseFloat(RegExp["$1"]);
+            if (fIEVersion != 10) {
+                return true;
+            }
+        }
+        return false;
+    };
+
+    // 缁橢lement娣诲姞remove鏂规硶
+    if (!('remove' in Element.prototype)) {
+        Element.prototype.remove = function () {
+            if (this.parentNode) {
+                this.parentNode.removeChild(this);
+            }
+        };
+    }
+
+    // 鑷畾涔変簨浠�
+    if (typeof window.CustomEvent !== 'function') {
+        var CustomEventPolyfill = function (event, params) {
+            params = params || {bubbles: false, cancelable: false, detail: undefined};
+            var evt = document.createEvent('CustomEvent');
+            evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
+            return evt;
+        };
+        CustomEventPolyfill.prototype = window.Event.prototype;
+        window.CustomEvent = CustomEventPolyfill;
+    }
+
+    // 閬嶅巻鏁版嵁
+    var forEach = function (collection, callback, scope) {
+        if (Object.prototype.toString.call(collection) === '[object Object]') {
+            for (var prop in collection) {
+                if (Object.prototype.hasOwnProperty.call(collection, prop)) {
+                    callback.call(scope, collection[prop], prop, collection);
+                }
+            }
+        } else {
+            if (collection) {
+                for (var i = 0, len = collection.length; i < len; i++) {
+                    callback.call(scope, collection[i], i, collection);
+                }
+            }
+        }
+    };
+
+    // 鍚堝苟鑷畾涔夊弬鏁板拰榛樿鍙傛暟
+    var extend = function (defaults, options) {
+        var extended = {};
+        forEach(defaults, function (value, prop) {
+            extended[prop] = defaults[prop];
+        });
+        forEach(options, function (value, prop) {
+            extended[prop] = options[prop];
+        });
+        return extended;
+    };
+
+    // 鍒涘缓鏂扮殑鏂囨。鐗囨
+    var createFragElem = function (htmlStr) {
+        var frag = document.createDocumentFragment(),
+            temp = document.createElement('div');
+        temp.innerHTML = htmlStr;
+        while (temp.firstChild) {
+            frag.appendChild(temp.firstChild);
+        }
+        return frag;
+    };
+
+    // 鐢熸垚ID
+    var generateId = function (params) {
+        var newId = btoa(encodeURIComponent(params));
+        return newId.replace(/=/g, "");
+    };
+
+    // 鍒ゆ柇鏄惁鏄鑹插瓧绗︿覆
+    var isColor = function (color) {
+        if (color.substring(0, 1) == '#' || color.substring(0, 3) == 'rgb' || color.substring(0, 3) == 'hsl') {
+            return true;
+        } else {
+            return false;
+        }
+    };
+
+    // 鍒ゆ柇鏄惁鏄痓ase64瀛楃涓�
+    var isBase64 = function (str) {
+        try {
+            return btoa(atob(str)) == str;
+        } catch (err) {
+            return false;
+        }
+    };
+
+    // 鎷栨嫿鏂规硶
+    var drag = function () {
+        return {
+            move: function (toast, instance, settings, xpos) {
+                var opacity,
+                    opacityRange = 0.3,
+                    distance = 180;
+                if (xpos !== 0) {
+                    toast.classList.add(PLUGIN_NAME + '-dragged');
+                    toast.style.transform = 'translateX(' + xpos + 'px)';
+                    if (xpos > 0) {
+                        opacity = (distance - xpos) / distance;
+                        if (opacity < opacityRange) {
+                            instance.hide(extend(settings, {
+                                transitionOut: 'fadeOutRight',
+                                transitionOutMobile: 'fadeOutRight'
+                            }), toast, 'drag');
+                        }
+                    } else {
+                        opacity = (distance + xpos) / distance;
+                        if (opacity < opacityRange) {
+                            instance.hide(extend(settings, {
+                                transitionOut: 'fadeOutLeft',
+                                transitionOutMobile: 'fadeOutLeft'
+                            }), toast, 'drag');
+                        }
+                    }
+                    toast.style.opacity = opacity;
+                    if (opacity < opacityRange) {
+                        if (ISCHROME || ISFIREFOX)
+                            toast.style.left = xpos + 'px';
+                        toast.parentNode.style.opacity = opacityRange;
+                        this.stopMoving(toast, null);
+                    }
+                }
+            },
+            startMoving: function (toast, instance, settings, e) {
+                e = e || window.event;
+                var posX = ((ACCEPTSTOUCH) ? e.touches[0].clientX : e.clientX),
+                    toastLeft = toast.style.transform.replace('px)', '');
+                toastLeft = toastLeft.replace('translateX(', '');
+                var offsetX = posX - toastLeft;
+                if (settings.transitionIn) {
+                    toast.classList.remove(settings.transitionIn);
+                }
+                if (settings.transitionInMobile) {
+                    toast.classList.remove(settings.transitionInMobile);
+                }
+                toast.style.transition = '';
+                if (ACCEPTSTOUCH) {
+                    document.ontouchmove = function (e) {
+                        e.preventDefault();
+                        e = e || window.event;
+                        var posX = e.touches[0].clientX,
+                            finalX = posX - offsetX;
+                        drag.move(toast, instance, settings, finalX);
+                    };
+                } else {
+                    document.onmousemove = function (e) {
+                        e.preventDefault();
+                        e = e || window.event;
+                        var posX = e.clientX,
+                            finalX = posX - offsetX;
+                        drag.move(toast, instance, settings, finalX);
+                    };
+                }
+            },
+            stopMoving: function (toast, e) {
+                if (ACCEPTSTOUCH) {
+                    document.ontouchmove = function () {
+                    };
+                } else {
+                    document.onmousemove = function () {
+                    };
+                }
+                toast.style.opacity = '';
+                toast.style.transform = '';
+                if (toast.classList.contains(PLUGIN_NAME + '-dragged')) {
+                    toast.classList.remove(PLUGIN_NAME + '-dragged');
+                    toast.style.transition = 'transform 0.4s ease, opacity 0.4s ease';
+                    setTimeout(function () {
+                        toast.style.transition = '';
+                    }, 400);
+                }
+            }
+        };
+    }();
+
+    // 鍏煎IE
+    var Base64 = {
+        _keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", encode: function (e) {
+            var t = "";
+            var n, r, i, s, o, u, a;
+            var f = 0;
+            e = Base64._utf8_encode(e);
+            while (f < e.length) {
+                n = e.charCodeAt(f++);
+                r = e.charCodeAt(f++);
+                i = e.charCodeAt(f++);
+                s = n >> 2;
+                o = (n & 3) << 4 | r >> 4;
+                u = (r & 15) << 2 | i >> 6;
+                a = i & 63;
+                if (isNaN(r)) {
+                    u = a = 64
+                } else if (isNaN(i)) {
+                    a = 64
+                }
+                t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a)
+            }
+            return t
+        }, decode: function (e) {
+            var t = "";
+            var n, r, i;
+            var s, o, u, a;
+            var f = 0;
+            e = e.replace(/[^A-Za-z0-9+/=]/g, "");
+            while (f < e.length) {
+                s = this._keyStr.indexOf(e.charAt(f++));
+                o = this._keyStr.indexOf(e.charAt(f++));
+                u = this._keyStr.indexOf(e.charAt(f++));
+                a = this._keyStr.indexOf(e.charAt(f++));
+                n = s << 2 | o >> 4;
+                r = (o & 15) << 4 | u >> 2;
+                i = (u & 3) << 6 | a;
+                t = t + String.fromCharCode(n);
+                if (u != 64) {
+                    t = t + String.fromCharCode(r)
+                }
+                if (a != 64) {
+                    t = t + String.fromCharCode(i)
+                }
+            }
+            t = Base64._utf8_decode(t);
+            return t
+        }, _utf8_encode: function (e) {
+            e = e.replace(/rn/g, "n");
+            var t = "";
+            for (var n = 0; n < e.length; n++) {
+                var r = e.charCodeAt(n);
+                if (r < 128) {
+                    t += String.fromCharCode(r)
+                } else if (r > 127 && r < 2048) {
+                    t += String.fromCharCode(r >> 6 | 192);
+                    t += String.fromCharCode(r & 63 | 128)
+                } else {
+                    t += String.fromCharCode(r >> 12 | 224);
+                    t += String.fromCharCode(r >> 6 & 63 | 128);
+                    t += String.fromCharCode(r & 63 | 128)
+                }
+            }
+            return t
+        }, _utf8_decode: function (e) {
+            var t = "";
+            var n = 0;
+            var r = c1 = c2 = 0;
+            while (n < e.length) {
+                r = e.charCodeAt(n);
+                if (r < 128) {
+                    t += String.fromCharCode(r);
+                    n++
+                } else if (r > 191 && r < 224) {
+                    c2 = e.charCodeAt(n + 1);
+                    t += String.fromCharCode((r & 31) << 6 | c2 & 63);
+                    n += 2
+                } else {
+                    c2 = e.charCodeAt(n + 1);
+                    c3 = e.charCodeAt(n + 2);
+                    t += String.fromCharCode((r & 15) << 12 | (c2 & 63) << 6 | c3 & 63);
+                    n += 3
+                }
+            }
+            return t
+        }
+    };
+    if (isIE9_()) {
+        // 鍏煎btoa鍜宎tob鏂规硶
+        window.btoa = function (str) {
+            return Base64.encode(str);
+        };
+        window.atob = function (str) {
+            return Base64.decode(str);
+        };
+        // 鍏煎classList灞炴��
+        if (!("classList" in document.documentElement)) {
+            Object.defineProperty(window.Element.prototype, 'classList', {
+                get: function () {
+                    var self = this;
+
+                    function update(fn) {
+                        return function () {
+                            var className = self.className.replace(/^\s+|\s+$/g, ''),
+                                valArr = arguments;
+                            return fn(className, valArr)
+                        }
+                    }
+
+                    function add_rmv(className, valArr, tag) {
+                        for (var i in valArr) {
+                            if (typeof valArr[i] !== 'string' || !!~valArr[i].search(/\s+/g)) throw TypeError('the type of value is error')
+                            var temp = valArr[i]
+                            var flag = !!~className.search(new RegExp('(\\s+)?' + temp + '(\\s+)?'))
+                            if (tag === 1) {
+                                !flag ? className += ' ' + temp : ''
+                            } else if (tag === 2) {
+                                flag ? className = className.replace(new RegExp('(\\s+)?' + temp), '') : ''
+                            }
+                        }
+                        self.className = className;
+                        return tag;
+                    }
+
+                    return {
+                        add: update(function (className, valArr) {
+                            add_rmv(className, valArr, 1)
+                        }),
+                        remove: update(function (className, valArr) {
+                            add_rmv(className, valArr, 2)
+                        }),
+                        toggle: function (value) {
+                            if (typeof value !== 'string' || arguments.length === 0) throw TypeError("Failed to execute 'toggle' on 'DOMTokenList': 1 argument(string) required, but only 0 present.")
+                            if (arguments.length === 1) {
+                                this.contains(value) ? this.remove(value) : this.add(value)
+                                return
+                            }
+                            !arguments[1] ? this.remove(value) : this.add(value)
+                        },
+                        contains: update(function (className, valArr) {
+                            if (valArr.length === 0) throw TypeError("Failed to execute 'contains' on 'DOMTokenList': 1 argument required, but only 0 present.")
+                            if (typeof valArr[0] !== 'string' || !!~valArr[0].search(/\s+/g)) return false
+                            return !!~className.search(new RegExp(valArr[0]))
+                        }),
+                        item: function (index) {
+                            typeof index === 'string' ? index = parseInt(index) : ''
+                            if (arguments.length === 0 || typeof index !== 'number') throw TypeError("Failed to execute 'toggle' on 'DOMTokenList': 1 argument required, but only 0 present.")
+                            var claArr = self.className.replace(/^\s+|\s+$/, '').split(/\s+/)
+                            var len = claArr.length
+                            if (index < 0 || index >= len) return null
+                            return claArr[index]
+                        }
+                    }
+                }
+            });
+        }
+    }
+
+    // 鎾斁澹伴煶
+    $iziToast.playSound = function (src) {
+        if (!(src.indexOf('http') == 0)) {
+            src = layui.cache.base + 'notice/' + src + '.wav';
+        }
+        if (!!window.ActiveXObject || "ActiveXObject" in window) {  // IE
+            var embed = document.noticePlay;
+            if (embed) {
+                embed.remove();
+            }
+            embed = document.createElement('embed');
+            embed.setAttribute('name', 'noticePlay');
+            embed.setAttribute('src', src);
+            embed.setAttribute('autostart', true);
+            embed.setAttribute('loop', false);
+            embed.setAttribute('hidden', true);
+            document.body.appendChild(embed);
+            embed = document.noticePlay;
+            embed.volume = 100;
+        } else {   // 闈濱E
+            var audio = document.createElement('audio');
+            audio.setAttribute('hidden', true);
+            audio.setAttribute('src', src);
+            document.body.appendChild(audio);
+            audio.addEventListener('ended', function () {
+                audio.parentNode.removeChild(audio);
+            }, false);
+            audio.play();
+        }
+    };
+
+    // 涓嶅悓涓婚鐨勯�氱煡
+    forEach(THEMES, function (theme, name) {
+        $iziToast[name] = function (options) {
+            var settings = extend(CONFIG, options || {});
+            settings = extend(theme, settings || {});
+            this.show(settings);
+        };
+    });
+
+    layui.link(layui.cache.base + 'notice/notice.css');  // 鍔犺浇css
+    exports('notice', $iziToast);
+});
diff --git a/src/main/webapp/static/layui/lay/modules/tableMerge.js b/src/main/webapp/static/layui/lay/modules/tableMerge.js
new file mode 100644
index 0000000..4d26b3c
--- /dev/null
+++ b/src/main/webapp/static/layui/lay/modules/tableMerge.js
@@ -0,0 +1,75 @@
+/**
+ * Created by YujieYang.
+ * @name:  瀛愯〃鏍兼墿灞�
+ * @author: 鏉ㄧ帀鏉�
+ * @version 1.0
+ */
+layui.define(['table'], function (exports) {
+
+    var $ = layui.jquery;
+
+    // 灏佽鏂规硶
+    var mod = {
+        /**
+         * 娓叉煋鍏ュ彛
+         * @param myTable
+         */
+        render: function (myTable) {
+            var tableBox = $(myTable.elem).next().children('.layui-table-box'),
+                $main = $(tableBox.children('.layui-table-body').children('table').children('tbody').children('tr').toArray().reverse()),
+                $fixLeft = $(tableBox.children('.layui-table-fixed-l').children('.layui-table-body').children('table').children('tbody').children('tr').toArray().reverse()),
+                $fixRight = $(tableBox.children('.layui-table-fixed-r').children('.layui-table-body').children('table').children('tbody').children('tr').toArray().reverse()),
+                cols = myTable.cols[0], mergeRecord = {};
+
+            for (let i = 0; i < cols.length; i++) {
+                var item3 = cols[i], field=item3.field;
+                if (item3.merge) {
+                    var mergeField = [field];
+                    if (item3.merge !== true) {
+                        if (typeof item3.merge == 'string') {
+                            mergeField = [item3.merge]
+                        } else {
+                            mergeField = item3.merge
+                        }
+                    }
+                    mergeRecord[i] = {mergeField: mergeField, rowspan:1}
+                }
+            }
+
+            $main.each(function (i) {
+
+                for (var item in mergeRecord) {
+                    if (i==$main.length-1 || isMaster(i, item)) {
+                        $(this).children('[data-key$="-'+item+'"]').attr('rowspan', mergeRecord[item].rowspan).css('position','static');
+                        $fixLeft.eq(i).children('[data-key$="-'+item+'"]').attr('rowspan', mergeRecord[item].rowspan).css('position','static');
+                        $fixRight.eq(i).children('[data-key$="-'+item+'"]').attr('rowspan', mergeRecord[item].rowspan).css('position','static');
+                        mergeRecord[item].rowspan = 1;
+                    } else {
+                        $(this).children('[data-key$="-'+item+'"]').remove();
+                        $fixLeft.eq(i).children('[data-key$="-'+item+'"]').remove();
+                        $fixRight.eq(i).children('[data-key$="-'+item+'"]').remove();
+                        mergeRecord[item].rowspan +=1;
+                    }
+                }
+            })
+
+            function isMaster (index, item) {
+                var mergeField = mergeRecord[item].mergeField;
+                var dataLength = layui.table.cache[myTable.id].length;
+                for (var i=0; i<mergeField.length; i++) {
+
+                    if (layui.table.cache[myTable.id][dataLength-2-index][mergeField[i]]
+                        !== layui.table.cache[myTable.id][dataLength-1-index][mergeField[i]]) {
+                        return true;
+                    }
+                }
+                return false;
+            }
+
+        }
+    };
+
+    // 杈撳嚭
+    exports('tableMerge', mod);
+});
+
diff --git a/src/main/webapp/static/layui/lay/modules/tableX.js b/src/main/webapp/static/layui/lay/modules/tableX.js
new file mode 100644
index 0000000..90953ec
--- /dev/null
+++ b/src/main/webapp/static/layui/lay/modules/tableX.js
@@ -0,0 +1,645 @@
+锘�/** 琛ㄦ牸鎵╁睍妯″潡 date:2020-02-29   License By http://easyweb.vip */
+layui.define(['layer', 'table', 'laytpl', 'contextMenu'], function (exports) {
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var table = layui.table;
+    var laytpl = layui.laytpl;
+    var contextMenu = layui.contextMenu;
+    var device = layui.device();
+    var tbSearchAttr = 'tb-search';  // 鍓嶇鎼滅储灞炴��
+    var tbRefreshAttr = 'tb-refresh';  // 鍒锋柊鎸夐挳灞炴��
+    var tbExportAttr = 'tb-export';  // 瀵煎嚭鎸夐挳灞炴��
+    var txFieldPre = 'txField_';  // templte鍒梖iled鍓嶇紑
+    var tableX = {};
+
+    /* 鍚堝苟鐩稿悓鍗曞厓鏍� */
+    tableX.merges = function (tableId, indexs, fields, sort) {
+        if (typeof fields === 'boolean') {
+            sort = fields;
+            fields = undefined;
+        }
+        var $tb = $('[lay-filter="' + tableId + '"]+.layui-table-view>.layui-table-box>.layui-table-body>table');
+        var $trs = $tb.find('>tbody>tr');
+        // 寰幆鍚堝苟姣忎竴鍒�
+        for (var i = 0; i < indexs.length; i++) {
+            if (fields) {
+                merge(tableId, indexs[i], fields[i]);
+            } else {
+                merge(tableId, indexs[i]);
+            }
+        }
+        $trs.find('[del="true"]').remove();  // 绉婚櫎澶氫綑鐨勫崟鍏冩牸
+        // 鐩戝惉鎺掑簭浜嬩欢
+        if (sort === undefined || sort) {
+            table.on('sort(' + tableId + ')', function () {
+                tableX.merges(tableId, indexs, fields, false);
+            });
+        }
+
+        // 鍚堝苟涓�鍒�
+        function merge(tableId, index, field) {
+            var data = table.cache[tableId];
+            if (data.length > 0) {
+                var lastValue, spanNum = 1;
+                if (field) {
+                    lastValue = data[0][field];
+                } else {
+                    lastValue = $trs.eq(0).find('td').eq(index).find('.layui-table-cell').html();
+                }
+                for (var i = 1; i < data.length; i++) {
+                    var currentValue;
+                    if (field) {
+                        currentValue = data[i][field];
+                    } else {
+                        currentValue = $trs.eq(i).find('td').eq(index).find('.layui-table-cell').html();
+                    }
+                    if (currentValue === lastValue) {
+                        spanNum++;
+                        if (i === data.length - 1) {
+                            $trs.eq(i - spanNum + 1).find('td').eq(index).attr('rowspan', spanNum);
+                            for (var j = 1; j < spanNum; j++) {
+                                $trs.eq(i - j + 1).find('td').eq(index).attr('del', 'true');
+                            }
+                        }
+                    } else {
+                        $trs.eq(i - spanNum).find('td').eq(index).attr('rowspan', spanNum);
+                        for (var k = 1; k < spanNum; k++) {
+                            $trs.eq(i - k).find('td').eq(index).attr('del', 'true');
+                        }
+                        spanNum = 1;
+                        lastValue = currentValue;
+                    }
+                }
+            }
+        }
+    };
+
+    /* 琛ㄦ牸琛岀粦瀹氶紶鏍囧彸閿� */
+    tableX.bindCtxMenu = function (tableId, items) {
+        var data = table.cache[tableId];
+        var elem = '#' + tableId + '+.layui-table-view .layui-table-body tr';
+        $(elem).bind('contextmenu', function (event) {
+            var $this = $(this);
+            $(elem).removeClass('layui-table-click');
+            $this.addClass('layui-table-click');
+            var ctxItems;
+            if (typeof items === 'function') ctxItems = items(data[$this.data('index')], event.currentTarget);
+            else ctxItems = items;
+
+            function getCtxItems(menus) {
+                if (!menus) return;
+                var result = [];
+                for (var i = 0; i < menus.length; i++) {
+                    result.push({
+                        icon: menus[i].icon,
+                        name: menus[i].name,
+                        _click: menus[i].click,
+                        click: function (e, e2) {
+                            var $tr = $(e2.currentTarget);
+                            this._click && this._click(data[$tr.data('index')], e2.currentTarget);
+                            $tr.removeClass('layui-table-click');
+                        },
+                        subs: getCtxItems(menus[i].subs)
+                    });
+                }
+                return result;
+            }
+
+            contextMenu.show(getCtxItems(ctxItems), event.clientX, event.clientY, event);
+            return false;
+        });
+    };
+
+    /* 瀵煎嚭浠绘剰鏁版嵁 */
+    tableX.exportData = function (param) {
+        var cols = param.cols;  // 琛ㄥご
+        var data = param.data;  // 鏁版嵁
+        var fileName = param.fileName;  // 鏂囦欢鍚�
+        var fileType = param.expType;  // 绫诲瀷锛寈ls銆乧sv
+        var option = param.option;  // url鏂瑰紡鍔犺浇鐨勯厤缃�
+        option || (option = {});
+        if (device.ie) return layer.msg('涓嶆敮鎸乮e瀵煎嚭');
+        // data涓簎rl鍏堣姹傛暟鎹�
+        if (typeof data === 'string') {
+            var loadIndex = layer.load(2);
+            option.url = data;
+            tableX.loadUrl(option, function (res) {
+                layer.close(loadIndex);
+                param.data = res;
+                tableX.exportData(param);
+            });
+            return;
+        }
+        // 鍒楀弬鏁拌ˉ鍏�
+        for (var i = 0; i < cols.length; i++) {
+            for (var j = 0; j < cols[i].length; j++) {
+                if (cols[i][j].type === undefined) {
+                    cols[i][j].type = 'normal';
+                }
+                if (cols[i][j].hide === undefined) {
+                    cols[i][j].hide = false;
+                }
+            }
+        }
+        var titles = [], fields = [], expData = [];
+        // 鑾峰彇琛ㄥご鍜岃〃澶村瓧娈靛悕
+        table.eachCols(undefined, function (i, item) {
+            if (item.type === 'normal' && !item.hide) {
+                titles.push(item.title || '');
+                fields.push(item.field || (txFieldPre + i));
+            }
+        }, cols);
+        // 鑾峰彇templet鍚庣殑鏁版嵁
+        var fullData = tableX.parseTbData(cols, tableX.deepClone(data), true);
+        for (var n = 0; n < fullData.length; n++) {
+            var rowItem = [];
+            for (var m = 0; m < fields.length; m++) {
+                var text = fullData[n][fields[m]];
+                text && (text = text.toString().replace(/,/g, '锛�'));
+                rowItem.push(text);
+            }
+            expData.push(rowItem.join(','));
+        }
+        // 鍒涘缓涓嬭浇鏂囦欢鐨刟鏍囩
+        var alink = document.createElement('a');
+        var type = ({csv: 'text/csv', xls: 'application/vnd.ms-excel'})[fileType || 'xls'];
+        var content = encodeURIComponent(titles.join(',') + '\r\n' + expData.join('\r\n'));
+        alink.href = 'data:' + type + ';charset=utf-8,\ufeff' + content;
+        alink.download = (fileName || 'table') + '.' + (fileType || 'xls');
+        document.body.appendChild(alink);
+        alink.click();
+        document.body.removeChild(alink);
+    };
+
+    /* 瀵煎嚭琛ㄦ牸鏁版嵁(楂樼骇) */
+    tableX.exportDataX = function (param) {
+        layui.use('excel', function () {
+            var excel = layui.excel;
+            var cols = param.cols;  // 琛ㄥご
+            var data = param.data;  // 鏁版嵁
+            var fileName = param.fileName;  // 鏂囦欢鍚�
+            var fileType = param.expType;  // 绫诲瀷锛寈ls銆亁lsx
+            var option = param.option;  // url鏂瑰紡鍔犺浇鐨勯厤缃�
+            option || (option = {});
+            fileType || (fileType = 'xlsx');
+            // data涓簎rl鍏堣姹傛暟鎹�
+            if (data && typeof data === 'string') {
+                var loadIndex = layer.load(2);
+                option.url = data;
+                tableX.loadUrl(option, function (res) {
+                    layer.close(loadIndex);
+                    param.data = res;
+                    tableX.exportDataX(param);
+                });
+                return;
+            }
+            // 鍒楀弬鏁拌ˉ鍏�
+            for (var i = 0; i < cols.length; i++) {
+                for (var j = 0; j < cols[i].length; j++) {
+                    if (cols[i][j].type === undefined) {
+                        cols[i][j].type = 'normal';
+                    }
+                    if (cols[i][j].hide === undefined) {
+                        cols[i][j].hide = false;
+                    }
+                }
+            }
+            // 鑾峰彇琛ㄥご鍜岃〃澶村瓧娈靛悕
+            var titles = {}, fields = [];
+            table.eachCols(undefined, function (i, item) {
+                if (item.type === 'normal' && !item.hide) {
+                    var field = item.field || (txFieldPre + i);
+                    fields.push(field);
+                    titles[field] = item.title || '';
+                }
+            }, cols);
+            // 鏍煎紡鍖栨暟鎹�
+            var fullData = tableX.parseTbData(cols, tableX.deepClone(data), true);
+            var expData = excel.filterExportData(fullData, fields);
+            expData.unshift(titles);
+            excel.exportExcel({sheet1: expData}, (fileName || 'table') + '.' + fileType, fileType);
+        });
+    };
+
+    /* 鍚庣瀵煎嚭鏁版嵁鎷兼帴鍙傛暟 */
+    tableX.exportDataBack = function (url, where, method) {
+        where || (where = {});
+        if (!method || method.toString().toLowerCase() === 'get') {
+            var param = '';
+            for (var f in where) {
+                if (!param) {
+                    param = ('?' + f + '=' + where[f]);
+                } else {
+                    param += ('&' + f + '=' + where[f]);
+                }
+            }
+            window.open(url + param);
+        } else {
+            var htmlStr = '<html><body><form id="eFrom" action="' + url + '" method="' + method + '">';
+            for (var f2 in where) {
+                htmlStr += ('<textarea name="' + f2 + '">' + where[f2] + '</textarea>');
+            }
+            htmlStr += '</form></body></html>';
+            $('#exportFrame').remove();
+            $('body').append('<iframe id="exportFrame" style="display: none;"></iframe>');
+            var eFrame = document.getElementById('exportFrame');
+            var eWindow = eFrame.contentWindow;
+            var eDocument = eWindow.document;
+            eWindow.focus();
+            eDocument.open();
+            eDocument.write(htmlStr);
+            eDocument.close();
+            eDocument.getElementById('eFrom').submit();
+        }
+    };
+
+    /* 娓叉煋琛ㄦ牸锛屽悗绔帓搴� */
+    tableX.render = function (param) {
+        var tableId = $(param.elem).attr('lay-filter');
+        param.autoSort = false;  // 鍏抽棴榛樿鎺掑簭
+        var insTb = table.render(param);  // 娓叉煋琛ㄦ牸
+        // 鎺掑簭鐩戝惉
+        table.on('sort(' + tableId + ')', function (obj) {
+            var sortField = obj.field, sortType = obj.type; // 鎺掑簭瀛楁銆佺被鍨�
+            var sortWhere = $.extend(param.where, {sort: sortField, order: sortType});
+            insTb.reload({where: sortWhere, page: {curr: 1}});
+        });
+        return insTb;
+    };
+
+    /* 娓叉煋琛ㄦ牸锛屽墠绔垎椤� */
+    tableX.renderFront = function (param) {
+        var insTb, tableId = $(param.elem).attr('lay-filter');
+        param.autoSort = false;  // 鍏抽棴榛樿鎺掑簭
+        // 娌℃湁field鐨則emplet鍒楄ˉ涓婏紝鍥犱负鎺掑簭蹇呴』鏈塮iled瀛楁锛屽惁鍒欑偣鍑绘帓搴忎細鎶ラ敊
+        for (var i = 0; i < param.cols.length; i++) {
+            for (var j = 0; j < param.cols[i].length; j++) {
+                if (param.cols[i][j].templet && !param.cols[i][j].field) {
+                    param.cols[i][j].field = txFieldPre + i + '_' + j;
+                }
+            }
+        }
+        if (param.url) {  // url鏂瑰紡
+            var xParam = tableX.deepClone(param);
+            xParam.data = [];
+            xParam.url = undefined;
+            insTb = table.render(xParam);  // 鍏堟覆鏌撹〃鏍肩粨鏋�
+            // 鎻愪緵鍒锋柊鏂规硶
+            insTb.reloadUrl = function (p) {
+                var reParam = tableX.deepClone(param);
+                p && (reParam = $.extend(reParam, p));
+                $(param.elem + '+.layui-table-view>.layui-table-box').append('<div class="layui-table-init"><i class="layui-icon layui-icon-loading layui-anim layui-anim-rotate layui-anim-loop"></i></div>');
+                // 鑾峰彇url鏁版嵁
+                tableX.loadUrl(reParam, function (data) {
+                    insTb.reload({url: '', data: data, page: {curr: 1}});
+                    tableX.putTbData(tableId, tableX.parseTbData(reParam.cols, data));  // 缂撳瓨鏁版嵁
+                    $('input[' + tbSearchAttr + '="' + tableId + '"]').val('');  // 娓呯┖鎼滅储杈撳叆妗�
+                    window.tbX.cacheSearch[tableId] = undefined;  // 閲嶇疆鎼滅储缁撴灉
+                });
+            };
+            insTb.reloadUrl();
+        } else {
+            insTb = table.render(param);  // 娓叉煋琛ㄦ牸
+            // 鎻愪緵鍒锋柊鐨勬柟娉�
+            insTb.reloadData = function (p) {
+                insTb.reload(p);
+                tableX.parseTbData(param.cols, p.data);  // 瑙f瀽temple鍒�
+                tableX.putTbData(tableId, p.data);
+                $('input[' + tbSearchAttr + '="' + tableId + '"]').val('');  // 娓呯┖鎼滅储杈撳叆妗�
+                window.tbX.cacheSearch[tableId] = undefined;  // 閲嶇疆鎼滅储缁撴灉
+            };
+            tableX.putTbData(tableId, tableX.parseTbData(param.cols, param.data));  // 缂撳瓨鏁版嵁
+        }
+        tableX.renderAllTool(insTb);  // 娓叉煋宸ュ叿缁勪欢
+        return insTb;
+    };
+
+    /* 鍔犺浇琛ㄦ牸鏁版嵁 */
+    tableX.loadUrl = function (options, callback) {
+        // 鍝嶅簲鏁版嵁鐨勮嚜瀹氫箟鏍煎紡
+        options.response = $.extend({
+            statusName: 'code',
+            statusCode: 0,
+            msgName: 'msg',
+            dataName: 'data',
+            countName: 'count'
+        }, options.response);
+        var response = options.response;
+        var where = options.where;   // 鍙傛暟
+        if (options.contentType && options.contentType.indexOf('application/json') === 0) {
+            where = JSON.stringify(where);  // 鎻愪氦 json 鏍煎紡
+        }
+        $.ajax({
+            type: options.method || 'get',
+            url: options.url,
+            contentType: options.contentType,
+            data: where,
+            dataType: 'json',
+            headers: options.headers || {},
+            success: function (res) {
+                // 濡傛灉鏈夋暟鎹В鏋愮殑鍥炶皟锛屽垯鑾峰緱鍏惰繑鍥炵殑鏁版嵁
+                if (typeof options.parseData === 'function') {
+                    res = options.parseData(res) || res;
+                }
+                // 妫�鏌ユ暟鎹牸寮忔槸鍚︾鍚堣鑼�
+                if (res[response.statusName] != response.statusCode) {
+                    var msgText = res[response.msgName] || ('杩斿洖鐨勬暟鎹笉绗﹀悎瑙勮寖锛屾纭殑鎴愬姛鐘舵�佺爜 (' + response.statusName + ') 搴斾负锛�' + response.statusCode);
+                    layer.msg(msgText, {icon: 2});
+                } else {
+                    callback(res[response.dataName]);
+                }
+            },
+            error: function (e, m) {
+                layer.msg('鏁版嵁鎺ュ彛璇锋眰寮傚父锛�' + m, {icon: 2});
+            }
+        });
+    };
+
+    /* 瑙f瀽鏁版嵁琛ㄦ牸templet鍒� */
+    tableX.parseTbData = function (cols, dataList, overwrite) {
+        var templets = [];  // 闇�瑕佽В鏋愮殑鍒�
+        table.eachCols(undefined, function (i, item) {
+            if (item.templet) {
+                var one = {field: ((item.field && (overwrite || item.field.indexOf(txFieldPre) === 0)) ? item.field : ('txField_' + i))};
+                if (typeof item.templet === 'string') {
+                    one.templet = function (d) {  // templet鍒椾娇鐢╨aytpl娓叉煋
+                        var rsStr = undefined;
+                        laytpl($(item.templet).html()).render(d, function (html) {
+                            rsStr = html;
+                        });
+                        return rsStr;
+                    }
+                } else {
+                    one.templet = item.templet;
+                }
+                templets.push(one);
+            }
+        }, cols);
+        for (var i = 0; i < dataList.length; i++) {
+            var current = dataList[i];
+            for (var j = 0; j < templets.length; j++) {
+                var htmlStr = '<div>' + templets[j].templet(current) + '</div>';
+                current[templets[j].field] = $(htmlStr).not('.export-hide').text().replace(/(^\s*)|(\s*$)/g, '');  // 鍘婚櫎鍓嶅悗绌烘牸
+            }
+        }
+        return dataList;
+    };
+
+    /* 缂撳瓨琛ㄦ牸鐨勬暟鎹� */
+    tableX.putTbData = function (tableId, dataList) {
+        window.tbX.cache[tableId] = dataList;
+    };
+
+    /* 鑾峰彇琛ㄦ牸缂撳瓨鐨勬暟鎹� */
+    tableX.getTbData = function (tableId) {
+        var dataList = window.tbX.cache[tableId];
+        return tableX.deepClone(dataList || table.cache[tableId]);
+    };
+
+    /* 鎼滅储鏁版嵁 */
+    tableX.filterData = function (dataList, searchName, searchValue) {
+        var newList = [], sfs;
+        for (var i = 0; i < dataList.length; i++) {
+            var obj = dataList[i];
+            if (!sfs) {  // 鎼滅储鐨勫瓧娈�
+                if (!searchName) {
+                    sfs = [];
+                    for (var f in obj) {
+                        if (!obj.hasOwnProperty(f)) continue;
+                        sfs.push(f);
+                    }
+                } else {
+                    sfs = searchName.split(',');
+                }
+            }
+            for (var j = 0; j < sfs.length; j++) {
+                if (tableX.isContains(obj[sfs[j]], searchValue)) {
+                    newList.push(obj);
+                    break;
+                }
+            }
+        }
+        return newList;
+    };
+
+    /* 瀛楃涓叉槸鍚﹀寘鍚� */
+    tableX.isContains = function (str1, str2) {
+        str1 || (str1 = '');
+        str2 || (str2 = '');
+        str1 = str1.toString().toLowerCase();
+        str2 = str2.toString().toLowerCase();
+        if (str1 === str2 || str1.indexOf(str2) >= 0) {
+            return true;
+        }
+        return false;
+    };
+
+    /* 娓叉煋鎵�鏈夌粍浠� */
+    tableX.renderAllTool = function (insTb) {
+        renderRefresh(insTb);  // 鍒锋柊
+        renderFrontSort(insTb);  // 鎺掑簭
+        renderFrontSearch(insTb);  // 鎼滅储
+        renderExport(insTb);  // 瀵煎嚭
+    };
+
+    /* 娣卞害鍏嬮殕瀵硅薄 */
+    tableX.deepClone = function (obj) {
+        var result;
+        var oClass = tableX.isClass(obj);
+        if (oClass === 'Object') {
+            result = {};
+        } else if (oClass === 'Array') {
+            result = [];
+        } else {
+            return obj;
+        }
+        for (var key in obj) {
+            if (!obj.hasOwnProperty(key)) continue;
+            var copy = obj[key];
+            if (tableX.isClass(copy) === 'Object') {
+                result[key] = arguments.callee(copy);//閫掑綊璋冪敤
+            } else if (tableX.isClass(copy) === 'Array') {
+                result[key] = arguments.callee(copy);
+            } else {
+                result[key] = obj[key];
+            }
+        }
+        return result;
+    };
+
+    /* 鑾峰彇鍙橀噺绫诲瀷 */
+    tableX.isClass = function (o) {
+        if (o === null)
+            return 'Null';
+        if (o === undefined)
+            return 'Undefined';
+        return Object.prototype.toString.call(o).slice(8, -1);
+    };
+
+    // 鍒涘缓鏁版嵁缂撳瓨瀵硅薄
+    window.tbX || (window.tbX = {});
+    window.tbX.cache || (window.tbX.cache = {});
+    window.tbX.cacheSearch || (window.tbX.cacheSearch = {});
+
+    // 鍓嶇鎼滅储
+    var renderFrontSearch = function (insTb) {
+        var tableId = insTb.config.id, $input = $('input[' + tbSearchAttr + '="' + tableId + '"]');
+        if (!($input && $input.length > 0)) {
+            return;
+        }
+        if (!$input.attr('placeholder')) {
+            $input.attr('placeholder', '杈撳叆鍏抽敭瀛楁寜鍥炶溅閿悳绱�');
+        }
+        $input.off('keydown').on('keydown', function (event) {
+            if (event.keyCode !== 13) {
+                return;
+            }
+            var searchName = $input.attr('name');  // 鎼滅储鐨勫瓧娈靛悕锛岀敤閫楀彿鍒嗛殧
+            var searchValue = $input.val().replace(/(^\s*)|(\s*$)/g, '');  // 鎼滅储鍏抽敭瀛�
+            var loadIndex = layer.msg('鎼滅储涓�..', {icon: 16, shade: 0.01, time: 0});
+            var dataList = tableX.getTbData(tableId);
+            var newDataList = tableX.filterData(dataList, searchName, searchValue);
+            window.tbX.cacheSearch[tableId] = newDataList;  // 缂撳瓨鎼滅储鍚庣殑鏁版嵁鐢ㄤ簬鎺掑簭
+            insTb.reload({url: '', data: newDataList, page: {curr: 1}});
+            layer.close(loadIndex);
+        });
+    };
+
+    // 鍓嶇鎺掑簭
+    var renderFrontSort = function (insTb) {
+        var tableId = insTb.config.id;
+        table.on('sort(' + tableId + ')', function (obj) {
+            var sortField = obj.field, sortType = obj.type; // 鎺掑簭瀛楁銆佺被鍨�
+            var loadIndex = layer.msg('鍔犺浇涓�..', {icon: 16, shade: 0.01, time: 0});
+            var dataList = window.tbX.cacheSearch[tableId];  // 琛ㄦ牸鎼滅储鍚庣殑鏁版嵁
+            dataList || (dataList = tableX.getTbData(tableId));
+            if (sortType) {
+                dataList = dataList.sort(function (o1, o2) {
+                    var o1Str = o1[sortField], o2Str = o2[sortField];
+                    if (sortType === 'asc') {  // 鍗囧簭
+                        return (o1Str === o2Str) ? 0 : ((o1Str < o2Str) ? -1 : 1);
+                    } else {  // 闄嶅簭
+                        return (o1Str === o2Str) ? 0 : ((o1Str < o2Str) ? 1 : -1);
+                    }
+                });
+            }
+            insTb.reload({initSort: obj, url: '', data: dataList, page: {curr: 1}});
+            layer.close(loadIndex);
+        });
+    };
+
+    // 琛ㄦ牸鍒锋柊鎸夐垥
+    var renderRefresh = function (insTb) {
+        $('[' + tbRefreshAttr + '="' + insTb.config.id + '"]').off('click').on('click', function () {
+            if (insTb.reloadUrl) {
+                insTb.reloadUrl();
+            } else {
+                insTb.reload({page: {curr: 1}});
+            }
+        });
+    };
+
+    // 娓叉煋瀵煎嚭鎸夐挳
+    var renderExport = function (insTb) {
+        var tableId = insTb.config.id;
+        $('[' + tbExportAttr + '="' + tableId + '"]').off('click').on('click', function (event) {
+            if ($(this).find('.tbx-dropdown-menu').length > 0) {
+                return;
+            }
+            if (event !== void 0) {
+                event.preventDefault();
+                event.stopPropagation();
+            }
+            var htmlStr = '<div class="tbx-dropdown-menu">';
+            htmlStr += '      <div class="tbx-dropdown-menu-item" data-type="check">瀵煎嚭閫変腑鏁版嵁</div>';
+            htmlStr += '      <div class="tbx-dropdown-menu-item" data-type="current">瀵煎嚭褰撳墠椤垫暟鎹�</div>';
+            htmlStr += '      <div class="tbx-dropdown-menu-item" data-type="all">瀵煎嚭鍏ㄩ儴鏁版嵁</div>';
+            htmlStr += '   </div>';
+            $(this).append(htmlStr);
+            $(this).addClass('tbx-dropdown-btn');
+            $(this).parent().css('position', 'relative');
+            $(this).parent().css('z-index', '9998');
+            $('.tbx-dropdown-menu').off('click').on('click', '.tbx-dropdown-menu-item', function (event) {
+                var type = $(this).data('type');
+                if (type === 'check') {
+                    var checkRows = table.checkStatus(tableId);
+                    if (checkRows.data.length === 0) {
+                        layer.msg('璇烽�夋嫨瑕佸鍑虹殑鏁版嵁', {icon: 2});
+                    } else {
+                        $('.tbx-dropdown-menu').remove();
+                        tableX.exportData({
+                            fileName: insTb.config.title,
+                            cols: insTb.config.cols,
+                            data: checkRows.data
+                        });
+                    }
+                } else if (type === 'current') {
+                    tableX.exportData({
+                        fileName: insTb.config.title,
+                        cols: insTb.config.cols,
+                        data: table.cache[tableId]
+                    });
+                } else if (type === 'all') {
+                    tableX.exportData({
+                        fileName: insTb.config.title,
+                        cols: insTb.config.cols,
+                        data: tableX.getTbData(tableId)
+                    });
+                }
+                if (event !== void 0) {
+                    event.preventDefault();
+                    event.stopPropagation();
+                }
+            });
+        });
+        $(document).off('click.tbxDropHide').on('click.tbxDropHide', function () {
+            $('.tbx-dropdown-menu').remove();
+        });
+    };
+
+    /* css鏍峰紡 */
+    var getCommonCss = function () {
+        var cssStr = '.tbx-dropdown-btn {';
+        cssStr += '        position: relative;';
+        cssStr += '   }';
+        cssStr += '   .tbx-dropdown-btn:hover {';
+        cssStr += '        opacity: 1';
+        cssStr += '   }';
+        cssStr += '   .tbx-dropdown-menu {';
+        cssStr += '        position: absolute;';
+        cssStr += '        top: 100%;';
+        cssStr += '        right: 0;';
+        cssStr += '        padding: 5px 0;';
+        cssStr += '        margin: 5px 0 0 0;';
+        cssStr += '        overflow: visible;';
+        cssStr += '        min-width: 110px;';
+        cssStr += '        background: #fff;';
+        cssStr += '        border-radius: 2px;';
+        cssStr += '        box-shadow: 0 2px 4px rgba(0, 0, 0, .12);';
+        cssStr += '        border: 1px solid #d2d2d2;';
+        cssStr += '        z-index: 9998;';
+        cssStr += '        cursor: default;';
+        cssStr += '   }';
+        cssStr += '   .tbx-dropdown-menu .tbx-dropdown-menu-item {';
+        cssStr += '        display: block;';
+        cssStr += '        color: #555;';
+        cssStr += '        font-size: 14px;';
+        cssStr += '        padding: 10px 15px;';
+        cssStr += '        text-decoration: none;';
+        cssStr += '        white-space: nowrap;';
+        cssStr += '        cursor: pointer;';
+        cssStr += '        user-select: none;';
+        cssStr += '        line-height: normal;';
+        cssStr += '   }';
+        cssStr += '   .tbx-dropdown-menu .tbx-dropdown-menu-item:hover {';
+        cssStr += '        background-color: #eeeeee;';
+        cssStr += '   }';
+        cssStr += '   .export-show {';
+        cssStr += '        display: none;';
+        cssStr += '   }';
+        return cssStr;
+    };
+
+    $('head').append('<style id="ew-css-tbx" type="text/css">' + getCommonCss() + '</style>');
+    exports("tableX", tableX);
+});
\ No newline at end of file
diff --git a/src/main/webapp/static/layui/lay/modules/treeTable.js b/src/main/webapp/static/layui/lay/modules/treeTable.js
new file mode 100644
index 0000000..17d641d
--- /dev/null
+++ b/src/main/webapp/static/layui/lay/modules/treeTable.js
@@ -0,0 +1,2 @@
+/** 鏍戝舰琛ㄦ牸3.x Created by wangfan on 2020-05-12 https://gitee.com/whvse/treetable-lay */
+layui.define(["laytpl","form","util"],function(s){var g=layui.jquery;var d=layui.laytpl;var c=layui.form;var b=layui.util;var o=layui.device();var h="treeTable";var k={};var e={elem:undefined,cols:undefined,url:undefined,method:undefined,where:undefined,contentType:undefined,headers:undefined,parseData:undefined,request:{pidName:"pid"},toolbar:undefined,defaultToolbar:undefined,width:undefined,height:undefined,cellMinWidth:90,done:undefined,data:undefined,title:undefined,skin:undefined,even:undefined,size:undefined,text:{none:"鏃犳暟鎹�"},reqData:undefined,useAdmin:false,tree:{idName:"id",pidName:"pid",childName:"children",haveChildName:"haveChild",openName:"open",iconIndex:0,arrowType:undefined,onlyIconControl:undefined,getIcon:function(u){var t=u[this.haveChildName];if(t!==undefined){t=t===true||t==="true"}else{if(u[this.childName]){t=u[this.childName].length>0}}if(t){return'<i class="ew-tree-icon layui-icon layui-icon-layer"></i>'}else{return'<i class="ew-tree-icon layui-icon layui-icon-file"></i>'}}}};var r={field:undefined,title:undefined,width:undefined,minWidth:undefined,type:"normal",fixed:undefined,hide:undefined,unresize:undefined,style:undefined,align:undefined,colspan:undefined,rowspan:undefined,templet:undefined,toolbar:undefined,"class":undefined,singleLine:undefined};var p=function(t){k[t.elem.substring(1)]=this;this.reload(t)};p.prototype.initOptions=function(t){var D=this;function B(J){if(!J.INIT_OK){J=g.extend({INIT_OK:true},r,J)}if(J.type==="space"){if(!J.width){J.width=15}J.minWidth=J.width}else{if(J.type==="numbers"){if(!J.width){J.width=40}J.minWidth=J.width;if(!J.singleLine){J.singleLine=false}if(!J.unresize){J.unresize=true}if(!J.align){J.align="center"}}else{if(J.type==="checkbox"||J.type==="radio"){if(!J.width){J.width=48}J.minWidth=J.width;if(!J.singleLine){J.singleLine=false}if(!J.unresize){J.unresize=true}if(!J.align){J.align="center"}}}}if(J.toolbar){J.type="tool"}return J}if("Array"!==l(t.cols[0])){t.cols=[t.cols]}for(var w=0;w<t.cols.length;w++){for(var u=0;u<t.cols[w].length;u++){t.cols[w][u].INIT_OK=undefined;t.cols[w][u].key=undefined;t.cols[w][u].colGroup=undefined;t.cols[w][u].HAS_PARENT=undefined;t.cols[w][u].parentKey=undefined;t.cols[w][u].PARENT_COL_INDEX=undefined}}var F=[],G=0;for(var y=0;y<t.cols.length;y++){var C=t.cols[y];for(var x=0;x<C.length;x++){var A=C[x];if(!A){C.splice(x,1);continue}A=B(A);A.key=y+"-"+x;var I=undefined;if(A.colGroup||A.colspan>1){A.colGroup=true;A.type="group";I=[];G++;var z=0;for(var v=0;v<t.cols[y+1].length;v++){var H=g.extend({INIT_OK:true},r,t.cols[y+1][v]);if(H.HAS_PARENT||(z>1&&z==A.colspan)){t.cols[y+1][v]=H;continue}H.HAS_PARENT=true;H.parentKey=y+"-"+x;H.key=(y+1)+"-"+v;H.PARENT_COL_INDEX=G;H=B(H);I.push(H);z=z+parseInt(H.colspan>1?H.colspan:1);t.cols[y+1][v]=H}}A.CHILD_COLS=I;if(!A.PARENT_COL_INDEX){F.push(A)}t.cols[y][x]=A}}this.options=g.extend(true,{},e,t);this.options.colArrays=F;if(this.options.url){this.options.reqData=function(J,K){if(!D.options.where){D.options.where={}}if(J){D.options.where[D.options.request.pidName]=J[D.options.tree.idName]}(D.options.useAdmin?layui.admin:g).ajax({url:D.options.url,data:D.options.contentType&&D.options.contentType.indexOf("application/json")===0?JSON.stringify(D.options.where):D.options.where,headers:D.options.headers,type:D.options.method,dataType:"json",contentType:D.options.contentType,success:function(L){if(D.options.parseData){L=D.options.parseData(L)}if(L.code==0){K(L.data)}else{K(L.msg||"鍔犺浇澶辫触")}},error:function(L){K(L.status+" - "+L.statusText)}})}}else{if(this.options.data&&this.options.data.length>0&&this.options.tree.isPidData){this.options.data=a.pidToChildren(this.options.data,this.options.tree.idName,this.options.tree.pidName,this.options.tree.childName)}}if("default"===this.options.toolbar){this.options.toolbar=["<div>",'   <div class="ew-tree-table-tool-item" title="娣诲姞" lay-event="add">','      <i class="layui-icon layui-icon-add-1"></i>',"   </div>",'   <div class="ew-tree-table-tool-item" title="淇敼" lay-event="update">','      <i class="layui-icon layui-icon-edit"></i>',"   </div>",'   <div class="ew-tree-table-tool-item" title="鍒犻櫎" lay-event="delete">','      <i class="layui-icon layui-icon-delete"></i>',"   </div>","</div>"].join("")}if(this.options.defaultToolbar===undefined){this.options.defaultToolbar=["filter","exports","print"]}if(typeof this.options.tree.getIcon==="string"){var E=this.options.tree.getIcon;this.options.tree.getIcon=function(K){if(E!=="ew-tree-icon-style2"){return E}var J=K[this.haveChildName];if(J!==undefined){J=J===true||J==="true"}else{if(K[this.childName]){J=K[this.childName].length>0}}if(J){return'<i class="ew-tree-icon ew-tree-icon-folder"></i>'}else{return'<i class="ew-tree-icon ew-tree-icon-file"></i>'}}}};p.prototype.init=function(){var E=this.options;var u=g(E.elem);var B=E.elem.substring(1);u.removeAttr("lay-filter");if(u.next(".ew-tree-table").length===0){u.css("display","none");u.after(['<div class="layui-form ew-tree-table" lay-filter="',B,'" style="',E.style||"",'">','   <div class="ew-tree-table-tool" style="display: none;"></div>','   <div class="ew-tree-table-head">','      <table class="layui-table"></table>',"   </div>",'   <div class="ew-tree-table-box">','      <table class="layui-table"></table>','      <div class="ew-tree-table-loading">','         <i class="layui-icon layui-icon-loading layui-anim layui-anim-rotate layui-anim-loop"></i>',"      </div>",'      <div class="ew-tree-table-empty">',E.text.none||"","</div>","   </div>","</div>"].join(""))}var A=this.getComponents();if(E.skin){A.$table.attr("lay-skin",E.skin)}if(E.size){A.$table.attr("lay-size",E.size)}if(E.even){A.$table.attr("lay-even",E.even)}A.$toolbar.empty();if(E.toolbar===false||E.toolbar===undefined){A.$toolbar.hide()}else{A.$toolbar.show();if(typeof E.toolbar==="string"){d(g(E.toolbar).html()).render({},function(F){A.$toolbar.html('<div style="display: inline-block;">'+F+"</div>")})}var C=['<div class="ew-tree-table-tool-right">'];for(var y=0;y<E.defaultToolbar.length;y++){var w;if("filter"===E.defaultToolbar[y]){w={title:"绛涢��",layEvent:"LAYTABLE_COLS",icon:"layui-icon-cols"}}else{if("exports"===E.defaultToolbar[y]){w={title:"瀵煎嚭",layEvent:"LAYTABLE_EXPORT",icon:"layui-icon-export"}}else{if("print"===E.defaultToolbar[y]){w={title:"鎵撳嵃",layEvent:"LAYTABLE_PRINT",icon:"layui-icon-print"}}else{w=E.defaultToolbar[y]}}}if(w){C.push('<div class="ew-tree-table-tool-item"');C.push(' title="'+w.title+'"');C.push(' lay-event="'+w.layEvent+'">');C.push('<i class="layui-icon '+w.icon+'"></i></div>')}}A.$toolbar.append(C.join("")+"</div>")}if(E.width){A.$view.css("width",E.width);A.$tHeadGroup.css("width",E.width);A.$tBodyGroup.css("width",E.width)}var v=this.resize(true);var D="<thead>"+this.renderBodyTh()+"</thead>";A.$tBodyGroup.children("style").remove();if(E.height){A.$tHead.html(v+D);A.$tBody.html(v+"<tbody></tbody>");if(E.height.indexOf("full-")===0){var z=parseFloat(E.height.substring(5))+A.$toolbar.outerHeight()+A.$tHeadGroup.outerHeight()+1;A.$tBodyGroup.append(['<style>[lay-filter="',B,'"] .ew-tree-table-box {',"   height: ",m()-z,"px;","   height: -moz-calc(100vh - ",z,"px);","   height: -webkit-calc(100vh - ",z,"px);","   height: calc(100vh - ",z,"px);","}</style>"].join(""));A.$tBodyGroup.data("full",z);A.$tBodyGroup.css("height","")}else{A.$tBodyGroup.css("height",E.height);A.$tBodyGroup.data("full","")}A.$tHeadGroup.show()}else{A.$tHeadGroup.hide();var x={lg:50,sm:30,md:38};A.$tBodyGroup.append(['<style>[lay-filter="',B,'"] .ew-tree-table-box:before {','   content: "";',"   position: absolute;","   top: 0; left: 0; right: 0;","   height: "+(x[E.size||"md"]*E.cols.length)+"px;","   background-color: #f2f2f2;","   border-bottom: 1px solid #e6e6e6;","}</style>"].join(""));A.$tBody.html(v+D+"<tbody></tbody>")}c.render("checkbox",B);function t(H){var F=H.data("parent"),G;if(!F){return}var I=A.$table.children("thead").children("tr").children('[data-key="'+F+'"]');var J=I.attr("colspan")-1;I.attr("colspan",J);if(J===0){I.addClass("layui-hide")}t(I)}A.$table.children("thead").children("tr").children("th.layui-hide").each(function(){t(g(this))});if(E.reqData){this.options.data=undefined;this.renderBodyAsync()}else{if(E.data&&E.data.length>0){this.renderBodyData(E.data)}else{A.$loading.hide();A.$empty.show()}}};p.prototype.bindEvents=function(){var v=this;var t=this.options;var u=this.getComponents();var w=u.$table.children("tbody");var x=function(y){var z=g(this);if(!z.is("tr")){var C=z.parent("tr");if(C.length>0){z=C}else{z=z.parentsUntil("tr").last().parent()}}var A=v.getDataByTr(z);var B={tr:z,data:A,del:function(){var F=z.data("index");var D=parseInt(z.data("indent"));z.nextAll("tr").each(function(){if(parseInt(g(this).data("indent"))<=D){return false}g(this).remove()});var G=(typeof F==="number"?1:F.split("-").length);z.nextAll("tr").each(function(){var H=g(this);if(parseInt(H.data("indent"))<D){return false}var I=H.data("index").toString().split("-");I[G-1]=parseInt(I[G-1])-1;H.data("index",I.join("-"))});var E=z.prevAll("tr");v.del(undefined,F);z.remove();v.renderNumberCol();E.each(function(){var H=parseInt(g(this).data("indent"));if(H>=D){return true}v.checkParentCB(g(this));D=H});v.checkChooseAllCB();if(t.data.length===0){u.$empty.show()}f(u.$view)},update:function(E){A=g.extend(true,A,E);var D=parseInt(z.data("indent"));v.renderBodyTr(A,D,undefined,z);c.render(null,u.filter);v.renderNumberCol();z.prevAll("tr").each(function(){var F=parseInt(g(this).data("indent"));if(F>=D){return true}v.checkParentCB(g(this));D=F});v.checkChooseAllCB()}};return g.extend(B,y)};w.off("click.fold").on("click.fold",".ew-tree-pack",function(C){layui.stope(C);var A=g(this).parentsUntil("tr").last().parent();if(A.hasClass("ew-tree-table-loading")){return}var y=A.data("have-child");if(y!==true&&y!=="true"){return}var z=A.hasClass("ew-tree-table-open");var B=v.getDataByTr(A);if(!z&&!B[t.tree.childName]){v.renderBodyAsync(B,A)}else{B[t.tree.openName]=i(A)}});w.off("click.tool").on("click.tool","*[lay-event]",function(z){layui.stope(z);var y=g(this);layui.event.call(this,h,"tool("+u.filter+")",x.call(this,{event:y.attr("lay-event")}))});c.on("radio("+u.radioFilter+")",function(y){var z=v.getDataByTr(g(y.elem).parentsUntil("tr").last().parent());v.removeAllChecked();z.LAY_CHECKED=true;z.LAY_INDETERMINATE=false;layui.event.call(this,h,"checkbox("+u.filter+")",{checked:true,data:z,type:"one"})});c.on("checkbox("+u.checkboxFilter+")",function(C){var B=C.elem.checked;var E=g(C.elem);var z=E.next(".layui-form-checkbox");if(!B&&E.hasClass("ew-form-indeterminate")){B=true;E.prop("checked",B);z.addClass("layui-form-checked");E.removeClass("ew-form-indeterminate")}var A=E.parentsUntil("tr").last().parent();var D=v.getDataByTr(A);D.LAY_CHECKED=B;D.LAY_INDETERMINATE=false;if(D[t.tree.childName]&&D[t.tree.childName].length>0){v.checkSubCB(A,B)}var y=parseInt(A.data("indent"));A.prevAll("tr").each(function(){var F=parseInt(g(this).data("indent"));if(F<y){v.checkParentCB(g(this));y=F}});v.checkChooseAllCB();layui.event.call(this,h,"checkbox("+u.filter+")",{checked:B,data:D,type:"more"})});c.on("checkbox("+u.chooseAllFilter+")",function(A){var z=A.elem.checked;var B=g(A.elem);var y=B.next(".layui-form-checkbox");if(!t.data||t.data.length===0){B.prop("checked",false);y.removeClass("layui-form-checked");B.removeClass("ew-form-indeterminate");return}if(!z&&B.hasClass("ew-form-indeterminate")){z=true;B.prop("checked",z);y.addClass("layui-form-checked");B.removeClass("ew-form-indeterminate")}layui.event.call(this,h,"checkbox("+u.filter+")",{checked:z,type:"all"});v.checkSubCB(u.$tBody.children("tbody"),z)});w.off("click.row").on("click.row","tr",function(){layui.event.call(this,h,"row("+u.filter+")",x.call(this,{}))});w.off("dblclick.rowDouble").on("dblclick.rowDouble","tr",function(){layui.event.call(this,h,"rowDouble("+u.filter+")",x.call(this,{}))});w.off("click.cell").on("click.cell","td",function(C){var y=g(this);var E=y.data("type");if(E==="checkbox"||E==="radio"){return layui.stope(C)}var H=y.data("edit");var G=y.data("field");if(H){layui.stope(C);if(w.find(".ew-tree-table-edit").length>0){return}var B=y.data("index");var z=y.find(".ew-tree-table-indent").length;var D=v.getDataByTr(y.parent());if("text"===H||"number"===H){var F=g('<input type="'+H+'" class="layui-input ew-tree-table-edit"/>');F[0].value=D[G];y.append(F);F.focus();F.blur(function(){var K=g(this).val();if(K==D[G]){return g(this).remove()}var I=layui.event.call(this,h,"edit("+u.filter+")",x.call(this,{value:K,field:G}));if(I===false){g(this).addClass("layui-form-danger");g(this).focus()}else{D[G]=K;var J=y.data("key").split("-");v.renderBodyTd(D,z,B,y,t.cols[J[0]][J[1]])}})}else{console.error("涓嶆敮鎸佺殑鍗曞厓鏍肩紪杈戠被鍨�:"+H)}}else{var A=layui.event.call(this,h,"cell("+u.filter+")",x.call(this,{td:y,field:G}));if(A===false){layui.stope(C)}}});w.off("dblclick.cellDouble").on("dblclick.cellDouble","td",function(C){var D=g(this);var z=D.data("type");if(z==="checkbox"||z==="radio"){return layui.stope(C)}var A=D.data("edit");var B=D.data("field");if(A){return layui.stope(C)}var y=layui.event.call(this,h,"cellDouble("+u.filter+")",x.call(this,{td:D,field:B}));if(y===false){layui.stope(C)}});u.$toolbar.off("click.toolbar").on("click.toolbar","*[lay-event]",function(A){layui.stope(A);var z=g(this);var y=z.attr("lay-event");if("LAYTABLE_COLS"===y){v.toggleCol()}else{if("LAYTABLE_EXPORT"===y){v.exportData("show")}else{if("LAYTABLE_PRINT"===y){v.printTable()}else{layui.event.call(this,h,"toolbar("+u.filter+")",{event:y,elem:z})}}}});u.$tBodyGroup.on("scroll",function(){var y=g(this);u.$tHeadGroup.scrollLeft(y.scrollLeft())});u.$toolbar.off("click.export").on("click.export",".layui-table-tool-panel>[data-type]",function(){var y=g(this).data("type");if("csv"===y||"xls"===y){v.exportData(y)}});u.$toolbar.off("click.panel").on("click.panel",".layui-table-tool-panel",function(y){layui.stope(y)});c.on("checkbox("+u.colsToggleFilter+")",function(y){v.toggleCol(y.elem.checked,undefined,y.value)})};p.prototype.getComponents=function(){var v=g(this.options.elem).next(".ew-tree-table");var t=v.attr("lay-filter");var w=v.children(".ew-tree-table-head");var u=v.children(".ew-tree-table-box");return{$view:v,filter:t,$tHeadGroup:w,$tBodyGroup:u,$tHead:w.children(".layui-table"),$tBody:u.children(".layui-table"),$table:v.find(".layui-table"),$toolbar:v.children(".ew-tree-table-tool"),$empty:u.children(".ew-tree-table-empty"),$loading:u.children(".ew-tree-table-loading"),checkboxFilter:"ew_tb_checkbox_"+t,radioFilter:"ew_tb_radio_"+t,chooseAllFilter:"ew_tb_choose_all_"+t,colsToggleFilter:"ew_tb_toggle_cols"+t}};p.prototype.eachCols=function(w,v){if(!v){v=this.options.colArrays}for(var t=0;t<v.length;t++){var u=v[t];w&&w(t,u);if(u.CHILD_COLS){this.eachCols(w,u.CHILD_COLS)}}};p.prototype.eachData=function(w,v){if(!v){v=this.options.data}for(var t=0;t<v.length;t++){var u=v[t];w&&w(t,u);if(u[this.options.tree.childName]){this.eachData(w,u[this.options.tree.childName])}}};p.prototype.renderBodyAsync=function(x,w){var v=this;var t=this.options;var u=this.getComponents();if(w){w.addClass("ew-tree-table-loading");w.find(".ew-tree-pack").children(".ew-tree-table-arrow").addClass("layui-anim layui-anim-rotate layui-anim-loop")}else{u.$empty.hide();if(t.data&&t.data.length>0){u.$loading.addClass("ew-loading-float")}u.$loading.show()}t.reqData(x,function(y){if(typeof y!=="string"&&y&&y.length>0&&t.tree.isPidData){y=a.pidToChildren(y,t.tree.idName,t.tree.pidName,t.tree.childName)}v.renderBodyData(y,x,w)})};p.prototype.renderBodyData=function(w,A,x){var u;if(typeof w==="string"){u=w;w=[]}var z=this;var C=this.options;var y=this.getComponents();if(A===undefined){C.data=w}else{A[C.tree.childName]=w}var v;if(x){v=parseInt(x.data("indent"))+1;A[C.tree.openName]=true}var t=this.renderBody(w,v,A);if(x){x.nextAll("tr").each(function(){if(parseInt(g(this).data("indent"))<=(v-1)){return false}g(this).remove()});x.after(t).addClass("ew-tree-table-open")}else{y.$tBody.children("tbody").html(t)}c.render(null,y.filter);this.renderNumberCol();if(x){this.checkParentCB(x);x.prevAll("tr").each(function(){var D=parseInt(g(this).data("indent"));if(D<(v-1)){z.checkParentCB(g(this));v=D+1}});x.removeClass("ew-tree-table-loading");var B=x.find(".ew-tree-pack").children(".ew-tree-table-arrow");B.removeClass("layui-anim layui-anim-rotate layui-anim-loop");if(u){x.removeClass("ew-tree-table-open")}else{if(w&&w.length===0){A[C.tree.haveChildName]=false;x.data("have-child",false);B.addClass("ew-tree-table-arrow-hide");B.next(".ew-tree-icon").after(C.tree.getIcon(A)).remove()}}}else{y.$loading.hide();y.$loading.removeClass("ew-loading-float");if(w&&w.length>0){y.$empty.hide()}else{y.$empty.show();if(u){y.$empty.text(u)}else{y.$empty.html(C.text.none)}}}this.checkChooseAllCB();f(y.$view);C.done&&C.done(w)};p.prototype.renderBody=function(z,t,y){var u=this.options;if(!t){t=0}var x="";if(!z||z.length===0){return x}var w=y?!y[u.tree.openName]:undefined;for(var v=0;v<z.length;v++){var A=z[v];A.LAY_INDEX=(y?y.LAY_INDEX+"-":"")+v;x+=this.renderBodyTr(A,t,w);x+=this.renderBody(A[u.tree.childName],t+1,A)}return x};p.prototype.renderBodyTr=function(B,u,x,w){var z=this;var C=this.options;if(!u){u=0}var A=B[C.tree.haveChildName];if(A===undefined){A=B[C.tree.childName]&&B[C.tree.childName].length>0}if(w){w.data("have-child",A?"true":"false");w.data("indent",u);w.removeClass("ew-tree-table-loading")}var v="<tr";var t="";if(A&&B[C.tree.openName]){t+="ew-tree-table-open"}if(x){t+="ew-tree-tb-hide"}v+=(' class="'+t+'"');if(A){v+=(' data-have-child="'+A+'"')}v+=(' data-index="'+B.LAY_INDEX+'"');v+=(' data-indent="'+u+'">');var y=0;this.eachCols(function(E,D){if(D.colGroup){return}v+=z.renderBodyTd(B,u,y,w?w.children("td").eq(y):undefined,D);y++});v+="</tr>";return v};p.prototype.renderBodyTd=function(C,v,A,t,u){if(u.colGroup){return""}var F=this.options;var y=this.getComponents();if(!v){v=0}var B="",E="",D="";if(u.type==="numbers"){B='<span class="ew-tree-table-numbers"></span>'}else{if(u.type==="checkbox"){B=['<input type="checkbox"',C.LAY_CHECKED?' checked="checked"':"",' lay-filter="',y.checkboxFilter,'"',' lay-skin="primary" class="ew-tree-table-checkbox',C.LAY_INDETERMINATE?" ew-form-indeterminate":"",'" />'].join("")}else{if(u.type==="radio"){B=['<input type="radio"',C.LAY_CHECKED?' checked="checked"':"",' lay-filter="',y.radioFilter,'"',' name="',y.radioFilter,'"',' class="ew-tree-table-radio" />'].join("")}else{if(u.templet){if(typeof u.templet==="function"){B=u.templet(C)}else{if(typeof u.templet==="string"){d(g(u.templet).html()).render(C,function(G){B=G})}}}else{if(u.toolbar){if(typeof u.toolbar==="function"){B=u.toolbar(C)}else{if(typeof u.toolbar==="string"){d(g(u.toolbar).html()).render(C,function(G){B=G})}}}else{if(u.field&&C[u.field]!==undefined&&C[u.field]!==null){B=b.escape(C[u.field]===0?"0":C[u.field])}}}}}}if(A===F.tree.iconIndex){for(var w=0;w<v;w++){D+='<span class="ew-tree-table-indent"></span>'}D+='<span class="ew-tree-pack">';var z=C[F.tree.haveChildName];if(z===undefined){z=C[F.tree.childName]&&C[F.tree.childName].length>0}D+=('<i class="ew-tree-table-arrow layui-icon'+(z?"":" ew-tree-table-arrow-hide"));D+=(" "+(F.tree.arrowType||"")+'"></i>');D+=F.tree.getIcon(C);B="<span>"+B+"</span>";if(F.tree.onlyIconControl){B=D+"</span>"+B}else{B=D+B+"</span>"}}E=['<div class="ew-tree-table-cell',u.singleLine===undefined||u.singleLine?" single-line":"",'"',u.align?' align="'+u.align+'"':"",">",'   <div class="ew-tree-table-cell-content">',B,"</div>",'   <i class="layui-icon layui-icon-close ew-tree-tips-c"></i>','   <div class="layui-table-grid-down" style="display: none;"><i class="layui-icon layui-icon-down"></i></div>',"</div>"].join("");if(t){t.html(E)}var x="<td";if(u.field){x+=(' data-field="'+u.field+'"')}if(u.edit){x+=(' data-edit="'+u.edit+'"')}if(u.type){x+=(' data-type="'+u.type+'"')}if(u.key){x+=(' data-key="'+u.key+'"')}if(u.style){x+=(' style="'+u.style+'"')}if(u["class"]){x+=(' class="'+u["class"]+(u.hide?" layui-hide":"")+'"')}else{if(u.hide){x+=(' class="layui-hide"')}}x+=(">"+E+"</td>");return x};p.prototype.renderBodyTh=function(){var t=this.options;var v=this.getComponents();var u=[];g.each(t.cols,function(x,w){u.push("<tr>");g.each(w,function(A,z){u.push("<th");if(z.colspan){u.push(' colspan="'+z.colspan+'"')}if(z.rowspan){u.push(' rowspan="'+z.rowspan+'"')}if(z.type){u.push(' data-type="'+z.type+'"')}if(z.key){u.push(' data-key="'+z.key+'"')}if(z.parentKey){u.push(' data-parent="'+z.parentKey+'"')}if(z.hide){u.push(' class="layui-hide"')}u.push(">");u.push('<div class="ew-tree-table-cell'+(z.singleLine===undefined||z.singleLine?" single-line":"")+'"');if(z.thAlign||z.align){u.push(' align="'+(z.thAlign||z.align)+'"')}u.push(">");u.push('<div class="ew-tree-table-cell-content">');var y='<input type="checkbox" lay-filter="'+v.chooseAllFilter+'" lay-skin="primary" class="ew-tree-table-checkbox"/>';if(z.type==="checkbox"){u.push(y)}else{u.push(z.title||"")}u.push('</div><i class="layui-icon layui-icon-close ew-tree-tips-c"></i>');u.push('<div class="layui-table-grid-down" style="display: none;"><i class="layui-icon layui-icon-down"></i></div></div>');if(!z.colGroup&&!z.unresize){u.push('<span class="ew-tb-resize"></span>')}u.push("</th>")});u.push("</tr>")});return u.join("")};p.prototype.resize=function(z){var t=this.options;var x=this.getComponents();var v=1,u=1,A=true,w=0;this.eachCols(function(B,C){if(C.colGroup||C.hide){return}if(C.width){u+=(C.width+1);if(C.minWidth){if(C.width<C.minWidth){C.width=C.minWidth}}else{if(C.width<t.cellMinWidth){C.width=t.cellMinWidth}}}else{A=false}if(C.width){v+=(C.width+1)}else{if(C.minWidth){v+=(C.minWidth+1);w+=C.minWidth}else{v+=(t.cellMinWidth+1);w+=t.cellMinWidth}}});if(v){x.$tHead.css("min-width",v);x.$tBody.css("min-width",v)}else{x.$tHead.css("min-width","auto");x.$tBody.css("min-width","auto")}if(A){x.$tHead.css("width",u);x.$tBody.css("width",u)}else{x.$tHead.css("width","100%");x.$tBody.css("width","100%")}var y=[];this.eachCols(function(B,C){if(C.colGroup||C.hide){return}y.push("<col");if(C.width){y.push(' width="'+C.width+'"')}else{if(C.minWidth){y.push(' width="'+(C.minWidth/w*100).toFixed(2)+'%"')}else{y.push(' width="'+(t.cellMinWidth/w*100).toFixed(2)+'%"')}}if(C.type){y.push(' data-type="'+C.type+'"')}if(C.key){y.push(' data-key="'+C.key+'"')}y.push("/>")});y=y.join("");if(z){return"<colgroup>"+y+"</colgroup>"}x.$table.children("colgroup").html(y)};p.prototype.getDataByTr=function(v){var w,t;if(typeof v!=="string"&&typeof v!=="number"){if(v){t=v.data("index")}}else{t=v}if(t===undefined){return}if(typeof t==="number"){t=[t]}else{t=t.split("-")}for(var u=0;u<t.length;u++){if(w){w=w[this.options.tree.childName][t[u]]}else{w=this.options.data[t[u]]}}return w};p.prototype.checkSubCB=function(y,x){var w=this;var v=this.getComponents();var t=-1,u;if(y.is("tbody")){u=y.children("tr")}else{t=parseInt(y.data("indent"));u=y.nextAll("tr")}u.each(function(){if(parseInt(g(this).data("indent"))<=t){return false}var A=g(this).children("td").find('input[lay-filter="'+v.checkboxFilter+'"]');A.prop("checked",x);A.removeClass("ew-form-indeterminate");if(x){A.next(".layui-form-checkbox").addClass("layui-form-checked")}else{A.next(".layui-form-checkbox").removeClass("layui-form-checked")}var z=w.getDataByTr(g(this));z.LAY_CHECKED=x;z.LAY_INDETERMINATE=false})};p.prototype.checkParentCB=function(x){var u=this.options;var w=this.getComponents();var z=this.getDataByTr(x);var y=0,v=0;if(z[u.tree.childName]){function t(C){for(var B=0;B<C.length;B++){if(C[B].LAY_CHECKED){y++}else{v++}if(C[B][u.tree.childName]){t(C[B][u.tree.childName])}}}t(z[u.tree.childName])}var A=x.children("td").find('input[lay-filter="'+w.checkboxFilter+'"]');if(y>0&&v===0){A.prop("checked",true);A.removeClass("ew-form-indeterminate");A.next(".layui-form-checkbox").addClass("layui-form-checked");z.LAY_CHECKED=true;z.LAY_INDETERMINATE=false}else{if(y===0&&v>0){A.prop("checked",false);A.removeClass("ew-form-indeterminate");A.next(".layui-form-checkbox").removeClass("layui-form-checked");z.LAY_CHECKED=false;z.LAY_INDETERMINATE=false}else{if(y>0&&v>0){A.prop("checked",true);A.data("indeterminate","true");A.addClass("ew-form-indeterminate");A.next(".layui-form-checkbox").addClass("layui-form-checked");z.LAY_CHECKED=true;z.LAY_INDETERMINATE=true}}}};p.prototype.checkChooseAllCB=function(){var u=this.options;var w=this.getComponents();var x=0,v=0;function t(A){for(var z=0;z<A.length;z++){if(A[z].LAY_CHECKED){x++}else{v++}if(A[z][u.tree.childName]){t(A[z][u.tree.childName])}}}t(u.data);var y=w.$view.find('input[lay-filter="'+w.chooseAllFilter+'"]');if(x>0&&v===0){y.prop("checked",true);y.removeClass("ew-form-indeterminate");y.next(".layui-form-checkbox").addClass("layui-form-checked")}else{if((x===0&&v>0)||(x===0&&v===0)){y.prop("checked",false);y.removeClass("ew-form-indeterminate");y.next(".layui-form-checkbox").removeClass("layui-form-checked")}else{if(x>0&&v>0){y.prop("checked",true);y.addClass("ew-form-indeterminate");y.next(".layui-form-checkbox").addClass("layui-form-checked")}}}};p.prototype.renderNumberCol=function(){this.getComponents().$tBody.children("tbody").children("tr").each(function(t){g(this).children("td").find(".ew-tree-table-numbers").text(t+1)})};p.prototype.getIndexById=function(v){var t=this.options;function u(x,y){for(var w=0;w<x.length;w++){if(x[w][t.tree.idName]==v){return y!==undefined?y+"-"+w:w}if(x[w][t.tree.childName]){return u(x[w][t.tree.childName],y!==undefined?y+"-"+w:w)}}}return u(t.data)};p.prototype.expand=function(x,u){var w=this.getComponents();var v=w.$table.children("tbody").children('tr[data-index="'+this.getIndexById(x)+'"]');if(!v.hasClass("ew-tree-table-open")){v.children("td").find(".ew-tree-pack").trigger("click")}if(u===false){return}var t=parseInt(v.data("indent"));v.prevAll("tr").each(function(){var y=parseInt(g(this).data("indent"));if(y<t){if(!g(this).hasClass("ew-tree-table-open")){g(this).children("td").find(".ew-tree-pack").trigger("click")}t=y}})};p.prototype.fold=function(v){var u=this.getComponents();var t=u.$table.children("tbody").children('tr[data-index="'+this.getIndexById(v)+'"]');if(t.hasClass("ew-tree-table-open")){t.children("td").find(".ew-tree-pack").trigger("click")}};p.prototype.expandAll=function(){this.getComponents().$table.children("tbody").children("tr").each(function(){if(!g(this).hasClass("ew-tree-table-open")){g(this).children("td").find(".ew-tree-pack").trigger("click")}})};p.prototype.foldAll=function(){this.getComponents().$table.children("tbody").children("tr").each(function(){if(g(this).hasClass("ew-tree-table-open")){g(this).children("td").find(".ew-tree-pack").trigger("click")}})};p.prototype.getData=function(){return this.options.data};p.prototype.reload=function(t){this.initOptions(this.options?g.extend(true,this.options,t):t);this.init();this.bindEvents()};p.prototype.checkStatus=function(t){if(t===undefined){t=true}var u=[];this.eachData(function(v,w){if((t||!w.LAY_INDETERMINATE)&&w.LAY_CHECKED){u.push(g.extend({isIndeterminate:w.LAY_INDETERMINATE},w))}});return u};p.prototype.setChecked=function(u){var w=this;var v=this.getComponents();var t=v.$table.find('input[lay-filter="'+v.radioFilter+'"]');if(t.length>0){t.each(function(){var x=w.getDataByTr(g(this).parentsUntil("tr").parent());if(x&&u[u.length-1]==x[w.options.tree.idName]){g(this).next(".layui-form-radio").trigger("click");return false}})}else{v.$table.find('input[lay-filter="'+v.checkboxFilter+'"]').each(function(){var C=g(this);var y=C.next(".layui-form-checkbox");var z=C.prop("checked");var B=C.hasClass("ew-form-indeterminate");var A=w.getDataByTr(C.parentsUntil("tr").parent());for(var x=0;x<u.length;x++){if(A&&u[x]==A[w.options.tree.idName]){if(A[w.options.tree.childName]&&A[w.options.tree.childName].length>0){continue}if(!z||B){y.trigger("click")}}}})}};p.prototype.removeAllChecked=function(){this.checkSubCB(this.getComponents().$table.children("tbody"),false)};p.prototype.exportData=function(w){var y=this.getComponents();if("show"===w){y.$toolbar.find(".layui-table-tool-panel").remove();y.$toolbar.find('[lay-event="LAYTABLE_EXPORT"]').append(['<ul class="layui-table-tool-panel">','   <li data-type="csv">瀵煎嚭鍒� Csv 鏂囦欢</li>','   <li data-type="xls">瀵煎嚭鍒� Excel 鏂囦欢</li>',"</ul>"].join(""))}else{if(o.ie){return layer.msg("涓嶆敮鎸乮e瀵煎嚭")}if(!w){w="xls"}var u=[],t=[];this.eachCols(function(A,B){if(B.type!=="normal"||B.hide){return}u.push(B.title||"")});y.$tBody.children("tbody").children("tr").each(function(){var A=[];g(this).children("td").each(function(){var B=g(this);if(B.data("type")!=="normal"||B.hasClass("layui-hide")){return true}A.push(B.text().trim().replace(/,/g,"锛�"))});t.push(A.join(","))});var v=document.createElement("a");var x=encodeURIComponent(u.join(",")+"\r\n"+t.join("\r\n"));var z=({csv:"text/csv",xls:"application/vnd.ms-excel"})[w];v.href="data:"+z+";charset=utf-8,\ufeff"+x;v.download=(this.options.title||"table")+"."+w;document.body.appendChild(v);v.click();document.body.removeChild(v)}};p.prototype.printTable=function(){var w=this.getComponents();var z=w.$tHead.children("thead").html();if(!z){z=w.$tBody.children("thead").html()}var x=w.$tBody.children("tbody").html();var v=w.$tBody.children("colgroup").html();var u=g(['<table class="ew-tree-table-print">',"   <colgroup>",v,"</colgroup>","   <thead>",z,"</thead>","   <tbody>",x,"</tbody>","</table>"].join(""));u.find('col[data-type="checkbox"],col[data-type="radio"],col[data-type="tool"]').remove();u.find('td[data-type="checkbox"],td[data-type="radio"],td[data-type="tool"],.layui-hide').remove();function A(F){var C=F.data("parent"),D;if(!C){return}var E=u.children("thead").children("tr").children('[data-key="'+C+'"]');var G=parseInt(E.attr("colspan"))-1;E.attr("colspan",G);if(G===0){E.remove()}A(E)}u.find('th[data-type="checkbox"],th[data-type="radio"],th[data-type="tool"]').each(function(){A(g(this))}).remove();var t=["<style>","   /* 鎵撳嵃琛ㄦ牸鏍峰紡 */","   .ew-tree-table-print {","      border: none;","      border-collapse: collapse;","      width: 100%;","      table-layout: fixed;","   }","   .ew-tree-table-print td, .ew-tree-table-print th {","      color: #555;","      font-size: 14px;","      padding: 9px 15px;","      word-break: break-all;","      border: 1px solid #888;","      text-align: left;","   }","   .ew-tree-table-print .ew-tree-table-cell {","      min-height: 20px;","   }","   /* 搴忓彿鍒楁牱寮� */",'   .ew-tree-table-print td[data-type="numbers"], .ew-tree-table-print th[data-type="numbers"] {',"      padding-left: 0;","      padding-right: 0;","   }","   /* 鍗�/澶嶉�夋鍒楁牱寮� */",'   .ew-tree-table-print td[data-type="tool"], .ew-tree-table-print th[data-type="tool"], ','   .ew-tree-table-print td[data-type="checkbox"], .ew-tree-table-print th[data-type="checkbox"], ','   .ew-tree-table-print td[data-type="radio"], .ew-tree-table-print th[data-type="radio"] {',"      border: none;","   }","   .ew-tree-table-print td.layui-hide + td, .ew-tree-table-print th.layui-hide + th, ",'   .ew-tree-table-print td[data-type="tool"] + td, .ew-tree-table-print th[data-type="tool"] + th, ','   .ew-tree-table-print td[data-type="checkbox"] + td, .ew-tree-table-print th[data-type="checkbox"] + th, ','   .ew-tree-table-print td[data-type="radio"] + td, .ew-tree-table-print th[data-type="radio"] + th {',"      border-left: none;","   }","  /* 涓嶆樉绀虹殑鍏冪礌 */","   .layui-hide, ",'   .ew-tree-table-print td[data-type="tool"] *, .ew-tree-table-print th[data-type="tool"] *, ','   .ew-tree-table-print td[data-type="checkbox"] *, .ew-tree-table-print th[data-type="checkbox"] *, ','   .ew-tree-table-print td[data-type="radio"] *, .ew-tree-table-print th[data-type="radio"] *, ',"   .layui-table-grid-down, .ew-tree-tips-c, .ew-tree-icon, .ew-tree-table-arrow.ew-tree-table-arrow-hide {","      display: none;","   }","   /* tree缂╄繘 */","   .ew-tree-table-indent {","      padding-left: 13px;","   }","   /* 绠ご */","   .ew-tree-table-arrow {","      position: relative;","      padding-left: 13px;","   }","   .ew-tree-table-arrow:before {",'      content: "";',"      border: 5px solid transparent;","      border-top-color: #666;","      position: absolute;","      left: 0;","      top: 6px;","   }","</style>"].join("");var y=window.open("","_blank");y.focus();var B=y.document;B.open();B.write(u[0].outerHTML+t);B.close();y.print();y.close()};p.prototype.toggleCol=function(A,z,B){var w=this.getComponents();if(A===undefined){w.$toolbar.find(".layui-table-tool-panel").remove();var x=['<ul class="layui-table-tool-panel">'];this.eachCols(function(D,E){if(E.type!=="normal"){return}x.push('<li><input type="checkbox" lay-skin="primary"');x.push(' lay-filter="'+w.colsToggleFilter+'"');x.push(' value="'+E.key+'" title="'+b.escape(E.title||"")+'"');x.push((E.hide?"":" checked")+"></li>")});w.$toolbar.find('[lay-event="LAYTABLE_COLS"]').append(x.join("")+"</ul>");c.render("checkbox",w.filter)}else{if(B){var u=w.$table.children("tbody").children("tr").children('[data-key="'+B+'"]');var C=w.$table.children("thead").children("tr").children('[data-key="'+B+'"]');if(A){u.removeClass("layui-hide");C.removeClass("layui-hide")}else{u.addClass("layui-hide");C.addClass("layui-hide")}var y=B.split("-");var v=this.options.cols[y[0]][y[1]];v.hide=!A;function t(G){var D=G.data("parent"),E;if(!D){return}var F=w.$table.children("thead").children("tr").children('[data-key="'+D+'"]');var H=F.attr("colspan");A?H++:H--;F.attr("colspan",H);if(H===0){F.addClass("layui-hide")}else{F.removeClass("layui-hide")}t(F)}t(C);this.eachCols(function(D,E){if(E.key===B){E.hide=v.hide}});this.resize()}}};p.prototype.filterData=function(y){var A=this.getComponents();A.$loading.show();if(this.options.data.length>0){A.$loading.addClass("ew-loading-float")}var x=A.$table.children("tbody").children("tr");var u=[];if(typeof y==="string"){x.each(function(){var B=g(this).data("index");g(this).children("td").each(function(){if(g(this).text().indexOf(y)!==-1){u.push(B);return false}})})}else{for(var w=0;w<y.length;w++){u.push(this.getIndexById(y[w]))}}x.addClass("ew-tree-table-filter-hide");for(var v=0;v<u.length;v++){var z=x.filter('[data-index="'+u[v]+'"]');z.removeClass("ew-tree-table-filter-hide");var t=parseInt(z.data("indent"));z.nextAll("tr").each(function(){if(parseInt(g(this).data("indent"))<=t){return false}g(this).removeClass("ew-tree-table-filter-hide")});if(z.hasClass("ew-tree-table-open")){i(z)}z.prevAll("tr").each(function(){var B=parseInt(g(this).data("indent"));if(B<t){g(this).removeClass("ew-tree-table-filter-hide");if(!g(this).hasClass("ew-tree-table-open")){i(g(this))}t=B}})}A.$loading.hide();A.$loading.removeClass("ew-loading-float");if(u.length===0){A.$empty.show()}f(A.$view)};p.prototype.clearFilter=function(){var t=this.getComponents();t.$table.children("tbody").children("tr").removeClass("ew-tree-table-filter-hide");if(this.options.data.length>0){t.$empty.hide()}f(t.$view)};p.prototype.refresh=function(x,v){if(l(x)==="Array"){v=x;x=undefined}var u=this.getComponents();var w,t;if(x!==undefined){t=u.$table.children("tbody").children('tr[data-index="'+this.getIndexById(x)+'"]');w=this.getDataByTr(t)}if(v){if(this.data.length>0){u.$loading.addClass("ew-loading-float")}u.$loading.show();if(v.length>0&&this.options.tree.isPidData){this.renderBodyData(a.pidToChildren(v,this.options.tree.idName,this.options.tree.pidName,this.options.tree.childName),w,t)}else{this.renderBodyData(v,w,t)}}else{this.renderBodyAsync(w,t)}};p.prototype.del=function(x,u){if(u===undefined){u=this.getIndexById(x)}var t=(typeof u==="number"?[u]:u.split("-"));var w=this.options.data;if(t.length>1){for(var v=0;v<t.length-1;v++){w=w[parseInt(t[v])][this.options.tree.childName]}}w.splice(t[t.length-1],1)};p.prototype.update=function(u,t){g.extend(true,this.getDataByTr(this.getIndexById(u)),t)};function i(v){var t=parseInt(v.data("indent"));var u=v.hasClass("ew-tree-table-open");if(u){v.removeClass("ew-tree-table-open");v.nextAll("tr").each(function(){if(parseInt(g(this).data("indent"))<=t){return false}g(this).addClass("ew-tree-tb-hide")})}else{v.addClass("ew-tree-table-open");var w;v.nextAll("tr").each(function(){var x=parseInt(g(this).data("indent"));if(x<=t){return false}if(w!==undefined&&x>w){return true}g(this).removeClass("ew-tree-tb-hide");if(!g(this).hasClass("ew-tree-table-open")){w=parseInt(g(this).data("indent"))}else{w=undefined}})}f(v.parentsUntil(".ew-tree-table").last().parent());return u}function f(w){var t=w.children(".ew-tree-table-head");var u=w.children(".ew-tree-table-box");var v=u.width()-u.prop("clientWidth");t.css("border-right",(v>0?v:0)+"px solid #f2f2f2")}g(window).resize(function(){g(".ew-tree-table").each(function(){f(g(this));var u=g(this).children(".ew-tree-table-box");var t=u.data("full");if(t&&o.ie&&o.ie<10){u.css("height",m()-t)}})});g(document).on("mouseenter",".ew-tree-table-cell.single-line",function(){var t=g(this).children(".ew-tree-table-cell-content");if(t.prop("scrollWidth")>t.outerWidth()){g(this).children(".layui-table-grid-down").show()}}).on("mouseleave",".ew-tree-table-cell.single-line",function(){g(this).children(".layui-table-grid-down").hide()});g(document).on("click",".ew-tree-table-cell>.layui-table-grid-down",function(w){w.stopPropagation();j();var u=g(this).parent();u.addClass("ew-tree-tips-open");u.children(".layui-table-grid-down").hide();var t=u.parent().outerWidth()+4;if(u.outerWidth()<t){u.children(".ew-tree-table-cell-content").css({"width":t,"max-width":t})}var v=u.parents().filter(".ew-tree-table-box");if(v.length===0){v=u.parents().filter(".ew-tree-table-head")}if(v.length===0){return}if((u.outerWidth()+u.offset().left)+20>v.offset().left+v.outerWidth()){u.addClass("ew-show-left")}if((u.outerHeight()+u.offset().top+10)>v.offset().top+v.outerHeight()){u.addClass("ew-show-bottom")}});g(document).on("click",".ew-tree-table-cell>.ew-tree-tips-c",function(){j()});g(document).on("click",function(){j();g(".ew-tree-table .layui-table-tool-panel").remove()});g(document).on("click",".ew-tree-table-cell.ew-tree-tips-open",function(t){t.stopPropagation()});function j(){g(".ew-tree-table-cell").removeClass("ew-tree-tips-open ew-show-left ew-show-bottom");g(".ew-tree-table-cell>.ew-tree-table-cell-content").css({"width":"","max-width":""})}g(document).on("mousedown",".ew-tb-resize",function(x){layui.stope(x);var v=g(this);v.attr("move","true");var u=v.parent().data("key");v.data("x",x.clientX);var t=v.parent().parent().parent().parent().children("colgroup").children('col[data-key="'+u+'"]').attr("width");if(!t||t.toString().indexOf("%")!==-1){t=v.parent().outerWidth()}v.data("width",t);g("body").addClass("ew-tree-table-resizing")}).on("mousemove",function(B){var y=g('.ew-tree-table .ew-tb-resize[move="true"]');if(y.length===0){return}layui.stope(B);var t=y.data("x");var v=y.data("width");var u=parseFloat(v)+B.clientX-parseFloat(t);if(u<=0){u=1}var z=k[y.parentsUntil(".ew-tree-table").last().parent().attr("lay-filter")];var A=y.parent().data("key");var C=A.split("-");z.options.cols[C[0]][C[1]].width=u;z.eachCols(function(w,x){if(x.key===A){x.width=u}});z.resize()}).on("mouseup",function(t){g('.ew-tree-table .ew-tb-resize[move="true"]').attr("move","false");g("body").removeClass("ew-tree-table-resizing")}).on("mouseleave",function(t){g('.ew-tree-table .ew-tb-resize[move="true"]').attr("move","false");g("body").removeClass("ew-tree-table-resizing")});function q(x,u,z){var y=[];for(var w=0;w<x.length;w++){var t=false;for(var v=0;v<x.length;v++){if(x[w][z]==x[v][u]){t=true;break}}if(!t){y.push(x[w][z])}}return y}function n(u,v){if(l(v)==="Array"){for(var t=0;t<v.length;t++){if(u==v[t]){return true}}}return u==v}function l(t){if(t===null){return"Null"}if(t===undefined){return"Undefined"}return Object.prototype.toString.call(t).slice(8,-1)}function m(){return document.documentElement.clientHeight||document.body.clientHeight}var a={render:function(t){return new p(t)},reload:function(u,t){k[u].reload(t)},on:function(t,u){return layui.onevent.call(this,h,t,u)},pidToChildren:function(z,u,A,t,x){if(!t){t="children"}var y=[];for(var w=0;w<z.length;w++){if(z[w][u]==z[w][A]){return console.error("绗�"+w+"鏉℃暟鎹殑"+u+"涓�"+A+"鐩稿悓",z[w])}if(x===undefined){x=q(z,u,A)}if(n(z[w][A],x)){var v=this.pidToChildren(z,u,A,t,z[w][u]);if(v.length>0){z[w][t]=v}y.push(z[w])}}return y}};g("head").append(['<style id="ew-tree-table-css">',"/** 鏈�澶栧眰瀹瑰櫒 */",".ew-tree-table {","    margin: 10px 0;","    position: relative;","    border: 1px solid #e6e6e6;","    border-bottom: none;","    border-right: none;","}",".ew-tree-table:before, .ew-tree-table:after, .ew-tree-table .ew-tree-table-head:after {",'    content: "";',"    background-color: #e6e6e6;","    position: absolute;","    right: 0;","    bottom: 0;","}",".ew-tree-table:before {","    width: 1px;","    top: 0;","    z-index: 1;","}",".ew-tree-table:after, .ew-tree-table .ew-tree-table-head:after {","    height: 1px;","    left: 0;","}",".ew-tree-table .layui-table {","    margin: 0;","    position: relative;","    table-layout: fixed;","}","/** 琛ㄦ牸 */",".ew-tree-table .layui-table td, .ew-tree-table .layui-table th {","    border-top: none;","    border-left: none;","    padding: 0 !important;","}",".ew-tree-table .ew-tree-table-box {","    overflow: auto;","    position: relative;","}",".ew-tree-table .ew-tree-table-head {","    overflow: hidden;","    box-sizing: border-box;","    background-color: #f2f2f2;","    position: relative;","}","/** loading */",".ew-tree-table div.ew-tree-table-loading {","    padding: 10px 0;","    text-align: center;","}",".ew-tree-table div.ew-tree-table-loading > i {","    color: #999;","    font-size: 30px;","}",".ew-tree-table div.ew-tree-table-loading.ew-loading-float {","    position: absolute;","    top: 0;","    left: 0;","    right: 0;","}","/** 绌烘暟鎹� */",".ew-tree-table .ew-tree-table-empty {","    color: #666;","    font-size: 14px;","    padding: 18px 0;","    text-align: center;","    display: none;","}","/** 鍗曞厓鏍� */",".ew-tree-table-cell.ew-tree-tips-open {","    position: absolute;","    top: 0;","    left: 0;","    padding: 0;","    z-index: 9999;","    background-color: #fff;","    box-shadow: 3px 3px 8px rgba(0, 0, 0, .15);","}","thead .ew-tree-table-cell.ew-tree-tips-open {","    background-color: #f2f2f2;","}",".ew-tree-table-cell.ew-tree-tips-open.ew-show-left {","    right: 0;","    left: auto;","    box-shadow: -3px 3px 8px rgba(0, 0, 0, .15);","}",".ew-tree-table-cell.ew-tree-tips-open.ew-show-bottom {","    bottom: 0;","    top: auto;","    box-shadow: 3px -3px 8px rgba(0, 0, 0, .15);","}",".ew-tree-table-cell.ew-tree-tips-open.ew-show-left.ew-show-bottom {","    box-shadow: -3px -3px 8px rgba(0, 0, 0, .15);","}",".ew-tree-table-cell > .ew-tree-tips-c {","    position: absolute;","    right: -6px;","    top: -3px;","    width: 22px;","    height: 22px;","    line-height: 22px;","    font-size: 16px;","    color: #fff;","    background-color: #666;","    border-radius: 50%;","    text-align: center;","    cursor: pointer;","    display: none;","}","table tr:first-child .ew-tree-table-cell > .ew-tree-tips-c {","    top: 0;","}",".ew-tree-table-cell.ew-tree-tips-open > .ew-tree-tips-c {","    display: block;","}",".ew-tree-table-cell.ew-tree-tips-open.ew-show-left > .ew-tree-tips-c {","    left: -6px;","    right: auto;","}",".ew-tree-table-cell > .ew-tree-table-cell-content {","    padding: 5px 15px;","    line-height: 28px;","}",'[lay-size="lg"] .ew-tree-table-cell > .ew-tree-table-cell-content {',"    line-height: 40px;","}",'[lay-size="sm"] .ew-tree-table-cell > .ew-tree-table-cell-content {',"    padding: 1px 15px;","}",".ew-tree-table-cell.single-line > .ew-tree-table-cell-content {","    overflow: hidden;","    white-space: nowrap;","    text-overflow: ellipsis;","}",".ew-tree-table-cell.ew-tree-tips-open > .ew-tree-table-cell-content {","    overflow: auto;","    padding: 9px 15px;","    height: auto;","    min-height: 100%;","    max-height: 110px;","    line-height: inherit;","    max-width: 260px;","    width: 200px;","    width: max-content;","    width: -moz-max-content;","    box-sizing: border-box;","    white-space: normal;","}",".ew-tree-table-cell > .layui-table-grid-down {","    box-sizing: border-box;","}","/** 鍥炬爣鍒� */",".ew-tree-table .ew-tree-pack {","    cursor: pointer;","    line-height: 16px;","}",".ew-tree-table .ew-tree-pack > .layui-icon, .ew-tree-table .ew-tree-pack > .ew-tree-icon {","    margin-right: 5px;","}",".ew-tree-table .ew-tree-pack > * {","    vertical-align: middle;","}","/* 缂╄繘 */",".ew-tree-table .ew-tree-table-indent {","    margin-right: 5px;","    padding-left: 16px;","}","/* 绠ご */",".ew-tree-table .ew-tree-table-arrow:before {",'    content: "\\e623";',"}",".ew-tree-table .ew-tree-table-open .ew-tree-table-arrow:before {",'    content: "\\e625";',"}",".ew-tree-table .ew-tree-table-arrow.arrow2 {","    font-size: 12px;","    font-weight: 600;","    line-height: 16px;","    height: 16px;","    width: 16px;","    display: inline-block;","    text-align: center;","    color: #888;","}",".ew-tree-table .ew-tree-table-arrow.arrow2:before {",'    content: "\\e602";',"}",".ew-tree-table .ew-tree-table-open .ew-tree-table-arrow.arrow2:before {",'    content: "\\e61a";',"}",".ew-tree-table-arrow.ew-tree-table-arrow-hide {","    visibility: hidden;","}","/* 绠ご鍙樺姞杞戒腑鐘舵�� */",".ew-tree-table tr.ew-tree-table-loading > td .ew-tree-table-arrow:before {",'    content: "\\e63d" !important;',"}",".ew-tree-table tr.ew-tree-table-loading > td .ew-tree-table-arrow {","    margin-right: 0;","}",".ew-tree-table tr.ew-tree-table-loading > td .ew-tree-table-arrow + * {","    margin-left: 5px;","}",".ew-tree-table tr.ew-tree-table-loading * {","    pointer-events: none !important;","}","/** 鎶樺彔琛� */",".ew-tree-table .ew-tree-tb-hide {","    display: none;","}","/** 鐗规畩鍒楄皟鏁� */",'.ew-tree-table td[data-type="numbers"] > .ew-tree-table-cell,','.ew-tree-table th[data-type="numbers"] > .ew-tree-table-cell,','.ew-tree-table td[data-type="checkbox"] > .ew-tree-table-cell,','.ew-tree-table th[data-type="checkbox"] > .ew-tree-table-cell,','.ew-tree-table td[data-type="radio"] > .ew-tree-table-cell,','.ew-tree-table th[data-type="radio"] > .ew-tree-table-cell,','.ew-tree-table td[data-type="space"] > .ew-tree-table-cell,','.ew-tree-table th[data-type="space"] > .ew-tree-table-cell {',"    padding-left: 0;","    padding-right: 0;","}","/* 鍗曞厓鏍煎唴琛ㄥ崟鍏冪礌鏍峰紡璋冩暣 */",".ew-tree-table .layui-form-switch",".ew-tree-table .layui-form-radio {","    margin: 0;","}","/* checkbox鍒楄皟鏁� */",".ew-tree-table-checkbox + .layui-form-checkbox {","    padding: 0;","}",".ew-tree-table-checkbox + .layui-form-checkbox > .layui-icon {","    font-weight: 600;","    color: transparent;","    transition: background-color .1s linear;","    -webkit-transition: background-color .1s linear;","}",".ew-tree-table-checkbox + .layui-form-checkbox.layui-form-checked > .layui-icon {","    color: #fff;","}","/* checkbox鍗婇�夌姸鎬� */",".ew-form-indeterminate + .layui-form-checkbox .layui-icon:before {",'    content: "";',"    width: 10px;","    height: 2px;","    background-color: #f1f1f1;","    position: absolute;","    top: 50%;","    left: 50%;","    margin: -1px 0 0 -5px;","}","/* radio鍒楄皟鏁� */",".ew-tree-table-radio + .layui-form-radio {","    margin: 0;","    padding: 0;","    height: 20px;","    line-height: 20px;","}",".ew-tree-table-radio + .layui-form-radio > i {","    margin: 0;","    height: 20px;","    font-size: 20px;","    line-height: 20px;","}","/** 鍗曞厓鏍肩紪杈� */",".ew-tree-table .layui-table td[data-edit] {","    cursor: text;","}",".ew-tree-table .ew-tree-table-edit {","    position: absolute;","    left: 0;","    top: 0;","    width: 100%;","    height: 100%;","    border-radius: 0;","    box-shadow: 1px 1px 20px rgba(0, 0, 0, .15);","}",".ew-tree-table .ew-tree-table-edit:focus {","    border-color: #5FB878 !important;","}",".ew-tree-table .ew-tree-table-edit.layui-form-danger {","    border-color: #FF5722 !important;","}","/** 鎼滅储鏁版嵁闅愯棌琛� */",".ew-tree-table tr.ew-tree-table-filter-hide {","    display: none !important;","}","/** 澶撮儴宸ュ叿鏍� */",".ew-tree-table .ew-tree-table-tool {","    min-height: 50px;","    line-height: 30px;","    padding: 10px 15px;","    box-sizing: border-box;","    background-color: #f2f2f2;","    border-bottom: 1px solid #e6e6e6;","}",".ew-tree-table .ew-tree-table-tool .ew-tree-table-tool-right {","    float: right;","}",".ew-tree-table .ew-tree-table-tool .ew-tree-table-tool-item {","    position: relative;","    color: #333;","    width: 26px;","    height: 26px;","    line-height: 26px;","    text-align: center;","    margin-left: 10px;","    display: inline-block;","    border: 1px solid #ccc;","    box-sizing: border-box;","    vertical-align: middle;","    -webkit-transition: .3s all;","    transition: .3s all;","    cursor: pointer;","}",".ew-tree-table .ew-tree-table-tool .ew-tree-table-tool-item:first-child {","    margin-left: 0;","}",".ew-tree-table .ew-tree-table-tool .ew-tree-table-tool-item:hover {","    border-color: #999;","}",".ew-tree-table .ew-tree-table-tool-right .layui-table-tool-panel {","    left: auto;","    right: -1px;","    z-index: 9999;","}","/* 鍒楀鎷栨嫿璋冩暣 */",".ew-tree-table .ew-tb-resize {","    position: absolute;","    right: 0;","    top: 0;","    bottom: 0;","    width: 10px;","    cursor: col-resize;","}",".ew-tree-table-resizing {","    cursor: col-resize;","    -ms-user-select: none;","    -moz-user-select: none;","    -webkit-user-select: none;","    user-select: none;","}","/* 杈呭姪鏍峰紡 */",".ew-tree-table .layui-form-switch {","    margin: 0;","}",".ew-tree-table .pd-tb-0 {","    padding-top: 0 !important;","    padding-bottom: 0 !important;","}",".ew-tree-table .break-all {","    word-break: break-all !important;","}","/** 鎵╁睍鍥炬爣 */",".ew-tree-table .ew-tree-icon-folder:after, .ew-tree-table .ew-tree-icon-file:after {",'    content: "";',"    padding: 2px 10px;","    -webkit-background-size: cover;","    -moz-background-size: cover;","    -o-background-size: cover;","    background-size: cover;","    background-repeat: no-repeat;",'    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAE6UlEQVR4Xu2ZPYhcVRiGny9hC0FsTEBCGkFTWIQE/IlpgmKpWAiLyR0XLbYTxEKxkCAEhRCxEOwsjJnJioKIYClWKgqiskIIaCoLYyASVJT87JGspN37LrOXvec777Tzzrnvz7Nn2dnAr6YbiKbTOzwGoHEIDIABaLyBxuP7BjAAjTfQeHzfAAag8QYaj+8bwAA03kDj8X0DGIDGG2g8/lw3QFlhD9fZN7oOF7gYT3NudL5GaGjTAJQP2c1VXgIOExyGkf4/oXCe4I3oeH+EvY/G0qYAKFOWCV4Hdo8mQb+RL7jBE7HE3/3S9hQyAGXGCeDVSiv6lqscief4t1L/g9mWAChTHiD4ZrTXvVbPu9GxrEnbUWkAzPgeOJCglsXo+ChBji2L0AtAmfEgrP/0Z3hdZoF7Y5HLGcJsRQYFgLeAF7fiYSM540x0LI3Ey7bb6AdgytcEh7bd6VYa2MGhOJrmVpurmX4AZlwCds31lPF9+AI32O8/DYUvccqUKwR3jG/DuR29Gd36F1pNv/pvgKwAFK5RuC+e4eeWCWgXgJurFz6LCY8bgA0aSPwr4P/UhVNc43ir3xK2fQPcAr/wO/AewU/Ar6xRqroVdvAnC6zGIlc369sAbLax8er/ofAJOzkVR9e/uZVeBkCqqTrRyeh4RXFtAJSWatQUno0Jp/usG4C+hup9/yJ72BuPcH2jCAag3oEV50vRccYAKFXl1LwdHS8YgJzj9qcqfBoTnjQA/VVlVXwXHfcbgKzz9uf6IToOGoD+orIqDEDWZcVcBkAsKqvMAGRdVsxlAMSissoMQNZlxVwGQCwqq8wAZF1WzGUAxKKyygxA1mXFXAZALCqrzABkXVbMZQDEorLKDEDWZcVcBkAsKqvMAGRdVsxlAMSissoMQNZlxVwGQCwqq8wAZF1WzGUAxKKyygxA1mXFXAZALCqrzABkXVbMZQDEorLKDEDWZcVcBkAsKqvMAGRdVsxlAMSissoMQNZlxVwGQCwqq8wAZF1WzGUAxKKyygxA1mXFXAZALCqrzABkXVbMZQDEorLKDEDWZcVcBkAsKqvMAGRdVsxlAMSissoMQNZlxVwGQCwqq8wAZF1WzGUAxKKyygxA1mXFXAZALCqrzABkXVbMZQDEorLKDEDWZcVcBkAsKqvMAGRdVsxlAMSissoMQNZlxVwGQCwqq8wAZF1WzGUAxKKyygxA1mXFXAZALCqrzABkXVbMZQDEorLKDEDWZcVcBkAsKqvMAGRdVsxlAMSissoMQNZlxVwGQCwqq8wAZF1WzLUFAMy4BOwSH2jZmBoorMaE/RtZij6/ZcoFgrv7dH5/lA38Eh33zAfAjM+BR0cZz6Y2bqDwY0w4MB8AU04SvOyuq2zg4+h4aj4AzvIwha+qjN+66cLzMeGduQC4+eEy4zywr/U+K8t/hQX2xiJ/zQ/ACgdZ40vgtspKaNducCyOsdJXQO9fAbcOKGc5whofENzVd6jf3/YGTkTHccWFDMD6r4LT3MlOloHHCB4CblceYs3gDfxB4TeCcxReiwmr6hM3BYB6qHX1NGAA6tlqEKcGYJBa6znUANSz1SBODcAgtdZzqAGoZ6tBnBqAQWqt51ADUM9Wgzg1AIPUWs+hBqCerQZxagAGqbWeQw1APVsN4tQADFJrPYcagHq2GsTpf+KxwJB5Cd5mAAAAAElFTkSuQmCC");',"}",".ew-tree-table tr.ew-tree-table-open > td .ew-tree-icon-folder:after {",'    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAKwElEQVR4Xu2df9AVVRnHP899gUxmYKhsCpJREEeMakSoiGGCbIxSizIJ7i5OksZkMIxQjlOQyOCQ5o/8RWmkMdz7wjDC5I+hcFSKxEENh4YsEwPJAbVQ8AeQL733NPcKyn3v7r17d8/uvfvus//ec57n+3yf7z179uw5zwp6ZZoByXT0GjwqgIyLQAWgAsg4AxkPX0cAFUDGGch4+DoCqAAyzkDGw9cRQAWQcQYyHr6OACqA5hkw63kfr3IyOQZTIte8BUs9OnibEi/isEcEY8lqpswEHgHMGgbSxTyEyRjGIC1MfM8UGQ4CfyLHWp7jbllEKVNZjBBsIAGYAi7CrcCgCL6S6voM4IrDtqQcptlPQwGYAksRrkpVkIZD5JgmeR5IFe4WgK0rAFPkamBRC3BFd2k4AkwSl83RjfVeC74CMCuZSI6NqQ7d8G9KDJOLK3MEvTwY8BdAga0Io3sBa0vEYWEviCOWEDwFYDoZh+HxWDwmb/R18gzSx0Rv4r0FUORa4EfJ5yomj8IEyfNYTNZTbdZbAAU2IJyb6siOB2+4Qlx+3mvisRiInwC2I4yy6Ke1pgw/E5crWwuiPb373QL+BZzcnpBDobpLHGaF6tnLO6kAenmCG4WXFQH8WhwubURGFn/PhgAMD4nLl7KY4EYxZ0MAcBhhqOTZ14iQrP2eFQGU8/ogeb6qC0LVEs+SAMqRL+ctLpdZlRdFeoH32UBTpLc9Br6XbMMuhLUIm+jmzbZSQUdlV9M++rBTpnI4CWxZGwGS4NSWj2eBh4CbxGG3LaM97agA4mLWnt23gZ+yg8VxbHVTAdhLVNyWHqabKbb3NqgA4k6bTfuG+3GYYvNJRgVgM0FJ2DL8QFxutOVKBWCLyaTsGN6gH0NlKq/bcKkCsMFi0jYMs8XlDhtuVQA2WEzahuH34vJlG25VADZYTN7GPnE4yYZbFYANFlth4y362VjSVgG0Ink2fAon2Xi7qQKwkYxW2OglAtiP4QlgN8LLreAxtT4HcL1cwKGo+FsxAnQDv6HEbTKDv0QNQPtHYyBpAZSPm7mSp/ymS682YCA5ARiWMYS5Mon/tUHcCuEoA0kJ4AZx+KGy3n4MJCGA9eJwXqPQzSJyjGAMJU5s1FZ/r8NAH7roYIdM5T9BeIpXAIaXOMKZcgkH/MCYIp8GvgN8A/hQENDaJhADrwG/oy9X1BNDvAIQZkqee+okfwGGa9qq4FQgblPVaC85xsp09nqhjlMAO9nBCK9tTGYjfdhLJ3BRqqhMK1jDdoYw2msCHqcAypsZ53txZoqVo9pz08pnKnEbLhKXe3tij1MAk8VhQ0+HZjWj6GZ7KklMM2jD3eJW5lpVV5wC+IA47K8RQJEVwMVp5jKV2H3OR8YjAMPL4vLRmuSvoYMjvAoMTCWJ6Qa9Vhy+mdQIsEEcJtcIYCWjybE13TymFL2wVPK1dZ/iGgE8S7KYTi7F8KuUUphu2AlPAsu1eose9/9lwPfSzWRq0Q8Xh53J3AI6+IRM4681AiiwBeEzqaUwrcANh8Slvxf8OG4BXezg/T0XgCpr/afxX4S+aeUxtbgNfxCXSUkJYJs4nKXP/20ll5vFYV4yAjCsEJdve9z/y8/+5TUAvZJmwDBDXArJCADmicPNHgLQ5d+kE3/Mn+Hj4vK3ZARg+KK4POIxAdyEMKFVHGTWb/m7Cc9zgl9tgTgmgd5LwAUOIrrZI3EhGraIyzg/v7YFsFcchnhMAE+nm38kHrw6BMMycfl+MgLwObRoikwDVmk+WsCAcJnkWZ6MAOA6cWo/MGUKXI/optAWpB9KnC0zeDoZAQh5ydf+002BhxHOaQkBWXZqKHGQE+odIrU7BxBGSZ7yd/uqLlOsbArVV8DJi9FzUe54GDYF4L0EvIpTKLEr+djVIz67gOIRgOFpcTnb499f3u69VtPREgbmiMPt9TzbHAHuEYeZHgtASxB+3JLws+40x3iZXv/rb/YE4PNhJlNgPWKnnk3W89l0/APo3+gIuT0BwBfEqf3SqCnwCsKHmwavHaIy8Kw4jGxkxKYAapaAzSoGU2JPIxD6ewwMGDrFxWlk2Y4ADHvE5WMe9//zEf2Cd6MkxPJ7wIqidgQAnieATYGfIFwTS4BqtD4DwjmS59FGNNkRgM+WY1Pkt8DXGoHQ32NgoItB9U5lH/NoRwAwXRxWe6wB9N4vj8SQM4smXxCHU4PYsyOADs6Uafz9eIdmDQM54l8XIAg4bROagXXicGGQ3jYE4L0EXOBcpPZwaBBQ2iYiA4YF4la+AN/wsiGAP4vDWI8ngKsQljZEoA3iYOA8cVgfxHB0Afi8cDBF1mgBiCApiKGN8BHJ80oQy9EFAHPF4VaPCeDzwPAgILSNRQYML4nL4KAWowtAmCh5/lg1AXyAE3mDg0FBaDurDASqynbMY3QBQO0S8Eomkqt9L2A1TDXmx8AScVgYlJ6oAnhRHIZ6TADnI9wQFIS2s8rAheKwLqjFqAJ4UBwu8BBAESEfFIS2s8hAjlNlOi8EtRhNAIZrxWWBxwSwvCh0RlAQ2s4SA4YD4jKoGWvRBCB8S/KVx713L6MTwGb4t932UXGa230dTQAlzpAZ1Sd+TIHxCI/ZjkztBWKg6aLcUQTgtwQ8B6ldFwgEXxtFY8DnXEY9o+EFYHhK3Eqh56rLFCu1gWvqA0SLTHsHYkAY2ezHOMILAJaLw2UeAih/BuaTgQBrI3sM1KkDFM8IADV7zs2d9KV/pQ5Qzl5kaikQA4bHxWV8oLbHNYoyAnxeHDZVPQEUGIvwZLMgtL0VBm4XhznNWgovAI8956aTWRh+2SwIbW+BgQbfZvDzEFYAu8XhFI/7/53Ady2EoyaaZ+AscdjWbLdwAjDcL27tZk9T5ClgTLMgtH1EBhrUAYpjEljzxkkLQUZMYrTuW8UJ98cLOwLUfH3CrORT5JofgqLFrb2PMuD5SB6EnXACgNPFYUfVE0Anl5TPowdxqm2sM3C5OPwijNXmBeCz4GCK3AbMDgNC+0RkwDBOXLaEseIngOeAEZ4GDU+Iy2drngAKbEb4XBgQ2icCAwHqADU/CSzwJFK71fuoobvEYVbV8P9OJfA3tRBkhESG7/qMOIwK2917BCiwDuHrPiPAbHG5o0oAqxlJt3ct2rDAtF9ABnyKcwfsjd8tYDH4bCwUJki++n2/KVbOoXtWow4KRNuFZsDzXGZQa34jgP+xLq8l4CI3gnc9+qBAtF0IBgwH6MdgmcrhEL0rXbwFUP68WxevIQyoMmzYJS7DPCaAGxEmhgWh/UIyIMyXPDeF7O0vgPIvpsB1CFf2MH6fOEzxEIBWAo+ShXB915PnfBFMuO7v9PIcASoCWMEH6VNZ7Hlvl6lhsbhc3WMCOJxuysfA9EqKAUO5+P7MeiVgg0LxFUBFBEW+AtwH9DlqsObQgSlWvgBetTM4qHNt1zQD+zEs7PkU1rSV4zrUFcDRW0G50NMtwDBKjJAZ1f92U2ApUlshPAoo7fsuA12YCt+bgXvpxyMylW6b/DQUwDFnZiWn4fLPqPccm+DVVnQGAgsguiu10I4MqADaMSsJYlIBJEh2O7pSAbRjVhLEpAJIkOx2dKUCaMesJIhJBZAg2e3oSgXQjllJEJMKIEGy29GVCqAds5IgJhVAgmS3oysVQDtmJUFM/wdaDlOuM5Eu/AAAAABJRU5ErkJggg==");',"}",".ew-tree-table .ew-tree-icon-file:after {",'    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAJNUlEQVR4Xu2dXYxdVRXHf2tghhYaoba1Qk1owIwmfVBaTKRgQqMPlGjig2nDnDsF0whSnwqJ4SNoU2OLUSNPVDSx2t47hEkxaQMBI1hB/EiE6osYqjGUYPGjCihN6Uy525wzt7UdZu7ZZ87a5949Z52XeVl77bX//9/d52vvM4IdtVZAaj16GzwGQM0hMAAMgJorUPPh2wxgANRcgZoP32YAA6DmCtR8+DYDGADVKuB2s4BB1gMbEYZxLEFYDlxQbSU97+0Ejn8hHMPxR4R9LOZxuZGTVVZW2QzgxlnGBNuBUYSLqhxkNH05jgN7GeIrsoF/VlF3cADcQc7nKHfiuM+M97Q0BUH4GpfxbVnHKc9WcwoLCoBrsRjHYwhr51Rd3Rs5foXwaUl4PZQUwQBwLa4AngZWhiq+JnlfBj4pCX8JMd4gALgxluJ4Hrg8RNE1zHkE4WoZ4Zj22NUBcOMsZILnEFZrF1vrfI5DDHGdbOCEpg76ADTZiXCXZpGWq6OAsFNGuEdTD1UA3B7exwDpdLUgt0jHqwjjwH6EF0NMb7k19DAgO03CKtp8pvNM5AO55TjeZoCVMsLfc2M9A3QBaPEQcGtO328hbOYw+2Qbbc8653WY28YAw3yONrsRLswZ7Pck4TYtQdQAcOMMMckbwMIuxaVPua6VhBe0BjCf8rgWa4Bf5jwVPcEgl8gGJjTGrgfAGDfgeCKnqC2SsEuj8Pmaw7W4HXiw6/iE9TLCkxoa6AHQyopOi5/5cLzCCq4M/WRLQ5Re5ug8Of1z11tox3el0UXrAgPQA6DJQYTru/R9ryTsKFBbbUNdK7vS/3qXH9PPpcE6DYH0AGjxEjA8a1Ft1sgohzSKnu853MNcRburVocl4UMaOugB0MxeYMx+BTt14fKmRtHzPYcb5+LOBfVsp9Pj0mCRhg56ALRw3QqSxPYgFDHMVaSnAVDElQpjDYAKxe7HrgyAfnSlwpoMgArF7seuDIB+dKXCmgyACsXux64MgH50pcKaDIAKxe7HrgyAfnSlwpoMgBnEduO8n0m+j+MahCUV+pHf1dQun18zyBdkA3/Lb9A9wgCYpk9nj8EfEC4tK27Q9o7XGOIjZXf2GADTAWjyQ4Sbg5qnl3yvJGwqk84AePcMkO6VSxdSxnAck4RlZQo1AN4NwF+By8qIWmHbo5Kwokx/BkDcp4A9kpQ7XRkA0wGY2nPw+yguAoVVZTd0GgAz3Qbu5VIGsr0H1wLvLTPFBmj772xJd5vbZJTXyuY3AMoqGHl7AyByA8uWbwCUVTDy9gZA5AaWLd8AKKtg5O0NgMgNLFu+AVBWwcjbGwCRG1i2fAOgrIKRtzcAIjewbPkGQFkFI29vAERuYNnyDYCZXgbZmsAzqmjtto5md7CtCTz3F1E/AGxN4DkE1A+AVvb9fFsT2MGgjgDYmsCz5oD6ARDXKcDWBE6/iC9LbOc7xLYmsK6ngHTcztYE1vc2sOyDldja24Og2BxTrtcAUBY0tnQGQGyOKddrACgLGls6AyA2x5TrNQCUBY0tnQEQm2PK9RoAyoLGls4AiM0x5XoNAGVBY0tnAMTmmHK9BsAMgqp+J1D5u37K/mMATFM02JpApe/6GQCB/8eNC7sgpPR3/QyA0ACEXRNY+rt+BkB4AEKuCSz9XT8DIDQAYU8BpdfwGQChAQj1ncD0IlDhu34GQGAAUoGV1wSqftfPAKgAAG2RQ+Rzu1nAIOuBjQjDOJYgLAcu0Oyv7Crr07VEszdQU7wQudw4y5hgOzCKcFGIPs7OaQCEVtgzvzvI+RzlThz3VWF8p6wJSXRmFJsBPI2eKazzdPIxhLUl0syl6RFJWDmXhtPbGABzVNG1uAJ4GnSMKFSG4zfS4JpCbWYJNgDmoKIbYymO54HL59C8fBPHj6TBLeUTgQFQUEU3zkImeA5hdcGmeuHCRhlhXCOhAVBQRddkJ8JdBZtphr/DIEtkA29qJDUACqjY2aF8BGFBbjPHq0j2K92P8KKMcKxbGzfGKhy/ABbn5N4vCZ/N7d8zwADwFCoNc63sv5XcmtPkLYTNHGafbKPtk76A+dDmwzLKSz55fWIMAB+VUvPHGWKSN4CFXZqcTP+djSS84JmWQuY7xqRB4pvbJ84A8FEpBWCMG3A8kRO+RRJ2eaZMZ5SPAj/zmPbTlEd5h6tkE//wze8TZwD4qDQ1/T8I3D5ruOMVVnClrOOUT8rMfMczCO/JjXdM4vi4jHIoN7ZggAHgKZhrchDh+i7h90rCDp90hcwHB9wiCXt8cheNMQA8FXOt7MJreNbwNmt8fqEFzU/t3ywNfuBZZuEwA8BTMtfkOMKFs4YPcknevblr8jHgKa9pf6qjQtcUnkM5J8wA8FSt7Dr9zHzJLvgWeXYZ3Py0DgPA040yABQ237FVGjzgWVqpME0A/tuVbsfF0uA/partYeO5AtDP5uvOAE3+hPDBWT0aYLXcxO966GGprucCQL+brw3AswifmFVlxz3SYGcpF3rYuCgA7mHW0uYn3ud8x93S4P6qh6h3CmiyC+GLXQAo9KCkaiHy+isCQMf8p3IeG/+/yx6ZrzsDtLgReLyrkI4vSSN7ohbd4QvAHMzfLg2+2itB9GaA9GXJBK93vVeGk7RZ6/PApFeCzNavDwCuxaeAAwV++fdLg7t7OVY1ANJBeL8udXyehEdFssecURx5AAB3AN8EzvMakOMBabDVKzZgkC4AYyynzcveCybgEYQDPgsmAmrgldoDAK88WVCfmK96DXB69K7JNxC+7K9GzSL7yPwwAKSLJid5Fri6Ztb6DHeXJGzxCawqRvUUcGYWmFo2/duerJmvSrni/fSd+UFmgDMQTG2c+Clkf+t+fEeS7CKx744gM8BZEKQrXNPbouv6buTVFHQSx83S4JFquiveS1AAsgvehxhkEXdUvHmyuBL6LZ5hgK39/v4jOABnZoN0+/QkO3DcVOEuWn1bu2V0vA38mPP4Vr8bf3oYlQFwFgjpXcJ6HBshe3u4NMQHFII7ny7UlOy/maYbPtI3oY9yigOyiePB+1bsoHIAFGu3VAoKGAAKIsacwgCI2T2F2g0ABRFjTmEAxOyeQu0GgIKIMacwAGJ2T6F2A0BBxJhTGAAxu6dQuwGgIGLMKf4HAR/hrhUhGSQAAAAASUVORK5CYII=");',"}","</style>"].join(""));s("treeTable",a)});
\ No newline at end of file
diff --git a/src/main/webapp/static/layui/lay/modules/xmSelect.js b/src/main/webapp/static/layui/lay/modules/xmSelect.js
new file mode 100644
index 0000000..9244d07
--- /dev/null
+++ b/src/main/webapp/static/layui/lay/modules/xmSelect.js
@@ -0,0 +1,8 @@
+/*!
+ * @Title: xm-select
+ * @Version: 1.2.2
+ * @Description锛氬熀浜巐ayui鐨勫閫夎В鍐虫柟妗�
+ * @Site: https://gitee.com/maplemei/xm-select
+ * @Author: maplemei
+ * @License锛欰pache License 2.0
+ */!function(e){var t={};function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(o,r,function(t){return e[t]}.bind(null,r));return o},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="./",n(n.s=213)}({105:function(e,t){e.exports=function(e){var t="undefined"!=typeof window&&window.location;if(!t)throw new Error("fixUrls requires window.location");if(!e||"string"!=typeof e)return e;var n=t.protocol+"//"+t.host,o=n+t.pathname.replace(/\/[^\/]*$/,"/");return e.replace(/url\s*\(((?:[^)(]|\((?:[^)(]+|\([^)(]*\))*\))*)\)/gi,(function(e,t){var r,i=t.trim().replace(/^"(.*)"$/,(function(e,t){return t})).replace(/^'(.*)'$/,(function(e,t){return t}));return/^(#|data:|http:\/\/|https:\/\/|file:\/\/\/|\s*$)/i.test(i)?e:(r=0===i.indexOf("//")?i:0===i.indexOf("/")?n+i:o+i.replace(/^\.\//,""),"url("+JSON.stringify(r)+")")}))}},213:function(e,t,n){"use strict";n.r(t),function(e){n(215),n(216),n(218);var t=n(41);window.addEventListener("click",(function(){Object.keys(t.b).forEach((function(e){var n=t.b[e];n&&n.closed&&n.closed()}))})),window.addEventListener("scroll",(function(){Object.keys(t.b).forEach((function(e){var n=t.b[e];n&&n.calcPosition&&n.calcPosition()}))})),"object"===("undefined"==typeof exports?"undefined":_typeof(exports))?e.exports=t.c:"function"==typeof define&&n(220)?define(xmSelect):window.layui&&layui.define&&layui.define((function(e){e("xmSelect",t.c)})),window.xmSelect=t.c}.call(this,n(214)(e))},214:function(e,t){e.exports=function(e){if(!e.webpackPolyfill){var t=Object.create(e);t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),Object.defineProperty(t,"exports",{enumerable:!0}),t.webpackPolyfill=1}return t}},215:function(e,t){Array.prototype.map||(Array.prototype.map=function(e,t){var n,o,r,i=Object(this),a=i.length>>>0;for(t&&(n=t),o=new Array(a),r=0;r<a;){var l,s;r in i&&(l=i[r],s=e.call(n,l,r,i),o[r]=s),r++}return o}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n,o;if(null==this)throw new TypeError("this is null or not defined");var r=Object(this),i=r.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),o=0;o<i;){var a;o in r&&(a=r[o],e.call(n,a,o,r)),o++}}),Array.prototype.filter||(Array.prototype.filter=function(e){if(null==this)throw new TypeError;var t=Object(this),n=t.length>>>0;if("function"!=typeof e)throw new TypeError;for(var o=[],r=arguments[1],i=0;i<n;i++)if(i in t){var a=t[i];e.call(r,a,i,t)&&o.push(a)}return o}),Array.prototype.find||(Array.prototype.find=function(e){return e&&(this.filter(e)||[])[0]}),Array.prototype.findIndex||(Array.prototype.findIndex=function(e){for(var t,n=Object(this),o=n.length>>>0,r=arguments[1],i=0;i<o;i++)if(t=n[i],e.call(r,t,i,n))return i;return-1})},216:function(e,t,n){var o=n(217);"string"==typeof o&&(o=[[e.i,o,""]]);var r={hmr:!0,transform:void 0,insertInto:void 0};n(27)(o,r);o.locals&&(e.exports=o.locals)},217:function(e,t,n){(t=n(26)(!1)).push([e.i,"@-webkit-keyframes xm-upbit {\n  from {\n    -webkit-transform: translate3d(0, 30px, 0);\n    opacity: 0.3;\n  }\n  to {\n    -webkit-transform: translate3d(0, 0, 0);\n    opacity: 1;\n  }\n}\n@keyframes xm-upbit {\n  from {\n    transform: translate3d(0, 30px, 0);\n    opacity: 0.3;\n  }\n  to {\n    transform: translate3d(0, 0, 0);\n    opacity: 1;\n  }\n}\n@-webkit-keyframes loader {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@keyframes loader {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\nxm-select {\n  background-color: #FFF;\n  position: relative;\n  border: 1px solid #E6E6E6;\n  border-radius: 2px;\n  display: block;\n  width: 100%;\n  cursor: pointer;\n  outline: none;\n}\nxm-select * {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n  font-size: 14px;\n  font-weight: 400;\n  text-overflow: ellipsis;\n  user-select: none;\n  -ms-user-select: none;\n  -moz-user-select: none;\n  -webkit-user-select: none;\n}\nxm-select:hover {\n  border-color: #C0C4CC;\n}\nxm-select > .xm-tips {\n  color: #999999;\n  padding: 0 10px;\n  position: absolute;\n  display: flex;\n  height: 100%;\n  align-items: center;\n}\nxm-select > .xm-icon {\n  display: inline-block;\n  overflow: hidden;\n  position: absolute;\n  width: 0;\n  height: 0;\n  right: 10px;\n  top: 50%;\n  margin-top: -3px;\n  cursor: pointer;\n  border: 6px dashed transparent;\n  border-top-color: #C2C2C2;\n  border-top-style: solid;\n  transition: all 0.3s;\n  -webkit-transition: all 0.3s;\n}\nxm-select > .xm-icon-expand {\n  margin-top: -9px;\n  transform: rotate(180deg);\n}\nxm-select > .xm-label.single-row {\n  position: absolute;\n  top: 0;\n  bottom: 0px;\n  left: 0px;\n  right: 30px;\n  overflow: auto hidden;\n}\nxm-select > .xm-label.single-row .scroll {\n  overflow-y: hidden;\n}\nxm-select > .xm-label.single-row .label-content {\n  flex-wrap: nowrap;\n  white-space: nowrap;\n}\nxm-select > .xm-label.auto-row .label-content {\n  flex-wrap: wrap;\n  padding-right: 30px !important;\n}\nxm-select > .xm-label.auto-row .xm-label-block > span {\n  white-space: unset;\n  height: 100%;\n}\nxm-select > .xm-label .scroll .label-content {\n  display: flex;\n  padding: 3px 10px;\n}\nxm-select > .xm-label .xm-label-block {\n  display: flex;\n  position: relative;\n  padding: 0px 5px;\n  margin: 2px 5px 2px 0;\n  border-radius: 3px;\n  align-items: baseline;\n  color: #FFF;\n}\nxm-select > .xm-label .xm-label-block > span {\n  display: flex;\n  color: #FFF;\n  white-space: nowrap;\n}\nxm-select > .xm-label .xm-label-block > i {\n  color: #FFF;\n  margin-left: 8px;\n  font-size: 12px;\n  cursor: pointer;\n  display: flex;\n}\nxm-select > .xm-label .xm-label-block.disabled {\n  background-color: #C2C2C2 !important;\n  cursor: no-drop !important;\n}\nxm-select > .xm-label .xm-label-block.disabled > i {\n  cursor: no-drop !important;\n}\nxm-select > .xm-body {\n  position: absolute;\n  left: 0;\n  top: 42px;\n  padding: 5px 0;\n  z-index: 999;\n  width: 100%;\n  min-width: fit-content;\n  border: 1px solid #E6E6E6;\n  background-color: #fff;\n  border-radius: 2px;\n  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12);\n  animation-name: xm-upbit;\n  animation-duration: 0.3s;\n  animation-fill-mode: both;\n}\nxm-select > .xm-body .scroll-body {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\nxm-select > .xm-body .scroll-body::-webkit-scrollbar {\n  width: 8px;\n}\nxm-select > .xm-body .scroll-body::-webkit-scrollbar-track {\n  -webkit-border-radius: 2em;\n  -moz-border-radius: 2em;\n  -ms-border-radius: 2em;\n  border-radius: 2em;\n  background-color: #FFF;\n}\nxm-select > .xm-body .scroll-body::-webkit-scrollbar-thumb {\n  -webkit-border-radius: 2em;\n  -moz-border-radius: 2em;\n  -ms-border-radius: 2em;\n  border-radius: 2em;\n  background-color: #C2C2C2;\n}\nxm-select > .xm-body.up {\n  top: auto;\n  bottom: 42px;\n}\nxm-select > .xm-body.relative {\n  position: relative;\n  display: block !important;\n  top: 0;\n  box-shadow: none;\n  border: none;\n  animation-name: none;\n  animation-duration: 0;\n  min-width: 100%;\n}\nxm-select > .xm-body .xm-group {\n  cursor: default;\n}\nxm-select > .xm-body .xm-group-item {\n  display: inline-block;\n  cursor: pointer;\n  padding: 0 10px;\n  color: #999;\n  font-size: 12px;\n}\nxm-select > .xm-body .xm-option {\n  display: flex;\n  align-items: center;\n  position: relative;\n  padding: 0 10px;\n  cursor: pointer;\n}\nxm-select > .xm-body .xm-option-icon {\n  color: transparent;\n  display: flex;\n  border: 1px solid #E6E6E6;\n  border-radius: 3px;\n  justify-content: center;\n  align-items: center;\n}\nxm-select > .xm-body .xm-option-icon.xm-custom-icon {\n  color: unset;\n  border: unset;\n}\nxm-select > .xm-body .xm-option-icon-hidden {\n  margin-right: -10px;\n}\nxm-select > .xm-body .xm-option-icon.xm-icon-danx {\n  border-radius: 100%;\n}\nxm-select > .xm-body .xm-option-content {\n  display: flex;\n  position: relative;\n  padding-left: 15px;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  color: #666;\n  width: calc(100% - 20px);\n}\nxm-select > .xm-body .xm-option.hide-icon .xm-option-content {\n  padding-left: 0;\n}\nxm-select > .xm-body .xm-option.selected.hide-icon .xm-option-content {\n  color: #FFF !important;\n}\nxm-select > .xm-body .xm-option .loader {\n  width: 0.8em;\n  height: 0.8em;\n  margin-right: 6px;\n  color: #C2C2C2;\n}\nxm-select > .xm-body .xm-select-empty {\n  text-align: center;\n  color: #999;\n}\nxm-select > .xm-body .disabled {\n  cursor: no-drop;\n}\nxm-select > .xm-body .disabled:hover {\n  background-color: #FFF;\n}\nxm-select > .xm-body .disabled .xm-option-icon {\n  border-color: #C2C2C2 !important;\n}\nxm-select > .xm-body .disabled .xm-option-content {\n  color: #C2C2C2 !important;\n}\nxm-select > .xm-body .disabled.selected > .xm-option-icon {\n  color: #C2C2C2 !important;\n}\nxm-select > .xm-body .xm-search {\n  background-color: #FFF !important;\n  position: relative;\n  padding: 0 10px;\n  margin-bottom: 5px;\n  cursor: pointer;\n}\nxm-select > .xm-body .xm-search > i {\n  position: absolute;\n  color: #666;\n}\nxm-select > .xm-body .xm-search-input {\n  border: none;\n  border-bottom: 1px solid #E6E6E6;\n  padding-left: 27px;\n  cursor: text;\n}\nxm-select > .xm-body .xm-paging {\n  padding: 0 10px;\n  display: flex;\n  margin-top: 5px;\n}\nxm-select > .xm-body .xm-paging > span:first-child {\n  border-radius: 2px 0 0 2px;\n}\nxm-select > .xm-body .xm-paging > span:last-child {\n  border-radius: 0 2px 2px 0;\n}\nxm-select > .xm-body .xm-paging > span {\n  display: flex;\n  flex: auto;\n  justify-content: center;\n  vertical-align: middle;\n  margin: 0 -1px 0 0;\n  background-color: #fff;\n  color: #333;\n  font-size: 12px;\n  border: 1px solid #e2e2e2;\n  flex-wrap: nowrap;\n  width: 100%;\n  overflow: hidden;\n  min-width: 50px;\n}\nxm-select > .xm-body .xm-toolbar {\n  padding: 0 10px;\n  display: flex;\n  margin: -3px 0;\n  cursor: default;\n}\nxm-select > .xm-body .xm-toolbar .toolbar-tag {\n  cursor: pointer;\n  display: flex;\n  margin-right: 20px;\n  color: #666;\n  align-items: baseline;\n}\nxm-select > .xm-body .xm-toolbar .toolbar-tag:hover {\n  opacity: 0.8;\n}\nxm-select > .xm-body .xm-toolbar .toolbar-tag:active {\n  opacity: 1;\n}\nxm-select > .xm-body .xm-toolbar .toolbar-tag > i {\n  margin-right: 2px;\n  font-size: 14px;\n}\nxm-select > .xm-body .xm-toolbar .toolbar-tag:last-child {\n  margin-right: 0;\n}\nxm-select > .xm-body .xm-body-custom {\n  line-height: initial;\n  cursor: default;\n}\nxm-select > .xm-body .xm-body-custom * {\n  box-sizing: initial;\n}\nxm-select > .xm-body .xm-tree {\n  position: relative;\n}\nxm-select > .xm-body .xm-tree-icon {\n  display: inline-block;\n  margin-right: 3px;\n  cursor: pointer;\n  border: 6px dashed transparent;\n  border-left-color: #C2C2C2;\n  border-left-style: solid;\n  transition: all 0.3s;\n  -webkit-transition: all 0.3s;\n  z-index: 2;\n  visibility: hidden;\n}\nxm-select > .xm-body .xm-tree-icon.expand {\n  margin-top: 3px;\n  margin-right: 5px;\n  margin-left: -2px;\n  transform: rotate(90deg);\n}\nxm-select > .xm-body .xm-tree-icon.xm-visible {\n  visibility: visible;\n}\nxm-select > .xm-body .xm-tree .left-line {\n  position: absolute;\n  left: 13px;\n  width: 0;\n  z-index: 1;\n  border-left: 1px dotted #c0c4cc !important;\n}\nxm-select > .xm-body .xm-tree .top-line {\n  position: absolute;\n  left: 13px;\n  height: 0;\n  z-index: 1;\n  border-top: 1px dotted #c0c4cc !important;\n}\nxm-select > .xm-body .xm-tree .xm-tree-icon + .top-line {\n  margin-left: 1px;\n}\nxm-select > .xm-body .scroll-body > .xm-tree > .xm-option > .top-line,\nxm-select > .xm-body .scroll-body > .xm-option > .top-line {\n  width: 0 !important;\n}\nxm-select > .xm-body .xm-cascader-box {\n  position: absolute;\n  left: 0;\n  right: 0;\n  top: 0;\n  bottom: 0;\n  padding: 5px 0;\n  border: 1px solid #E6E6E6;\n  background-color: #fff;\n  border-radius: 2px;\n  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12);\n  margin: -1px;\n}\nxm-select > .xm-body .xm-cascader-box::before {\n  content: ' ';\n  position: absolute;\n  width: 0;\n  height: 0;\n  border: 6px solid transparent;\n  border-right-color: #E6E6E6;\n  top: 10px;\n  left: -12px;\n}\nxm-select > .xm-body .xm-cascader-box::after {\n  content: ' ';\n  position: absolute;\n  width: 0;\n  height: 0;\n  border: 6px solid transparent;\n  border-right-color: #fff;\n  top: 10px;\n  left: -11px;\n}\nxm-select > .xm-body .xm-cascader-scroll {\n  height: 100%;\n  overflow-x: hidden;\n  overflow-y: auto;\n}\nxm-select > .xm-body.cascader {\n  width: unset;\n  min-width: unset;\n}\nxm-select > .xm-body.cascader .xm-option-content {\n  padding-left: 8px;\n}\nxm-select > .xm-body.cascader .disabled .xm-right-arrow {\n  color: #C2C2C2 !important;\n}\nxm-select .xm-input {\n  cursor: pointer;\n  border-radius: 2px;\n  border-width: 1px;\n  border-style: solid;\n  border-color: #E6E6E6;\n  display: block;\n  width: 100%;\n  box-sizing: border-box;\n  background-color: #FFF;\n  line-height: 1.3;\n  padding-left: 10px;\n  outline: 0;\n  user-select: text;\n  -ms-user-select: text;\n  -moz-user-select: text;\n  -webkit-user-select: text;\n}\nxm-select .dis {\n  display: none;\n}\nxm-select .loading {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  background-color: rgba(255, 255, 255, 0.6);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\nxm-select .loader {\n  border: 0.2em dotted currentcolor;\n  border-radius: 50%;\n  -webkit-animation: 1s loader linear infinite;\n  animation: 1s loader linear infinite;\n  display: inline-block;\n  width: 1em;\n  height: 1em;\n  color: inherit;\n  vertical-align: middle;\n  pointer-events: none;\n}\nxm-select .xm-select-default {\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  border: none;\n  visibility: hidden;\n}\nxm-select .xm-select-disabled {\n  position: absolute;\n  left: 0;\n  right: 0;\n  top: 0;\n  bottom: 0;\n  cursor: no-drop;\n  z-index: 2;\n  opacity: 0.3;\n  background-color: #FFF;\n}\nxm-select .item--divided {\n  border-top: 1px solid #ebeef5;\n  width: calc(100% - 20px);\n  cursor: initial;\n}\nxm-select .xm-right-arrow {\n  position: absolute;\n  color: #666;\n  right: 5px;\n  top: -1px;\n  font-weight: 700;\n  transform: scale(0.6, 1);\n}\nxm-select .xm-right-arrow::after {\n  content: '>';\n}\nxm-select[size='large'] {\n  min-height: 40px;\n  line-height: 40px;\n}\nxm-select[size='large'] .xm-input {\n  height: 40px;\n}\nxm-select[size='large'] .xm-label .scroll .label-content {\n  line-height: 34px;\n}\nxm-select[size='large'] .xm-label .xm-label-block {\n  height: 30px;\n  line-height: 30px;\n}\nxm-select[size='large'] .xm-body .xm-option .xm-option-icon {\n  height: 20px;\n  width: 20px;\n  font-size: 20px;\n}\nxm-select[size='large'] .xm-paging > span {\n  height: 34px;\n  line-height: 34px;\n}\nxm-select[size='large'] .xm-tree .left-line {\n  height: 100%;\n  bottom: 20px;\n}\nxm-select[size='large'] .xm-tree .left-line-group {\n  height: calc(100% - 40px);\n}\nxm-select[size='large'] .xm-tree .xm-tree-icon.xm-hidden + .top-line {\n  top: 19px;\n}\nxm-select[size='large'] .item--divided {\n  margin: 10px;\n}\nxm-select {\n  min-height: 36px;\n  line-height: 36px;\n}\nxm-select .xm-input {\n  height: 36px;\n}\nxm-select .xm-label .scroll .label-content {\n  line-height: 30px;\n}\nxm-select .xm-label .xm-label-block {\n  height: 26px;\n  line-height: 26px;\n}\nxm-select .xm-body .xm-option .xm-option-icon {\n  height: 18px;\n  width: 18px;\n  font-size: 18px;\n}\nxm-select .xm-paging > span {\n  height: 30px;\n  line-height: 30px;\n}\nxm-select .xm-tree .left-line {\n  height: 100%;\n  bottom: 18px;\n}\nxm-select .xm-tree .left-line-group {\n  height: calc(100% - 36px);\n}\nxm-select .xm-tree .xm-tree-icon.xm-hidden + .top-line {\n  top: 17px;\n}\nxm-select .item--divided {\n  margin: 9px;\n}\nxm-select[size='small'] {\n  min-height: 32px;\n  line-height: 32px;\n}\nxm-select[size='small'] .xm-input {\n  height: 32px;\n}\nxm-select[size='small'] .xm-label .scroll .label-content {\n  line-height: 26px;\n}\nxm-select[size='small'] .xm-label .xm-label-block {\n  height: 22px;\n  line-height: 22px;\n}\nxm-select[size='small'] .xm-body .xm-option .xm-option-icon {\n  height: 16px;\n  width: 16px;\n  font-size: 16px;\n}\nxm-select[size='small'] .xm-paging > span {\n  height: 26px;\n  line-height: 26px;\n}\nxm-select[size='small'] .xm-tree .left-line {\n  height: 100%;\n  bottom: 16px;\n}\nxm-select[size='small'] .xm-tree .left-line-group {\n  height: calc(100% - 32px);\n}\nxm-select[size='small'] .xm-tree .xm-tree-icon.xm-hidden + .top-line {\n  top: 15px;\n}\nxm-select[size='small'] .item--divided {\n  margin: 8px;\n}\nxm-select[size='mini'] {\n  min-height: 28px;\n  line-height: 28px;\n}\nxm-select[size='mini'] .xm-input {\n  height: 28px;\n}\nxm-select[size='mini'] .xm-label .scroll .label-content {\n  line-height: 22px;\n}\nxm-select[size='mini'] .xm-label .xm-label-block {\n  height: 18px;\n  line-height: 18px;\n}\nxm-select[size='mini'] .xm-body .xm-option .xm-option-icon {\n  height: 14px;\n  width: 14px;\n  font-size: 14px;\n}\nxm-select[size='mini'] .xm-paging > span {\n  height: 22px;\n  line-height: 22px;\n}\nxm-select[size='mini'] .xm-tree .left-line {\n  height: 100%;\n  bottom: 14px;\n}\nxm-select[size='mini'] .xm-tree .left-line-group {\n  height: calc(100% - 28px);\n}\nxm-select[size='mini'] .xm-tree .xm-tree-icon.xm-hidden + .top-line {\n  top: 13px;\n}\nxm-select[size='mini'] .item--divided {\n  margin: 7px;\n}\n.layui-form-pane xm-select {\n  margin: -1px -1px -1px 0;\n}\n",""]),e.exports=t},218:function(e,t,n){var o=n(219);"string"==typeof o&&(o=[[e.i,o,""]]);var r={hmr:!0,transform:void 0,insertInto:void 0};n(27)(o,r);o.locals&&(e.exports=o.locals)},219:function(e,t,n){(t=n(26)(!1)).push([e.i,'@font-face {\n  font-family: "xm-iconfont";\n  src: url(\'//at.alicdn.com/t/font_792691_ptvyboo0bno.eot?t=1574048839056\');\n  /* IE9 */\n  src: url(\'//at.alicdn.com/t/font_792691_ptvyboo0bno.eot?t=1574048839056#iefix\') format(\'embedded-opentype\'), /* IE6-IE8 */ url(\'data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAksAAsAAAAAEYAAAAjeAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCEUgqTXI8lATYCJAM0CxwABCAFhG0HgTwbZQ4jEbaCkVIj+4sD3sS6BFAp9ka91ulVG4leTC/+h+3V+zyRYCTyREKkcZ+D5/u137lPdveLGJBMunoiNPOQPBMq0/FQtEKIkMRDZng69d+hOiQumAr7bJdBOEzMTU77s78mhbI58aCg7ebCs4LBTgCk+cD/4ZqWUHebipp7al3tyKOjwCV/hVyw9PdzaktxI7IMQs26/1N8gV4DI0bVut3UhCaflGGgwM3oTXg1IfRMbCsmrEnriJVeYM2eXHII4KdMMzL4OoACHgZBCTasITcReDUBE8kWPLMTCGoQaDV+eKpUPQI49r8vP6BTPIDCaiBSml3oOQX0voNPebv/u2P0AUfP1w0s5EADzYBZsNdByylo2eVq/NtRdgFpovQR5x2CIwmIZeik6/u0T/m/A7RJP00sCmmyksj/kwc+LC5BFBqDEMDDjwPiANDB9MpJTXwHmsO3YyBwWDA4OFwwJLRcRgAOBUYMDg0mHRwGTAYozsV0AgWYruDwwExDHfzwKWf4OurQ9jzQDtoF+wpistfBfluQ5bQiiJa4ZQoKhShLiMayBbyg05AIkYBoIBJEEApQy/FwYv4HchADIUBXl61dW6mpwIgyp7p8PrHddieSjhY9oqTxyPB/FGNYDklpfYh8VtaoqSgb0bKoGB17CuVUp9Ll2nS2UpNGMSw9hyirA7C6+QLyByIQS0sSSmxvArC5odZmYZMxZSiBR5OkQl0uiufxMH5eL8t3u0d4XKyuq6EMdcpNe2+oXA8p9yPa+4T1PM7+A54tc7tpl2vcAHAftnhZj2chy1CyaCRFsyMqQ5nkNnskEt2yxxZinPsOZjFm4+XWvKqLkfCGS1k4MNP82isxSMf7ZsGYvQVCNAeSSVtzWCxRdXGxyZlA2CvCEevuO7y9M2z2NWH8icydzq/qAJSp1lGvDWFp6Nw3xChJowPD+76nU+upQk6Kw9jI0Rgym9Ct8VlxMI3CSIaDCZja5tDYt0/EYra4tn0Kp3v8Rdezk8svcy1mKhoSvNcZz3LKlUe777Gmval0s7bzAc0k13LGk896V9DuvNn34N0ebKgItkQgOomuJtgQPChNI4cwa7CEWCvfk5QjJFlem6i3SfVShWi5LTFRG+JwdCNpSqbpRFwrtb1TbcRkJi/AbJJQOmfCdnswLNGVM7qqSRO1zO0Q0j5Vr3cYQ07HB0MX6KoIZhx+D9Djs2C5bXtVwvbgJHtSCIL7hjFJme4sZDdS5IlJdKUO1Qt8opn0trBafz3AX933kmCRgyMEWGZjMAkRKhwmIHJGR4ruwFCdWKYzrap2R/mvd2UKajzRAZu88pGAD90Y+02kTFCKrBSXwGGJ3wRcPCdIppTxSmHOfESRwIli0S5J/8AYDCxTGh4XZua4xvfvGx320rDK2qA8g5FlS7pWNLx71+BwgA/KZ5I0aeKmNeCNoNPl8qNHu8uHHzqaKc86fHi4vPuRI4ny+I/vjxw+clh4HXVCFvVnVFx07EHZwVhSRliTTMWSEi0h6YuS6DxCRmiin0B3L4ry6cvR0ijYexFdBL3wGQM0YOrUAZCBkLOBBtQ+xdk7omfgUv+u++admyUeXduyxLM+r/+49rPfhgEZor6GymToNYksNsZyC7ntwAH0928UpgMpxpF0ydNlsMMBw7QsxTCmu0Hf3F+/+vb99Yumhb+e9R0LBNm+4O+hu7lQ5bGjI9j5G88qQ5SLFyuEC7cwd25xoYo2j4eA4bhpM7TZhPtmc+uhVEVSMYXLWh0bfjI8dvUpvDUocPZmU4kwwOfc83wB5wPehrpD3waApbwW+fgRrZXcxw+mB/3woZT+8JFMYwRMIy2k/18qhqcKpjYeYSnIACaUoRDu0e3kQFh98R5fiI8oJqwwGZSJDSbehLzZs7zIeWTQ4UGOIs2c4j2/Q/tn7n7j9juO33On6WhURCT/wO6Y3QdmWFY0Ef6JUeGRggO7ZbtaZlh5RYKWXbLPBLc3l/5h4A0mu3ZXTZ+u6t6VHMAzZhxak50T+24NnRuaOmehRkXlqVR5lIpuwezUUDUdCuJysv8Z/0/8uNE1s7jIJIubFWnI/x7g4nAZx79yYpFoAOU3a9iwT1O/GxUxPY0ljVPv9EukI3qNrl/So2YfzasqHCroNjS0+w0tlPlsYfC6v/01ixquizJH1Kd/VK+OS3iS3rTJWmqsMPdU3B3oFyC9RSumWE/0gG36IjTysfH51IJ/5oOgNYu6p4yb5Fdufhr/Kjtu0oSyYP/WJQrz35aNFnMhtFcwb55NlNnH8Wdu1b+XZA9zqlZrhdPo/V3uBhiUlQ66h0LhbAmFYIncdFOpVMh6Fl7peqy5Z2ZdQBITO2x1Asj1dRFjIBMC3hbuUh8Ooc4W03EjAdo8UL/t0oUfyU8630bmMcw/vqDNAsC9BQD4OqCgH+ljy0UhJB8AAJA+8EmArxk5gnRLik90AElf8rBm+IMvBTWnucb3+0o0ARk+r0ZBv8sU01nnSmP45/H8Dp8C8X+iE9e+ZvXymK/sQJ5/DuqhYKebPnKmPqLYuDcIMWS2/Rjxp2s8Do821LVn6A/xMK1RKvBLK5gyDsZ5uQ6bYusmx2yqLFe4lECHDPcFhojmckuAbnCI6Cn308RI6AAJdtCICQLQyBHKhSgX5YowN6BBPIEB8VxuSfNncpAuutzPnCSiDHDEo+DsKQBPoJi4MpRktepIs2zjO5h84IEMM3ffECKSZU1ZHxfewEI4h494MuuUNNOBjuw18QKHAzEXaAcylS3m3baq9MpnKenYmfEUgCdbXTHEtTVKsvruNGv9/DuYfOAhcuKu9TeEiA9nNJTUDOUbbVkn3sv2eDJrEnVrpvcHOjJeqRsOcpYYLuxoBzKVtCOm3ZaKbtJcurw+e/zN6c7Pd6r4gqUo0WLEiiOueOITvwQkKCEJM9nO3F60y5HkqLhdqUyXZtK3lqwReQ+G40O92UhOt0x/KmKM+u7LTPMzoEBOCYtiUPfSjODiuFXjSDm2idzAoc4Tj9bs2eJYDOU7HQA=\') format(\'woff2\'), url(\'//at.alicdn.com/t/font_792691_ptvyboo0bno.woff?t=1574048839056\') format(\'woff\'), url(\'//at.alicdn.com/t/font_792691_ptvyboo0bno.ttf?t=1574048839056\') format(\'truetype\'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ url(\'//at.alicdn.com/t/font_792691_ptvyboo0bno.svg?t=1574048839056#iconfont\') format(\'svg\');\n  /* iOS 4.1- */\n}\n.xm-iconfont {\n  font-family: "xm-iconfont" !important;\n  font-size: 16px;\n  font-style: normal;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n.xm-icon-quanxuan:before {\n  content: "\\e62c";\n}\n.xm-icon-caidan:before {\n  content: "\\e610";\n}\n.xm-icon-fanxuan:before {\n  content: "\\e837";\n}\n.xm-icon-pifu:before {\n  content: "\\e668";\n}\n.xm-icon-qingkong:before {\n  content: "\\e63e";\n}\n.xm-icon-sousuo:before {\n  content: "\\e600";\n}\n.xm-icon-danx:before {\n  content: "\\e62b";\n}\n.xm-icon-duox:before {\n  content: "\\e613";\n}\n.xm-icon-close:before {\n  content: "\\e601";\n}\n.xm-icon-expand:before {\n  content: "\\e641";\n}\n.xm-icon-banxuan:before {\n  content: "\\e60d";\n}\n',""]),e.exports=t},220:function(e,t){(function(t){e.exports=t}).call(this,{})},26:function(e,t,n){"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n=function(e,t){var n=e[1]||"",o=e[3];if(!o)return n;if(t&&"function"==typeof btoa){var r=function(e){var t=btoa(unescape(encodeURIComponent(JSON.stringify(e)))),n="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(t);return"/*# ".concat(n," */")}(o),i=o.sources.map((function(e){return"/*# sourceURL=".concat(o.sourceRoot||"").concat(e," */")}));return[n].concat(i).concat([r]).join("\n")}return[n].join("\n")}(t,e);return t[2]?"@media ".concat(t[2]," {").concat(n,"}"):n})).join("")},t.i=function(e,n,o){"string"==typeof e&&(e=[[null,e,""]]);var r={};if(o)for(var i=0;i<this.length;i++){var a=this[i][0];null!=a&&(r[a]=!0)}for(var l=0;l<e.length;l++){var s=[].concat(e[l]);o&&r[s[0]]||(n&&(s[2]?s[2]="".concat(n," and ").concat(s[2]):s[2]=n),t.push(s))}},t}},27:function(e,t,n){var o,r,i={},a=(o=function(){return window&&document&&document.all&&!window.atob},function(){return void 0===r&&(r=o.apply(this,arguments)),r}),l=function(e,t){return t?t.querySelector(e):document.querySelector(e)},s=function(e){var t={};return function(e,n){if("function"==typeof e)return e();if(void 0===t[e]){var o=l.call(this,e,n);if(window.HTMLIFrameElement&&o instanceof window.HTMLIFrameElement)try{o=o.contentDocument.head}catch(e){o=null}t[e]=o}return t[e]}}(),c=null,u=0,p=[],f=n(105);function d(e,t){for(var n=0;n<e.length;n++){var o=e[n],r=i[o.id];if(r){r.refs++;for(var a=0;a<r.parts.length;a++)r.parts[a](o.parts[a]);for(;a<o.parts.length;a++)r.parts.push(v(o.parts[a],t))}else{var l=[];for(a=0;a<o.parts.length;a++)l.push(v(o.parts[a],t));i[o.id]={id:o.id,refs:1,parts:l}}}}function h(e,t){for(var n=[],o={},r=0;r<e.length;r++){var i=e[r],a=t.base?i[0]+t.base:i[0],l={css:i[1],media:i[2],sourceMap:i[3]};o[a]?o[a].parts.push(l):n.push(o[a]={id:a,parts:[l]})}return n}function m(e,t){var n=s(e.insertInto);if(!n)throw new Error("Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.");var o=p[p.length-1];if("top"===e.insertAt)o?o.nextSibling?n.insertBefore(t,o.nextSibling):n.appendChild(t):n.insertBefore(t,n.firstChild),p.push(t);else if("bottom"===e.insertAt)n.appendChild(t);else{if("object"!=typeof e.insertAt||!e.insertAt.before)throw new Error("[Style Loader]\n\n Invalid value for parameter 'insertAt' ('options.insertAt') found.\n Must be 'top', 'bottom', or Object.\n (https://github.com/webpack-contrib/style-loader#insertat)\n");var r=s(e.insertAt.before,n);n.insertBefore(t,r)}}function b(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e);var t=p.indexOf(e);t>=0&&p.splice(t,1)}function y(e){var t=document.createElement("style");if(void 0===e.attrs.type&&(e.attrs.type="text/css"),void 0===e.attrs.nonce){var o=function(){0;return n.nc}();o&&(e.attrs.nonce=o)}return x(t,e.attrs),m(e,t),t}function x(e,t){Object.keys(t).forEach((function(n){e.setAttribute(n,t[n])}))}function v(e,t){var n,o,r,i;if(t.transform&&e.css){if(!(i="function"==typeof t.transform?t.transform(e.css):t.transform.default(e.css)))return function(){};e.css=i}if(t.singleton){var a=u++;n=c||(c=y(t)),o=w.bind(null,n,a,!1),r=w.bind(null,n,a,!0)}else e.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(n=function(e){var t=document.createElement("link");return void 0===e.attrs.type&&(e.attrs.type="text/css"),e.attrs.rel="stylesheet",x(t,e.attrs),m(e,t),t}(t),o=C.bind(null,n,t),r=function(){b(n),n.href&&URL.revokeObjectURL(n.href)}):(n=y(t),o=k.bind(null,n),r=function(){b(n)});return o(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;o(e=t)}else r()}}e.exports=function(e,t){if("undefined"!=typeof DEBUG&&DEBUG&&"object"!=typeof document)throw new Error("The style-loader cannot be used in a non-browser environment");(t=t||{}).attrs="object"==typeof t.attrs?t.attrs:{},t.singleton||"boolean"==typeof t.singleton||(t.singleton=a()),t.insertInto||(t.insertInto="head"),t.insertAt||(t.insertAt="bottom");var n=h(e,t);return d(n,t),function(e){for(var o=[],r=0;r<n.length;r++){var a=n[r];(l=i[a.id]).refs--,o.push(l)}e&&d(h(e,t),t);for(r=0;r<o.length;r++){var l;if(0===(l=o[r]).refs){for(var s=0;s<l.parts.length;s++)l.parts[s]();delete i[l.id]}}}};var g,_=(g=[],function(e,t){return g[e]=t,g.filter(Boolean).join("\n")});function w(e,t,n,o){var r=n?"":o.css;if(e.styleSheet)e.styleSheet.cssText=_(t,r);else{var i=document.createTextNode(r),a=e.childNodes;a[t]&&e.removeChild(a[t]),a.length?e.insertBefore(i,a[t]):e.appendChild(i)}}function k(e,t){var n=t.css,o=t.media;if(o&&e.setAttribute("media",o),e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}function C(e,t,n){var o=n.css,r=n.sourceMap,i=void 0===t.convertToAbsoluteUrls&&r;(t.convertToAbsoluteUrls||i)&&(o=f(o)),r&&(o+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(r))))+" */");var a=new Blob([o],{type:"text/css"}),l=e.href;e.href=URL.createObjectURL(a),l&&URL.revokeObjectURL(l)}},36:function(e){e.exports=JSON.parse('{"a":"xm-select","b":"1.2.2","c":"https://maplemei.gitee.io/xm-select"}')},41:function(e,t,n){"use strict";n.d(t,"b",(function(){return at})),n.d(t,"d",(function(){return lt})),n.d(t,"a",(function(){return st}));var o=n(36);function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e){return function(e){if(Array.isArray(e))return l(e)}(e)||function(e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return l(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return l(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}function s(e){return e.nodeType?e:document.querySelector(e)}function c(){for(var e=[],t=0;t<arguments.length;t++)e.push("".concat(t+1,". ").concat(arguments[t]));console.warn(e.join("\n"))}function u(e){return"[object Array]"==Object.prototype.toString.call(e)}function p(e){return"[object Function]"==Object.prototype.toString.call(e)}function f(e,t){var n;for(n in t)e[n]=e[n]&&"[object Object]"===e[n].toString()&&t[n]&&"[object Object]"===t[n].toString()?f(e[n],t[n]):e[n]=t[n];return e}function d(e,t,n){for(var o=n.value,r=a(t),i=function(n){var i=e[n];t.find((function(e){return e[o]==i[o]}))||r.push(i)},l=0;l<e.length;l++)i(l);return r}function h(e,t,n,o){if(e&&u(e)){var r=o.children,i=o.selected,a=o.value;e.forEach((function(e){e.__node[i]||t.find((function(t){return t[a]===e[a]}))?n.push(e):h(e[r],t,n,o)}))}}function m(e,t,n){if(e&&u(e))return e.map((function(e){return e=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({},e),n.forEach((function(t){return delete e[t]})),e[t]=m(e[t],t,n),e}))}var b,y,x,v,g,_={},w=[],k=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function C(e,t){for(var n in t)e[n]=t[n];return e}function O(e){var t=e.parentNode;t&&t.removeChild(e)}function S(e,t,n){var o,r=arguments,i={};for(o in t)"key"!==o&&"ref"!==o&&(i[o]=t[o]);if(arguments.length>3)for(n=[n],o=3;o<arguments.length;o++)n.push(r[o]);if(null!=n&&(i.children=n),"function"==typeof e&&null!=e.defaultProps)for(o in e.defaultProps)void 0===i[o]&&(i[o]=e.defaultProps[o]);return j(e,i,t&&t.key,t&&t.ref,null)}function j(e,t,n,o,r){var i={type:e,props:t,key:n,ref:o,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:r};return null==r&&(i.__v=i),b.vnode&&b.vnode(i),i}function E(e){return e.children}function A(e,t){this.props=e,this.context=t}function R(e,t){if(null==t)return e.__?R(e.__,e.__.__k.indexOf(e)+1):null;for(var n;t<e.__k.length;t++)if(null!=(n=e.__k[t])&&null!=n.__e)return n.__e;return"function"==typeof e.type?R(e):null}function P(e){var t,n;if(null!=(e=e.__)&&null!=e.__c){for(e.__e=e.__c.base=null,t=0;t<e.__k.length;t++)if(null!=(n=e.__k[t])&&null!=n.__e){e.__e=e.__c.base=n.__e;break}return P(e)}}function I(e){(!e.__d&&(e.__d=!0)&&y.push(e)&&!D.__r++||v!==b.debounceRendering)&&((v=b.debounceRendering)||x)(D)}function D(){for(var e;D.__r=y.length;)e=y.sort((function(e,t){return e.__v.__b-t.__v.__b})),y=[],e.some((function(e){var t,n,o,r,i,a,l;e.__d&&(a=(i=(t=e).__v).__e,(l=t.__P)&&(n=[],(o=C({},i)).__v=o,r=U(l,i,o,t.__n,void 0!==l.ownerSVGElement,null,n,null==a?R(i):a),B(n,i),r!=a&&P(i)))}))}function M(e,t,n,o,r,i,a,l,s,c){var u,p,f,d,h,m,b,y=o&&o.__k||w,x=y.length;for(s==_&&(s=null!=a?a[0]:x?R(o,0):null),n.__k=[],u=0;u<t.length;u++)if(null!=(d=n.__k[u]=null==(d=t[u])||"boolean"==typeof d?null:"string"==typeof d||"number"==typeof d?j(null,d,null,null,d):Array.isArray(d)?j(E,{children:d},null,null,null):null!=d.__e||null!=d.__c?j(d.type,d.props,d.key,null,d.__v):d)){if(d.__=n,d.__b=n.__b+1,null===(f=y[u])||f&&d.key==f.key&&d.type===f.type)y[u]=void 0;else for(p=0;p<x;p++){if((f=y[p])&&d.key==f.key&&d.type===f.type){y[p]=void 0;break}f=null}h=U(e,d,f=f||_,r,i,a,l,s,c),(p=d.ref)&&f.ref!=p&&(b||(b=[]),f.ref&&b.push(f.ref,null,d),b.push(p,d.__c||h,d)),null!=h?(null==m&&(m=h),s=T(e,d,f,y,a,h,s),"option"==n.type?e.value="":"function"==typeof n.type&&(n.__d=s)):s&&f.__e==s&&s.parentNode!=e&&(s=R(f))}if(n.__e=m,null!=a&&"function"!=typeof n.type)for(u=a.length;u--;)null!=a[u]&&O(a[u]);for(u=x;u--;)null!=y[u]&&H(y[u],y[u]);if(b)for(u=0;u<b.length;u++)K(b[u],b[++u],b[++u])}function T(e,t,n,o,r,i,a){var l,s,c;if(void 0!==t.__d)l=t.__d,t.__d=void 0;else if(r==n||i!=a||null==i.parentNode)e:if(null==a||a.parentNode!==e)e.appendChild(i),l=null;else{for(s=a,c=0;(s=s.nextSibling)&&c<o.length;c+=2)if(s==i)break e;e.insertBefore(i,a),l=a}return void 0!==l?l:i.nextSibling}function z(e,t,n){"-"===t[0]?e.setProperty(t,n):e[t]="number"==typeof n&&!1===k.test(t)?n+"px":null==n?"":n}function L(e,t,n,o,r){var i,a,l,s,c;if(r?"className"===t&&(t="class"):"class"===t&&(t="className"),"style"===t)if(i=e.style,"string"==typeof n)i.cssText=n;else{if("string"==typeof o&&(i.cssText="",o=null),o)for(s in o)n&&s in n||z(i,s,"");if(n)for(c in n)o&&n[c]===o[c]||z(i,c,n[c])}else"o"===t[0]&&"n"===t[1]?(a=t!==(t=t.replace(/Capture$/,"")),l=t.toLowerCase(),t=(l in e?l:t).slice(2),n?(o||e.addEventListener(t,V,a),(e.l||(e.l={}))[t]=n):e.removeEventListener(t,V,a)):"list"!==t&&"tagName"!==t&&"form"!==t&&"type"!==t&&"size"!==t&&!r&&t in e?e[t]=null==n?"":n:"function"!=typeof n&&"dangerouslySetInnerHTML"!==t&&(t!==(t=t.replace(/^xlink:?/,""))?null==n||!1===n?e.removeAttributeNS("http://www.w3.org/1999/xlink",t.toLowerCase()):e.setAttributeNS("http://www.w3.org/1999/xlink",t.toLowerCase(),n):null==n||!1===n&&!/^ar/.test(t)?e.removeAttribute(t):e.setAttribute(t,n))}function V(e){this.l[e.type](b.event?b.event(e):e)}function F(e,t,n){var o,r;for(o=0;o<e.__k.length;o++)(r=e.__k[o])&&(r.__=e,r.__e&&("function"==typeof r.type&&r.__k.length>1&&F(r,t,n),t=T(n,r,r,e.__k,null,r.__e,t),"function"==typeof e.type&&(e.__d=t)))}function U(e,t,n,o,r,i,a,l,s){var c,u,p,f,d,h,m,y,x,v,g,_=t.type;if(void 0!==t.constructor)return null;(c=b.__b)&&c(t);try{e:if("function"==typeof _){if(y=t.props,x=(c=_.contextType)&&o[c.__c],v=c?x?x.props.value:c.__:o,n.__c?m=(u=t.__c=n.__c).__=u.__E:("prototype"in _&&_.prototype.render?t.__c=u=new _(y,v):(t.__c=u=new A(y,v),u.constructor=_,u.render=q),x&&x.sub(u),u.props=y,u.state||(u.state={}),u.context=v,u.__n=o,p=u.__d=!0,u.__h=[]),null==u.__s&&(u.__s=u.state),null!=_.getDerivedStateFromProps&&(u.__s==u.state&&(u.__s=C({},u.__s)),C(u.__s,_.getDerivedStateFromProps(y,u.__s))),f=u.props,d=u.state,p)null==_.getDerivedStateFromProps&&null!=u.componentWillMount&&u.componentWillMount(),null!=u.componentDidMount&&u.__h.push(u.componentDidMount);else{if(null==_.getDerivedStateFromProps&&y!==f&&null!=u.componentWillReceiveProps&&u.componentWillReceiveProps(y,v),!u.__e&&null!=u.shouldComponentUpdate&&!1===u.shouldComponentUpdate(y,u.__s,v)||t.__v===n.__v){u.props=y,u.state=u.__s,t.__v!==n.__v&&(u.__d=!1),u.__v=t,t.__e=n.__e,t.__k=n.__k,u.__h.length&&a.push(u),F(t,l,e);break e}null!=u.componentWillUpdate&&u.componentWillUpdate(y,u.__s,v),null!=u.componentDidUpdate&&u.__h.push((function(){u.componentDidUpdate(f,d,h)}))}u.context=v,u.props=y,u.state=u.__s,(c=b.__r)&&c(t),u.__d=!1,u.__v=t,u.__P=e,c=u.render(u.props,u.state,u.context),u.state=u.__s,null!=u.getChildContext&&(o=C(C({},o),u.getChildContext())),p||null==u.getSnapshotBeforeUpdate||(h=u.getSnapshotBeforeUpdate(f,d)),g=null!=c&&c.type==E&&null==c.key?c.props.children:c,M(e,Array.isArray(g)?g:[g],t,n,o,r,i,a,l,s),u.base=t.__e,u.__h.length&&a.push(u),m&&(u.__E=u.__=null),u.__e=!1}else null==i&&t.__v===n.__v?(t.__k=n.__k,t.__e=n.__e):t.__e=N(n.__e,t,n,o,r,i,a,s);(c=b.diffed)&&c(t)}catch(e){t.__v=null,b.__e(e,t,n)}return t.__e}function B(e,t){b.__c&&b.__c(t,e),e.some((function(t){try{e=t.__h,t.__h=[],e.some((function(e){e.call(t)}))}catch(e){b.__e(e,t.__v)}}))}function N(e,t,n,o,r,i,a,l){var s,c,u,p,f,d=n.props,h=t.props;if(r="svg"===t.type||r,null!=i)for(s=0;s<i.length;s++)if(null!=(c=i[s])&&((null===t.type?3===c.nodeType:c.localName===t.type)||e==c)){e=c,i[s]=null;break}if(null==e){if(null===t.type)return document.createTextNode(h);e=r?document.createElementNS("http://www.w3.org/2000/svg",t.type):document.createElement(t.type,h.is&&{is:h.is}),i=null,l=!1}if(null===t.type)d!==h&&e.data!=h&&(e.data=h);else{if(null!=i&&(i=w.slice.call(e.childNodes)),u=(d=n.props||_).dangerouslySetInnerHTML,p=h.dangerouslySetInnerHTML,!l){if(null!=i)for(d={},f=0;f<e.attributes.length;f++)d[e.attributes[f].name]=e.attributes[f].value;(p||u)&&(p&&u&&p.__html==u.__html||(e.innerHTML=p&&p.__html||""))}(function(e,t,n,o,r){var i;for(i in n)"children"===i||"key"===i||i in t||L(e,i,null,n[i],o);for(i in t)r&&"function"!=typeof t[i]||"children"===i||"key"===i||"value"===i||"checked"===i||n[i]===t[i]||L(e,i,t[i],n[i],o)})(e,h,d,r,l),p?t.__k=[]:(s=t.props.children,M(e,Array.isArray(s)?s:[s],t,n,o,"foreignObject"!==t.type&&r,i,a,_,l)),l||("value"in h&&void 0!==(s=h.value)&&s!==e.value&&L(e,"value",s,d.value,!1),"checked"in h&&void 0!==(s=h.checked)&&s!==e.checked&&L(e,"checked",s,d.checked,!1))}return e}function K(e,t,n){try{"function"==typeof e?e(t):e.current=t}catch(e){b.__e(e,n)}}function H(e,t,n){var o,r,i;if(b.unmount&&b.unmount(e),(o=e.ref)&&(o.current&&o.current!==e.__e||K(o,null,t)),n||"function"==typeof e.type||(n=null!=(r=e.__e)),e.__e=e.__d=void 0,null!=(o=e.__c)){if(o.componentWillUnmount)try{o.componentWillUnmount()}catch(e){b.__e(e,t)}o.base=o.__P=null}if(o=e.__k)for(i=0;i<o.length;i++)o[i]&&H(o[i],t,n);null!=r&&O(r)}function q(e,t,n){return this.constructor(e,n)}function Y(e,t,n){var o,r,i;b.__&&b.__(e,t),r=(o=n===g)?null:n&&n.__k||t.__k,e=S(E,null,[e]),i=[],U(t,(o?t:n||t).__k=e,r||_,_,void 0!==t.ownerSVGElement,n&&!o?[n]:r?null:t.childNodes.length?w.slice.call(t.childNodes):null,i,n||_,o),B(i,e)}function Z(e){return(Z="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Q(e){return function(e){if(Array.isArray(e))return J(e)}(e)||function(e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return J(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return J(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function J(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}function W(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function G(e,t){return(G=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function X(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,o=ee(e);if(t){var r=ee(this).constructor;n=Reflect.construct(o,arguments,r)}else n=o.apply(this,arguments);return $(this,n)}}function $(e,t){return!t||"object"!==Z(t)&&"function"!=typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):t}function ee(e){return(ee=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}b={__e:function(e,t){for(var n,o;t=t.__;)if((n=t.__c)&&!n.__)try{if(n.constructor&&null!=n.constructor.getDerivedStateFromError&&(o=!0,n.setState(n.constructor.getDerivedStateFromError(e))),null!=n.componentDidCatch&&(o=!0,n.componentDidCatch(e)),o)return I(n.__E=n)}catch(t){e=t}throw e}},A.prototype.setState=function(e,t){var n;n=this.__s!==this.state?this.__s:this.__s=C({},this.state),"function"==typeof e&&(e=e(n,this.props)),e&&C(n,e),null!=e&&this.__v&&(t&&this.__h.push(t),I(this))},A.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),I(this))},A.prototype.render=E,y=[],x="function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,D.__r=0,g=_;var te=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&G(e,t)}(i,e);var t,n,o,r=X(i);function i(e){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,i),r.call(this,e)}return t=i,(n=[{key:"iconClick",value:function(e,t,n,o){this.props.ck(e,t,n,!0),o.stopPropagation()}},{key:"scrollFunc",value:function(e){if(0==e.wheelDeltaX){for(var t=this.labelRef.getElementsByClassName("xm-label-block"),n=10,o=0;o<t.length;o++)n+=t[o].getBoundingClientRect().width+5;var r=this.labelRef.getBoundingClientRect().width,i=n>r?n-r:r,a=this.labelRef.scrollLeft+e.deltaY;a<0&&(a=0),a>i&&(a=i),this.labelRef.scrollLeft=a}}},{key:"blur",value:function(){var e=this.base.querySelector(".label-search-input");e&&e.blur()}},{key:"componentDidMount",value:function(){this.labelRef.addEventListener&&this.labelRef.addEventListener("DOMMouseScroll",this.scrollFunc.bind(this),!1),this.labelRef.attachEvent&&this.labelRef.attachEvent("onmousewheel",this.scrollFunc.bind(this)),this.labelRef.onmousewheel=this.scrollFunc.bind(this)}},{key:"render",value:function(e){var t=this,n=e.data,o=e.prop,r=e.theme,i=e.model,a=e.sels,l=e.autoRow,s=e.tree,c=o.name,u=o.disabled,f=i.label,d=f.type,m=f[d],b=a;s.show&&s.strict&&s.simple&&h(n,a,b=[],o);var y="",x=!0,v=b.map((function(e){return e[c]})).join(",");if("text"===d)y=b.map((function(e){return"".concat(m.left).concat(e[c]).concat(m.right)})).join(m.separator);else if("block"===d){x=!1;var g=Q(b),_={backgroundColor:r.color},w=m.showCount<=0?g.length:m.showCount;y=g.splice(0,w).map((function(e){var n={width:m.showIcon?"calc(100% - 20px)":"100%"};return S("div",{class:["xm-label-block",e[u]?"disabled":""].join(" "),style:_},m.template&&p(m.template)?S("span",{style:n,dangerouslySetInnerHTML:{__html:m.template(e,g)}}):S("span",{style:n},e[c]),m.showIcon&&S("i",{class:"xm-iconfont xm-icon-close",onClick:t.iconClick.bind(t,e,!0,e[u])}))})),g.length&&y.push(S("div",{class:"xm-label-block",style:_},"+ ",g.length))}else if("search"==d){x=!1;var k="";b.length&&(k=b[0][c]),y=S("input",{class:"label-search-input",type:"text",placeholder:e.searchTips,style:{width:"100%",border:"none"},value:k,onInput:function(e){t.props.onReset(e,"labelSearch")},onCompositionstart:function(e){t.props.onReset(e,"labelSearch")},compositionupdate:function(e){t.props.onReset(e,"labelSearch")},compositionend:function(e){t.props.onReset(e,"labelSearch")},onClick:function(e){e.stopPropagation()}})}else y=b.length&&m&&m.template?m.template(n,b):b.map((function(e){return e[c]})).join(",");return S("div",{class:["xm-label",l?"auto-row":"single-row"].join(" ")},S("div",{class:"scroll",ref:function(e){return t.labelRef=e}},x?S("div",{class:"label-content",dangerouslySetInnerHTML:{__html:y}}):S("div",{class:"label-content",title:v},y)))}}])&&W(t.prototype,n),o&&W(t,o),i}(A);function ne(e){return(ne="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function oe(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function re(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?oe(Object(n),!0).forEach((function(t){ie(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):oe(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function ie(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ae(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function le(e,t){return(le=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function se(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,o=ue(e);if(t){var r=ue(this).constructor;n=Reflect.construct(o,arguments,r)}else n=o.apply(this,arguments);return ce(this,n)}}function ce(e,t){return!t||"object"!==ne(t)&&"function"!=typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):t}function ue(e){return(ue=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var pe={},fe=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&le(e,t)}(i,e);var t,n,o,r=se(i);function i(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,i),(t=r.call(this,e)).setState({filterValue:"",remote:!0,loading:!1,pageIndex:1,totalSize:0,val:pe}),t.searchCid=0,t.inputOver=!0,t.__value="",t.tempData=[],t.size=0,t}return t=i,(n=[{key:"optionClick",value:function(e,t,n,o){this.props.ck(e,t,n),this.focus(),this.blockClick(o)}},{key:"groupClick",value:function(e,t){var n=this.props.prop,o=n.click,r=n.children,i=n.disabled,a=e[o],l=e[r].filter((function(e){return!e[i]}));"SELECT"===a?this.props.onReset(l,"append"):"CLEAR"===a?this.props.onReset(l,"delete"):"AUTO"===a?this.props.onReset(l,"auto"):p(a)&&a(e),this.focus(),this.blockClick(t)}},{key:"blockClick",value:function(e){e.stopPropagation()}},{key:"pagePrevClick",value:function(){arguments.length>0&&void 0!==arguments[0]||this.size;var e=this.state.pageIndex;e<=1||(this.changePageIndex(e-1),this.props.pageRemote&&this.postData(e-1,!0))}},{key:"pageNextClick",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.size,t=this.state.pageIndex;t>=e||(this.changePageIndex(t+1),this.props.pageRemote&&this.postData(t+1,!0))}},{key:"changePageIndex",value:function(e){this.setState({pageIndex:e})}},{key:"labelSearch",value:function(e){"input"==e.type?this.searchInput(e):this.handleComposition(e)}},{key:"searchInput",value:function(e){var t=this,n=e.target.value;n!==this.__value&&(this.searchCid&&clearTimeout(this.searchCid),this.inputOver&&(this.__value=n,this.searchCid=setTimeout((function(){t.callback=!0,t.setState({filterValue:t.__value,remote:!0,pageIndex:1})}),this.props.delay)))}},{key:"focus",value:function(){this.searchInputRef&&this.searchInputRef.focus()}},{key:"blur",value:function(){this.searchInputRef&&this.searchInputRef.blur()}},{key:"handleComposition",value:function(e){var t=e.type;"compositionstart"===t?(this.inputOver=!1,this.searchCid&&clearTimeout(this.searchCid)):"compositionend"===t&&(this.inputOver=!0,this.searchInput(e))}},{key:"postData",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.state.pageIndex,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];(this.state.remote||n)&&(this.callback=!1,this.setState({loading:!0,remote:!1}),this.blur(),this.props.remoteMethod(this.state.filterValue,(function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;setTimeout((function(){e.focus(),e.callback=!0,e.setState({loading:!1,totalSize:n}),e.props.onReset(t,"data")}),10)}),this.props.show,t))}},{key:"keydown",value:function(e,t){var n=this,o=t.keyCode;if("div"===e&&(27===o||9===o?this.props.onReset(!1,"close"):37===o?this.pagePrevClick():39===o&&this.pageNextClick()),this.props.enableKeyboard){var r=this.props.prop,i=r.value,a=r.optgroup,l=r.disabled,s=this.tempData.filter((function(e){return!e[a]&&!e[l]})),c=s.length-1;if(-1===c)return;var u=s.findIndex((function(e){return e[i]===n.state.val}));if(38===o){u<=0?u=c:u>0&&(u-=1);var p=s[u][i];this.setState({val:p});var f=this.base.querySelector('.xm-option[value="'.concat(p,'"]'));f&&f.scrollIntoView(!1)}else if(40===o){-1===u||u===c?u=0:u<c&&(u+=1);var d=s[u][i];this.setState({val:d});var h=this.base.querySelector('.xm-option[value="'.concat(d,'"]'));h&&h.scrollIntoView(!1)}else if(13===o&&this.state.val!=pe){var m=s[u];this.optionClick(m,-1!=this.props.sels.findIndex((function(e){return e[i]===n.state.val})),m[l],t)}}}},{key:"componentWillReceiveProps",value:function(e){var t=this;this.props.show!=e.show&&(e.show?setTimeout((function(){"search"===e.model.label.type||(e.filterable?t.focus():t.base.focus())}),0):(this.setState({filterValue:"",val:pe}),this.__value="",this.searchInputRef&&(this.searchInputRef.value=""),this.props.onReset("","labelSearchBlur"))),this.props.__update!=e.__update&&this.setState({remote:!0})}},{key:"render",value:function(e){var t,n=this,o=e.data,r=e.flatData,i=e.prop,a=e.template,l=e.theme,s=e.radio,c=e.sels,u=e.empty,h=e.filterable,m=e.filterMethod,b=e.remoteSearch,y=(e.remoteMethod,e.delay,e.searchTips),x=e.create,v=e.pageRemote,g=e.max,_=e.enableKeyboard,w=i.name,k=i.value,C=i.disabled,O=i.children,j=i.optgroup,E=f([],r);if((v||h&&b)&&this.postData(),h&&!b&&!v){E=E.filter((function(e,t){return e[j]?(delete e.__del,!0):m(n.state.filterValue,e,t,i)}));for(var A=0;A<E.length-1;A++){var R=E[A],P=E[A+1];R[j]&&P[j]&&(E[A].__del=!0)}E.length&&E[E.length-1][j]&&(E[E.length-1].__del=!0),E=E.filter((function(e){return!e.__del})),t=this.state.filterValue&&p(x)}var I=S("div",{class:h&&"search"!=e.model.label.type?"xm-search":"xm-search dis"},S("i",{class:"xm-iconfont xm-icon-sousuo"}),S("input",{class:"xm-input xm-search-input",placeholder:y})),D={};E.filter((function(e){return e[j]})).forEach((function(e,t){D[t]=e,e[O].forEach((function(e){return e.__group__index=t}))})),E=E.filter((function(e){return!e[j]}));var M="";if(e.paging){var T=v?this.state.totalSize:Math.floor((E.length-1)/e.pageSize)+1;T<=0&&(T=1);var z=this.state.pageIndex;if(z>T&&(z=T),T>0&&z<=0&&(z=1),!v){var L=(z-1)*e.pageSize,V=L+e.pageSize;E=E.slice(L,V)}var F={cursor:"no-drop",color:"#d2d2d2"},U={},B={};z<=1&&(U=F),z==T&&(B=F),this.state.pageIndex!==z&&this.changePageIndex(z),this.size=T,M=S("div",{class:"xm-paging"},S("span",{style:U,onClick:this.pagePrevClick.bind(this,T)},e.languageProp.paging.prev),S("span",null,this.state.pageIndex," / ",T),S("span",{style:B,onClick:this.pageNextClick.bind(this,T)},e.languageProp.paging.next))}else e.showCount>0&&(E=E.slice(0,e.showCount));var N,K=[],H={__tmp:!0};H[j]=!0,E.forEach((function(e){var t=D[e.__group__index];delete e.__group__index,N&&!t&&(t=H),t!=N&&(N=t,t&&K.push(N)),K.push(e)})),E=K,t&&(t=x(this.state.filterValue,f([],E)))&&E.splice(0,0,re(re({},t),{},{__node:{}}));var q=f([],E);this.tempData=q;var Y=S("div",{class:"xm-toolbar"},e.toolbar.list.map((function(t){var o,r=e.languageProp.toolbar[t];o="ALL"===t?{icon:"xm-iconfont xm-icon-quanxuan",name:r,method:function(e){var t=i.optgroup,o=i.disabled,r=e.filter((function(e){return!e[t]})).filter((function(e){return!e[o]})),a=c.filter((function(e){return e[i.disabled]})),l=[];l=s?a.length?a:r.slice(0,1):g>0?a.length>=g?a:d(r.slice(0,g-a.length),a,i):d(r,c,i),n.props.onReset(l,"sels")}}:"CLEAR"===t?{icon:"xm-iconfont xm-icon-qingkong",name:r,method:function(e){n.props.onReset(c.filter((function(e){return e[i.disabled]})),"sels")}}:"REVERSE"===t?{icon:"xm-iconfont xm-icon-fanxuan",name:r,method:function(e){var t=i.optgroup,o=i.disabled,r=e.filter((function(e){return!e[t]})).filter((function(e){return!e[o]})),a=[];c.forEach((function(e){var t=r.findIndex((function(t){return t[k]===e[k]}));-1==t?a.push(e):r.splice(t,1)}));var l=a.filter((function(e){return e[i.disabled]})),u=[];u=s?l.length?l:r.slice(0,1):g>0?l.length>=g?l:d(r.slice(0,g-l.length),l,i):d(r,a,i),n.props.onReset(u,"sels")}}:t;var a=function(e){"mouseenter"===e.type&&(e.target.style.color=l.color),"mouseleave"===e.type&&(e.target.style.color="")};return S("div",{class:"toolbar-tag",style:{},onClick:function(){p(o.method)&&o.method(q),n.focus()},onMouseEnter:a,onMouseLeave:a},e.toolbar.showIcon&&S("i",{class:o.icon}),S("span",null,o.name))})).filter((function(e){return e}))),Z="hidden"!=e.model.icon;return(E=E.map((function(t){return t[j]?t.__tmp?S("div",{class:"item--divided"}):S("div",{class:"xm-group"},S("div",{class:"xm-group-item",onClick:n.groupClick.bind(n,t)},t[w])):function(t){var r=!!c.find((function(e){return e[k]==t[k]})),i=r?{color:l.color,border:"none"}:{borderColor:l.color},u={};_&&t[k]===n.state.val&&(u.backgroundColor=l.hover),!Z&&r&&(u.backgroundColor=l.color,t[C]&&(u.backgroundColor="#C2C2C2"));var p,f,d=["xm-option",t[C]?" disabled":"",r?" selected":"",Z?"show-icon":"hide-icon"].join(" "),h=["xm-option-icon",(p=e.iconfont.select,f=e.iconfont.unselect,(p?!r&&f?f+" xm-custom-icon":p:0)||"xm-iconfont "+(s?"xm-icon-danx":"xm-icon-duox"))].join(" "),m=function(e){"mouseenter"===e.type?t[C]||(_?n.setState({val:t[k]}):e.target.style.backgroundColor=l.hover):"mouseleave"===e.type&&(t[C]||_||(e.target.style.backgroundColor=""))};return S("div",{class:d,style:u,value:t[k],onClick:n.optionClick.bind(n,t,r,t[C]),onMouseEnter:m,onMouseLeave:m},Z&&S("i",{class:h,style:i}),S("div",{class:"xm-option-content",dangerouslySetInnerHTML:{__html:a({data:o,item:t,arr:c,name:t[w],value:t[k]})}}))}(t)}))).length||(!e.pageEmptyShow&&(M=""),E.push(S("div",{class:"xm-select-empty"},u))),S("div",{onClick:this.blockClick,tabindex:"1",style:"outline: none;"},S("div",null,e.toolbar.show&&Y,I,S("div",{class:"scroll-body",style:{maxHeight:e.height}},E),e.paging&&M),this.state.loading&&S("div",{class:"loading"},S("span",{class:"loader"})))}},{key:"componentDidMount",value:function(){var e=this.base.querySelector(".xm-search-input");e&&(e.addEventListener("compositionstart",this.handleComposition.bind(this)),e.addEventListener("compositionupdate",this.handleComposition.bind(this)),e.addEventListener("compositionend",this.handleComposition.bind(this)),e.addEventListener("input",this.searchInput.bind(this)),this.searchInputRef=e),this.base.addEventListener("keydown",this.keydown.bind(this,"div"))}},{key:"componentDidUpdate",value:function(){if(this.callback){this.callback=!1;var e=this.props.filterDone;p(e)&&e(this.state.filterValue,this.tempData||[])}}}])&&ae(t.prototype,n),o&&ae(t,o),i}(A);function de(e){return(de="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function he(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function me(e,t){return(me=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function be(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,o=xe(e);if(t){var r=xe(this).constructor;n=Reflect.construct(o,arguments,r)}else n=o.apply(this,arguments);return ye(this,n)}}function ye(e,t){return!t||"object"!==de(t)&&"function"!=typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):t}function xe(e){return(xe=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var ve=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&me(e,t)}(i,e);var t,n,o,r=be(i);function i(e){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,i),r.call(this,e)}return t=i,(n=[{key:"blockClick",value:function(e){e.stopPropagation()}},{key:"shouldComponentUpdate",value:function(){return!this.prepare}},{key:"render",value:function(e){return this.prepare=!0,S("div",{onClick:this.blockClick,class:"xm-body-custom"},S("div",{class:"scroll-body",style:{maxHeight:e.height}},S("div",{style:"margin: 5px 0",dangerouslySetInnerHTML:{__html:e.content}})))}}])&&he(t.prototype,n),o&&he(t,o),i}(A);function ge(e){return(ge="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _e(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function we(e,t){return(we=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function ke(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,o=Oe(e);if(t){var r=Oe(this).constructor;n=Reflect.construct(o,arguments,r)}else n=o.apply(this,arguments);return Ce(this,n)}}function Ce(e,t){return!t||"object"!==ge(t)&&"function"!=typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):t}function Oe(e){return(Oe=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Se={},je=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&we(e,t)}(i,e);var t,n,o,r=ke(i);function i(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,i),(t=r.call(this,e)).state={expandedKeys:[],filterValue:"",remote:!0,loading:!1,val:Se},t.searchCid=0,t.inputOver=!0,t.__value="",t.tempData=[],t}return t=i,(n=[{key:"init",value:function(e){var t=e.tree,n=e.dataObj,o=e.flatData,r=e.prop,i=r.value,a=r.optgroup,l=[];!0===t.expandedKeys?l=o.filter((function(e){return!0===e[a]})).map((function(e){return e[i]})):!1===t.expandedKeys||t.expandedKeys.forEach((function(e){l.push(e);for(var t=n[e],o=function(){var e=t[i];-1===l.findIndex((function(t){return t===e}))&&l.push(e),t=t.__node.parent};t;)o()})),this.setState({expandedKeys:l})}},{key:"blockClick",value:function(e){e.stopPropagation()}},{key:"optionClick",value:function(e,t,n,o,r){var i=this;if("line"===o){if(!0===e.__node.loading)return;var a=this.props,l=a.tree,s=a.prop,c=a.sels,u=l.clickExpand,f=l.clickCheck,d=r.target&&p(r.target.getAttribute)&&"expand"===r.target.getAttribute("type");if(u||d){if(!l.lazy&&!e[s.optgroup])return void this.props.ck(e,t,n);var h=e[this.props.prop.value],m=this.state.expandedKeys,b=m.findIndex((function(e){return e===h}));-1===b?m.push(h):m.splice(b,1),this.setState({expandedKeys:m});var y=e[s.children];l.lazy&&y&&0===y.length&&!1!==e.__node.loading&&(e.__node.loading=!0,l.load(e,(function(t){e.__node.loading=!1,e[s.children]=i.handlerData(t,s.children),e[s.selected]=-1!=c.findIndex((function(t){return t[s.value]===e[s.value]})),i.props.onReset(c,"treeData")})))}else f&&(o="checkbox")}"checkbox"===o&&this.props.ck(e,t,n),this.blockClick(r)}},{key:"handlerData",value:function(e,t){var n=this;return e.map((function(e){return e.__node={},e[t]&&(e[t]=n.handlerData(e[t],t)),e}))}},{key:"searchInput",value:function(e){var t=this,n=e.target.value;n!==this.__value&&(clearTimeout(this.searchCid),this.inputOver&&(this.__value=n,this.searchCid=setTimeout((function(){t.callback=!0,t.setState({filterValue:t.__value,remote:!0})}),this.props.delay)))}},{key:"focus",value:function(){this.searchInputRef&&this.searchInputRef.focus()}},{key:"blur",value:function(){this.searchInputRef&&this.searchInputRef.blur()}},{key:"handleComposition",value:function(e){var t=e.type;"compositionstart"===t?(this.inputOver=!1,clearTimeout(this.searchCid)):"compositionend"===t&&(this.inputOver=!0,this.searchInput(e))}},{key:"filterData",value:function(e,t,n){var o=this,r=this.props,i=r.prop,a=r.filterMethod,l=r.tree,s=i.children,c=i.optgroup,u=(i.name,i.value);return e.forEach((function(e,r){var p,f=!!t&&!a(t,e,r,i);if(l.strict?p=!1:f=p=!1!==n&&f,e[c]){var d=o.filterData(e[s],t,p),h=!!t&&0===d.filter((function(e){return!e.__node.hidn})).length;if(!(f=(l.strict||p)&&h)){var m=o.state.expandedKeys;t&&-1===m.findIndex((function(t){return t===e[u]}))&&(m.push(e[u]),o.setState({expandedKeys:m}))}}e.__node.hidn=f})),e}},{key:"postData",value:function(){var e=this;this.state.remote&&(this.callback=!1,this.setState({loading:!0,remote:!1}),this.blur(),this.props.remoteMethod(this.state.filterValue,(function(t,n){e.focus(),e.callback=!0,e.setState({loading:!1,totalSize:n}),e.props.onReset(t,"data")}),this.props.show,1))}},{key:"componentWillReceiveProps",value:function(e){var t=this;this.props.show!=e.show&&(e.show?setTimeout((function(){return t.focus()}),0):(this.setState({filterValue:"",val:Se}),this.__value="",this.searchInputRef&&(this.searchInputRef.value="")))}},{key:"componentWillMount",value:function(){this.init(this.props)}},{key:"render",value:function(e,t){var n=this,o=(t.expandedKeys,e.prop),r=e.empty,i=e.sels,a=e.theme,l=e.radio,s=e.template,c=e.data,u=e.tree,h=e.filterable,m=e.remoteSearch,b=e.searchTips,y=e.iconfont,x=e.enableKeyboard,v=o.name,g=o.value,_=o.disabled,w=o.children,k=o.optgroup,C="hidden"!=e.model.icon,O=function(e,t,o){var r=!!i.find((function(t){return t[g]==e[g]})),p=e[_],f=!0===e.__node.half;u.strict&&(r=r||f||e.__node.selected,p=p||e.__node.disabled);var d=r?{color:a.color,border:"none"}:{borderColor:a.color},h={paddingLeft:t+"px"};x&&e[g]===n.state.val&&(h.backgroundColor=a.hover),!C&&r&&(h.backgroundColor=a.color,p&&(h.backgroundColor="#C2C2C2"));var m=["xm-option",p?" disabled":"",r?" selected":"",C?"show-icon":"hide-icon"].join(" "),b=0!==o&&"hidden"===y.parent?"xm-option-icon-hidden":["xm-option-icon",(f?y.half?y.half+" xm-custom-icon":0:0!==o&&y.parent?y.parent+" xm-custom-icon":r?y.select?y.select:0:y.unselect?y.unselect+" xm-custom-icon":0)||"xm-iconfont "+(l?"xm-icon-danx":u.strict&&f?"xm-icon-banxuan":"xm-icon-duox")].join(" "),k=["xm-tree-icon",o?"expand":"",e[w]&&(e[w].length>0||u.lazy&&!1!==e.__node.loading)?"xm-visible":"xm-hidden"].join(" "),O=[];u.showFolderIcon&&(O.push(S("i",{class:k,type:"expand"})),u.showLine&&(o&&O.push(S("i",{class:"left-line",style:{left:t-u.indent+3+"px"}})),O.push(S("i",{class:"top-line",style:{left:t-u.indent+3+"px",width:u.indent+(0===o?10:-2)+"px"}}))));var j=function(t){"mouseenter"===t.type?e[_]||(x?n.setState({val:e[g]}):t.target.style.backgroundColor=a.hover):"mouseleave"===t.type&&(e[_]||x||(t.target.style.backgroundColor=""))};return S("div",{class:m,style:h,value:e[g],onClick:n.optionClick.bind(n,e,r,e[_],"line"),onMouseEnter:j,onMouseLeave:j},O,e.__node.loading&&S("span",{class:"loader"}),C&&S("i",{class:b,style:d,onClick:n.optionClick.bind(n,e,r,e[_],"checkbox")}),S("div",{class:"xm-option-content",dangerouslySetInnerHTML:{__html:s({data:c,item:e,arr:i,name:e[v],value:e[g]})}}))};h&&(m?this.postData():this.filterData(c,this.state.filterValue));var j=f([],c),E=f([],i);this.tempData=j;var A=c.map((function(e){return function e(t,o){if(!t.__node.hidn){var r=t[w];if(o+=u.indent,r){var i=-1!==n.state.expandedKeys.findIndex((function(e){return t[g]===e}));return 0===r.length&&(i=!1),S("div",{class:"xm-tree"},u.showFolderIcon&&u.showLine&&i&&r.length>0&&S("i",{class:"left-line left-line-group",style:{left:o+3+"px"}}),O(t,o,0===r.length&&(!u.lazy||u.lazy&&!1===t.__node.loading)?0:i),i&&S("div",{class:"xm-tree-box"},r.map((function(t){return e(t,o)}))))}return O(t,o,0)}}(e,10-u.indent)})).filter((function(e){return e}));function R(e,t){t.forEach((function(t){t[k]?(u.strict||"hidden"===y.parent||e.push(t),R(e,t[w])):e.push(t)}))}var P=S("div",{class:"xm-toolbar"},e.toolbar.list.map((function(t){var r,s=e.languageProp.toolbar[t];r="ALL"===t?{icon:"xm-iconfont xm-icon-quanxuan",name:s,method:function(e){var t=[];R(t,e),t=t.filter((function(e){return!e[_]&&!e.__node.hidn})),n.props.onReset(l?t.slice(0,1):d(t,i,o),"treeData")}}:"CLEAR"===t?{icon:"xm-iconfont xm-icon-qingkong",name:s,method:function(e){n.props.onReset(i.filter((function(e){return e[o.disabled]})),"treeData")}}:"REVERSE"===t?{icon:"xm-iconfont xm-icon-fanxuan",name:s,method:function(e){var t=[];R(t,e),t=t.filter((function(e){return!e[_]&&!e.__node.hidn}));var r=[];i.forEach((function(e){var n=t.findIndex((function(t){return t[g]===e[g]}));-1==n?r.push(e):t.splice(n,1)})),n.props.onReset(l?r.slice(0,1):d(t,r,o),"treeData")}}:t;var c=function(e){"mouseenter"===e.type&&(e.target.style.color=a.color),"mouseleave"===e.type&&(e.target.style.color="")};return S("div",{class:"toolbar-tag",onClick:function(){p(r.method)&&r.method(j,E)},onMouseEnter:c,onMouseLeave:c},e.toolbar.showIcon&&S("i",{class:r.icon}),S("span",null,r.name))})).filter((function(e){return e}))),I=S("div",{class:h?"xm-search":"xm-search dis"},S("i",{class:"xm-iconfont xm-icon-sousuo"}),S("input",{class:"xm-input xm-search-input",placeholder:b}));return A.length||A.push(S("div",{class:"xm-select-empty"},r)),S("div",{onClick:this.blockClick,class:"xm-body-tree"},e.toolbar.show&&P,I,S("div",{class:"scroll-body",style:{maxHeight:e.height}},A),this.state.loading&&S("div",{class:"loading"},S("span",{class:"loader"})))}},{key:"componentDidMount",value:function(){var e=this.base.querySelector(".xm-search-input");e&&(e.addEventListener("compositionstart",this.handleComposition.bind(this)),e.addEventListener("compositionupdate",this.handleComposition.bind(this)),e.addEventListener("compositionend",this.handleComposition.bind(this)),e.addEventListener("input",this.searchInput.bind(this)),this.searchInputRef=e)}},{key:"componentDidUpdate",value:function(){if(this.callback){this.callback=!1;var e=this.props.filterDone;p(e)&&e(this.state.filterValue,this.tempData||[])}}}])&&_e(t.prototype,n),o&&_e(t,o),i}(A);function Ee(e){return(Ee="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Ae(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function Re(e,t){return(Re=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function Pe(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,o=De(e);if(t){var r=De(this).constructor;n=Reflect.construct(o,arguments,r)}else n=o.apply(this,arguments);return Ie(this,n)}}function Ie(e,t){return!t||"object"!==Ee(t)&&"function"!=typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):t}function De(e){return(De=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Me=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&Re(e,t)}(i,e);var t,n,o,r=Pe(i);function i(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,i),(t=r.call(this,e)).state={expand:[]},t}return t=i,(n=[{key:"blockClick",value:function(e){e.stopPropagation()}},{key:"optionClick",value:function(e,t,n,o,r,i){if("line"===o){if(n)return;if(!0===e.__node.loading)return;var a=this.props,l=a.cascader,s=a.prop;if(a.sels,!l.lazy&&!e[s.optgroup])return void this.props.ck(e,t,n);var c=this.state.expand.slice(0,r+1);c[r]=e[this.props.prop.value],this.setState({expand:c})}else"checkbox"===o&&this.props.ck(e,t,n);this.blockClick(i)}},{key:"componentWillReceiveProps",value:function(e){}},{key:"componentWillMount",value:function(){}},{key:"render",value:function(e,t){var n=this,o=e.prop,r=e.empty,i=e.sels,a=e.theme,l=e.radio,s=e.template,c=e.data,u=e.cascader,p=o.name,f=o.value,d=o.disabled,h=o.children,m="hidden"!=e.model.icon,b=[],y=function t(o,r,y){var x=o[h];r=r+u.indent+6;var v=x&&n.state.expand[y]===o[f];return v&&b.push(S("div",{class:"xm-cascader-box",index:y%4,style:{left:r+"px",width:u.indent+"px"}},S("div",{class:"xm-cascader-scroll"},x.map((function(e){return t(e,r,y+1)}))))),function(t,o,r,b){var y=!!i.find((function(e){return e[f]==t[f]})),x=t[d],v=!0===t.__node.half;u.strict&&(y=y||v||t.__node.selected,x=x||t.__node.disabled);var g=y?{color:a.color,border:"none"}:{borderColor:a.color},_=t[h]&&t[h].length>0,w={backgroundColor:"transparent"},k=["xm-option",x?" disabled":"",y?" selected":"",m?"show-icon":"hide-icon"].join(" "),C=_&&"hidden"===e.iconfont.parent?"xm-option-icon-hidden":["xm-option-icon",(v?e.iconfont.half?e.iconfont.half+" xm-custom-icon":0:_&&e.iconfont.parent?e.iconfont.parent+" xm-custom-icon":y?e.iconfont.select?e.iconfont.select:0:e.iconfont.unselect?e.iconfont.unselect+" xm-custom-icon":0)||"xm-iconfont "+(l?"xm-icon-danx":u.strict&&v?"xm-icon-banxuan":"xm-icon-duox")].join(" ");t[f]===n.state.val&&(w.backgroundColor=a.hover);var O={},j={};b&&(O.color=a.color,O.fontWeight=700,j.color=a.color);var E=function(e){"mouseenter"===e.type?t[d]||n.setState({val:t[f]}):"mouseleave"===e.type&&n.setState({val:""})};return S("div",{class:k,style:w,value:t[f],onClick:n.optionClick.bind(n,t,y,x,"line",r),onMouseEnter:E,onMouseLeave:E},m&&S("i",{class:C,style:g,onClick:n.optionClick.bind(n,t,y,x,"checkbox",r)}),S("div",{class:"xm-option-content",style:O,dangerouslySetInnerHTML:{__html:s({data:c,item:t,arr:i,name:t[p],value:t[f]})}}),t[h]&&S("div",{class:"xm-right-arrow",style:j}))}(o,0,y,v)},x=c.map((function(e){return y(e,2,0)})).concat(b).filter((function(e){return e}));return x.length||x.push(S("div",{class:"xm-select-empty"},r)),S("div",{onClick:this.blockClick,class:"xm-body-cascader",style:{width:u.indent+"px",maxHeight:e.height}},x)}},{key:"componentDidMount",value:function(){this.props.onReset("cascader","class")}}])&&Ae(t.prototype,n),o&&Ae(t,o),i}(A);function Te(){return(Te=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e}).apply(this,arguments)}function ze(e){return function(e){if(Array.isArray(e))return Le(e)}(e)||function(e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Le(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Le(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Le(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}function Ve(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Fe(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ve(Object(n),!0).forEach((function(t){Ue(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ve(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Ue(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Be(e){return(Be="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Ne(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function Ke(e,t){return(Ke=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function He(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,o=Ze(e);if(t){var r=Ze(this).constructor;n=Reflect.construct(o,arguments,r)}else n=o.apply(this,arguments);return qe(this,n)}}function qe(e,t){return!t||"object"!==Be(t)&&"function"!=typeof t?Ye(e):t}function Ye(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function Ze(e){return(Ze=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Qe=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&Ke(e,t)}(i,e);var t,n,o,r=He(i);function i(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,i),t=r.call(this,e),st[e.el]=Ye(t),t.state=t.initState(),t.bodyView=null,t}return t=i,(n=[{key:"initState",value:function(){return{data:[],dataObj:{},flatData:[],sels:[],show:!1,tmpColor:"",bodyClass:"",time:0}}},{key:"init",value:function(e,t){var n,o=e.data,r=e.prop,i=e.initValue,a=e.radio,l=e.tree,s=e.cascader;if(t){var c={},u=[];this.load(o,c,u,null,0,i?i.map((function(e){return"object"===Be(e)?e[r.value]:e})):null),n=this.exchangeValue(i||Object.keys(c).filter((function(e){return!0===c[e][r.selected]})),c),a&&n.length>1&&(n=n.slice(0,1),(l.show&&l.strict||s.show&&s.strict)&&this.clearAndReset(o,n,!1)),this.setState({sels:n,dataObj:c,flatData:u})}return this.setState({data:o}),n}},{key:"upDate",value:function(e,t){var n=this.state.dataObj,o=this.props,r=o.prop,i=o.tree,a=o.cascader,l=r.value,s=r.disabled,c=r.children;e.map((function(e){return n["object"===Be(e)?e[l]:e]})).filter((function(e){return e})).forEach((function(e){if(e[s]=!t,i.show&&i.strict||a.show&&a.strict){if(t)for(var n=e;n;)n[s]=!1,n=n.__node.parent;!function e(n){n[s]=!t;var o=n[c];o&&u(o)&&o.forEach((function(t){return e(t)}))}(e)}})),this.setState({dataObj:n})}},{key:"exchangeValue",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.state.dataObj,o=this.props,r=o.prop,i=o.tree,a=o.cascader,l=(o.data,r.children),s=r.value,c=e.map((function(e){return"object"===Be(e)?Fe(Fe({},e),{},{__node:{}}):n[e]})).filter((function(e){return e})),p=ze(c);if(i.show&&i.strict||a.show&&a.strict){var f=function e(t,n){var o=n[l];o&&u(o)&&o.forEach((function(n){-1===c.findIndex((function(e){return e[s]===n[s]}))&&t.push(n),e(t,n)}))},d={};d[l]=c,f(p,d),p=p.filter((function(e){return!0!==e[t.props.prop.optgroup]}))}return p}},{key:"value",value:function(e,t,n,o){!1!==t&&!0!==t&&(t=this.state.show);var r=this.props,i=r.prop,a=r.tree,l=r.cascader,s=this.exchangeValue(e);if(!this.checkMax(s,s)){if(a.show&&a.strict||l.show&&l.strict){var c=this.state.data;this.clearAndReset(c,s,!1),s=this.init({data:c,prop:i},!0)}this.resetSelectValue(s,o||s,!0,n),this.setState({show:t})}}},{key:"clearAndReset",value:function(e,t,n){var o=this,r=this.props.prop,i=r.selected,a=r.disabled,l=r.children,s=r.value;e.forEach((function(e){e[i]=-1!=t.findIndex((function(t){return t[s]===e[s]}))||n;var r=e[l];if(r&&u(r)){o.clearAndReset(r,t,e[i]);var c=r.length,p=r.filter((function(e){return!0===e[i]||!0===e.__node.selected})).length;e.__node.selected=p===c,e.__node.half=p>0&&p<c||r.filter((function(e){return!0===e.__node.half})).length>0,e.__node.disabled=r.filter((function(e){return!0===e[a]||!0===e.__node.disabled})).length===c}}))}},{key:"load",value:function(e,t,n,o){var r=this,i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,a=arguments.length>5?arguments[5]:void 0,l=this.props,s=l.prop,c=l.tree,p=l.cascader,f=s.children,d=s.optgroup,h=s.value,m=s.selected,b=s.disabled;e.forEach((function(e){e.__node={parent:o,level:i,loading:e.__node&&e.__node.loading},a&&(delete e[m],a.find((function(t){return t===e[h]}))&&(e[m]=!0)),t[e[h]]=e,n.push(e);var l=e[f];if(l&&u(l)){var s=l.length;if(s>0){r.load(l,t,n,e,i+1,a),e[d]=!0,(c.show&&c.strict||p.show&&p.strict)&&(!0===e[m]&&(delete e[m],l.forEach((function(e){return e[m]=!0}))),!0===e[b]&&(delete e[b],l.forEach((function(e){return e[b]=!0}))));var y=l.filter((function(e){return!0===e[m]||!0===e.__node.selected})).length;e.__node.selected=y===s,e.__node.half=y>0&&y<s||l.filter((function(e){return!0===e.__node.half})).length>0,e.__node.disabled=l.filter((function(e){return!0===e[b]||!0===e.__node.disabled})).length===s}}}))}},{key:"resetSelectValue",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2?arguments[2]:void 0,o=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=this.props.on;if(p(r)&&this.prepare&&o){var i=r({arr:e,change:t,isAdd:n});if(u(i))return this.value(i,null,!1)}this.setState({sels:e})}},{key:"updateBorderColor",value:function(e){this.setState({tmpColor:e})}},{key:"treeHandler",value:function(e,t,n,o,r){var i=this,a=this.props.prop,l=a.value,s=(a.selected,a.disabled),c=a.children,u=a.optgroup,p=t[c];if(p.filter((function(e){return!(e[s]||e.__node.disabled)})).forEach((function(t){if(t[u])i.treeHandler(e,t,n,o,r);else{var a=e.findIndex((function(e){return e[l]==t[l]}));"del"===o?-1!=a&&(e.splice(a,1),n.push(t)):"half"!==o&&"add"!==o||-1==a&&(e.push(t),n.push(t))}})),r){var f=p.length,d=p.filter((function(t){return-1!==e.findIndex((function(e){return e[l]===t[l]}))||!0===t.__node.selected})).length;t.__node.selected=d===f,t.__node.half=d>0&&d<f}}},{key:"checkMax",value:function(e,t){var n,o=this.props,r=o.max,i=o.maxMethod,a=o.theme,l=(n=r,n-=0,isNaN(n)&&(n=0),n);if(l>0&&t.length>=l)return this.updateBorderColor(a.maxColor),i&&p(i)&&i(t,e),!0}},{key:"itemClick",value:function(e,t,n,o){var r=this.props,i=(r.theme,r.prop),a=r.radio,l=r.repeat,s=r.clickClose,c=(r.max,r.maxMethod,r.tree),u=r.data,p=ze(this.state.sels),f=i.value,d=(i.selected,i.disabled,i.children),h=i.optgroup;if(!n){if(e[h]&&c.strict){e[d];var m,b=[],y=!0;if(e.__node.selected?(m="del",y=!1):e.__node.half?(m="half",this.treeHandler(p,e,b,m),0===b.length&&(m="del",y=!1)):m="add","half"!=m&&this.treeHandler(p,e,b,m),this.checkMax(b,b))return;p=ze(this.state.sels),b=[],this.treeHandler(p,e,b,m,!0),this.resetSelectValue(p,b,y),this.setState({data:this.state.data})}else if(!t||l&&!o){if(this.checkMax(e,p))return;p=a?[e]:[].concat(ze(p),[e]),this.clearAndReset(u,p,t),this.resetSelectValue(p,[e],!t)}else{var x=p.findIndex((function(t){return t[f]==e[f]}));-1!=x&&(p.splice(x,1),this.resetSelectValue(p,[e],!t))}var v=e.__node.parent;if(v){for(;v;){var g=v[d],_=g.length,w=g.filter((function(e){return-1!==p.findIndex((function(t){return t[f]===e[f]}))||!0===e.__node.selected})).length;v.__node.selected=w===_,v.__node.half=w>0&&w<_||g.filter((function(e){return!0===e.__node.half})).length>0,v=v.__node.parent}this.setState({data:this.state.data})}s&&!o&&this.onClick()}}},{key:"onClick",value:function(e){var t=this;if("relative"!==this.props.model.type)if(this.props.disabled)!1!==this.state.show&&this.setState({show:!1});else{var n=!this.state.show;if(n){if(this.props.show&&0==this.props.show())return;Object.keys(at).filter((function(e){return e!=t.props.el})).forEach((function(e){return at[e].closed()}))}else{if(this.props.hide&&0==this.props.hide())return;this.bodyView.scroll&&this.bodyView.scroll(0,0)}this.setState({show:n}),e&&e.stopPropagation()}}},{key:"onReset",value:function(e,t){var n=this;if("data"===t){var o=e.filter((function(e){return!0===e[n.props.prop.selected]}));this.resetSelectValue(d(o,this.state.sels,this.props.prop),o,!0);var r=[];this.load(e,{},r),this.setState({data:e,flatData:r})}else"sels"===t?this.resetSelectValue(e,e,!0):"append"===t?this.append(e):"delete"===t?this.del(e):"auto"===t?this.auto(e):"treeData"===t?this.value(e,null,!0):"close"===t?this.onClick():"class"===t?this.setState({bodyClass:e}):"labelSearchBlur"===t?this.labelRef.blur(e):"labelSearch"===t&&this.generalRef.labelSearch(e)}},{key:"append",value:function(e){var t=this.exchangeValue(e);this.value(d(t,this.state.sels,this.props.prop),this.props.show,!0,t)}},{key:"del",value:function(e){var t=this.props.prop.value,n=this.state.sels,o=this.exchangeValue(e);o.forEach((function(e){var o=n.findIndex((function(n){return n[t]===e[t]}));-1!=o&&n.splice(o,1)})),this.value(n,this.props.show,!0,o)}},{key:"auto",value:function(e){var t=this,n=this.props.prop.value;e.filter((function(e){return-1!=t.state.sels.findIndex((function(t){return t[n]===e[n]}))})).length==e.length?this.del(e):this.append(e)}},{key:"changeExpandedKeys",value:function(e){var t=this.props,n=t.tree,o=t.prop,r=this.state,i=r.dataObj,a=r.flatData;n.show&&this.treeRef.init({dataObj:i,flatData:a,prop:o,tree:{expandedKeys:e}})}},{key:"calcPosition",value:function(){if(this.state.show&&"fixed"===this.props.model.type){var e=this.base.getBoundingClientRect();return Date.now()-this.state.time>10&&this.setState({time:Date.now()}),{position:"fixed",left:e.x,top:e.y+e.height+4,width:e.width}}return{}}},{key:"componentWillReceiveProps",value:function(e){this.init(e,e.updateData)}},{key:"componentWillMount",value:function(){this.init(this.props,!0)}},{key:"render",value:function(e,t){var n=this,o=e.theme,r=e.prop,i=(e.radio,e.repeat,e.clickClose,e.on,e.max,e.maxMethod,e.content),a=e.disabled,l=e.tree,s={borderColor:o.color},c=t.data,u=t.dataObj,p=t.flatData,f=t.sels,d=t.show,h=t.tmpColor,m=t.bodyClass;a&&(d=!1);var b={style:Fe(Fe({},e.style),d?s:{}),onClick:this.onClick.bind(this),ua:-1!=navigator.userAgent.indexOf("Mac OS")?"mac":"win",size:e.size,tabindex:1};h&&(b.style.borderColor=h,setTimeout((function(){b.style.borderColor="",n.updateBorderColor("")}),300)),r.value;var y=Fe(Fe({},e),{},{data:c,sels:f,ck:this.itemClick.bind(this),title:f.map((function(e){return e[r.name]})).join(","),onReset:this.onReset.bind(this)}),x=Fe(Fe({},e),{},{data:c,dataObj:u,flatData:p,sels:f,ck:this.itemClick.bind(this),show:d,onReset:this.onReset.bind(this)}),v=i?S(ve,x):l.show?S(je,Te({},x,{ref:function(e){return n.treeRef=e}})):e.cascader.show?S(Me,x):S(fe,Te({},x,{ref:function(e){return n.generalRef=e}})),g=this.calcPosition();return S("xm-select",b,S("input",{class:"xm-select-default","lay-verify":e.layVerify,"lay-verType":e.layVerType,"lay-reqText":e.layReqText,name:e.name,value:f.map((function(e){return e[r.value]})).join(",")}),S("i",{class:d?"xm-icon xm-icon-expand":"xm-icon"}),0===f.length&&S("div",{class:"xm-tips"},e.tips),S(te,Te({},y,{ref:function(e){return n.labelRef=e}})),S("div",{class:["xm-body",m,e.model.type,d?"":"dis"].join(" "),style:g,ref:function(e){return n.bodyView=e}},v),a&&S("div",{class:"xm-select-disabled"}))}},{key:"componentDidMount",value:function(){var e=this;this.prepare=!0,this.base.addEventListener("keydown",(function(t){13===t.keyCode&&e.onClick()})),this.input=this.base.querySelector(".xm-select-default");var t=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;t&&new t((function(t){t.forEach((function(t){"attributes"==t.type&&"class"===t.attributeName&&-1!==e.input.className.indexOf("layui-form-danger")&&(e.input.className="xm-select-default",e.base.style.borderColor=e.props.theme.maxColor)}))})).observe(this.input,{attributes:!0});for(var n=this.base;n;){if("FORM"===n.tagName){var o=n.querySelector('button[type="reset"]');o&&o.addEventListener("click",(function(t){e.init(e.props,!0)}));break}n=n.parentElement}}},{key:"componentDidUpdate",value:function(){var e=this.props,t=e.direction,n=e.model;if("relative"!==n.type&&"fixed"!==n.type){var o=this.base.getBoundingClientRect();if("auto"===t){this.bodyView.style.display="block",this.bodyView.style.visibility="hidden";var r=this.bodyView.getBoundingClientRect().height;this.bodyView.style.display="",this.bodyView.style.visibility="";var i=o.y||o.top||0,a=document.documentElement.clientHeight-i-o.height-20;t=a>r||i<a?"down":"up"}"down"==t?(this.bodyView.style.top=o.height+4+"px",this.bodyView.style.bottom="auto"):(this.bodyView.style.top="auto",this.bodyView.style.bottom=o.height+4+"px")}}}])&&Ne(t.prototype,n),o&&Ne(t,o),i}(A),Je={tips:"璇烽�夋嫨",empty:"鏆傛棤鏁版嵁",searchTips:"璇烽�夋嫨",toolbar:{ALL:"鍏ㄩ��",CLEAR:"娓呯┖",REVERSE:"鍙嶉��",SEARCH:"鎼滅储"},paging:{prev:"涓婁竴椤�",next:"涓嬩竴椤�"}},We={zn:Je,en:{tips:"please selected",empty:"no data",searchTips:"please search",toolbar:{ALL:"select all",CLEAR:"clear",REVERSE:"invert select",SEARCH:"search"},paging:{prev:"prev",next:"next"}}};function Ge(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Xe(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ge(Object(n),!0).forEach((function(t){$e(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ge(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function $e(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function et(){return(et=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e}).apply(this,arguments)}function tt(e){return(tt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function nt(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}var ot=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.init(t)}var t,n,o;return t=e,(n=[{key:"init",value:function(e){this.options=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"zn",t=We[e]||Je;return{language:e,languageProp:t,data:[],content:"",name:"select",layVerify:"",layVerType:"",layReqText:"",size:"medium",disabled:!1,initValue:null,create:null,tips:t.tips,empty:t.empty,delay:500,searchTips:t.searchTips,filterable:!1,filterMethod:function(e,t,n,o){return!e||-1!=t[o.name].indexOf(e)},remoteSearch:!1,remoteMethod:function(e,t){t([])},direction:"auto",style:{},height:"200px",autoRow:!1,paging:!1,pageSize:10,pageEmptyShow:!0,pageRemote:!1,radio:!1,repeat:!1,clickClose:!1,max:0,maxMethod:function(e,t){},showCount:0,enableKeyboard:!0,toolbar:{show:!1,showIcon:!0,list:["ALL","CLEAR"]},tree:{show:!1,showFolderIcon:!0,showLine:!0,indent:20,expandedKeys:[],strict:!0,lazy:!1,load:null,simple:!1,nodeType:"__node_type",clickExpand:!0,clickCheck:!0},cascader:{show:!1,indent:100,strict:!0},prop:{name:"name",value:"value",selected:"selected",disabled:"disabled",children:"children",optgroup:"optgroup",click:"click"},theme:{color:"#009688",maxColor:"#e54d42",hover:"#f2f2f2"},model:{label:{type:"block",text:{left:"",right:"",separator:", "},block:{showCount:0,showIcon:!0,template:null},count:{template:function(e,t){return"宸查�変腑 ".concat(t.length," 椤�, 鍏� ").concat(e.length," 椤�")}}},icon:"show",type:"absolute"},iconfont:{select:"",unselect:"",half:"",parent:""},show:function(){},hide:function(){},template:function(e){e.item,e.sels;var t=e.name;return e.value,t},on:function(e){e.arr,e.item,e.selected}}}(e.language),this.update(e)}},{key:"update",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=!!e.data;this.options=f(this.options,e),this.options.__render_success=!1;var n=this.options.dom;if(n){var o=this.options.data||[];if("function"==typeof o&&(o=o(),this.options.data=o),u(o))return Y(S(Qe,et({},this.options,{__update:Date.now(),updateData:t})),n),this.options.__render_success=!0,this;c("data鏁版嵁蹇呴』涓烘暟缁勭被鍨�, 涓嶈兘鏄�".concat("undefined"==typeof data?"undefined":tt(data),"绫诲瀷"))}else c("娌℃湁鎵惧埌娓叉煋瀵硅薄: ".concat(e.el,", 璇锋鏌�"))}},{key:"reset",value:function(){var e=this.options.el;return this.init(lt[e]),st[e].init(this.options,!0),this}},{key:"opened",value:function(){var e=st[this.options.el];return!e.state.show&&e.onClick(),this}},{key:"closed",value:function(){var e=st[this.options.el];return e.state.show&&e.onClick(),this}},{key:"getValue",value:function(e){var t=this,n=this.options,o=n.tree,r=n.prop,i=n.data,a=st[this.options.el].state.sels,l=a;o.show&&o.strict&&o.simple&&h(i,a,l=[],r);var s=m(l,r.children,["__node"]);return"name"===e?s.map((function(e){return e[t.options.prop.name]})):"nameStr"===e?s.map((function(e){return e[t.options.prop.name]})).join(","):"value"===e?s.map((function(e){return e[t.options.prop.value]})):"valueStr"===e?s.map((function(e){return e[t.options.prop.value]})).join(","):s}},{key:"setValue",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(u(e))return st[this.options.el].value(this.options.radio?e.slice(0,1):e,t,n),this;c("璇蜂紶鍏ユ暟缁勭粨鏋�...")}},{key:"append",value:function(e){if(u(e))return st[this.options.el].append(e),this;c("璇蜂紶鍏ユ暟缁勭粨鏋�...")}},{key:"delete",value:function(e){if(u(e))return st[this.options.el].del(e),this;c("璇蜂紶鍏ユ暟缁勭粨鏋�...")}},{key:"warning",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=e||this.options.theme.maxColor;return!0===t?st[this.options.el].base.style.borderColor=n:st[this.options.el].updateBorderColor(n),this}},{key:"getTreeValue",value:function(e,t){var n=this.options,o=n.tree,r=n.cascader,i=n.prop,a=i.value;if(!o.show&&!r.show)return this.getValue(e);for(var l=st[this.options.el].state.sels,s=[],c=o.nodeType,u=function(e,t){s.find((function(t){return t[a]===e[a]}))||((e=Xe({},e))[c]=t,s.push(e))},p=0;p<l.length;p++){var f=Xe({},l[p]);for(u(f,"leaf");f=f.__node.parent;){var d=f.__node,h=d.half,b=d.selected;!e&&b?u(f,"parent"):t&&h&&!b&&u(f,"half")}}return m(s,i.children,["__node"])}},{key:"changeExpandedKeys",value:function(e){return st[this.options.el].changeExpandedKeys(e),this}},{key:"enable",value:function(e){if(u(e)){if(0!==e.length)return st[this.options.el].upDate(e,!0),this}else c("璇蜂紶鍏ユ暟缁勭粨鏋�...")}},{key:"disable",value:function(e){if(u(e)){if(0!==e.length)return st[this.options.el].upDate(e,!1),this}else c("璇蜂紶鍏ユ暟缁勭粨鏋�...")}},{key:"scroll",value:function(e){var t=this.options.dom.querySelector('.xm-option[value="'.concat(e,'"]'));return t&&t.scrollIntoView(!1),this}},{key:"calcPosition",value:function(){return st[this.options.el].calcPosition(),this}}])&&nt(t.prototype,n),o&&nt(t,o),e}();function rt(e){return function(e){if(Array.isArray(e))return it(e)}(e)||function(e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return it(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return it(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function it(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}var at={},lt={},st={};t.c={name:o.a,version:o.b,doc:o.c,render:function(e){var t=e.el;if(e.dom=s(t),t.nodeType){var n="DOM_RENDER_"+Date.now()+"_"+Math.random();t.setAttribute(o.a,n),t="[".concat(o.a,"='").concat(n,"']"),e.el=t}lt[t]=e;var r=new ot(e);return r&&r.options.__render_success&&(at[t]=r),r},get:function(e,t){var n;switch(Object.prototype.toString.call(e)){case"[object String]":e&&(n=function(t){return t===e});break;case"[object RegExp]":n=function(t){return e.test(t)};break;case"[object Function]":n=e}var o=Object.keys(at),r=(n?o.filter(n):o).map((function(e){return at[e]})).filter((function(e){return s(e.options.el)}));return t?r[0]:r},batch:function(e,t){var n=Array.prototype.slice.call(arguments);return n.splice(0,2),this.get(e).map((function(e){return e[t].apply(e,rt(n))}))},arr2tree:function(e,t,n,o,r){return e.forEach((function(i){if(i[t]!=r){var a=e.find((function(e){return e[n]===i[t]}));a&&(a[o]||(a[o]=[]),a[o].push(i))}})),e.filter((function(e){return e[t]==r}))}}}});
\ No newline at end of file
diff --git a/src/main/webapp/views/admin/apiLog/apiLog.html b/src/main/webapp/views/admin/apiLog/apiLog.html
new file mode 100644
index 0000000..691e5ae
--- /dev/null
+++ b/src/main/webapp/views/admin/apiLog/apiLog.html
@@ -0,0 +1,187 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/admin.css?v=318" media="all">
+    <link rel="stylesheet" href="../../../static/css/cool.css" media="all">
+</head>
+<body>
+
+<div class="layui-fluid">
+    <div class="layui-card">
+        <div class="layui-card-body">
+            <div class="layui-form toolbar" id="search-box">
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="namespace" placeholder="鍚嶇О绌洪棿" autocomplete="off">
+                        </div>
+                    </div>
+                    <div class="layui-inline" style="width: 300px">
+                        <div class="layui-input-inline">
+                            <input class="layui-input layui-laydate-range" name="create_time" type="text" placeholder="璧峰鏃堕棿 - 缁堟鏃堕棿" autocomplete="off" style="width: 300px">
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="condition" placeholder="璇疯緭鍏�" autocomplete="off">
+                        </div>
+                    </div>
+                    <div class="layui-inline">&emsp;
+                        <button class="layui-btn icon-btn" lay-filter="search" lay-submit>
+                            <i class="layui-icon">&#xe615;</i>鎼滅储
+                        </button>
+                        <button class="layui-btn icon-btn" lay-filter="reset" lay-submit>
+                            <i class="layui-icon">&#xe666;</i>閲嶇疆
+                        </button>
+                    </div>
+                </div>
+            </div>
+            <table class="layui-hide" id="apiLog" lay-filter="apiLog"></table>
+        </div>
+    </div>
+</div>
+
+<script type="text/html" id="toolbar">
+    <div class="layui-btn-container">
+<!--        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>-->
+        <button class="layui-btn layui-btn-sm layui-btn-danger" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="float: right">瀵煎嚭</button>
+    </div>
+</script>
+
+<script type="text/html" id="operate">
+<!--    <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">淇敼</a>-->
+    <a class="layui-btn layui-btn-danger layui-btn-xs btn-edit" lay-event="del">鍒犻櫎</a>
+</script>
+
+<script type="text/html" id="resTpl">
+    <span name="settle"
+          {{# if( d.result === 1){ }}
+          class="layui-badge layui-badge-green" >{{d.result$}}</span>
+    {{# }else { }}
+    class="layui-badge layui-badge-red" >{{d.result$}}</span>
+    {{# } }}
+</script>
+
+<script type="text/javascript" src="../../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/apiLog/apiLog.js" charset="utf-8"></script>
+</body>
+<!-- 琛ㄥ崟寮圭獥 -->
+<script type="text/html" id="editDialog">
+    <form id="detail" lay-filter="detail" class="layui-form admin-form model-form">
+        <input name="id" type="hidden">
+        <div class="layui-row">
+            <div class="layui-col-md12">
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鏃ュ織缂栧彿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="uuid" placeholder="璇疯緭鍏ユ棩蹇楃紪鍙�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鍚嶇О绌洪棿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="namespace" placeholder="璇疯緭鍏ュ悕绉扮┖闂�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鎺ュ彛鍦板潃: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="url" placeholder="璇疯緭鍏ユ帴鍙e湴鍧�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">骞冲彴瀵嗛挜: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="appkey" placeholder="璇疯緭鍏ュ钩鍙板瘑閽�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鏃堕棿鎴�: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="timestamp" placeholder="璇疯緭鍏ユ椂闂存埑">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">瀹㈡埛绔疘P: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="clientIp" placeholder="璇疯緭鍏ュ鎴风IP">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">璇锋眰鍐呭: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="request" placeholder="璇疯緭鍏ヨ姹傚唴瀹�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鍝嶅簲鍐呭: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="response" placeholder="璇疯緭鍏ュ搷搴斿唴瀹�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">寮傚父鍐呭: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="err" placeholder="璇疯緭鍏ュ紓甯稿唴瀹�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">缁撴灉: </label>
+                    <div class="layui-input-block">
+                        <select name="result">
+                            <option value="">璇烽�夋嫨缁撴灉</option>
+                            <option value="1">鎴愬姛</option>
+                            <option value="0">澶辫触</option>
+                        </select>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鐘舵��: </label>
+                    <div class="layui-input-block">
+                        <select name="status">
+                            <option value="">璇烽�夋嫨鐘舵��</option>
+                            <option value="1">姝e父</option>
+                            <option value="0">绂佺敤</option>
+                        </select>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">娣诲姞鏃堕棿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="createTime" id="createTime$" placeholder="璇疯緭鍏ユ坊鍔犳椂闂�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">淇敼鏃堕棿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="updateTime" id="updateTime$" placeholder="璇疯緭鍏ヤ慨鏀规椂闂�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">澶囨敞: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="memo" placeholder="璇疯緭鍏ュ娉�">
+                    </div>
+                </div>
+
+             </div>
+        </div>
+        <hr class="layui-bg-gray">
+        <div class="layui-form-item text-right">
+            <button class="layui-btn" lay-filter="editSubmit" lay-submit="">淇濆瓨</button>
+            <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+        </div>
+    </form>
+</script>
+</html>
+
diff --git a/src/main/webapp/views/admin/basLift/basLift.html b/src/main/webapp/views/admin/basLift/basLift.html
new file mode 100644
index 0000000..2d2dd95
--- /dev/null
+++ b/src/main/webapp/views/admin/basLift/basLift.html
@@ -0,0 +1,260 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/admin.css?v=318" media="all">
+    <link rel="stylesheet" href="../../../static/css/cool.css" media="all">
+</head>
+<body>
+
+<div class="layui-fluid">
+    <div class="layui-card">
+        <div class="layui-card-body">
+            <div class="layui-form toolbar" id="search-box">
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="id" placeholder="缂栧彿" autocomplete="off">
+                        </div>
+                    </div>
+                     <div class="layui-inline" style="width: 300px">
+                        <div class="layui-input-inline">
+                            <input class="layui-input layui-laydate-range" name="create_time" type="text" placeholder="璧峰鏃堕棿 - 缁堟鏃堕棿" autocomplete="off" style="width: 300px">
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="condition" placeholder="璇疯緭鍏�" autocomplete="off">
+                        </div>
+                    </div>
+                    <div class="layui-inline">&emsp;
+                        <button class="layui-btn icon-btn" lay-filter="search" lay-submit>
+                            <i class="layui-icon">&#xe615;</i>鎼滅储
+                        </button>
+                        <button class="layui-btn icon-btn" lay-filter="reset" lay-submit>
+                            <i class="layui-icon">&#xe666;</i>閲嶇疆
+                        </button>
+                    </div>
+                </div>
+            </div>
+            <table class="layui-hide" id="basLift" lay-filter="basLift"></table>
+        </div>
+    </div>
+</div>
+
+<script type="text/html" id="toolbar">
+    <div class="layui-btn-container">
+        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>
+        <button class="layui-btn layui-btn-sm layui-btn-danger" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="float: right">瀵煎嚭</button>
+    </div>
+</script>
+
+<script type="text/html" id="operate">
+    <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">淇敼</a>
+    <a class="layui-btn layui-btn-danger layui-btn-xs btn-edit" lay-event="del">鍒犻櫎</a>
+</script>
+
+<script type="text/javascript" src="../../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/basLift/basLift.js" charset="utf-8"></script>
+</body>
+<!-- 琛ㄥ崟寮圭獥 -->
+<script type="text/html" id="editDialog">
+    <form id="detail" lay-filter="detail" class="layui-form admin-form model-form">
+        <input name="id" type="hidden">
+        <div class="layui-row">
+            <div class="layui-col-md12">
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">鎻愬崌鏈哄彿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="liftNo" placeholder="璇疯緭鍏ユ彁鍗囨満鍙�" lay-vertype="tips" lay-verify="required">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">褰撳墠浠诲姟鐘舵��: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="status" placeholder="璇疯緭鍏ュ綋鍓嶄换鍔$姸鎬�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">浠诲姟鍙�: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="wrkNo" placeholder="璇疯緭鍏ヤ换鍔″彿">
+                    </div>
+                </div>
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">淇敼鏃堕棿: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="updateTime" id="updateTime$" placeholder="璇疯緭鍏ヤ慨鏀规椂闂�">-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">淇敼浜哄憳: </label>-->
+<!--                    <div class="layui-input-block cool-auto-complete">-->
+<!--                        <input class="layui-input" name="updateBy" placeholder="璇疯緭鍏ヤ慨鏀逛汉鍛�" style="display: none">-->
+<!--                        <input id="updateBy$" name="updateBy$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏ヤ慨鏀逛汉鍛�" onfocus=this.blur()>-->
+<!--                        <div class="cool-auto-complete-window">-->
+<!--                            <input class="cool-auto-complete-window-input" data-key="userQueryByupdateBy" onkeyup="autoLoad(this.getAttribute('data-key'))">-->
+<!--                            <select class="cool-auto-complete-window-select" data-key="userQueryByupdateBySelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">-->
+<!--                            </select>-->
+<!--                        </div>-->
+<!--                    </div>-->
+<!--                </div>-->
+                <div class="layui-form-item">
+                    <label class="layui-form-label">澶囨敞: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="memo" placeholder="璇疯緭鍏ュ娉�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">浣滀笟鏍囪: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="pakMk" placeholder="璇疯緭鍏ヤ綔涓氭爣璁�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鎻愬崌鏈洪攣瀹�: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="liftLock" placeholder="璇疯緭鍏ユ彁鍗囨満閿佸畾">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">浣嶇疆鍒拌揪鍙嶉: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="positionArrivalFeedback" placeholder="璇疯緭鍏ヤ綅缃埌杈惧弽棣�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鍑嗗灏辩华: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="ready" placeholder="璇疯緭鍏ュ噯澶囧氨缁�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">杩愯涓�: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="running" placeholder="璇疯緭鍏ヨ繍琛屼腑">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鑱旀満/鍗曟満: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="mode" placeholder="璇疯緭鍏ヨ仈鏈�/鍗曟満">
+                    </div>
+                </div>
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">杈撻�佺嚎鍓嶇鍏夌數鏈夎揣: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="lineFrontHasStock" placeholder="璇疯緭鍏ヨ緭閫佺嚎鍓嶇鍏夌數鏈夎揣">-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">杈撻�佺嚎姝h浆鍙嶉: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="forwardRotationFeedback" placeholder="璇疯緭鍏ヨ緭閫佺嚎姝h浆鍙嶉">-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">杈撻�佺嚎鍙嶈浆鍙嶉: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="reverseFeedback" placeholder="璇疯緭鍏ヨ緭閫佺嚎鍙嶈浆鍙嶉">-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">杈撻�佺嚎鐢垫満杩囪浇: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="motorOverload" placeholder="璇疯緭鍏ヨ緭閫佺嚎鐢垫満杩囪浇">-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">杈撻�佺嚎鏈鍏夌數鏈夎揣: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="lineEndHasStock" placeholder="璇疯緭鍏ヨ緭閫佺嚎鏈鍏夌數鏈夎揣">-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">杩涜緭閫佺嚎鍗℃墭鐩樻姤璀�: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="inConveyLineCardTrayAlarm" placeholder="璇疯緭鍏ヨ繘杈撻�佺嚎鍗℃墭鐩樻姤璀�">-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">鍑鸿緭閫佺嚎鍗℃墭鐩樻姤璀�: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="outConveyLineCardTrayAlarm" placeholder="璇疯緭鍏ュ嚭杈撻�佺嚎鍗℃墭鐩樻姤璀�">-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">骞冲彴浣嶇疆鍋忓樊鎶ヨ: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="platPositionDeviationAlarm" placeholder="璇疯緭鍏ュ钩鍙颁綅缃亸宸姤璀�">-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">骞冲彴鎵煩鍋忓樊鎶ヨ: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="platTorqueDeviationAlarm" placeholder="璇疯緭鍏ュ钩鍙版壄鐭╁亸宸姤璀�">-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">骞冲彴鍥涘悜杞︽娴�: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="platShuttleCheck" placeholder="璇疯緭鍏ュ钩鍙板洓鍚戣溅妫�娴�">-->
+<!--                    </div>-->
+<!--                </div>-->
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鏈氨缁姸鎬�: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="notReady" placeholder="璇疯緭鍏ユ湭灏辩华鐘舵��">
+                    </div>
+                </div>
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">浼烘湇1閿欒: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="servoError1" placeholder="璇疯緭鍏ヤ己鏈�1閿欒">-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">浼烘湇2閿欒: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="servoError2" placeholder="璇疯緭鍏ヤ己鏈�2閿欒">-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">浼烘湇3閿欒: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="servoError3" placeholder="璇疯緭鍏ヤ己鏈�3閿欒">-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">浼烘湇4閿欒: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="servoError4" placeholder="璇疯緭鍏ヤ己鏈�4閿欒">-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">鎻愬崌鏈哄疄闄呴�熷害鍙嶉: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="liftActualSpeed" placeholder="璇疯緭鍏ユ彁鍗囨満瀹為檯閫熷害鍙嶉">-->
+<!--                    </div>-->
+<!--                </div>-->
+
+             </div>
+        </div>
+        <hr class="layui-bg-gray">
+        <div class="layui-form-item text-right">
+            <button class="layui-btn" lay-filter="editSubmit" lay-submit="">淇濆瓨</button>
+            <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+        </div>
+    </form>
+</script>
+</html>
+
diff --git a/src/main/webapp/views/admin/basLiftErr/basLiftErr.html b/src/main/webapp/views/admin/basLiftErr/basLiftErr.html
new file mode 100644
index 0000000..c565951
--- /dev/null
+++ b/src/main/webapp/views/admin/basLiftErr/basLiftErr.html
@@ -0,0 +1,134 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/admin.css?v=318" media="all">
+    <link rel="stylesheet" href="../../../static/css/cool.css" media="all">
+</head>
+<body>
+
+<div class="layui-fluid">
+    <div class="layui-card">
+        <div class="layui-card-body">
+            <div class="layui-form toolbar" id="search-box">
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="errorCode" placeholder="寮傚父鐮�" autocomplete="off">
+                        </div>
+                    </div>
+                     <div class="layui-inline" style="width: 300px">
+                        <div class="layui-input-inline">
+                            <input class="layui-input layui-laydate-range" name="create_time" type="text" placeholder="璧峰鏃堕棿 - 缁堟鏃堕棿" autocomplete="off" style="width: 300px">
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="condition" placeholder="璇疯緭鍏�" autocomplete="off">
+                        </div>
+                    </div>
+                    <div class="layui-inline">&emsp;
+                        <button class="layui-btn icon-btn" lay-filter="search" lay-submit>
+                            <i class="layui-icon">&#xe615;</i>鎼滅储
+                        </button>
+                        <button class="layui-btn icon-btn" lay-filter="reset" lay-submit>
+                            <i class="layui-icon">&#xe666;</i>閲嶇疆
+                        </button>
+                    </div>
+                </div>
+            </div>
+            <table class="layui-hide" id="basLiftErr" lay-filter="basLiftErr"></table>
+        </div>
+    </div>
+</div>
+
+<script type="text/html" id="toolbar">
+    <div class="layui-btn-container">
+        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>
+        <button class="layui-btn layui-btn-sm layui-btn-danger" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="float: right">瀵煎嚭</button>
+    </div>
+</script>
+
+<script type="text/html" id="operate">
+    <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">淇敼</a>
+    <a class="layui-btn layui-btn-danger layui-btn-xs btn-edit" lay-event="del">鍒犻櫎</a>
+</script>
+
+<script type="text/javascript" src="../../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/basLiftErr/basLiftErr.js" charset="utf-8"></script>
+</body>
+<!-- 琛ㄥ崟寮圭獥 -->
+<script type="text/html" id="editDialog">
+    <form id="detail" lay-filter="detail" class="layui-form admin-form model-form">
+        <input name="id" type="hidden">
+        <div class="layui-row">
+            <div class="layui-col-md12">
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">寮傚父鐮�: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="errorCode" placeholder="璇疯緭鍏ュ紓甯哥爜" lay-vertype="tips" lay-verify="required">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">寮傚父: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="errName" placeholder="璇疯緭鍏ュ紓甯�">
+                    </div>
+                </div>
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">淇敼浜哄憳: </label>-->
+<!--                    <div class="layui-input-block cool-auto-complete">-->
+<!--                        <input class="layui-input" name="modiUser" placeholder="璇疯緭鍏ヤ慨鏀逛汉鍛�" style="display: none">-->
+<!--                        <input id="modiUser$" name="modiUser$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏ヤ慨鏀逛汉鍛�" onfocus=this.blur()>-->
+<!--                        <div class="cool-auto-complete-window">-->
+<!--                            <input class="cool-auto-complete-window-input" data-key="userQueryBymodiUser" onkeyup="autoLoad(this.getAttribute('data-key'))">-->
+<!--                            <select class="cool-auto-complete-window-select" data-key="userQueryBymodiUserSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">-->
+<!--                            </select>-->
+<!--                        </div>-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">淇敼鏃堕棿: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="modiTime" id="modiTime$" placeholder="璇疯緭鍏ヤ慨鏀规椂闂�">-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">娣诲姞浜哄憳: </label>-->
+<!--                    <div class="layui-input-block cool-auto-complete">-->
+<!--                        <input class="layui-input" name="appeUser" placeholder="璇疯緭鍏ユ坊鍔犱汉鍛�" style="display: none">-->
+<!--                        <input id="appeUser$" name="appeUser$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏ユ坊鍔犱汉鍛�" onfocus=this.blur()>-->
+<!--                        <div class="cool-auto-complete-window">-->
+<!--                            <input class="cool-auto-complete-window-input" data-key="userQueryByappeUser" onkeyup="autoLoad(this.getAttribute('data-key'))">-->
+<!--                            <select class="cool-auto-complete-window-select" data-key="userQueryByappeUserSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">-->
+<!--                            </select>-->
+<!--                        </div>-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">娣诲姞鏃堕棿: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="appeTime" id="appeTime$" placeholder="璇疯緭鍏ユ坊鍔犳椂闂�">-->
+<!--                    </div>-->
+<!--                </div>-->
+
+             </div>
+        </div>
+        <hr class="layui-bg-gray">
+        <div class="layui-form-item text-right">
+            <button class="layui-btn" lay-filter="editSubmit" lay-submit="">淇濆瓨</button>
+            <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+        </div>
+    </form>
+</script>
+</html>
+
diff --git a/src/main/webapp/views/admin/basLiftErrLog/basLiftErrLog.html b/src/main/webapp/views/admin/basLiftErrLog/basLiftErrLog.html
new file mode 100644
index 0000000..7886300
--- /dev/null
+++ b/src/main/webapp/views/admin/basLiftErrLog/basLiftErrLog.html
@@ -0,0 +1,240 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/admin.css?v=318" media="all">
+    <link rel="stylesheet" href="../../../static/css/cool.css" media="all">
+</head>
+<body>
+
+<div class="layui-fluid">
+    <div class="layui-card">
+        <div class="layui-card-body">
+            <div class="layui-form toolbar" id="search-box">
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="id" placeholder="缂栧彿" autocomplete="off">
+                        </div>
+                    </div>
+                     <div class="layui-inline" style="width: 300px">
+                        <div class="layui-input-inline">
+                            <input class="layui-input layui-laydate-range" name="create_time" type="text" placeholder="璧峰鏃堕棿 - 缁堟鏃堕棿" autocomplete="off" style="width: 300px">
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="condition" placeholder="璇疯緭鍏�" autocomplete="off">
+                        </div>
+                    </div>
+                    <div class="layui-inline">&emsp;
+                        <button class="layui-btn icon-btn" lay-filter="search" lay-submit>
+                            <i class="layui-icon">&#xe615;</i>鎼滅储
+                        </button>
+                        <button class="layui-btn icon-btn" lay-filter="reset" lay-submit>
+                            <i class="layui-icon">&#xe666;</i>閲嶇疆
+                        </button>
+                    </div>
+                </div>
+            </div>
+            <table class="layui-hide" id="basLiftErrLog" lay-filter="basLiftErrLog"></table>
+        </div>
+    </div>
+</div>
+
+<script type="text/html" id="toolbar">
+    <div class="layui-btn-container">
+<!--        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>-->
+<!--        <button class="layui-btn layui-btn-sm layui-btn-danger" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>-->
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="float: right">瀵煎嚭</button>
+    </div>
+</script>
+
+<script type="text/html" id="operate">
+    <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">淇敼</a>
+    <a class="layui-btn layui-btn-danger layui-btn-xs btn-edit" lay-event="del">鍒犻櫎</a>
+</script>
+
+<script type="text/javascript" src="../../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/basLiftErrLog/basLiftErrLog.js" charset="utf-8"></script>
+</body>
+<!-- 琛ㄥ崟寮圭獥 -->
+<script type="text/html" id="editDialog">
+    <form id="detail" lay-filter="detail" class="layui-form admin-form model-form">
+        <input name="id" type="hidden">
+        <div class="layui-row">
+            <div class="layui-col-md12">
+                <div class="layui-form-item">
+                    <label class="layui-form-label">缂栧彿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="uuid" placeholder="璇疯緭鍏ョ紪鍙�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">宸ヤ綔鍙�: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="wrkNo" placeholder="璇疯緭鍏ュ伐浣滃彿">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鍙戠敓鏃堕棿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="startTime" id="startTime$" placeholder="璇疯緭鍏ュ彂鐢熸椂闂�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">缁撴潫鏃堕棿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="endTime" id="endTime$" placeholder="璇疯緭鍏ョ粨鏉熸椂闂�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">宸ヤ綔鐘舵��: </label>
+                    <div class="layui-input-block cool-auto-complete">
+                        <input class="layui-input" name="wrkSts" placeholder="璇疯緭鍏ュ伐浣滅姸鎬�" style="display: none">
+                        <input id="wrkSts$" name="wrkSts$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏ュ伐浣滅姸鎬�" onfocus=this.blur()>
+                        <div class="cool-auto-complete-window">
+                            <input class="cool-auto-complete-window-input" data-key="basWrkStatusQueryBywrkSts" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                            <select class="cool-auto-complete-window-select" data-key="basWrkStatusQueryBywrkStsSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                            </select>
+                        </div>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鍏ュ嚭搴撶被鍨�: </label>
+                    <div class="layui-input-block cool-auto-complete">
+                        <input class="layui-input" name="ioType" placeholder="璇疯緭鍏ュ叆鍑哄簱绫诲瀷" style="display: none">
+                        <input id="ioType$" name="ioType$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏ュ叆鍑哄簱绫诲瀷" onfocus=this.blur()>
+                        <div class="cool-auto-complete-window">
+                            <input class="cool-auto-complete-window-input" data-key="basWrkIotypeQueryByioType" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                            <select class="cool-auto-complete-window-select" data-key="basWrkIotypeQueryByioTypeSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                            </select>
+                        </div>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鎻愬崌鏈�: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="liftNo" placeholder="璇疯緭鍏ユ彁鍗囨満">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">plc: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="plcNo" placeholder="璇疯緭鍏lc">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鐩爣搴撲綅: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="locNo" placeholder="璇疯緭鍏ョ洰鏍囧簱浣�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鐩爣绔�: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="staNo" placeholder="璇疯緭鍏ョ洰鏍囩珯">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">婧愮珯: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="sourceStaNo" placeholder="璇疯緭鍏ユ簮绔�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">婧愬簱浣�: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="sourceLocNo" placeholder="璇疯緭鍏ユ簮搴撲綅">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鏉$爜: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="barcode" placeholder="璇疯緭鍏ユ潯鐮�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">寮傚父鐮�: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="errCode" placeholder="璇疯緭鍏ュ紓甯哥爜">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">寮傚父: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="error" placeholder="璇疯緭鍏ュ紓甯�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">寮傚父鎯呭喌: </label>
+                    <div class="layui-input-block">
+                        <select name="status">
+                            <option value="">璇烽�夋嫨寮傚父鎯呭喌</option>
+                            <option value="1">鏈鐞�</option>
+                            <option value="2">宸蹭慨澶�</option>
+                        </select>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">娣诲姞鏃堕棿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="createTime" id="createTime$" placeholder="璇疯緭鍏ユ坊鍔犳椂闂�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">娣诲姞浜哄憳: </label>
+                    <div class="layui-input-block cool-auto-complete">
+                        <input class="layui-input" name="createBy" placeholder="璇疯緭鍏ユ坊鍔犱汉鍛�" style="display: none">
+                        <input id="createBy$" name="createBy$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏ユ坊鍔犱汉鍛�" onfocus=this.blur()>
+                        <div class="cool-auto-complete-window">
+                            <input class="cool-auto-complete-window-input" data-key="userQueryBycreateBy" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                            <select class="cool-auto-complete-window-select" data-key="userQueryBycreateBySelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                            </select>
+                        </div>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">淇敼鏃堕棿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="updateTime" id="updateTime$" placeholder="璇疯緭鍏ヤ慨鏀规椂闂�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">淇敼浜哄憳: </label>
+                    <div class="layui-input-block cool-auto-complete">
+                        <input class="layui-input" name="updateBy" placeholder="璇疯緭鍏ヤ慨鏀逛汉鍛�" style="display: none">
+                        <input id="updateBy$" name="updateBy$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏ヤ慨鏀逛汉鍛�" onfocus=this.blur()>
+                        <div class="cool-auto-complete-window">
+                            <input class="cool-auto-complete-window-input" data-key="userQueryByupdateBy" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                            <select class="cool-auto-complete-window-select" data-key="userQueryByupdateBySelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                            </select>
+                        </div>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">澶囨敞: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="memo" placeholder="璇疯緭鍏ュ娉�">
+                    </div>
+                </div>
+
+             </div>
+        </div>
+        <hr class="layui-bg-gray">
+        <div class="layui-form-item text-right">
+            <button class="layui-btn" lay-filter="editSubmit" lay-submit="">淇濆瓨</button>
+            <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+        </div>
+    </form>
+</script>
+</html>
+
diff --git a/src/main/webapp/views/admin/basLiftOpt/basLiftOpt.html b/src/main/webapp/views/admin/basLiftOpt/basLiftOpt.html
new file mode 100644
index 0000000..5656634
--- /dev/null
+++ b/src/main/webapp/views/admin/basLiftOpt/basLiftOpt.html
@@ -0,0 +1,134 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/admin.css?v=318" media="all">
+    <link rel="stylesheet" href="../../../static/css/cool.css" media="all">
+</head>
+<body>
+
+<div class="layui-fluid">
+    <div class="layui-card">
+        <div class="layui-card-body">
+            <div class="layui-form toolbar" id="search-box">
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="id" placeholder="缂栧彿" autocomplete="off">
+                        </div>
+                    </div>
+                     <div class="layui-inline" style="width: 300px">
+                        <div class="layui-input-inline">
+                            <input class="layui-input layui-laydate-range" name="create_time" type="text" placeholder="璧峰鏃堕棿 - 缁堟鏃堕棿" autocomplete="off" style="width: 300px">
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="condition" placeholder="璇疯緭鍏�" autocomplete="off">
+                        </div>
+                    </div>
+                    <div class="layui-inline">&emsp;
+                        <button class="layui-btn icon-btn" lay-filter="search" lay-submit>
+                            <i class="layui-icon">&#xe615;</i>鎼滅储
+                        </button>
+                        <button class="layui-btn icon-btn" lay-filter="reset" lay-submit>
+                            <i class="layui-icon">&#xe666;</i>閲嶇疆
+                        </button>
+                    </div>
+                </div>
+            </div>
+            <table class="layui-hide" id="basLiftOpt" lay-filter="basLiftOpt"></table>
+        </div>
+    </div>
+</div>
+
+<script type="text/html" id="toolbar">
+    <div class="layui-btn-container">
+<!--        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>-->
+<!--        <button class="layui-btn layui-btn-sm layui-btn-danger" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>-->
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="float: right">瀵煎嚭</button>
+    </div>
+</script>
+
+<script type="text/html" id="operate">
+    <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">淇敼</a>
+    <a class="layui-btn layui-btn-danger layui-btn-xs btn-edit" lay-event="del">鍒犻櫎</a>
+</script>
+
+<script type="text/javascript" src="../../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/basLiftOpt/basLiftOpt.js" charset="utf-8"></script>
+</body>
+<!-- 琛ㄥ崟寮圭獥 -->
+<script type="text/html" id="editDialog">
+    <form id="detail" lay-filter="detail" class="layui-form admin-form model-form">
+        <input name="id" type="hidden">
+        <div class="layui-row">
+            <div class="layui-col-md12">
+                <div class="layui-form-item">
+                    <label class="layui-form-label">浠诲姟鍙�: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="wrkNo" placeholder="璇疯緭鍏ヤ换鍔″彿">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鎻愬崌鏈哄彿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="liftNo" placeholder="璇疯緭鍏ユ彁鍗囨満鍙�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">涓嬪彂鏃堕棿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="sendTime" id="sendTime$" placeholder="璇疯緭鍏ヤ笅鍙戞椂闂�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">淇敼鏃堕棿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="updateTime" id="updateTime$" placeholder="璇疯緭鍏ヤ慨鏀规椂闂�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">淇敼浜哄憳: </label>
+                    <div class="layui-input-block cool-auto-complete">
+                        <input class="layui-input" name="updateBy" placeholder="璇疯緭鍏ヤ慨鏀逛汉鍛�" style="display: none">
+                        <input id="updateBy$" name="updateBy$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏ヤ慨鏀逛汉鍛�" onfocus=this.blur()>
+                        <div class="cool-auto-complete-window">
+                            <input class="cool-auto-complete-window-input" data-key="userQueryByupdateBy" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                            <select class="cool-auto-complete-window-select" data-key="userQueryByupdateBySelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                            </select>
+                        </div>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">澶囨敞: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="memo" placeholder="璇疯緭鍏ュ娉�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鍛戒护: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="command" placeholder="璇疯緭鍏ュ懡浠�">
+                    </div>
+                </div>
+
+             </div>
+        </div>
+        <hr class="layui-bg-gray">
+        <div class="layui-form-item text-right">
+            <button class="layui-btn" lay-filter="editSubmit" lay-submit="">淇濆瓨</button>
+            <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+        </div>
+    </form>
+</script>
+</html>
+
diff --git a/src/main/webapp/views/admin/basLocSts/basLocSts.html b/src/main/webapp/views/admin/basLocSts/basLocSts.html
new file mode 100644
index 0000000..2dd1d01
--- /dev/null
+++ b/src/main/webapp/views/admin/basLocSts/basLocSts.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/cool.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/common.css" media="all">
+</head>
+<body>
+
+<!-- 鎼滅储鏍� -->
+<div id="search-box" class="layui-form layui-card-header">
+    <div class="layui-inline">
+        <div class="layui-input-inline">
+            <input class="layui-input" type="text" name="loc_sts" placeholder="搴撲綅鐘舵�佷唬鍙�" autocomplete="off">
+        </div>
+    </div>
+
+    <!-- 寰呮坊鍔� -->
+    <div id="data-search-btn" class="layui-btn-container layui-form-item" style="display: inline-block">
+        <button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">鎼滅储</button>
+        <button id="reset" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">閲嶇疆</button>
+    </div>
+</div>
+
+<!-- 琛ㄦ牸 -->
+<table class="layui-hide" id="basLocSts" lay-filter="basLocSts"></table>
+<script type="text/html" id="toolbar">
+    <div class="layui-btn-container">
+        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>
+        <button class="layui-btn layui-btn-sm" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData">瀵煎嚭</button>
+    </div>
+</script>
+
+<script type="text/html" id="operate">
+    <a class="layui-btn layui-btn-xs btn-edit" lay-event="edit">缂栬緫</a>
+</script>
+
+<script type="text/javascript" src="../../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/basLocSts/basLocSts.js" charset="utf-8"></script>
+
+<iframe id="detail-iframe" scrolling="auto" style="display:none;"></iframe>
+
+</body>
+</html>
+
diff --git a/src/main/webapp/views/admin/basLocSts/basLocSts_detail.html b/src/main/webapp/views/admin/basLocSts/basLocSts_detail.html
new file mode 100644
index 0000000..c069875
--- /dev/null
+++ b/src/main/webapp/views/admin/basLocSts/basLocSts_detail.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/cool.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/common.css" media="all">
+</head>
+<body>
+
+<!-- 璇︽儏 -->
+<div id="data-detail" class="layer_self_wrap">
+    <form id="detail" class="layui-form" style="text-align: center;">
+        <div class="layui-inline"  style="width:80%;">
+            <label class="layui-form-label" style="font-size: x-small"><span class="not-null">*</span>搴撲綅鐘舵�佷唬鍙凤細</label>
+            <div class="layui-input-inline">
+                <input id="locSts" class="layui-input" type="text" onkeyup="check(this.id, 'basLocSts')" lay-verify="required">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:80%;">
+            <label class="layui-form-label" style="font-size: x-small">搴撲綅鐘舵�佹弿杩帮細</label>
+            <div class="layui-input-inline">
+                <input id="locDesc" class="layui-input" type="text">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;display: none">
+            <label class="layui-form-label">淇敼浜哄憳锛�</label>
+            <div class="layui-input-inline cool-auto-complete">
+                <input id="modiUser" class="layui-input" type="text" style="display: none">
+                <input id="modiUser$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏�..." onfocus=this.blur()>
+                <div class="cool-auto-complete-window">
+                    <input class="cool-auto-complete-window-input" data-key="userQueryBymodiUser" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                    <select class="cool-auto-complete-window-select" data-key="userQueryBymodiUserSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                    </select>
+                </div>
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;display: none">
+            <label class="layui-form-label">淇敼鏃堕棿锛�</label>
+            <div class="layui-input-inline">
+                <input id="modiTime$" class="layui-input" type="text" autocomplete="off">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;display: none">
+            <label class="layui-form-label">鍒� 寤� 鑰咃細</label>
+            <div class="layui-input-inline cool-auto-complete">
+                <input id="appeUser" class="layui-input" type="text" style="display: none">
+                <input id="appeUser$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏�..." onfocus=this.blur()>
+                <div class="cool-auto-complete-window">
+                    <input class="cool-auto-complete-window-input" data-key="userQueryByappeUser" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                    <select class="cool-auto-complete-window-select" data-key="userQueryByappeUserSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                    </select>
+                </div>
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;display: none">
+            <label class="layui-form-label">娣诲姞鏃堕棿锛�</label>
+            <div class="layui-input-inline">
+                <input id="appeTime$" class="layui-input" type="text" autocomplete="off">
+            </div>
+        </div>
+
+
+        <hr class="layui-bg-gray">
+
+        <div id="data-detail-btn" class="layui-btn-container layui-form-item">
+            <div id="data-detail-submit-save" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="save">淇濆瓨</div>
+            <div id="data-detail-submit-edit" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="edit">淇敼</div>
+            <div id="data-detail-close" type="button" class="layui-btn" lay-submit lay-filter="close">鍏抽棴</div>
+        </div>
+
+        <div id="prompt">
+            娓╅Θ鎻愮ず锛氳浠旂粏濉啓鐩稿叧淇℃伅锛�<span class="extrude"><span class="not-null">*</span> 涓哄繀濉�夐」銆�</span>
+        </div>
+    </form>
+</div>
+</body>
+<script type="text/javascript" src="../../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/basLocSts/basLocSts.js" charset="utf-8"></script>
+</html>
+
diff --git a/src/main/webapp/views/admin/basPlcerror/basPlcerror.html b/src/main/webapp/views/admin/basPlcerror/basPlcerror.html
new file mode 100644
index 0000000..7a66bc2
--- /dev/null
+++ b/src/main/webapp/views/admin/basPlcerror/basPlcerror.html
@@ -0,0 +1,56 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/cool.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/common.css" media="all">
+</head>
+<body>
+
+<!-- 鎼滅储鏍� -->
+<div id="search-box" class="layui-form layui-card-header">
+    <div class="layui-inline">
+        <div class="layui-input-inline">
+            <input class="layui-input" type="text" name="error_code" placeholder="寮傚父缂栧彿" autocomplete="off">
+        </div>
+    </div>
+
+    <!-- 寰呮坊鍔� -->
+    <div id="data-search-btn" class="layui-btn-container layui-form-item">
+        <button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">鎼滅储</button>
+        <button id="reset" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">閲嶇疆</button>
+    </div>
+</div>
+
+<!-- 琛ㄦ牸 -->
+<div class="layui-form">
+    <table class="layui-hide" id="basPlcerror" lay-filter="basPlcerror"></table>
+</div>
+<script type="text/html" id="toolbar">
+    <div class="layui-btn-container">
+        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>
+        <button class="layui-btn layui-btn-sm" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData">瀵煎嚭</button>
+    </div>
+</script>
+
+<script type="text/html" id="operate">
+    <a class="layui-btn layui-btn-xs btn-edit" lay-event="edit">缂栬緫</a>
+</script>
+
+<script type="text/javascript" src="../../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/basPlcerror/basPlcerror.js" charset="utf-8"></script>
+
+<iframe id="detail-iframe" scrolling="auto" style="display:none;"></iframe>
+
+</body>
+</html>
+
diff --git a/src/main/webapp/views/admin/basPlcerror/basPlcerror_detail.html b/src/main/webapp/views/admin/basPlcerror/basPlcerror_detail.html
new file mode 100644
index 0000000..beb3368
--- /dev/null
+++ b/src/main/webapp/views/admin/basPlcerror/basPlcerror_detail.html
@@ -0,0 +1,96 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/cool.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/common.css" media="all">
+</head>
+<body>
+
+<!-- 璇︽儏 -->
+<div id="data-detail" class="layer_self_wrap">
+    <form id="detail" class="layui-form" style="text-align: center">
+    <!--
+        <div class="layui-inline"  style="display: none">
+            <label class="layui-form-label"><span class="not-null">*</span>缂栥��銆�鍙凤細</label>
+            <div class="layui-input-inline">
+                <input id="id" class="layui-input" type="text" placeholder="缂栧彿">
+            </div>
+        </div>
+    -->
+        <div class="layui-inline"  style="width:80%;">
+            <label class="layui-form-label"><span class="not-null">*</span>寮傚父缂栧彿锛�</label>
+            <div class="layui-input-inline">
+                <input id="errorCode" class="layui-input" type="text" onkeyup="check(this.id, 'basPlcerror')" lay-verify="required|number" >
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:80%;">
+            <label class="layui-form-label">寮傚父鎻忚堪锛�</label>
+            <div class="layui-input-inline">
+                <input id="errorDesc" class="layui-input" type="text">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;display: none">
+            <label class="layui-form-label">淇敼鏃堕棿锛�</label>
+            <div class="layui-input-inline">
+                <input id="modiTime$" class="layui-input" type="text" autocomplete="off">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;display: none">
+            <label class="layui-form-label">淇敼浜哄憳锛�</label>
+            <div class="layui-input-inline cool-auto-complete">
+                <input id="modiUser" class="layui-input" type="text" lay-verify="number"  style="display: none">
+                <input id="modiUser$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏�..." onfocus=this.blur()>
+                <div class="cool-auto-complete-window">
+                    <input class="cool-auto-complete-window-input" data-key="userQueryBymodiUser" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                    <select class="cool-auto-complete-window-select" data-key="userQueryBymodiUserSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                    </select>
+                </div>
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;display: none">
+            <label class="layui-form-label">娣诲姞鏃堕棿锛�</label>
+            <div class="layui-input-inline">
+                <input id="appeTime$" class="layui-input" type="text" autocomplete="off">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;display: none">
+            <label class="layui-form-label">鍒� 寤� 鑰咃細</label>
+            <div class="layui-input-inline cool-auto-complete">
+                <input id="appeUser" class="layui-input" type="text" lay-verify="number"  style="display: none">
+                <input id="appeUser$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏�..." onfocus=this.blur()>
+                <div class="cool-auto-complete-window">
+                    <input class="cool-auto-complete-window-input" data-key="userQueryByappeUser" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                    <select class="cool-auto-complete-window-select" data-key="userQueryByappeUserSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                    </select>
+                </div>
+            </div>
+        </div>
+
+
+        <hr class="layui-bg-gray">
+
+        <div id="data-detail-btn" class="layui-btn-container layui-form-item">
+            <div id="data-detail-submit-save" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="save">淇濆瓨</div>
+            <div id="data-detail-submit-edit" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="edit">淇敼</div>
+            <div id="data-detail-close" type="button" class="layui-btn" lay-submit lay-filter="close">鍏抽棴</div>
+        </div>
+
+        <div id="prompt">
+            娓╅Θ鎻愮ず锛氳浠旂粏濉啓鐩稿叧淇℃伅锛�<span class="extrude"><span class="not-null">*</span> 涓哄繀濉�夐」銆�</span>
+        </div>
+    </form>
+</div>
+</body>
+<script type="text/javascript" src="../../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/basPlcerror/basPlcerror.js" charset="utf-8"></script>
+</html>
+
diff --git a/src/main/webapp/views/admin/basShuttle/basShuttle.html b/src/main/webapp/views/admin/basShuttle/basShuttle.html
new file mode 100644
index 0000000..b613769
--- /dev/null
+++ b/src/main/webapp/views/admin/basShuttle/basShuttle.html
@@ -0,0 +1,148 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/admin.css?v=318" media="all">
+    <link rel="stylesheet" href="../../../static/css/cool.css" media="all">
+</head>
+<body>
+
+<div class="layui-fluid">
+    <div class="layui-card">
+        <div class="layui-card-body">
+            <div class="layui-form toolbar" id="search-box">
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="shuttle_no" placeholder="鍥涘悜绌挎杞﹀彿" autocomplete="off">
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="condition" placeholder="璇疯緭鍏�" autocomplete="off">
+                        </div>
+                    </div>
+                    <div class="layui-inline">&emsp;
+                        <button class="layui-btn icon-btn" lay-filter="search" lay-submit>
+                            <i class="layui-icon">&#xe615;</i>鎼滅储
+                        </button>
+                        <button class="layui-btn icon-btn" lay-filter="reset" lay-submit>
+                            <i class="layui-icon">&#xe666;</i>閲嶇疆
+                        </button>
+                    </div>
+                </div>
+            </div>
+            <table class="layui-hide" id="basShuttle" lay-filter="basShuttle"></table>
+        </div>
+    </div>
+</div>
+
+<script type="text/html" id="toolbar">
+    <div class="layui-btn-container">
+        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>
+        <button class="layui-btn layui-btn-sm layui-btn-danger" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="float: right">瀵煎嚭</button>
+    </div>
+</script>
+
+<script type="text/html" id="operate">
+    <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">淇敼</a>
+    <a class="layui-btn layui-btn-danger layui-btn-xs btn-edit" lay-event="del">鍒犻櫎</a>
+</script>
+
+<script type="text/javascript" src="../../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/basShuttle/basShuttle.js" charset="utf-8"></script>
+</body>
+<!-- 琛ㄥ崟寮圭獥 -->
+<script type="text/html" id="editDialog">
+    <form id="detail" lay-filter="detail" class="layui-form admin-form model-form">
+        <input name="id" type="hidden">
+        <div class="layui-row">
+            <div class="layui-col-md12">
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">鍥涘悜绌挎杞﹀彿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="shuttleNo" placeholder="璇疯緭鍏ュ洓鍚戠┛姊溅鍙�" lay-vertype="tips" lay-verify="required">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鐘舵��: </label>
+                    <div class="layui-input-block">
+                        <select name="status">
+                            <option value="">璇烽�夋嫨鐘舵��</option>
+                            <option value="1">姝e父</option>
+                            <option value="0">绂佺敤</option>
+                        </select>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">浣滀笟鎬�: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="shuttleStatus" placeholder="璇疯緭鍏ヤ綔涓氭��">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">浠诲姟鍙�: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="wrkNo" placeholder="璇疯緭鍏ヤ换鍔″彿">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鏆傚瓨搴撲綅: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="idleLoc" placeholder="璇疯緭鍏ユ殏瀛樺簱浣�">
+                    </div>
+                </div>
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">鑷姩鍏呯數: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="autoCharge" placeholder="璇疯緭鍏ヨ嚜鍔ㄥ厖鐢�">-->
+<!--                    </div>-->
+<!--                </div>-->
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鐢甸噺绾�: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="chargeLine" placeholder="璇疯緭鍏ョ數閲忕嚎">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">澶囨敞: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="memo" placeholder="璇疯緭鍏ュ娉�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鎻愬崌鏈哄彿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="liftNo" placeholder="璇疯緭鍏ユ彁鍗囨満鍙�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鏍囪: </label>
+                    <div class="layui-input-block">
+                        <select name="pakMk">
+                            <option value="1">Y</option>
+                            <option value="0">N</option>
+                        </select>
+                    </div>
+                </div>
+
+             </div>
+        </div>
+        <hr class="layui-bg-gray">
+        <div class="layui-form-item text-right">
+            <button class="layui-btn" lay-filter="editSubmit" lay-submit="">淇濆瓨</button>
+            <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+        </div>
+    </form>
+</script>
+</html>
+
diff --git a/src/main/webapp/views/admin/basShuttleErr/basShuttleErr.html b/src/main/webapp/views/admin/basShuttleErr/basShuttleErr.html
new file mode 100644
index 0000000..938325b
--- /dev/null
+++ b/src/main/webapp/views/admin/basShuttleErr/basShuttleErr.html
@@ -0,0 +1,134 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/admin.css?v=318" media="all">
+    <link rel="stylesheet" href="../../../static/css/cool.css" media="all">
+</head>
+<body>
+
+<div class="layui-fluid">
+    <div class="layui-card">
+        <div class="layui-card-body">
+            <div class="layui-form toolbar" id="search-box">
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="error_code" placeholder="寮傚父鐮�" autocomplete="off">
+                        </div>
+                    </div>
+                     <div class="layui-inline" style="width: 300px">
+                        <div class="layui-input-inline">
+                            <input class="layui-input layui-laydate-range" name="create_time" type="text" placeholder="璧峰鏃堕棿 - 缁堟鏃堕棿" autocomplete="off" style="width: 300px">
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="condition" placeholder="璇疯緭鍏�" autocomplete="off">
+                        </div>
+                    </div>
+                    <div class="layui-inline">&emsp;
+                        <button class="layui-btn icon-btn" lay-filter="search" lay-submit>
+                            <i class="layui-icon">&#xe615;</i>鎼滅储
+                        </button>
+                        <button class="layui-btn icon-btn" lay-filter="reset" lay-submit>
+                            <i class="layui-icon">&#xe666;</i>閲嶇疆
+                        </button>
+                    </div>
+                </div>
+            </div>
+            <table class="layui-hide" id="basShuttleErr" lay-filter="basShuttleErr"></table>
+        </div>
+    </div>
+</div>
+
+<script type="text/html" id="toolbar">
+    <div class="layui-btn-container">
+        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>
+        <button class="layui-btn layui-btn-sm layui-btn-danger" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="float: right">瀵煎嚭</button>
+    </div>
+</script>
+
+<script type="text/html" id="operate">
+    <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">淇敼</a>
+    <a class="layui-btn layui-btn-danger layui-btn-xs btn-edit" lay-event="del">鍒犻櫎</a>
+</script>
+
+<script type="text/javascript" src="../../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/basShuttleErr/basShuttleErr.js" charset="utf-8"></script>
+</body>
+<!-- 琛ㄥ崟寮圭獥 -->
+<script type="text/html" id="editDialog">
+    <form id="detail" lay-filter="detail" class="layui-form admin-form model-form">
+        <input name="id" type="hidden">
+        <div class="layui-row">
+            <div class="layui-col-md12">
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">寮傚父鐮�: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="errorCode" placeholder="璇疯緭鍏ュ紓甯哥爜" lay-vertype="tips" lay-verify="required">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">寮傚父: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="errName" placeholder="璇疯緭鍏ュ紓甯�">
+                    </div>
+                </div>
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">淇敼浜哄憳: </label>-->
+<!--                    <div class="layui-input-block cool-auto-complete">-->
+<!--                        <input class="layui-input" name="modiUser" placeholder="璇疯緭鍏ヤ慨鏀逛汉鍛�" style="display: none">-->
+<!--                        <input id="modiUser$" name="modiUser$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏ヤ慨鏀逛汉鍛�" onfocus=this.blur()>-->
+<!--                        <div class="cool-auto-complete-window">-->
+<!--                            <input class="cool-auto-complete-window-input" data-key="userQueryBymodiUser" onkeyup="autoLoad(this.getAttribute('data-key'))">-->
+<!--                            <select class="cool-auto-complete-window-select" data-key="userQueryBymodiUserSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">-->
+<!--                            </select>-->
+<!--                        </div>-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">淇敼鏃堕棿: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="modiTime" id="modiTime$" placeholder="璇疯緭鍏ヤ慨鏀规椂闂�">-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">娣诲姞浜哄憳: </label>-->
+<!--                    <div class="layui-input-block cool-auto-complete">-->
+<!--                        <input class="layui-input" name="appeUser" placeholder="璇疯緭鍏ユ坊鍔犱汉鍛�" style="display: none">-->
+<!--                        <input id="appeUser$" name="appeUser$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏ユ坊鍔犱汉鍛�" onfocus=this.blur()>-->
+<!--                        <div class="cool-auto-complete-window">-->
+<!--                            <input class="cool-auto-complete-window-input" data-key="userQueryByappeUser" onkeyup="autoLoad(this.getAttribute('data-key'))">-->
+<!--                            <select class="cool-auto-complete-window-select" data-key="userQueryByappeUserSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">-->
+<!--                            </select>-->
+<!--                        </div>-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">娣诲姞鏃堕棿: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="appeTime" id="appeTime$" placeholder="璇疯緭鍏ユ坊鍔犳椂闂�">-->
+<!--                    </div>-->
+<!--                </div>-->
+
+             </div>
+        </div>
+        <hr class="layui-bg-gray">
+        <div class="layui-form-item text-right">
+            <button class="layui-btn" lay-filter="editSubmit" lay-submit="">淇濆瓨</button>
+            <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+        </div>
+    </form>
+</script>
+</html>
+
diff --git a/src/main/webapp/views/admin/basShuttleErrLog/basShuttleErrLog.html b/src/main/webapp/views/admin/basShuttleErrLog/basShuttleErrLog.html
new file mode 100644
index 0000000..798b641
--- /dev/null
+++ b/src/main/webapp/views/admin/basShuttleErrLog/basShuttleErrLog.html
@@ -0,0 +1,240 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/admin.css?v=318" media="all">
+    <link rel="stylesheet" href="../../../static/css/cool.css" media="all">
+</head>
+<body>
+
+<div class="layui-fluid">
+    <div class="layui-card">
+        <div class="layui-card-body">
+            <div class="layui-form toolbar" id="search-box">
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="id" placeholder="缂栧彿" autocomplete="off">
+                        </div>
+                    </div>
+                     <div class="layui-inline" style="width: 300px">
+                        <div class="layui-input-inline">
+                            <input class="layui-input layui-laydate-range" name="create_time" type="text" placeholder="璧峰鏃堕棿 - 缁堟鏃堕棿" autocomplete="off" style="width: 300px">
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="condition" placeholder="璇疯緭鍏�" autocomplete="off">
+                        </div>
+                    </div>
+                    <div class="layui-inline">&emsp;
+                        <button class="layui-btn icon-btn" lay-filter="search" lay-submit>
+                            <i class="layui-icon">&#xe615;</i>鎼滅储
+                        </button>
+                        <button class="layui-btn icon-btn" lay-filter="reset" lay-submit>
+                            <i class="layui-icon">&#xe666;</i>閲嶇疆
+                        </button>
+                    </div>
+                </div>
+            </div>
+            <table class="layui-hide" id="basShuttleErrLog" lay-filter="basShuttleErrLog"></table>
+        </div>
+    </div>
+</div>
+
+<script type="text/html" id="toolbar">
+    <div class="layui-btn-container">
+<!--        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>-->
+<!--        <button class="layui-btn layui-btn-sm layui-btn-danger" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>-->
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="float: right">瀵煎嚭</button>
+    </div>
+</script>
+
+<script type="text/html" id="operate">
+<!--    <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">淇敼</a>-->
+<!--    <a class="layui-btn layui-btn-danger layui-btn-xs btn-edit" lay-event="del">鍒犻櫎</a>-->
+</script>
+
+<script type="text/javascript" src="../../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/basShuttleErrLog/basShuttleErrLog.js" charset="utf-8"></script>
+</body>
+<!-- 琛ㄥ崟寮圭獥 -->
+<script type="text/html" id="editDialog">
+    <form id="detail" lay-filter="detail" class="layui-form admin-form model-form">
+        <input name="id" type="hidden">
+        <div class="layui-row">
+            <div class="layui-col-md12">
+                <div class="layui-form-item">
+                    <label class="layui-form-label">缂栧彿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="uuid" placeholder="璇疯緭鍏ョ紪鍙�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">宸ヤ綔鍙�: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="wrkNo" placeholder="璇疯緭鍏ュ伐浣滃彿">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鍙戠敓鏃堕棿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="startTime" id="startTime$" placeholder="璇疯緭鍏ュ彂鐢熸椂闂�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">缁撴潫鏃堕棿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="endTime" id="endTime$" placeholder="璇疯緭鍏ョ粨鏉熸椂闂�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">宸ヤ綔鐘舵��: </label>
+                    <div class="layui-input-block cool-auto-complete">
+                        <input class="layui-input" name="wrkSts" placeholder="璇疯緭鍏ュ伐浣滅姸鎬�" style="display: none">
+                        <input id="wrkSts$" name="wrkSts$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏ュ伐浣滅姸鎬�" onfocus=this.blur()>
+                        <div class="cool-auto-complete-window">
+                            <input class="cool-auto-complete-window-input" data-key="basWrkStatusQueryBywrkSts" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                            <select class="cool-auto-complete-window-select" data-key="basWrkStatusQueryBywrkStsSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                            </select>
+                        </div>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鍏ュ嚭搴撶被鍨�: </label>
+                    <div class="layui-input-block cool-auto-complete">
+                        <input class="layui-input" name="ioType" placeholder="璇疯緭鍏ュ叆鍑哄簱绫诲瀷" style="display: none">
+                        <input id="ioType$" name="ioType$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏ュ叆鍑哄簱绫诲瀷" onfocus=this.blur()>
+                        <div class="cool-auto-complete-window">
+                            <input class="cool-auto-complete-window-input" data-key="basWrkIotypeQueryByioType" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                            <select class="cool-auto-complete-window-select" data-key="basWrkIotypeQueryByioTypeSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                            </select>
+                        </div>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">绌挎杞�: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="steNo" placeholder="璇疯緭鍏ョ┛姊溅">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">plc: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="plcNo" placeholder="璇疯緭鍏lc">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鐩爣搴撲綅: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="locNo" placeholder="璇疯緭鍏ョ洰鏍囧簱浣�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鐩爣绔�: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="staNo" placeholder="璇疯緭鍏ョ洰鏍囩珯">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">婧愮珯: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="sourceStaNo" placeholder="璇疯緭鍏ユ簮绔�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">婧愬簱浣�: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="sourceLocNo" placeholder="璇疯緭鍏ユ簮搴撲綅">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鏉$爜: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="barcode" placeholder="璇疯緭鍏ユ潯鐮�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">寮傚父鐮�: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="errCode" placeholder="璇疯緭鍏ュ紓甯哥爜">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">寮傚父: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="error" placeholder="璇疯緭鍏ュ紓甯�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">寮傚父鎯呭喌: </label>
+                    <div class="layui-input-block">
+                        <select name="status">
+                            <option value="">璇烽�夋嫨寮傚父鎯呭喌</option>
+                            <option value="1">鏈鐞�</option>
+                            <option value="2">宸蹭慨澶�</option>
+                        </select>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">娣诲姞鏃堕棿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="createTime" id="createTime$" placeholder="璇疯緭鍏ユ坊鍔犳椂闂�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">娣诲姞浜哄憳: </label>
+                    <div class="layui-input-block cool-auto-complete">
+                        <input class="layui-input" name="createBy" placeholder="璇疯緭鍏ユ坊鍔犱汉鍛�" style="display: none">
+                        <input id="createBy$" name="createBy$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏ユ坊鍔犱汉鍛�" onfocus=this.blur()>
+                        <div class="cool-auto-complete-window">
+                            <input class="cool-auto-complete-window-input" data-key="userQueryBycreateBy" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                            <select class="cool-auto-complete-window-select" data-key="userQueryBycreateBySelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                            </select>
+                        </div>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">淇敼鏃堕棿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="updateTime" id="updateTime$" placeholder="璇疯緭鍏ヤ慨鏀规椂闂�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">淇敼浜哄憳: </label>
+                    <div class="layui-input-block cool-auto-complete">
+                        <input class="layui-input" name="updateBy" placeholder="璇疯緭鍏ヤ慨鏀逛汉鍛�" style="display: none">
+                        <input id="updateBy$" name="updateBy$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏ヤ慨鏀逛汉鍛�" onfocus=this.blur()>
+                        <div class="cool-auto-complete-window">
+                            <input class="cool-auto-complete-window-input" data-key="userQueryByupdateBy" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                            <select class="cool-auto-complete-window-select" data-key="userQueryByupdateBySelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                            </select>
+                        </div>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">澶囨敞: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="memo" placeholder="璇疯緭鍏ュ娉�">
+                    </div>
+                </div>
+
+             </div>
+        </div>
+        <hr class="layui-bg-gray">
+        <div class="layui-form-item text-right">
+            <button class="layui-btn" lay-filter="editSubmit" lay-submit="">淇濆瓨</button>
+            <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+        </div>
+    </form>
+</script>
+</html>
+
diff --git a/src/main/webapp/views/admin/basShuttleErrLog/basShuttleOpt.html b/src/main/webapp/views/admin/basShuttleErrLog/basShuttleOpt.html
new file mode 100644
index 0000000..ae87226
--- /dev/null
+++ b/src/main/webapp/views/admin/basShuttleErrLog/basShuttleOpt.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/admin.css?v=318" media="all">
+    <link rel="stylesheet" href="../../../static/css/cool.css" media="all">
+</head>
+<body>
+
+<div class="layui-fluid">
+    <div class="layui-card">
+        <div class="layui-card-body">
+            <div class="layui-form toolbar" id="search-box">
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="wrk_no" placeholder="宸ヤ綔鍙�" autocomplete="off">
+                        </div>
+                    </div>
+                     <div class="layui-inline" style="width: 300px">
+                        <div class="layui-input-inline">
+                            <input class="layui-input layui-laydate-range" name="send_time" type="text" placeholder="璧峰鏃堕棿 - 缁堟鏃堕棿" autocomplete="off" style="width: 300px">
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="condition" placeholder="璇疯緭鍏�" autocomplete="off">
+                        </div>
+                    </div>
+                    <div class="layui-inline">&emsp;
+                        <button class="layui-btn icon-btn" lay-filter="search" lay-submit>
+                            <i class="layui-icon">&#xe615;</i>鎼滅储
+                        </button>
+                        <button class="layui-btn icon-btn" lay-filter="reset" lay-submit>
+                            <i class="layui-icon">&#xe666;</i>閲嶇疆
+                        </button>
+                    </div>
+                </div>
+            </div>
+            <table class="layui-hide" id="basShuttleOpt" lay-filter="basShuttleOpt"></table>
+        </div>
+    </div>
+</div>
+
+<script type="text/javascript" src="../../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/basShuttleErrLog/basShuttleOpt.js" charset="utf-8"></script>
+</body>
+</html>
+
diff --git a/src/main/webapp/views/admin/basWrkIotype/basWrkIotype.html b/src/main/webapp/views/admin/basWrkIotype/basWrkIotype.html
new file mode 100644
index 0000000..94d99a8
--- /dev/null
+++ b/src/main/webapp/views/admin/basWrkIotype/basWrkIotype.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/cool.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/common.css" media="all">
+</head>
+<body>
+
+<!-- 鎼滅储鏍� -->
+<div id="search-box" class="layui-form layui-card-header">
+    <div class="layui-inline">
+        <div class="layui-input-inline">
+            <input class="layui-input" type="text" name="io_type" placeholder="鍏ュ嚭绫诲瀷浠e彿" autocomplete="off">
+        </div>
+    </div>
+
+    <!-- 寰呮坊鍔� -->
+    <div id="data-search-btn" class="layui-btn-container layui-form-item" style="display: inline-block">
+        <button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">鎼滅储</button>
+        <button id="reset" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">閲嶇疆</button>
+    </div>
+</div>
+
+<!-- 琛ㄦ牸 -->
+<table class="layui-hide" id="basWrkIotype" lay-filter="basWrkIotype"></table>
+<script type="text/html" id="toolbar">
+    <div class="layui-btn-container">
+        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>
+        <button class="layui-btn layui-btn-sm" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData">瀵煎嚭</button>
+    </div>
+</script>
+
+<script type="text/html" id="operate">
+    <a class="layui-btn layui-btn-xs btn-edit" lay-event="edit">缂栬緫</a>
+</script>
+
+<script type="text/javascript" src="../../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/basWrkIotype/basWrkIotype.js" charset="utf-8"></script>
+
+<iframe id="detail-iframe" scrolling="auto" style="display:none;"></iframe>
+
+</body>
+</html>
+
diff --git a/src/main/webapp/views/admin/basWrkIotype/basWrkIotype_detail.html b/src/main/webapp/views/admin/basWrkIotype/basWrkIotype_detail.html
new file mode 100644
index 0000000..e9bb624
--- /dev/null
+++ b/src/main/webapp/views/admin/basWrkIotype/basWrkIotype_detail.html
@@ -0,0 +1,94 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/cool.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/common.css" media="all">
+</head>
+<body>
+
+<!-- 璇︽儏 -->
+<div id="data-detail" class="layer_self_wrap">
+    <form id="detail" class="layui-form" style="text-align: center">
+        <div class="layui-inline"  style="width:80%;">
+            <label class="layui-form-label" style="font-size: x-small"><span class="not-null">*</span>鍏ュ嚭绫诲瀷浠e彿锛�</label>
+            <div class="layui-input-inline">
+                <input id="ioType" class="layui-input" type="text" onkeyup="check(this.id, 'basWrkIotype')"  lay-verify="required|number">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;display: none">
+            <label class="layui-form-label"><span class="not-null">*</span>涓汇��銆�瑕侊細</label>
+            <div class="layui-input-inline">
+                <input id="ioPri" class="layui-input" type="text" >
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:80%;">
+            <label class="layui-form-label" style="font-size: x-small">鍏ュ嚭绫诲瀷鎻忚堪锛�</label>
+            <div class="layui-input-inline">
+                <input id="ioDesc" class="layui-input" type="text">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;display: none">
+            <label class="layui-form-label">淇敼浜哄憳锛�</label>
+            <div class="layui-input-inline cool-auto-complete">
+                <input id="modiUser" class="layui-input" type="text" style="display: none">
+                <input id="modiUser$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏�..." onfocus=this.blur()>
+                <div class="cool-auto-complete-window">
+                    <input class="cool-auto-complete-window-input" data-key="userQueryBymodiUser" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                    <select class="cool-auto-complete-window-select" data-key="userQueryBymodiUserSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                    </select>
+                </div>
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;display: none">
+            <label class="layui-form-label">淇敼鏃堕棿锛�</label>
+            <div class="layui-input-inline">
+                <input id="modiTime$" class="layui-input" type="text" autocomplete="off">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;display: none">
+            <label class="layui-form-label">鍒� 寤� 鑰咃細</label>
+            <div class="layui-input-inline cool-auto-complete">
+                <input id="appeUser" class="layui-input" type="text" style="display: none">
+                <input id="appeUser$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏�..." onfocus=this.blur()>
+                <div class="cool-auto-complete-window">
+                    <input class="cool-auto-complete-window-input" data-key="userQueryByappeUser" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                    <select class="cool-auto-complete-window-select" data-key="userQueryByappeUserSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                    </select>
+                </div>
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;display: none">
+            <label class="layui-form-label">娣诲姞鏃堕棿锛�</label>
+            <div class="layui-input-inline">
+                <input id="appeTime$" class="layui-input" type="text" autocomplete="off">
+            </div>
+        </div>
+
+
+        <hr class="layui-bg-gray">
+
+        <div id="data-detail-btn" class="layui-btn-container layui-form-item">
+            <div id="data-detail-submit-save" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="save">淇濆瓨</div>
+            <div id="data-detail-submit-edit" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="edit">淇敼</div>
+            <div id="data-detail-close" type="button" class="layui-btn" lay-submit lay-filter="close">鍏抽棴</div>
+        </div>
+
+        <div id="prompt">
+            娓╅Θ鎻愮ず锛氳浠旂粏濉啓鐩稿叧淇℃伅锛�<span class="extrude"><span class="not-null">*</span> 涓哄繀濉�夐」銆�</span>
+        </div>
+    </form>
+</div>
+</body>
+<script type="text/javascript" src="../../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/basWrkIotype/basWrkIotype.js" charset="utf-8"></script>
+</html>
+
diff --git a/src/main/webapp/views/admin/basWrkStatus/basWrkStatus.html b/src/main/webapp/views/admin/basWrkStatus/basWrkStatus.html
new file mode 100644
index 0000000..a598d16
--- /dev/null
+++ b/src/main/webapp/views/admin/basWrkStatus/basWrkStatus.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/cool.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/common.css" media="all">
+</head>
+<body>
+
+<!-- 鎼滅储鏍� -->
+<div id="search-box" class="layui-form layui-card-header">
+    <div class="layui-inline">
+        <div class="layui-input-inline">
+            <input class="layui-input" type="text" name="wrk_sts" placeholder="浠e彿" autocomplete="off">
+        </div>
+    </div>
+
+    <!-- 寰呮坊鍔� -->
+    <div id="data-search-btn" class="layui-btn-container layui-form-item" style="display: inline-block">
+        <button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">鎼滅储</button>
+        <button id="reset" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">閲嶇疆</button>
+    </div>
+</div>
+
+<!-- 琛ㄦ牸 -->
+<table class="layui-hide" id="basWrkStatus" lay-filter="basWrkStatus"></table>
+<script type="text/html" id="toolbar">
+    <div class="layui-btn-container">
+        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>
+        <button class="layui-btn layui-btn-sm" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData">瀵煎嚭</button>
+    </div>
+</script>
+
+<script type="text/html" id="operate">
+    <a class="layui-btn layui-btn-xs btn-edit" lay-event="edit">缂栬緫</a>
+</script>
+
+<script type="text/javascript" src="../../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/basWrkStatus/basWrkStatus.js" charset="utf-8"></script>
+
+<iframe id="detail-iframe" scrolling="auto" style="display:none;"></iframe>
+
+</body>
+</html>
+
diff --git a/src/main/webapp/views/admin/basWrkStatus/basWrkStatus_detail.html b/src/main/webapp/views/admin/basWrkStatus/basWrkStatus_detail.html
new file mode 100644
index 0000000..ed48b5d
--- /dev/null
+++ b/src/main/webapp/views/admin/basWrkStatus/basWrkStatus_detail.html
@@ -0,0 +1,96 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/cool.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/common.css" media="all">
+</head>
+<body>
+
+<!-- 璇︽儏 -->
+<div id="data-detail" class="layer_self_wrap">
+    <form id="detail" class="layui-form" style="text-align: center">
+    <!--
+        <div class="layui-inline"  style="display: none">
+            <label class="layui-form-label"><span class="not-null">*</span>缂栥��銆�鍙凤細</label>
+            <div class="layui-input-inline">
+                <input id="id" class="layui-input" type="text" placeholder="缂栧彿">
+            </div>
+        </div>
+    -->
+        <div class="layui-inline"  style="width:80%;">
+            <label class="layui-form-label"><span class="not-null">*</span>浠c��銆�鍙凤細</label>
+            <div class="layui-input-inline">
+                <input id="wrkSts" class="layui-input" type="text" onkeyup="check(this.id, 'basWrkStatus')"  lay-verify="required|number">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:80%;">
+            <label class="layui-form-label"><span class="not-null">*</span>鐘舵�佹弿杩帮細</label>
+            <div class="layui-input-inline">
+                <input id="wrkDesc" class="layui-input" type="text"  lay-verify="required">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;display: none">
+            <label class="layui-form-label">淇敼浜哄憳锛�</label>
+            <div class="layui-input-inline cool-auto-complete">
+                <input id="modiUser" class="layui-input" type="text" style="display: none">
+                <input id="modiUser$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏�..." onfocus=this.blur()>
+                <div class="cool-auto-complete-window">
+                    <input class="cool-auto-complete-window-input" data-key="userQueryBymodiUser" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                    <select class="cool-auto-complete-window-select" data-key="userQueryBymodiUserSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                    </select>
+                </div>
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;display: none">
+            <label class="layui-form-label">淇敼鏃堕棿锛�</label>
+            <div class="layui-input-inline">
+                <input id="modiTime$" class="layui-input" type="text" autocomplete="off">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;display: none">
+            <label class="layui-form-label">鍒� 寤� 鑰咃細</label>
+            <div class="layui-input-inline cool-auto-complete">
+                <input id="appeUser" class="layui-input" type="text" style="display: none">
+                <input id="appeUser$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏�..." onfocus=this.blur()>
+                <div class="cool-auto-complete-window">
+                    <input class="cool-auto-complete-window-input" data-key="userQueryByappeUser" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                    <select class="cool-auto-complete-window-select" data-key="userQueryByappeUserSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                    </select>
+                </div>
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;display: none">
+            <label class="layui-form-label">娣诲姞鏃堕棿锛�</label>
+            <div class="layui-input-inline">
+                <input id="appeTime$" class="layui-input" type="text" autocomplete="off">
+            </div>
+        </div>
+
+
+        <hr class="layui-bg-gray">
+
+        <div id="data-detail-btn" class="layui-btn-container layui-form-item">
+            <div id="data-detail-submit-save" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="save">淇濆瓨</div>
+            <div id="data-detail-submit-edit" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="edit">淇敼</div>
+            <div id="data-detail-close" type="button" class="layui-btn" lay-submit lay-filter="close">鍏抽棴</div>
+        </div>
+
+        <div id="prompt">
+            娓╅Θ鎻愮ず锛氳浠旂粏濉啓鐩稿叧淇℃伅锛�<span class="extrude"><span class="not-null">*</span> 涓哄繀濉�夐」銆�</span>
+        </div>
+    </form>
+</div>
+</body>
+<script type="text/javascript" src="../../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/basWrkStatus/basWrkStatus.js" charset="utf-8"></script>
+</html>
+
diff --git a/src/main/webapp/views/admin/config/config.html b/src/main/webapp/views/admin/config/config.html
new file mode 100644
index 0000000..a829c6e
--- /dev/null
+++ b/src/main/webapp/views/admin/config/config.html
@@ -0,0 +1,55 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/cool.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/common.css" media="all">
+</head>
+<body>
+
+<!-- 鎼滅储鏍� -->
+<div id="search-box" class="layui-form layui-card-header">
+    <div class="layui-inline">
+        <div class="layui-input-inline">
+            <input class="layui-input" type="text" name="id" placeholder="缂栧彿" autocomplete="off">
+        </div>
+    </div>
+
+    <!-- 寰呮坊鍔� -->
+    <div id="data-search-btn" class="layui-btn-container layui-form-item">
+        <button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">鎼滅储</button>
+        <button id="reset" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">閲嶇疆</button>
+    </div>
+</div>
+
+<!-- 琛ㄦ牸 -->
+<table class="layui-hide" id="config" lay-filter="config"></table>
+<script type="text/html" id="toolbar">
+    <div class="layui-btn-container">
+        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>
+        <button class="layui-btn layui-btn-sm" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData">瀵煎嚭</button>
+    </div>
+</script>
+
+<script type="text/html" id="operate">
+    <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">璇︽儏</a>
+    <a class="layui-btn layui-btn-xs btn-edit" lay-event="edit">缂栬緫</a>
+</script>
+
+<script type="text/javascript" src="../../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/config/config.js" charset="utf-8"></script>
+
+<iframe id="detail-iframe" scrolling="auto" style="display:none;"></iframe>
+
+</body>
+</html>
+
diff --git a/src/main/webapp/views/admin/config/config_detail.html b/src/main/webapp/views/admin/config/config_detail.html
new file mode 100644
index 0000000..1b30cb8
--- /dev/null
+++ b/src/main/webapp/views/admin/config/config_detail.html
@@ -0,0 +1,83 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/cool.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/common.css" media="all">
+</head>
+<body>
+
+<!-- 璇︽儏 -->
+<div id="data-detail" class="layer_self_wrap">
+    <form id="detail" class="layui-form">
+        <div class="layui-inline"  style="display: none">
+            <label class="layui-form-label"><span class="not-null">*</span>缂栥��銆�鍙凤細</label>
+            <div class="layui-input-inline">
+                <input id="id" class="layui-input" type="text" placeholder="缂栧彿">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label"><span class="not-null">*</span>鍚嶃��銆�绉帮細</label>
+            <div class="layui-input-inline">
+                <input id="name" class="layui-input" type="text" placeholder="鍚嶇О" lay-verify="required" >
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label"><span class="not-null">*</span>缂栥��銆�鐮侊細</label>
+            <div class="layui-input-inline">
+                <input id="code" class="layui-input" type="text" placeholder="缂栫爜" lay-verify="required" >
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:97%;">
+            <label class="layui-form-label"><span class="not-null">*</span>瀵� 搴� 鍊硷細</label>
+            <div class="layui-input-inline">
+                <input id="value" class="layui-input" type="text" placeholder="瀵瑰簲鍊�" lay-verify="required" >
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label"><span class="not-null">*</span>绫汇��銆�鍨嬶細</label>
+            <div class="layui-input-inline">
+                <select id="type" lay-verify="required">
+                    <option value="" style="display: none"></option>
+                    <option value="1">String</option>
+                    <option value="2">JSON</option>
+                </select>
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label"><span class="not-null">*</span>鐘躲��銆�鎬侊細</label>
+            <div class="layui-input-inline">
+                <select id="status" lay-verify="required">
+                    <option value="" style="display: none"></option>
+                    <option value="1">姝e父</option>
+                    <option value="0">绂佺敤</option>
+                </select>
+            </div>
+        </div>
+
+
+        <hr class="layui-bg-gray">
+
+        <div id="data-detail-btn" class="layui-btn-container layui-form-item">
+            <div id="data-detail-submit" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="edit">淇濆瓨</div>
+            <div id="data-detail-close" type="button" class="layui-btn" lay-submit lay-filter="close">鍏抽棴</div>
+        </div>
+
+        <div id="prompt">
+            娓╅Θ鎻愮ず锛氳浠旂粏濉啓鐩稿叧淇℃伅锛�<span class="extrude"><span class="not-null">*</span> 涓哄繀濉�夐」銆�</span>
+        </div>
+    </form>
+</div>
+</body>
+<script type="text/javascript" src="../../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/config/config.js" charset="utf-8"></script>
+</html>
+
diff --git a/src/main/webapp/views/admin/detail.html b/src/main/webapp/views/admin/detail.html
new file mode 100644
index 0000000..0bb264b
--- /dev/null
+++ b/src/main/webapp/views/admin/detail.html
@@ -0,0 +1,172 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
+    <script type="text/javascript" src="../../static/js/common.js"></script>
+    <style>
+        body {
+            background-color: #fff;
+        }
+        #container {
+            padding: 15px;
+            margin-top: 15px
+        }
+        .layui-card-body {
+            padding: 20px 15px 5px 15px;
+        }
+        .layui-form-item {
+            margin-bottom: 18px;
+        }
+        .layui-form-label {
+            color: #999!important;;
+            width: 60px;
+        }
+        .layui-input-block {
+            margin-left: 90px;
+        }
+        #update-password {
+            padding: 0 20px 0 15px;
+        }
+        .layui-btn .layui-icon {
+            margin-right: 0;
+        }
+    </style>
+</head>
+<body id="body">
+<div id="container">
+    <fieldset class="layui-elem-field">
+        <legend>璁剧疆鎴戠殑璧勬枡</legend>
+        <div class="layui-card-body">
+            <div id="person-detail" class="layui-form">
+                <div class="layui-form-item" style="display: none">
+                    <label class="layui-form-label">缂栧彿</label>
+                    <div class="layui-input-inline">
+                        <input id="id" class="layui-input" type="text" placeholder="璇疯緭鍏�" autocomplete="off">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">瑙掕壊</label>
+                    <div class="layui-input-inline">
+                        <input id="roleName" class="layui-input" type="text" placeholder="璇疯緭鍏�" autocomplete="off" disabled="disabled">
+                    </div>
+                    <div class="layui-form-mid layui-word-aux">褰撳墠瑙掕壊涓嶅彲鏇存敼涓哄叾瀹冭鑹�</div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鍚嶇О</label>
+                    <div class="layui-input-inline">
+                        <input id="username" class="layui-input" type="text" placeholder="璇疯緭鍏�" autocomplete="off">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">璐﹀彿</label>
+                    <div class="layui-input-inline">
+                        <input id="mobile" class="layui-input" type="text" placeholder="璇疯緭鍏�" autocomplete="off">
+                    </div>
+                    <div class="layui-form-mid layui-word-aux">閲嶈锛佷竴鑸敤浜庡悗鍙扮櫥鍏�</div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">瀵嗙爜</label>
+                    <div class="layui-input-inline">
+                        <input id="password" class="layui-input" type="text" placeholder="璇疯緭鍏�" autocomplete="off" style="display: none">
+                        <button id="update-password" class="layui-btn layui-btn-primary">
+                            <i class="layui-icon">&#xe620;</i>
+                            淇敼瀵嗙爜
+                        </button>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">娉ㄥ唽鏃堕棿</label>
+                    <div class="layui-input-inline">
+                        <input id="createTime$" class="layui-input" type="text" placeholder="璇疯緭鍏�" autocomplete="off" disabled="disabled">
+                    </div>
+                    <div class="layui-form-mid layui-word-aux">涓嶅彲淇敼</div>
+                </div>
+                <div class="layui-form-item">
+                    <div class="layui-input-block">
+                        <button type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="save">纭淇敼</button>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </fieldset>
+</div>
+</body>
+<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script src="../../static/layui/layui.js"></script>
+<script>
+    layui.use(['form'], function(){
+        var form = layui.form,
+            layer = layui.layer,
+            $ = layui.jquery;
+
+        // 鍒濆鍖栬〃鍗曟暟鎹�
+        $.ajax({
+            url: baseUrl+"/user/detail/auth",
+            headers: {'token': localStorage.getItem('token')},
+            method: 'POST',
+            success: function (res) {
+                if (res.code === 200){
+                    var user = res.data;
+                    for (var val in user) {
+                        $('#person-detail').find(":input[id='" + val + "']").val(user[val]);
+                    }
+                } else if (res.code === 403){
+                    top.location.href = baseUrl+"/";
+                } else {
+                    layer.msg(res.msg);
+                }
+            }
+        });
+
+        // 淇敼瀵嗙爜
+        $(document).on('click','#update-password', function () {
+            layer.open({
+                type: 2,
+                title: '淇敼瀵嗙爜',
+                maxmin: true,
+                area: ['350px', '310px'],
+                shadeClose: false,
+                content: 'password.html',
+                success: function(layero, index){
+                    layer.iframeAuto(index);
+                }
+            })
+        });
+
+
+        // 淇濆瓨淇敼
+        form.on('submit(save)', function (data) {
+            var user = {
+                id: $('#id').val(),
+                username: $('#username').val(),
+                mobile: $("#mobile").val(),
+            };
+            layer.confirm('纭畾淇敼璧勬枡鍚楋紵', function(){
+                $.ajax({
+                    url: baseUrl+"/user/update/auth",
+                    headers: {'token': localStorage.getItem('token')},
+                    data: user,
+                    method: 'POST',
+                    success: function (res) {
+                        if (res.code === 200){
+                            layer.msg(res.msg);
+                            localStorage.setItem("username", user.username);
+                            parent.$('#person-username').text(localStorage.getItem('username'));
+                        } else if (res.code === 403){
+                            top.location.href = baseUrl+"/";
+                        } else {
+                            layer.msg(res.msg);
+                        }
+                    }
+                });
+            });
+            return false;
+        });
+    });
+</script>
+</html>
\ No newline at end of file
diff --git a/src/main/webapp/views/admin/index.html b/src/main/webapp/views/admin/index.html
new file mode 100644
index 0000000..e9d4c80
--- /dev/null
+++ b/src/main/webapp/views/admin/index.html
@@ -0,0 +1,199 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="utf-8">
+  <title>娴欐睙涓壃 - 鑷姩鍖栫珛浣撲粨搴� - AS / RS</title>
+  <meta name="renderer" content="webkit">
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
+  <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
+  <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all">
+  <link rel="stylesheet" href="../../static/css/loader.css" media="all">
+  <style>
+    .layui-logo img {
+      width: 25px;
+    }
+    .layui-logo cite {
+      font-size: 18px;
+      font-weight: 400;
+      /*margin-left: 5px;*/
+    }
+  </style>
+</head>
+<body class="layui-layout-body">
+<div class="layui-layout layui-layout-admin">
+  <!-- 澶撮儴 -->
+  <div class="layui-header">
+    <div class="layui-logo">
+      <img src="../../static/images/zy-logo-dark.png" style="display: inline-block; width: 60%;height: auto">
+      <!--          <span style="margin-top: 0; letter-spacing: 10px">涓壃绔嬪簱</span>-->
+      <!--          <img src="../static/image/logo.svg"/>-->
+      <!--          <cite>涓壃 - Zoneyung</cite>-->
+    </div>
+
+    <ul class="layui-nav layui-layout-left">
+      <li class="layui-nav-item" lay-unselect>
+        <a ew-event="flexible" title="渚ц竟浼哥缉"><i class="layui-icon layui-icon-shrink-right"></i></a>
+      </li>
+      <li class="layui-nav-item" lay-unselect>
+        <a ew-event="refresh" title="鍒锋柊"><i class="layui-icon layui-icon-refresh-3"></i></a>
+      </li>
+    </ul>
+    <ul class="layui-nav layui-layout-right">
+<!--      <li class="layui-nav-item" lay-unselect>-->
+<!--        <a ew-event="note" title="渚跨"><i class="layui-icon layui-icon-note"></i></a>-->
+<!--      </li>-->
+      <li class="layui-nav-item" lay-unselect id="licenseShow" style="display: none;user-select: none;">
+        <div style="color: red;">璁稿彲璇佹湁鏁堟湡锛�<span id="licenseDays">29</span>澶�</div>
+      </li>
+      <li class="layui-nav-item layui-hide-xs" lay-unselect>
+        <a ew-event="fullScreen" title="鍏ㄥ睆"><i class="layui-icon layui-icon-screen-full"></i></a>
+      </li>
+      <li class="layui-nav-item" lay-unselect>
+        <a>
+          <cite id="username" style="margin-right: 5px">绠$悊鍛�</cite>
+        </a>
+        <dl class="layui-nav-child">
+          <dd lay-unselect><a ew-href="detail.html?resourceId=8">鍩烘湰璧勬枡</a></dd>
+          <hr>
+          <dd lay-unselect><a id="logout">閫�鍑�</a></dd>
+        </dl>
+      </li>
+      <li class="layui-nav-item" lay-unselect>
+        <a ew-event="theme" title="涓婚"><i class="layui-icon layui-icon-more-vertical"></i></a>
+      </li>
+    </ul>
+  </div>
+
+  <!-- 渚ц竟鏍� -->
+  <div class="layui-side">
+    <div class="layui-side-scroll">
+      <ul id="menu-main" class="layui-nav layui-nav-tree arrow2" lay-filter="admin-side-nav" lay-shrink="_all">
+      </ul>
+    </div>
+  </div>
+
+  <!-- 涓讳綋閮ㄥ垎 -->
+  <div class="layui-body"></div>
+  <!-- 搴曢儴 -->
+  <div class="layui-footer layui-text">
+    copyright 漏 2023 娴欐睙涓壃绔嬪簱鎶�鏈湁闄愬叕鍙� all rights reserved.
+    <span class="pull-right">Version 1.0.0</span>
+  </div>
+
+</div>
+
+<!--鍒濆鍖栧姞杞藉眰-->
+<div class="layuimini-loader">
+  <div class="layuimini-loader-inner"></div>
+</div>
+
+<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../static/layui/layui.js"></script>
+<script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.js"></script>
+<script type="text/javascript" src="../../static/js/common.js"></script>
+<script>
+  console.log('%c 涓壃绔嬪簱骞冲彴 %c 1.0.0','background-color:rgb(53,73,94);color: #fff;border-radius:2px 0 0 2px;padding:2px 4px;','background-color:rgb(25,190,107);color: #fff;border-radius:0 2px 2px 0;padding:2px 4px;font: 9pt "Apercu Regular", Georgia, "Times New Roman", Times, serif;');
+  $(function () {
+    if ("" === localStorage.getItem('token')) {
+      top.location.href = baseUrl + "/login";
+    }
+  });
+
+  layui.config({
+    base: baseUrl + "/static/layui/lay/modules/"
+  }).extend({
+    notice: 'notice/notice',
+  }).use(['index', 'element', 'layer', 'admin', 'notice'], function () {
+    var $ = layui.jquery;
+    var index = layui.index;
+    var element = layui.element;
+    var layer = layui.layer;
+    var admin = layui.admin;
+    var notice = layui.notice;
+
+    var easywebIframeMsg = localStorage.getItem("easyweb-iframe");
+    if (!isEmpty(easywebIframeMsg)) {
+      var easywebIframeObj = JSON.parse(easywebIframeMsg);
+      if (easywebIframeObj.defaultTheme === undefined) {
+        admin.changeTheme("theme-colorful");
+      }
+    }
+
+    $.ajax({
+      url: baseUrl + "/menu/auth",
+      headers: {'token': localStorage.getItem('token')},
+      method: 'POST',
+      // async: false,
+      success: function (res) {
+        // 鍏抽棴鍔犺浇鍔ㄧ敾
+        $('.layuimini-loader').fadeOut();
+        if (res.code === 200) {
+          var tpl = $('#menuTpl').html();
+          var template = Handlebars.compile(tpl);
+          var html = template(res);
+          $("#menu-main").html(html);
+          element.init();
+        } else if (res.code === 403) {
+          top.location.href = baseUrl + "/login";
+        } else {
+          layer.msg(res.msg, {icon: 2});
+        }
+      }
+    });
+
+    $.ajax({
+      url: baseUrl + "/license/getLicenseDays",
+      headers: {'token': localStorage.getItem('token')},
+      method: 'POST',
+      success: function (res) {
+        if (res.code == 200) {
+          let days = res.data
+          if (days <= 30) {
+            $("#licenseShow").show()
+            $("#licenseDays").html(days)
+          }
+        }else {
+          top.location.href = baseUrl + "/login";
+        }
+      }
+    });
+
+    // 榛樿鍔犺浇涓婚〉
+    index.loadHome({
+      menuPath: baseUrl+'/views/admin/wrkMast/wrkMast.html',
+      menuName: '<i class="layui-icon layui-icon-home"></i>'
+    });
+
+    $('#username').text(localStorage.getItem('username'));
+
+    $(document).on('click','#logout', function () {
+      window.location.href = "login.html";
+      localStorage.removeItem('token');
+      localStorage.removeItem('username');
+      admin.closeAllTabs();
+    });
+
+    // 鏇挎崲閫�鍑烘寜閽彉閲�
+    var logout = document.getElementById('logout');
+    var url = logout.getAttribute('href');
+    logout.setAttribute('href', baseUrl + "/login");
+
+  });
+</script>
+<script type="text/html" id="menuTpl">
+  {{#each data}}
+  <li class="layui-nav-item">
+    <a><i class="layui-icon {{this.menuIcon}}"></i>&emsp;<cite>{{this.menu}}</cite></a>
+    <dl class="layui-nav-child">
+      {{#each this.subMenu}}
+      <dd><a lay-href="{{this.code}}?resourceId={{this.id}}">{{this.name}}</a></dd>
+      {{/each}}
+    </dl>
+  </li>
+  {{/each}}
+</script>
+</body>
+</html>
+
+
diff --git a/src/main/webapp/views/admin/locMast/locMast.html b/src/main/webapp/views/admin/locMast/locMast.html
new file mode 100644
index 0000000..f2151e7
--- /dev/null
+++ b/src/main/webapp/views/admin/locMast/locMast.html
@@ -0,0 +1,177 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/cool.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/common.css" media="all">
+    <style>
+        #btn-init {
+            display: none;
+        }
+        .layui-layer-page .layui-layer-content {
+            position: relative;
+            overflow: visible !important;
+        }
+
+    </style>
+</head>
+<body>
+
+<!-- 鎼滅储鏍� -->
+<div id="search-box" class="layui-form layui-card-header">
+    <div class="layui-inline">
+        <div class="layui-input-inline">
+            <input class="layui-input" type="text" name="loc_no" placeholder="搴撲綅鍙�" autocomplete="off">
+        </div>
+    </div>
+    <div class="layui-inline">
+        <div class="layui-input-inline">
+            <input class="layui-input" type="text" name="loc_sts" placeholder="搴撲綅鐘舵��" autocomplete="off">
+        </div>
+    </div>
+    <div class="layui-inline">
+        <div class="layui-input-inline">
+            <input class="layui-input" type="text" name="row1" placeholder="鎺�" autocomplete="off">
+        </div>
+    </div>
+    <div class="layui-inline">
+        <div class="layui-input-inline">
+            <input class="layui-input" type="text" name="bay1" placeholder="鍒�" autocomplete="off">
+        </div>
+    </div>
+    <div class="layui-inline">
+        <div class="layui-input-inline">
+            <input class="layui-input" type="text" name="lev1" placeholder="灞�" autocomplete="off">
+        </div>
+    </div>
+    <!-- 寰呮坊鍔� -->
+    <div id="data-search-btn" class="layui-btn-container layui-form-item" style="display: inline-block">
+        <button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">鎼滅储</button>
+        <button id="reset" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">閲嶇疆</button>
+    </div>
+</div>
+
+<!-- 琛ㄦ牸 -->
+<div class="layui-form">
+    <table class="layui-hide" id="locMast" lay-filter="locMast"></table>
+</div>
+<script type="text/html" id="toolbar">
+    <div class="layui-btn-container">
+        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>
+        <button class="layui-btn layui-btn-sm" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
+        <button class="layui-btn layui-btn-primary" id="btn-init" lay-event="init">鍒濆鍖�</button>
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData">瀵煎嚭</button>
+    </div>
+</script>
+
+<script type="text/html" id="operate">
+<!--    <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">璇︽儏</a>-->
+    <a class="layui-btn layui-btn-xs btn-edit" lay-event="edit">缂栬緫</a>
+</script>
+
+<script type="text/javascript" src="../../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/locMast/locMast.js" charset="utf-8"></script>
+<iframe id="detail-iframe" scrolling="auto" style="display:none;"></iframe>
+
+<!-- 閲嶇疆搴撲綅寮圭獥 -->
+<div id="resetLocDiv" style="margin: 20px 0 10px 30px; display: none">
+    <div class="layui-form layui-form-pane">
+        <!-- 鎺� -->
+        <div class="layui-form-item">
+            <div class="layui-inline">
+                <label class="layui-form-label">璧锋鎺�</label>
+                <div class="layui-input-inline" style="width: 100px;">
+                    <input type="text" name="startRow" autocomplete="off" class="layui-input" lay-verify="required|number">
+                </div>
+                <div class="layui-form-mid">-</div>
+                <div class="layui-input-inline" style="width: 100px;">
+                    <input type="text" name="endRow" autocomplete="off" class="layui-input" lay-verify="required|number">
+                </div>
+            </div>
+        </div>
+        <!-- 鍒� -->
+        <div class="layui-form-item">
+            <div class="layui-inline">
+                <label class="layui-form-label">璧锋鍒�</label>
+                <div class="layui-input-inline" style="width: 100px;">
+                    <input type="text" name="startBay" autocomplete="off" class="layui-input" lay-verify="required|number">
+                </div>
+                <div class="layui-form-mid">-</div>
+                <div class="layui-input-inline" style="width: 100px;">
+                    <input type="text" name="endBay" autocomplete="off" class="layui-input" lay-verify="required|number">
+                </div>
+            </div>
+        </div>
+        <!-- 灞� -->
+        <div class="layui-form-item">
+            <div class="layui-inline">
+                <label class="layui-form-label">璧锋灞�</label>
+                <div class="layui-input-inline" style="width: 100px;">
+                    <input type="text" name="startLev" autocomplete="off" class="layui-input" lay-verify="required|number">
+                </div>
+                <div class="layui-form-mid">-</div>
+                <div class="layui-input-inline" style="width: 100px;">
+                    <input type="text" name="endLev" autocomplete="off" class="layui-input" lay-verify="required|number">
+                </div>
+            </div>
+        </div>
+        <div class="layui-form-item">
+            <label class="layui-form-label">鍫嗗灈鏈烘暟閲�</label>
+            <div class="layui-input-inline">
+                <input type="text" name="crnAmount" lay-verify="required|number" autocomplete="off" class="layui-input">
+            </div>
+        </div>
+        <!-- 搴撲綅绫诲瀷 -->
+        <div class="layui-form-item">
+            <label class="layui-form-label">楂樹綆绫诲瀷</label>
+            <div class="layui-input-inline">
+                <select name="locType1">
+                    <option style="display: none"></option>
+                    <option value="0">鏈煡</option>
+                    <option value="1">浣庡簱浣�</option>
+                    <option value="2">楂樺簱浣�</option>
+                </select>
+            </div>
+        </div>
+        <div class="layui-form-item">
+            <label class="layui-form-label">瀹界獎绫诲瀷</label>
+            <div class="layui-input-inline">
+                <select name="locType2">
+                    <option style="display: none"></option>
+                    <option value="0">鏈煡</option>
+                    <option value="1">绐勫簱浣�</option>
+                    <option value="2">瀹藉簱浣�</option>
+                </select>
+            </div>
+        </div>
+        <div class="layui-form-item">
+            <label class="layui-form-label">杞婚噸绫诲瀷</label>
+            <div class="layui-input-inline">
+                <select name="locType3">
+                    <option style="display: none"></option>
+                    <option value="0">鏈煡</option>
+                    <option value="1">杞诲簱浣�</option>
+                    <option value="2">閲嶅簱浣�</option>
+                </select>
+            </div>
+        </div>
+        <div id="prompt" style="text-indent: 10px;">
+            <span class="not-null">鍒濆鍖栧簱浣嶅悗灏嗗垹闄ゅ簱瀛樻槑缁嗭紝璇疯皑鎱庢搷浣滐紒</span>
+        </div>
+        <!-- 鎸夐挳 -->
+        <div style="text-align: center; margin-top: 20px">
+            <button class="layui-btn layui-btn-radius layui-btn-normal" id="initDo" lay-submit lay-filter="initDo">纭畾</button>
+        </div>
+    </div>
+</div>
+</body>
+</html>
+
diff --git a/src/main/webapp/views/admin/locMast/locMast_detail.html b/src/main/webapp/views/admin/locMast/locMast_detail.html
new file mode 100644
index 0000000..a4de168
--- /dev/null
+++ b/src/main/webapp/views/admin/locMast/locMast_detail.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/cool.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/common.css" media="all">
+</head>
+<body>
+
+<!-- 璇︽儏 -->
+<div id="data-detail" class="layer_self_wrap">
+    <form id="detail" class="layui-form" style="text-align: center">
+        <div class="layui-inline"  style="width:80%;">
+            <label class="layui-form-label"><span class="not-null">*</span>搴� 浣� 鍙凤細</label>
+            <div class="layui-input-inline">
+                <input id="locNo" class="layui-input" type="text" onkeyup="check(this.id, 'locMast')">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;display: none">
+            <label class="layui-form-label"><span class="not-null">*</span>锛�</label>
+            <div class="layui-input-inline">
+                <input id="locType" class="layui-input" type="text" >
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:80%; display: none">
+            <label class="layui-form-label">搴撲綅绫诲瀷锛�</label>
+            <div class="layui-input-inline cool-auto-complete">
+                <input id="whsType" class="layui-input" type="text" style="display: none">
+                <input id="whsType$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" onfocus=this.blur()>
+                <div class="cool-auto-complete-window">
+                    <input class="cool-auto-complete-window-input" data-key="basWhsQueryBywhsType" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                    <select class="cool-auto-complete-window-select" data-key="basWhsQueryBywhsTypeSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                    </select>
+                </div>
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:80%;">
+            <label class="layui-form-label"><span class="not-null">*</span>搴撲綅鐘舵�侊細</label>
+            <div class="layui-input-inline cool-auto-complete">
+                <input id="locSts" class="layui-input" type="text" style="display: none">
+                <input id="locSts$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" onfocus=this.blur()>
+                <div class="cool-auto-complete-window">
+                    <input class="cool-auto-complete-window-input" data-key="basLocStsQueryBylocSts" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                    <select class="cool-auto-complete-window-select" data-key="basLocStsQueryBylocStsSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                    </select>
+                </div>
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:80%;">
+            <label class="layui-form-label">鎺掞細</label>
+            <div class="layui-input-inline">
+                <input id="row1" class="layui-input" type="text" autocomplete="off" disabled="disabled">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:80%;">
+            <label class="layui-form-label">鍒楋細</label>
+            <div class="layui-input-inline">
+                <input id="bay1" class="layui-input" type="text" autocomplete="off" disabled="disabled">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:80%;">
+            <label class="layui-form-label">灞傦細</label>
+            <div class="layui-input-inline">
+                <input id="lev1" class="layui-input" type="text" autocomplete="off" disabled="disabled">
+            </div>
+        </div>
+
+
+        <div id="data-detail-btn" class="layui-btn-container layui-form-item">
+            <div id="data-detail-submit-save" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="save">淇濆瓨</div>
+            <div id="data-detail-submit-edit" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="edit">淇敼</div>
+            <div id="data-detail-close" type="button" class="layui-btn" lay-submit lay-filter="close">鍏抽棴</div>
+        </div>
+    </form>
+</div>
+</body>
+<script type="text/javascript" src="../../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/locMast/locMast.js" charset="utf-8"></script>
+</html>
+
diff --git a/src/main/webapp/views/admin/operateLog/operateLog.html b/src/main/webapp/views/admin/operateLog/operateLog.html
new file mode 100644
index 0000000..f77d75d
--- /dev/null
+++ b/src/main/webapp/views/admin/operateLog/operateLog.html
@@ -0,0 +1,70 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/cool.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/common.css" media="all">
+</head>
+<body>
+
+<!-- 鎼滅储鏍� -->
+<div id="search-box" class="layui-form layui-card-header">
+    <div class="layui-inline">
+        <div class="layui-input-inline">
+            <input class="layui-input" type="text" name="id" placeholder="缂栧彿" autocomplete="off">
+        </div>
+    </div>
+    <div class="layui-inline">
+        <div class="layui-input-inline cool-auto-complete">
+            <input id="userId" class="layui-input" name="user_id" type="text" placeholder="璇疯緭鍏�" autocomplete="off" style="display: none">
+            <input id="userUsername" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="鐢ㄦ埛" onfocus=this.blur()>
+            <div class="cool-auto-complete-window">
+                <input class="cool-auto-complete-window-input" data-key="userQuery" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                <select class="cool-auto-complete-window-select" data-key="userQuerySelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                </select>
+            </div>
+        </div>
+    </div>
+    <!-- 鏃ユ湡鑼冨洿 -->
+    <div class="layui-inline" style="width: 300px">
+        <div class="layui-input-inline">
+            <input class="layui-input layui-laydate-range" name="create_time" type="text" placeholder="璧峰鏃堕棿 - 缁堟鏃堕棿" autocomplete="off" style="width: 300px">
+        </div>
+    </div>
+    <!-- 寰呮坊鍔� -->
+    <div id="data-search-btn" class="layui-btn-container layui-form-item">
+        <button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">鎼滅储</button>
+        <button id="reset" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">閲嶇疆</button>
+    </div>
+</div>
+
+<!-- 琛ㄦ牸 -->
+<table class="layui-hide" id="operateLog" lay-filter="operateLog"></table>
+<script type="text/html" id="toolbar">
+    <div class="layui-btn-container">
+<!--        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>-->
+<!--        <button class="layui-btn layui-btn-sm" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>-->
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="margin-top: 10px">瀵煎嚭</button>
+    </div>
+</script>
+
+<script type="text/html" id="operate">
+    <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">璇︽儏</a>
+</script>
+
+<script type="text/javascript" src="../../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/operateLog/operateLog.js" charset="utf-8"></script>
+
+<iframe id="detail-iframe" scrolling="auto" style="display:none;"></iframe>
+
+</body>
+</html>
+
diff --git a/src/main/webapp/views/admin/operateLog/operateLog_detail.html b/src/main/webapp/views/admin/operateLog/operateLog_detail.html
new file mode 100644
index 0000000..2875cc2
--- /dev/null
+++ b/src/main/webapp/views/admin/operateLog/operateLog_detail.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/cool.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/common.css" media="all">
+</head>
+<body>
+
+<!-- 璇︽儏 -->
+<div id="data-detail" class="layer_self_wrap">
+    <form id="detail" class="layui-form">
+        <div class="layui-inline"  style="display: none">
+            <label class="layui-form-label"><span class="not-null">*</span>缂栥��銆�鍙凤細</label>
+            <div class="layui-input-inline">
+                <input id="id" class="layui-input" type="text" placeholder="缂栧彿">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label"><span class="not-null">*</span>璁块棶鍦板潃锛�</label>
+            <div class="layui-input-inline">
+                <input id="action" class="layui-input" type="text" placeholder="璁块棶鍦板潃" lay-verify="required" >
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label"><span class="not-null">*</span>鐢ㄣ��銆�鎴凤細</label>
+            <div class="layui-input-inline cool-auto-complete">
+                <input id="userId" class="layui-input" type="text" placeholder="鐢ㄦ埛" lay-verify="required"  style="display: none">
+                <input id="userUsername" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="鐢ㄦ埛" onfocus=this.blur()>
+                <div class="cool-auto-complete-window">
+                    <input class="cool-auto-complete-window-input" data-key="userQuery" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                    <select class="cool-auto-complete-window-select" data-key="userQuerySelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                    </select>
+                </div>
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label"><span class="not-null">*</span>瀹㈡埛绔疘P锛�</label>
+            <div class="layui-input-inline">
+                <input id="ip" class="layui-input" type="text" placeholder="瀹㈡埛绔疘P" lay-verify="required" >
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label"><span class="not-null">*</span>璇锋眰鏁版嵁锛�</label>
+            <div class="layui-input-inline">
+                <input id="request" class="layui-input" type="text" placeholder="璇锋眰鏁版嵁" lay-verify="required" >
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label"><span class="not-null">*</span>鍝嶅簲鏁版嵁锛�</label>
+            <div class="layui-input-inline">
+                <input id="response" class="layui-input" type="text" placeholder="鍝嶅簲鏁版嵁" lay-verify="required" >
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label"><span class="not-null">*</span>娣诲姞鏃堕棿锛�</label>
+            <div class="layui-input-inline">
+                <input id="createTime$" class="layui-input" type="text" placeholder="娣诲姞鏃堕棿" lay-verify="required"  autocomplete="off">
+            </div>
+        </div>
+
+
+        <hr class="layui-bg-gray">
+
+        <div id="data-detail-btn" class="layui-btn-container layui-form-item">
+            <div id="data-detail-submit" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="edit">淇濆瓨</div>
+            <div id="data-detail-close" type="button" class="layui-btn" lay-submit lay-filter="close">鍏抽棴</div>
+        </div>
+
+        <div id="prompt">
+            娓╅Θ鎻愮ず锛氳浠旂粏濉啓鐩稿叧淇℃伅锛�<span class="extrude"><span class="not-null">*</span> 涓哄繀濉�夐」銆�</span>
+        </div>
+    </form>
+</div>
+</body>
+<script type="text/javascript" src="../../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/operateLog/operateLog.js" charset="utf-8"></script>
+</html>
+
diff --git a/src/main/webapp/views/admin/password.html b/src/main/webapp/views/admin/password.html
new file mode 100644
index 0000000..faf8b1a
--- /dev/null
+++ b/src/main/webapp/views/admin/password.html
@@ -0,0 +1,146 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
+    <style>
+        #password-div {
+            padding: 20px 20px 20px 13px;
+        }
+        .layui-form-item {
+            margin-bottom: 8px;
+        }
+        .layui-form-item .layui-input-inline {
+            margin: 0 0 10px 100px
+        }
+        .layui-form-label {
+            color: #999!important;;
+            padding: 9px 0;
+        }
+        #password-btn {
+            padding-top: 5px;
+            margin-left: 40px;
+            display: flex;
+            justify-content: center;
+            align-items: center;
+        }
+        #password-btn.layui-btn-container .layui-btn{
+            margin-right: 30px;
+        }
+    </style>
+</head>
+<body id="body">
+<div id="password-div">
+    <div class="layui-form" lay-filter="">
+        <div class="layui-form-item">
+            <label class="layui-form-label">褰撳墠瀵嗙爜</label>
+            <div class="layui-input-inline">
+                <input id="oldPassword" type="password" class="layui-input" lay-verify="checkPwd" lay-vertype="tips" autocomplete="off">
+            </div>
+        </div>
+        <div class="layui-form-item">
+            <label class="layui-form-label">鏂板瘑鐮�</label>
+            <div class="layui-input-inline">
+                <input type="password"  class="layui-input" id="password" lay-verify="newPwd" lay-vertype="tips" autocomplete="off">
+            </div>
+        </div>
+        <div class="layui-form-item">
+            <label class="layui-form-label">纭鏂板瘑鐮�</label>
+            <div class="layui-input-inline">
+                <input type="password" class="layui-input" id="rePassword" lay-verify="rePwd" lay-vertype="tips" autocomplete="off">
+            </div>
+        </div>
+        <hr class="layui-bg-gray">
+        <div id="password-btn" class="layui-form-item layui-btn-container">
+            <div id="password-submit" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="savePwd">淇濆瓨</div>
+            <div id="password-close" type="button" class="layui-btn" lay-submit lay-filter="close">鍏抽棴</div>
+        </div>
+    </div>
+</div>
+</body>
+<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../static/js/tools/md5.js"></script>
+<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
+<script src="../../static/layui/layui.js"></script>
+<script>
+    layui.use(['form'], function() {
+        var form = layui.form,
+            layer = layui.layer,
+            $ = layui.jquery;
+
+        form.verify({
+            checkPwd: function(val) {
+                if (val === ""){
+                    // return "褰撳墠瀵嗙爜涓嶈兘涓虹┖";
+                }
+                if (parent.$('#password').val() !== hex_md5(val)) {
+                    return "瀵嗙爜涓嶅尮閰�";
+                }
+            },
+            newPwd: function (val) {
+                if (val === ""){
+                    return "鏂板瘑鐮佷笉鑳戒负绌�";
+                }
+                if (val.length < 4) {
+                    return "涓嶈兘灏戜簬4涓瓧绗�";
+                }
+                if (parent.$('#password').val() === hex_md5(val)) {
+                    return "涓庢棫瀵嗙爜涓嶈兘鐩稿悓";
+                }
+            },
+            rePwd: function (val) {
+                if ($('#password').val() !== val){
+                    return "瀵嗙爜涓嶄竴鑷�";
+                }
+            }
+        });
+
+        form.on('submit(savePwd)', function (data) {
+            var user = {
+                id: parent.$('#id').val(),
+                password: hex_md5($('#password').val()),
+            };
+            $.ajax({
+                url: baseUrl+"/user/update/auth",
+                headers: {'token': localStorage.getItem('token')},
+                data: user,
+                method: 'POST',
+                success: function (res) {
+                    if (res.code === 200){
+                        parent.layer.close();
+                        layer.confirm('瀵嗙爜淇敼鎴愬姛锛岃閲嶆柊鐧诲綍',{
+                            btn: ['纭畾'],
+                            btn1: function(){
+                                localStorage.removeItem("token");
+                                top.location.href = baseUrl+"/";
+                            },
+                            cancel: function(){
+                                localStorage.removeItem("token");
+                                top.location.href = baseUrl+"/";
+                            },
+                            closeBtn: 0,
+                            shadeClose: false,
+                        })
+                    } else if (res.code === 403){
+                        top.location.href = baseUrl+"/";
+                    } else {
+                        layer.msg(res.msg);
+                    }
+                }
+            });
+            return false;
+        });
+
+
+    });
+
+    // 鍏抽棴鍔ㄤ綔
+    $(document).on('click','#password-close', function () {
+        parent.layer.closeAll();
+    });
+</script>
+</html>
\ No newline at end of file
diff --git a/src/main/webapp/views/admin/permission/permission.html b/src/main/webapp/views/admin/permission/permission.html
new file mode 100644
index 0000000..f55c0c0
--- /dev/null
+++ b/src/main/webapp/views/admin/permission/permission.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/cool.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/common.css" media="all">
+</head>
+<body>
+
+<!-- 鎼滅储鏍� -->
+<div id="search-box" class="layui-form layui-card-header">
+    <div class="layui-inline">
+        <div class="layui-input-inline">
+            <input class="layui-input" type="text" name="id" placeholder="缂栧彿" autocomplete="off">
+        </div>
+    </div>
+    <div class="layui-inline">
+        <div class="layui-input-inline cool-auto-complete">
+            <input id="resourceId" class="layui-input" name="resource_id" type="text" placeholder="璇疯緭鍏�" autocomplete="off" style="display: none">
+            <input id="resourceName" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="鎵�灞炶彍鍗�" onfocus=this.blur()>
+            <div class="cool-auto-complete-window">
+                <input class="cool-auto-complete-window-input" data-key="resourceQuery" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                <select class="cool-auto-complete-window-select" data-key="resourceQuerySelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                </select>
+            </div>
+        </div>
+    </div>
+
+    <!-- 寰呮坊鍔� -->
+    <div id="data-search-btn" class="layui-btn-container layui-form-item">
+        <button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">鎼滅储</button>
+        <button id="reset" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">閲嶇疆</button>
+    </div>
+</div>
+
+<!-- 琛ㄦ牸 -->
+<table class="layui-hide" id="permission" lay-filter="permission"></table>
+<script type="text/html" id="toolbar">
+    <div class="layui-btn-container">
+        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>
+        <button class="layui-btn layui-btn-sm" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData">瀵煎嚭</button>
+    </div>
+</script>
+
+<script type="text/html" id="operate">
+    <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">璇︽儏</a>
+    <a class="layui-btn layui-btn-xs btn-edit" lay-event="edit">缂栬緫</a>
+</script>
+
+<script type="text/javascript" src="../../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/permission/permission.js" charset="utf-8"></script>
+
+<iframe id="detail-iframe" scrolling="auto" style="display:none;"></iframe>
+
+</body>
+</html>
+
diff --git a/src/main/webapp/views/admin/permission/permission_detail.html b/src/main/webapp/views/admin/permission/permission_detail.html
new file mode 100644
index 0000000..ebbedbf
--- /dev/null
+++ b/src/main/webapp/views/admin/permission/permission_detail.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/cool.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/common.css" media="all">
+</head>
+<body>
+
+<!-- 璇︽儏 -->
+<div id="data-detail" class="layer_self_wrap">
+    <form id="detail" class="layui-form">
+        <div class="layui-inline"  style="display: none">
+            <label class="layui-form-label"><span class="not-null">*</span>缂栥��銆�鍙凤細</label>
+            <div class="layui-input-inline">
+                <input id="id" class="layui-input" type="text" placeholder="缂栧彿">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label"><span class="not-null">*</span>鏉冮檺鍚嶇О锛�</label>
+            <div class="layui-input-inline">
+                <input id="name" class="layui-input" type="text" placeholder="鏉冮檺鍚嶇О" lay-verify="required" >
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label"><span class="not-null">*</span>鎺ュ彛鍦板潃锛�</label>
+            <div class="layui-input-inline">
+                <input id="action" class="layui-input" type="text" placeholder="鎺ュ彛鍦板潃" lay-verify="required" >
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">鎵�灞炶彍鍗曪細</label>
+            <div class="layui-input-inline cool-auto-complete">
+                <input id="resourceId" class="layui-input" type="text" placeholder="鎵�灞炶彍鍗�" style="display: none">
+                <input id="resourceName" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="鎵�灞炶彍鍗�" onfocus=this.blur()>
+                <div class="cool-auto-complete-window">
+                    <input class="cool-auto-complete-window-input" data-key="resourceQuery" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                    <select class="cool-auto-complete-window-select" data-key="resourceQuerySelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                    </select>
+                </div>
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label"><span class="not-null">*</span>鐘躲��銆�鎬侊細</label>
+            <div class="layui-input-inline">
+                <select id="status" lay-verify="required">
+                    <option value="" style="display: none"></option>
+                    <option value="1">姝e父</option>
+                    <option value="0">绂佺敤</option>
+                </select>
+            </div>
+        </div>
+
+
+        <hr class="layui-bg-gray">
+
+        <div id="data-detail-btn" class="layui-btn-container layui-form-item">
+            <div id="data-detail-submit" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="edit">淇濆瓨</div>
+            <div id="data-detail-close" type="button" class="layui-btn" lay-submit lay-filter="close">鍏抽棴</div>
+        </div>
+
+        <div id="prompt">
+            娓╅Θ鎻愮ず锛氳浠旂粏濉啓鐩稿叧淇℃伅锛�<span class="extrude"><span class="not-null">*</span> 涓哄繀濉�夐」銆�</span>
+        </div>
+    </form>
+</div>
+</body>
+<script type="text/javascript" src="../../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/permission/permission.js" charset="utf-8"></script>
+</html>
+
diff --git a/src/main/webapp/views/admin/resource/resource.html b/src/main/webapp/views/admin/resource/resource.html
new file mode 100644
index 0000000..d414c44
--- /dev/null
+++ b/src/main/webapp/views/admin/resource/resource.html
@@ -0,0 +1,309 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/admin.css?v=318" media="all">
+    <link rel="stylesheet" href="../../../static/css/cool.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/common.css" media="all">
+    <style>
+        #detail {
+            padding: 25px 30px 0 0;
+        }
+        .ew-tree-table-box {
+            height: 100%;
+        }
+    </style>
+</head>
+<body>
+
+
+<!-- 姝f枃寮�濮� -->
+<div class="layui-fluid">
+    <div class="layui-card">
+        <div class="layui-card-body">
+            <!-- 鏁版嵁琛ㄦ牸 -->
+            <table id="resource"></table>
+        </div>
+    </div>
+</div>
+
+<script type="text/html" id="operate">
+    <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">淇敼</a>
+    <a class="layui-btn layui-btn-danger layui-btn-xs btn-del" lay-event="del">鍒犻櫎</a>
+</script>
+
+<!-- 琛ㄥ崟寮圭獥 -->
+<script type="text/html" id="editDialog">
+    <form id="detail" lay-filter="detail" class="layui-form" style="margin: 0">
+        <input name="id" type="hidden">
+        <input name="uuid" type="hidden">
+        <input name="level" type="hidden">
+        <div class="layui-row">
+
+            <div class="layui-col-md6">
+
+                <div class="layui-form-item">
+                    <label class="layui-form-label">涓婄骇鑿滃崟</label>
+                    <div class="layui-input-block">
+                        <div id="resourceParentSel" class="ew-xmselect-tree"></div>
+                    </div>
+                </div>
+
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">鑿滃崟缂栫爜</label>
+                    <div class="layui-input-block">
+                        <input name="code" placeholder="璇疯緭鍏ヨ彍鍗曠紪鐮�" class="layui-input" lay-vertype="tips" lay-verify="required" required="">
+                    </div>
+                </div>
+
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">绫诲瀷</label>
+                    <div class="layui-input-block">
+                        <select name="level" lay-vertype="tips" lay-verify="required" required="">
+                            <option value="">璇烽�夋嫨绫诲瀷</option>
+                            <option value="1">涓�绾ц彍鍗�</option>
+                            <option value="2">浜岀骇鑿滃崟</option>
+                            <option value="3">鎸夐挳</option>
+                        </select>
+                    </div>
+                </div>
+
+            </div>
+
+            <div class="layui-col-md6">
+
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">鑿滃崟鍚嶇О</label>
+                    <div class="layui-input-block">
+                        <input name="name" placeholder="璇疯緭鍏ヨ彍鍗曞悕绉�" class="layui-input" lay-vertype="tips" lay-verify="required" required="">
+                    </div>
+                </div>
+
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鎺掑簭</label>
+                    <div class="layui-input-block">
+                        <input name="sort" placeholder="璇疯緭鍏ユ帓搴�" class="layui-input" lay-verify="number">
+                    </div>
+                </div>
+
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">鐘舵��</label>
+                    <div class="layui-input-block">
+                        <select name="status" lay-vertype="tips" lay-verify="required" required="">
+                            <option value="">璇烽�夋嫨鐘舵��</option>
+                            <option value="1">姝e父</option>
+                            <option value="0">绂佺敤</option>
+                        </select>
+                    </div>
+                </div>
+
+            </div>
+        </div>
+        <hr class="layui-bg-gray">
+        <div class="layui-form-item text-right">
+            <button class="layui-btn" lay-filter="editSubmit" lay-submit="">淇濆瓨</button>
+            <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+        </div>
+    </form>
+</script>
+<script type="text/html" id="typeTpl">
+    {{# if( d.level === 1 ){ }}
+    <span name="level" class="layui-badge layui-badge-green">鑿滃崟</span>
+    {{# } else if(d.level === 2){ }}
+    <span name="level" class="layui-badge layui-badge-green">鑿滃崟</span>
+    {{# } else if(d.level === 3){ }}
+    <span name="level" class="layui-badge layui-badge-gray">鎸夐挳</span>
+    {{# } }}
+</script>
+<script type="text/javascript" src="../../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/cool.js" charset="utf-8"></script>
+
+<script>
+    layui.config({
+        base: baseUrl + "/static/layui/lay/modules/"
+    }).use(['form','treeTable', 'admin', 'xmSelect'], function() {
+        var $ = layui.jquery;
+        var layer = layui.layer;
+        var form = layui.form;
+        var admin = layui.admin;
+        var treeTable = layui.treeTable;
+        var xmSelect = layui.xmSelect;
+        var tbDataList = [];
+
+        var insTb = treeTable.render({
+            elem: '#resource',
+            url: baseUrl+'/resource/tree/auth',
+            headers: {token: localStorage.getItem('token')},
+            height: 'full-200',
+            toolbar: ['<p>',
+                '<button lay-event="add" class="layui-btn layui-btn-sm icon-btn"><i class="layui-icon">&#xe654;</i>娣诲姞</button>&nbsp;',
+                '<button lay-event="del" class="layui-btn layui-btn-sm layui-btn-danger icon-btn"><i class="layui-icon">&#xe640;</i>鍒犻櫎</button>',
+                '</p>'].join(''),
+            tree: {
+                iconIndex: 2,           // 鎶樺彔鍥炬爣鏄剧ず鍦ㄧ鍑犲垪
+                isPidData: true,        // 鏄惁鏄痠d銆乸id褰㈠紡鏁版嵁
+                idName: 'id',           // id瀛楁鍚嶇О
+                pidName: 'resourceId'     // pid瀛楁鍚嶇О
+            },
+            cols: [[
+                {type: 'checkbox', fixed: 'left'}
+                ,{field: 'id', title: 'ID', sort: true,align: 'center', fixed: 'left', width: 80, hide: true}
+                ,{field: 'name', align: 'left',title: '鑿滃崟鍚嶇О'}
+                ,{field: 'code', align: 'center',title: '鑿滃崟缂栫爜'}
+                // ,{field: 'resourceName', align: 'center',title: '鐖剁骇鑿滃崟'}
+                // ,{field: 'level$', align: 'center',title: '鑿滃崟绛夌骇'}
+                ,{field: 'type', align: 'center',title: '绫诲瀷', templet: '#typeTpl', width: 120}
+                ,{field: 'sort', align: 'center',title: '鎺掑簭'}
+
+                ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:150}
+            ]],
+            done: function (data) {
+                $('.ew-tree-table-box').css('height', '100%');
+                // insTb.expandAll();
+                tbDataList = data;
+                limit();
+            }
+        });
+
+        /* 琛ㄦ牸澶村伐鍏锋爮鐐瑰嚮浜嬩欢 */
+        treeTable.on('toolbar(resource)', function (obj) {
+            if (obj.event === 'add') { // 娣诲姞
+                showEditModel();
+            } else if (obj.event === 'del') { // 鍒犻櫎
+                var checkRows = insTb.checkStatus();
+                if (checkRows.length === 0) {
+                    layer.msg('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁', {icon: 2});
+                    return;
+                }
+                var ids = checkRows.map(function (d) {
+                    if (!d.LAY_INDETERMINATE) {
+                        return d.id;
+                    } else {
+                        return null;
+                    }
+                });
+                doDel({ids: ids});
+            }
+        });
+
+        /* 琛ㄦ牸鎿嶄綔鍒楃偣鍑讳簨浠� */
+        treeTable.on('tool(resource)', function (obj) {
+            if (obj.event === 'edit') { // 淇敼
+                showEditModel(obj.data);
+            } else if (obj.event === 'del') { // 鍒犻櫎
+                doDel(obj);
+            }
+        });
+
+        /* 鏄剧ず琛ㄥ崟寮圭獥 */
+        function showEditModel(mData) {
+            admin.open({
+                type: 1,
+                area: '600px',
+                title: (mData ? '淇敼' : '娣诲姞') + '鏉冮檺',
+                content: $('#editDialog').html(),
+                success: function (layero, dIndex) {
+                    // 鍥炴樉琛ㄥ崟鏁版嵁
+                    form.val('detail', mData);
+                    // 琛ㄥ崟鎻愪氦浜嬩欢
+                    form.on('submit(editSubmit)', function (data) {
+                        data.field.resourceId = insXmSel.getValue('valueStr');
+                        var loadIndex = layer.load(2);
+                        $.ajax({
+                            url: baseUrl+"/resource/"+(mData?'update':'add')+"/auth",
+                            headers: {'token': localStorage.getItem('token')},
+                            data: data.field,
+                            method: 'POST',
+                            success: function (res) {
+                                layer.close(loadIndex);
+                                if (res.code === 200){
+                                    layer.close(dIndex);
+                                    layer.msg(res.msg, {icon: 1});
+                                    insTb.refresh();
+                                    setTimeout(function () {
+                                        insTb.expand(data.field.resourceId);
+                                    }, 200)
+                                } else if (res.code === 403){
+                                    top.location.href = baseUrl+"/";
+                                }else {
+                                    layer.msg(res.msg, {icon: 2});
+                                }
+                            }
+                        })
+                        return false;
+                    });
+
+                    // 娓叉煋涓嬫媺鏍�
+                    var insXmSel = xmSelect.render({
+                        el: '#resourceParentSel',
+                        height: '250px',
+                        data: insTb.options.data,
+                        initValue: mData&&mData.resourceId!=null ? [mData.resourceId] : [],
+                        model: {label: {type: 'text'}},
+                        prop: {
+                            name: 'name',
+                            value: 'id'
+                        },
+                        radio: true,
+                        clickClose: true,
+                        tree: {
+                            show: true,
+                            indent: 15,
+                            strict: false,
+                            expandedKeys: false
+                        }
+                    });
+                    // 寮圭獥涓嶅嚭鐜版粴鍔ㄦ潯
+                    $(layero).children('.layui-layer-content').css('overflow', 'visible');
+                    layui.form.render('select');
+                }
+            });
+        }
+
+        /* 鍒犻櫎 */
+        function doDel(obj) {
+            layer.confirm('纭畾瑕佸垹闄ら�変腑鏁版嵁鍚楋紵', {
+                skin: 'layui-layer-admin',
+                shade: .1
+            }, function (i) {
+                layer.close(i);
+                var loadIndex = layer.load(2);
+                var ids;
+                if (obj.data) {
+                    ids = [];
+                    ids[0] = obj.data.id;
+                } else {
+                    ids = obj.ids;
+                }
+                $.ajax({
+                    url: baseUrl+"/resource/delete/auth",
+                    headers: {'token': localStorage.getItem('token')},
+                    data: {ids: ids},
+                    method: 'POST',
+                    success: function (res) {
+                        layer.close(loadIndex);
+                        if (res.code === 200){
+                            layer.msg(res.msg, {icon: 1});
+                            insTb.refresh();
+                        } else if (res.code === 403){
+                            top.location.href = baseUrl+"/";
+                        } else {
+                            layer.msg(res.msg, {icon: 2});
+                        }
+                    }
+                })
+            });
+        }
+
+    });
+</script>
+</body>
+</html>
+
diff --git a/src/main/webapp/views/admin/role/role.html b/src/main/webapp/views/admin/role/role.html
new file mode 100644
index 0000000..279392a
--- /dev/null
+++ b/src/main/webapp/views/admin/role/role.html
@@ -0,0 +1,60 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/cool.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/common.css" media="all">
+</head>
+<body>
+
+<!-- 鎼滅储鏍� -->
+<div id="search-box" class="layui-form layui-card-header">
+    <div class="layui-inline" >
+        <div class="layui-input-inline cool-auto-complete">
+            <input id="leader" name="leader" class="layui-input" type="text" style="display: none">
+            <input id="leader$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="涓婄骇" onfocus=this.blur()>
+            <div class="cool-auto-complete-window">
+                <input class="cool-auto-complete-window-input" data-key="roleQueryByleader" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                <select class="cool-auto-complete-window-select" data-key="roleQueryByleaderSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                </select>
+            </div>
+        </div>
+    </div>
+    <!-- 寰呮坊鍔� -->
+    <div id="data-search-btn" class="layui-btn-container layui-form-item">
+        <button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">鎼滅储</button>
+        <button id="reset" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">閲嶇疆</button>
+    </div>
+</div>
+
+<!-- 琛ㄦ牸 -->
+<table class="layui-hide" id="role" lay-filter="role"></table>
+<script type="text/html" id="toolbar">
+    <div class="layui-btn-container">
+        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>
+        <button class="layui-btn layui-btn-sm" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData">瀵煎嚭</button>
+    </div>
+</script>
+
+<script type="text/html" id="operate">
+    <a class="layui-btn layui-btn-xs layui-btn-warm" lay-event="power">鏉冮檺</a>
+    <a class="layui-btn layui-btn-xs btn-edit" lay-event="edit">缂栬緫</a>
+</script>
+
+<script type="text/javascript" src="../../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/role/role.js" charset="utf-8"></script>
+
+<iframe id="detail-iframe" scrolling="auto" style="display:none;"></iframe>
+
+</body>
+</html>
+
diff --git a/src/main/webapp/views/admin/role/role_detail.html b/src/main/webapp/views/admin/role/role_detail.html
new file mode 100644
index 0000000..f2d638d
--- /dev/null
+++ b/src/main/webapp/views/admin/role/role_detail.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/cool.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/common.css" media="all">
+</head>
+<body>
+
+<!-- 璇︽儏 -->
+<div id="data-detail" class="layer_self_wrap">
+    <form id="detail" class="layui-form">
+        <div class="layui-inline"  style="display: none">
+            <label class="layui-form-label"><span class="not-null">*</span>缂栥��銆�鍙凤細</label>
+            <div class="layui-input-inline">
+                <input id="id" class="layui-input" type="text" placeholder="缂栧彿">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label"><span class="not-null">*</span>缂栥��銆�鐮侊細</label>
+            <div class="layui-input-inline">
+                <input id="code" class="layui-input" type="text" lay-verify="required" >
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label"><span class="not-null">*</span>鍚嶃��銆�绉帮細</label>
+            <div class="layui-input-inline">
+                <input id="name" class="layui-input" type="text" lay-verify="required" >
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">涓娿��銆�绾э細</label>
+            <div class="layui-input-inline cool-auto-complete">
+                <input id="leader" class="layui-input" type="text" style="display: none">
+                <input id="leader$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏�..." onfocus=this.blur()>
+                <div class="cool-auto-complete-window">
+                    <input class="cool-auto-complete-window-input" data-key="roleQueryByleader" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                    <select class="cool-auto-complete-window-select" data-key="roleQueryByleaderSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                    </select>
+                </div>
+            </div>
+        </div>
+        <div class="layui-inline"  style="display: none; width:31%;">
+            <label class="layui-form-label">瑙掕壊绛夌骇锛�</label>
+            <div class="layui-input-inline">
+                <select id="level">
+                    <option value="" style="display: none"></option>
+                    <option value="1">涓�绾�</option>
+                    <option value="2">浜岀骇</option>
+                    <option value="3">涓夌骇</option>
+                    <option value="4">鍥涚骇</option>
+                    <option value="5">浜旂骇</option>
+                </select>
+            </div>
+        </div>
+
+
+        <hr class="layui-bg-gray">
+
+        <div id="data-detail-btn" class="layui-btn-container layui-form-item">
+            <div id="data-detail-submit" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="edit">淇濆瓨</div>
+            <div id="data-detail-close" type="button" class="layui-btn" lay-submit lay-filter="close">鍏抽棴</div>
+        </div>
+
+        <div id="prompt">
+            娓╅Θ鎻愮ず锛氳浠旂粏濉啓鐩稿叧淇℃伅锛�<span class="extrude"><span class="not-null">*</span> 涓哄繀濉�夐」銆�</span>
+        </div>
+    </form>
+</div>
+</body>
+<script type="text/javascript" src="../../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/role/role.js" charset="utf-8"></script>
+</html>
+
diff --git a/src/main/webapp/views/admin/role/role_power_detail.html b/src/main/webapp/views/admin/role/role_power_detail.html
new file mode 100644
index 0000000..95dec56
--- /dev/null
+++ b/src/main/webapp/views/admin/role/role_power_detail.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title>鏉冮檺绠$悊</title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/common.css" media="all">
+</head>
+<style>
+    #power {
+        margin-left: 20px;
+    }
+    .layui-tree.layui-form.layui-tree-line {
+        margin-left: 30px
+    }
+</style>
+<body>
+
+<!-- 鏉冮檺鏍戝舰鍥� -->
+    <form id="power" class="layui-form">
+        <div id="power-tree"></div>
+        <div id="data-detail-btn" class="layui-btn-container layui-form-item">
+            <div id="data-detail-submit" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="save">淇濆瓨</div>
+            <div id="data-detail-close" type="button" class="layui-btn" lay-submit lay-filter="close">鍏抽棴</div>
+        </div>
+    </form>
+</div>
+</body>
+<script type="text/javascript" src="../../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/common.js"></script>
+<script type="text/javascript" src="../../../static/js/role/rolePower.js" charset="utf-8"></script>
+</html>
+
diff --git a/src/main/webapp/views/admin/tpl/alarm-detl.html b/src/main/webapp/views/admin/tpl/alarm-detl.html
new file mode 100644
index 0000000..1539922
--- /dev/null
+++ b/src/main/webapp/views/admin/tpl/alarm-detl.html
@@ -0,0 +1,52 @@
+<style>
+    pre {
+        font-family: 'DejaVu Sans Mono','Courier New',monospace;
+        padding: 15px 10px;
+        line-height: 17px;
+        margin: 5px;
+        word-wrap: break-word;
+        border: solid 1px #9e9e9e;
+        border-radius: 3px;
+        color: #729fcf;
+    }
+    .string { color: #4e9a06; }
+    .number { color: #ad7fa8; }
+    .boolean { color: #c4a000; }
+    .null { color: #babdb6; }
+    .key { color: #204a87; }
+</style>
+
+<div style="padding: 25px 25px 15px 25px;" id="callbackDialog">
+    <fieldset class="layui-elem-field layui-field-title">
+        <legend>鍩虹淇℃伅</legend>
+    </fieldset>
+    <div class="layui-text" style="margin-bottom: 5px;">
+        浜嬩欢缂栧彿锛歿{d.request}}<br />
+        璁惧缂栧彿锛歿{d.response.sensorId$}}<br />
+        璁惧绫诲瀷锛歿{d.response.sensorType$}}<br />
+    </div>
+    <fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;">
+        <legend>鎶ヨ淇℃伅</legend>
+    </fieldset>
+    <div class="layui-text" style="margin-bottom: 5px;">
+        鍙戦�佹椂闂达細{{d.response.createTime$}}<br />
+        鏁呴殰鎻忚堪锛歿{d.response.desc}}<br />
+    </div>
+    <div class="text-center" style="padding-top: 15px;text-align: right">
+        <button class="layui-btn layui-btn-normal" ew-event="closeDialog">鍏抽棴</button>
+    </div>
+</div>
+
+<!-- js閮ㄥ垎 -->
+<script>
+    layui.config({
+        base: baseUrl + "/static/layui/lay/modules/"
+    }).use(['layer', 'admin'], function () {
+        var $ = layui.jquery;
+        var layer = layui.layer;
+        var admin = layui.admin;
+
+        var layerData = admin.getLayerData('#callbackDialog');
+    });
+
+</script>
diff --git a/src/main/webapp/views/admin/tpl/theme/img/ic_loading.gif b/src/main/webapp/views/admin/tpl/theme/img/ic_loading.gif
new file mode 100644
index 0000000..071ecd6
--- /dev/null
+++ b/src/main/webapp/views/admin/tpl/theme/img/ic_loading.gif
Binary files differ
diff --git a/src/main/webapp/views/admin/tpl/theme/img/icon_date.png b/src/main/webapp/views/admin/tpl/theme/img/icon_date.png
new file mode 100644
index 0000000..5a50673
--- /dev/null
+++ b/src/main/webapp/views/admin/tpl/theme/img/icon_date.png
Binary files differ
diff --git a/src/main/webapp/views/admin/tpl/theme/img/icon_search.png b/src/main/webapp/views/admin/tpl/theme/img/icon_search.png
new file mode 100644
index 0000000..7db69d2
--- /dev/null
+++ b/src/main/webapp/views/admin/tpl/theme/img/icon_search.png
Binary files differ
diff --git a/src/main/webapp/views/admin/tpl/theme/img/theme-admin.png b/src/main/webapp/views/admin/tpl/theme/img/theme-admin.png
new file mode 100644
index 0000000..6b4696f
--- /dev/null
+++ b/src/main/webapp/views/admin/tpl/theme/img/theme-admin.png
Binary files differ
diff --git a/src/main/webapp/views/admin/tpl/theme/img/theme-blue.png b/src/main/webapp/views/admin/tpl/theme/img/theme-blue.png
new file mode 100644
index 0000000..33c9d24
--- /dev/null
+++ b/src/main/webapp/views/admin/tpl/theme/img/theme-blue.png
Binary files differ
diff --git a/src/main/webapp/views/admin/tpl/theme/img/theme-colorful.png b/src/main/webapp/views/admin/tpl/theme/img/theme-colorful.png
new file mode 100644
index 0000000..2cbeba0
--- /dev/null
+++ b/src/main/webapp/views/admin/tpl/theme/img/theme-colorful.png
Binary files differ
diff --git a/src/main/webapp/views/admin/tpl/theme/img/theme-cyan.png b/src/main/webapp/views/admin/tpl/theme/img/theme-cyan.png
new file mode 100644
index 0000000..368c04f
--- /dev/null
+++ b/src/main/webapp/views/admin/tpl/theme/img/theme-cyan.png
Binary files differ
diff --git a/src/main/webapp/views/admin/tpl/theme/img/theme-green.png b/src/main/webapp/views/admin/tpl/theme/img/theme-green.png
new file mode 100644
index 0000000..f7a5ca5
--- /dev/null
+++ b/src/main/webapp/views/admin/tpl/theme/img/theme-green.png
Binary files differ
diff --git a/src/main/webapp/views/admin/tpl/theme/img/theme-my.png b/src/main/webapp/views/admin/tpl/theme/img/theme-my.png
new file mode 100644
index 0000000..9fd7419
--- /dev/null
+++ b/src/main/webapp/views/admin/tpl/theme/img/theme-my.png
Binary files differ
diff --git a/src/main/webapp/views/admin/tpl/theme/img/theme-pink.png b/src/main/webapp/views/admin/tpl/theme/img/theme-pink.png
new file mode 100644
index 0000000..6088b1e
--- /dev/null
+++ b/src/main/webapp/views/admin/tpl/theme/img/theme-pink.png
Binary files differ
diff --git a/src/main/webapp/views/admin/tpl/theme/img/theme-purple.png b/src/main/webapp/views/admin/tpl/theme/img/theme-purple.png
new file mode 100644
index 0000000..072f439
--- /dev/null
+++ b/src/main/webapp/views/admin/tpl/theme/img/theme-purple.png
Binary files differ
diff --git a/src/main/webapp/views/admin/tpl/theme/img/theme-red.png b/src/main/webapp/views/admin/tpl/theme/img/theme-red.png
new file mode 100644
index 0000000..db9922e
--- /dev/null
+++ b/src/main/webapp/views/admin/tpl/theme/img/theme-red.png
Binary files differ
diff --git a/src/main/webapp/views/admin/tpl/theme/img/theme-white.png b/src/main/webapp/views/admin/tpl/theme/img/theme-white.png
new file mode 100644
index 0000000..4b4cb1f
--- /dev/null
+++ b/src/main/webapp/views/admin/tpl/theme/img/theme-white.png
Binary files differ
diff --git a/src/main/webapp/views/admin/tpl/tpl-note.html b/src/main/webapp/views/admin/tpl/tpl-note.html
new file mode 100644
index 0000000..5910e86
--- /dev/null
+++ b/src/main/webapp/views/admin/tpl/tpl-note.html
@@ -0,0 +1,206 @@
+<div class="layui-card-header">鏈湴渚跨</div>
+<div class="note-wrapper"></div>
+<div class="note-empty">
+    <i class="layui-icon layui-icon-face-surprised"></i>
+    <p>娌℃湁渚跨</p>
+</div>
+<div class="btn-circle" id="noteAddBtn" title="娣诲姞渚跨" style="position: absolute;">
+    <i class="layui-icon layui-icon-add-1"></i>
+</div>
+
+<script>
+    layui.use(['layer', 'form', 'util', 'admin'], function () {
+        var $ = layui.jquery;
+        var layer = layui.layer;
+        var util = layui.util;
+        var admin = layui.admin;
+        var dataList = [];  // 渚跨鍒楄〃
+        var $noteWrapper = $('.note-wrapper');
+
+        /* 娓叉煋鍒楄〃 */
+        function renderList() {
+            $noteWrapper.empty();
+            dataList = layui.data(admin.setter.tableName).notes;
+            if (dataList === undefined) dataList = [];
+            for (var i = 0; i < dataList.length; i++) {
+                var item = dataList[i];
+                $noteWrapper.prepend([
+                    '<div class="note-item" data-id="', item.id, '">',
+                    '   <div class="note-item-content">', util.escape(item.content), '</div>',
+                    '   <div class="note-item-time">', item.time, '</div>',
+                    '   <i class="layui-icon layui-icon-close-fill note-item-del"></i>',
+                    '</div>'
+                ].join(''));
+            }
+            $('.note-empty').css('display', dataList.length === 0 ? 'block' : 'none');
+            // 鐐瑰嚮淇敼
+            $('.note-item').click(function () {
+                var index = parseInt($(this).attr('data-id'));
+                showNote(dataList[index]);
+            });
+            // 鐐瑰嚮鍒犻櫎
+            $('.note-item-del').click(function (e) {
+                var id = parseInt($(this).parent().attr('data-id'));
+                layer.confirm('纭鍒犻櫎鍚楋紵', {
+                    skin: 'layui-layer-admin',
+                    shade: .1,
+                    shadeClose: true
+                }, function (index) {
+                    layer.close(index);
+                    dataList.splice(id, 1);
+                    for (var i = 0; i < dataList.length; i++) dataList[i].id = i;
+                    putDataList();
+                    renderList();
+                });
+                e.stopPropagation();
+            });
+        }
+
+        renderList();
+
+        /* 娣诲姞 */
+        $('#noteAddBtn').click(function () {
+            showNote();
+        });
+
+        // 鏄剧ず缂栬緫寮圭獥
+        function showNote(data) {
+            var id = data ? data.id : undefined, content = data ? data.content : '';
+            admin.open({
+                id: 'layer-note-edit',
+                title: '渚跨',
+                type: 1,
+                area: 'auto',
+                offset: '50px',
+                shadeClose: true,
+                content: '<textarea id="noteEditText" placeholder="璇疯緭鍏ュ唴瀹�" style="width: 280px;height: 150px;border: none;color: #666666;word-wrap: break-word;padding: 10px 20px;resize: vertical;">' + content + '</textarea>',
+                success: function () {
+                    $('#noteEditText').change(function () {
+                        content = $(this).val();
+                    });
+                },
+                end: function () {
+                    if (id !== undefined) {
+                        if (!content) {
+                            dataList.splice(id, 1);
+                            for (var i = 0; i < dataList.length; i++) dataList[i].id = i;
+                        } else if (content !== dataList[id].content) {
+                            dataList[id].content = content;
+                            dataList[id].time = util.toDateString(new Date(), 'yyyy-MM-dd HH:mm');
+                        }
+                    } else if (content) {
+                        dataList.push({
+                            id: dataList.length, content: content,
+                            time: util.toDateString(new Date(), 'yyyy-MM-dd HH:mm')
+                        });
+                    }
+                    putDataList();
+                    renderList();
+                }
+            });
+        }
+
+        /* 鏇存柊鏈湴缂撳瓨 */
+        function putDataList() {
+            layui.data(admin.setter.tableName, {key: 'notes', value: dataList});
+        }
+
+    });
+</script>
+
+<style>
+    .note-wrapper {
+        padding: 15px 0 15px 15px;
+        background-color: #fbfbfb;
+        position: absolute;
+        top: 43px;
+        left: 0;
+        right: 0;
+        bottom: 0;
+        overflow-y: auto;
+        -webkit-overflow-scrolling: touch;
+    }
+
+    .note-wrapper .note-item {
+        display: inline-block;
+        width: 110px;
+        padding: 12px;
+        cursor: pointer;
+        position: relative;
+        border-radius: 8px;
+        margin: 0 15px 15px 0;
+        border: 1px solid #eeeeee;
+        background-color: #ffffff;
+        -webkit-user-select: none;
+        -moz-user-select: none;
+        -ms-user-select: none;
+        user-select: none;
+        -webkit-transition: all .3s ease;
+        -moz-transition: all .3s ease;
+        -ms-transition: all .3s ease;
+        -o-transition: all .3s ease;
+        transition: all .3s ease;
+    }
+
+    .note-wrapper .note-item:hover {
+        box-shadow: 0 0 8px rgba(0, 0, 0, .05);
+        -webkit-transform: scale(1.02);
+        -moz-transform: scale(1.02);
+        -ms-transform: scale(1.02);
+        -o-transform: scale(1.02);
+        transform: scale(1.02);
+    }
+
+    .note-wrapper .note-item .note-item-content {
+        color: #666;
+        height: 80px;
+        font-size: 14px;
+        overflow: hidden;
+        word-break: break-all;
+    }
+
+    .note-wrapper .note-item .note-item-time {
+        color: #999;
+        font-size: 12px;
+        margin-top: 8px;
+    }
+
+    .note-wrapper .note-item .note-item-del {
+        position: absolute;
+        top: 2px;
+        right: 2px;
+        color: #FF5722;
+        font-size: 24px;
+        height: 24px;
+        width: 24px;
+        background-color: #fff;
+        border-radius: 50%;
+        visibility: hidden;
+        -webkit-transition: all .3s ease;
+        -moz-transition: all .3s ease;
+        -ms-transition: all .3s ease;
+        -o-transition: all .3s ease;
+        transition: all .3s ease;
+        opacity: 0;
+    }
+
+    .note-wrapper .note-item:hover .note-item-del {
+        visibility: visible;
+        opacity: 1;
+    }
+
+    .note-empty {
+        color: #999;
+        padding: 80px 0;
+        text-align: center;
+        display: none;
+        position: relative;
+        z-index: 1
+    }
+
+    .note-empty .layui-icon {
+        font-size: 60px;
+        margin-bottom: 10px;
+        display: inline-block;
+    }
+</style>
\ No newline at end of file
diff --git a/src/main/webapp/views/admin/tpl/tpl-theme.html b/src/main/webapp/views/admin/tpl/tpl-theme.html
new file mode 100644
index 0000000..7a1add0
--- /dev/null
+++ b/src/main/webapp/views/admin/tpl/tpl-theme.html
@@ -0,0 +1,229 @@
+<div class="layui-card-header">涓婚璁剧疆</div>
+<div class="more-theme-list">
+    <div class="more-theme-item" data-theme="theme-normal">
+        <img src="tpl/theme/img/theme-admin.png"/>
+    </div>
+    <div class="more-theme-item" data-theme="theme-cyan">
+        <img src="tpl/theme/img/theme-cyan.png"/>
+    </div>
+    <div class="more-theme-item" data-theme="theme-white">
+        <img src="tpl/theme/img/theme-white.png"/>
+    </div>
+    <div class="more-theme-item" data-theme="theme-pink">
+        <img src="tpl/theme/img/theme-pink.png"/>
+    </div>
+    <div class="more-theme-item active" data-theme="theme-colorful">
+        <img src="tpl/theme/img/theme-colorful.png"/>
+    </div>
+    <div class="more-theme-item" data-theme="theme-blue">
+        <img src="tpl/theme/img/theme-blue.png"/>
+    </div>
+    <div class="more-theme-item" data-theme="theme-green">
+        <img src="tpl/theme/img/theme-green.png"/>
+    </div>
+    <div class="more-theme-item" data-theme="theme-purple">
+        <img src="tpl/theme/img/theme-purple.png"/>
+    </div>
+<!--    <div class="more-theme-item" data-theme="theme-red">-->
+<!--        <img src="tpl/theme/img/theme-red.png"/>-->
+<!--    </div>-->
+    <div class="more-theme-item" data-theme="theme-my">
+        <img src="tpl/theme/img/theme-my.png"/>
+    </div>
+</div>
+<!-- 瀵艰埅 -->
+<div class="more-menu-list">
+<!--    <a class="more-menu-item" href="https://easyweb.vip/doc/" target="_blank">-->
+<!--        <i class="layui-icon layui-icon-read" style="font-size: 19px;"></i> 寮�鍙戞枃妗�-->
+<!--    </a>-->
+<!--    <a class="more-menu-item" href="https://demo.easyweb.vip/spa" target="_blank">-->
+<!--        <i class="layui-icon layui-icon-tabs" style="font-size: 16px;"></i> &nbsp;spa鐗堟湰-->
+<!--    </a>-->
+<!--    <a class="more-menu-item" href="https://demo.easyweb.vip/theme" target="_blank">-->
+<!--        <i class="layui-icon layui-icon-theme"></i> 涓婚鐢熸垚鍣�-->
+<!--    </a>-->
+</div>
+<!-- 鎺у埗寮�鍏� -->
+<div class="layui-form" style="margin: 25px 0;" lay-filter="more-set-form">
+    <div class="layui-form-item">
+        <label class="set-item-label">椤�&emsp;鑴氾細</label>
+        <div class="set-item-ctrl">
+            <input id="setFooter" lay-filter="setFooter" type="checkbox" lay-skin="switch" lay-text="寮�鍚瘄鍏抽棴">
+        </div>
+        <label class="set-item-label"> Tab&nbsp;璁板繂锛�</label>
+        <div class="set-item-ctrl">
+            <input id="setTab" lay-filter="setTab" type="checkbox" lay-skin="switch" lay-text="寮�鍚瘄鍏抽棴">
+        </div>
+    </div>
+    <div class="layui-form-item">
+        <label class="set-item-label">澶氭爣绛撅細</label>
+        <div class="set-item-ctrl">
+            <input id="setMoreTab" lay-filter="setMoreTab" type="checkbox" lay-skin="switch" lay-text="寮�鍚瘄鍏抽棴">
+        </div>
+        <label class="set-item-label">鍒囨崲鍒锋柊锛�</label>
+        <div class="set-item-ctrl">
+            <input id="setRefresh" lay-filter="setRefresh" type="checkbox" lay-skin="switch" lay-text="寮�鍚瘄鍏抽棴">
+        </div>
+    </div>
+    <div class="layui-form-item">
+        <label class="set-item-label">瀵艰埅绠ご锛�</label>
+        <div class="set-item-ctrl">
+            <input lay-filter="navArrow" type="radio" value="" title="榛樿" name="navArrow">
+            <input lay-filter="navArrow" type="radio" value="arrow2" title="绠ご" name="navArrow">
+            <input lay-filter="navArrow" type="radio" value="arrow3" title="鍔犲彿" name="navArrow">
+        </div>
+    </div>
+</div>
+
+<script>
+    layui.use(['form', 'admin'], function () {
+        var $ = layui.jquery;
+        var form = layui.form;
+        var admin = layui.admin;
+        var setter = admin.setter;
+        var $body = $('body');
+
+        // 鍒囨崲涓婚
+        var $themItem = $('.more-theme-item');
+        $themItem.click(function () {
+            $themItem.removeClass('active');
+            $(this).addClass('active');
+            admin.changeTheme($(this).data('theme'));
+        });
+        var theme = $body.data('theme');
+        if (theme) {
+            $themItem.removeClass('active');
+            $themItem.filter('[data-theme="' + theme + '"]').addClass('active');
+        }
+
+        // 鍏抽棴/寮�鍚〉鑴�
+        form.on('switch(setFooter)', function (data) {
+            var checked = data.elem.checked;
+            admin.putSetting('closeFooter', !checked);
+            checked ? $body.removeClass('close-footer') : $body.addClass('close-footer');
+        });
+        $('#setFooter').prop('checked', !$body.hasClass('close-footer'));
+
+        // 鍏抽棴/寮�鍚疶ab璁板繂鍔熻兘
+        form.on('switch(setTab)', function (data) {
+            layui.index.setTabCache(data.elem.checked);
+        });
+        $('#setTab').prop('checked', setter.cacheTab);
+
+        // 鍏抽棴/寮�鍚鏍囩
+        form.on('switch(setMoreTab)', function (data) {
+            var checked = data.elem.checked;
+            admin.putSetting('pageTabs', checked);
+            admin.putTempData('indexTabs', undefined);
+            location.reload();
+        });
+        $('#setMoreTab').prop('checked', setter.pageTabs);
+
+        // 鍒囨崲Tab鑷姩鍒锋柊
+        var $mainTab = $('.layui-body>.layui-tab[lay-filter="admin-pagetabs"]');
+        form.on('switch(setRefresh)', function (data) {
+            var checked = data.elem.checked;
+            admin.putSetting('tabAutoRefresh', checked);
+            checked ? $mainTab.attr('lay-autoRefresh', 'true') : $mainTab.removeAttr('lay-autoRefresh');
+        });
+        $('#setRefresh').prop('checked', setter.tabAutoRefresh === true);
+
+        // 瀵艰埅灏忎笁瑙�
+        var $leftNav = $('.layui-layout-admin>.layui-side>.layui-side-scroll>.layui-nav');
+        form.on('radio(navArrow)', function (data) {
+            $leftNav.removeClass('arrow2 arrow3');
+            data.value && $leftNav.addClass(data.value);
+            admin.putSetting('navArrow', data.value);
+        });
+        var navArrow = $leftNav.hasClass('arrow2') ? 'arrow2' : $leftNav.hasClass('arrow3') ? 'arrow3' : '';
+        $('[name="navArrow"][value="' + navArrow + '"]').prop('checked', true);
+
+        form.render('radio', 'more-set-form');
+        form.render('checkbox', 'more-set-form');
+    });
+</script>
+
+<style>
+    /* theme */
+    .more-theme-list {
+        padding-left: 15px;
+        padding-top: 20px;
+        margin-bottom: 10px;
+    }
+
+    .more-theme-item {
+        padding: 4px;
+        margin: 0 6px 15px 0;
+        display: inline-block;
+        border: 1px solid transparent;
+    }
+
+    .more-theme-item img {
+        width: 80px;
+        height: 50px;
+        background: #f5f7f9;
+        box-sizing: border-box;
+        border: 1px solid #f5f7f9;
+        cursor: pointer;
+    }
+
+    .more-theme-item:hover, .more-theme-item.active {
+        border-color: #5FB878;
+    }
+
+    .more-menu-item {
+        color: #595959;
+        height: 50px;
+        line-height: 50px;
+        font-size: 16px;
+        padding: 0 25px;
+        border-bottom: 1px solid #e8e8e8;
+        font-style: normal;
+        display: block;
+    }
+
+    /* menu */
+    .more-menu-item:first-child {
+        border-top: 1px solid #e8e8e8;
+    }
+
+    .more-menu-item:hover {
+        color: #595959;
+        background: #f6f6f6;
+    }
+
+    .more-menu-item .layui-icon {
+        font-size: 18px;
+        padding-right: 10px;
+    }
+
+    .more-menu-item:after {
+        color: #8c8c8c;
+        right: 16px;
+        content: "\e602";
+        position: absolute;
+        font-family: layui-icon !important;
+    }
+
+    .more-menu-item.no-icon:after {
+        display: none;
+    }
+
+    /* setting from */
+    .set-item-label {
+        height: 38px;
+        line-height: 38px;
+        padding-left: 20px;
+        display: inline-block;
+    }
+
+    .set-item-ctrl {
+        height: 38px;
+        line-height: 38px;
+        display: inline-block;
+    }
+
+    .set-item-ctrl > * {
+        margin: 0 !important;
+    }
+</style>
diff --git a/src/main/webapp/views/admin/user/user.html b/src/main/webapp/views/admin/user/user.html
new file mode 100644
index 0000000..e317d2b
--- /dev/null
+++ b/src/main/webapp/views/admin/user/user.html
@@ -0,0 +1,177 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/admin.css?v=318" media="all">
+    <link rel="stylesheet" href="../../../static/css/cool.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/originTable.css" media="all">
+    <style>
+        body {
+            color: #595959;
+            background-color: #f5f7f9;
+        }
+
+        .admin-form {
+            padding: 25px 30px 0 0 !important;
+            margin: 0 !important;
+        }
+    </style>
+</head>
+<body>
+<!-- 姝f枃寮�濮� -->
+<div class="layui-fluid" style="padding-bottom: 0;">
+    <div class="layui-row layui-col-space15">
+        <div class="layui-col-md12">
+            <div class="layui-card">
+                <div class="layui-card-body" style="padding: 10px;">
+                    <form class="layui-form toolbar">
+                        <div class="layui-form-item">
+                            <div class="layui-inline">
+                                <label class="layui-form-label">鐢ㄦ埛鍚�:</label>
+                                <div class="layui-input-inline">
+                                    <input name="username" class="layui-input" placeholder="杈撳叆鐢ㄦ埛鍚�"/>
+                                </div>
+                            </div>
+                            <div class="layui-inline">
+                                <label class="layui-form-label">鎵嬫満鍙�:</label>
+                                <div class="layui-input-inline">
+                                    <input name="mobile" class="layui-input" placeholder="杈撳叆鎵嬫満鍙�"/>
+                                </div>
+                            </div>
+                            <div class="layui-inline">&emsp;
+                                <button class="layui-btn icon-btn" lay-filter="userTbSearch" lay-submit>
+                                    <i class="layui-icon">&#xe615;</i>鎼滅储
+                                </button>
+                            </div>
+                        </div>
+                    </form>
+                    <table id="userTable" lay-filter="userTable"></table>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+<script type="text/html" id="hostTpl">
+    <span name="hostName" class="layui-badge layui-badge-gray">{{d.hostName}}</span>
+</script>
+
+<script type="text/html" id="statusTpl">
+    <input type="checkbox" name="status" value="{{d.status}}" lay-skin="switch" lay-text="姝e父|绂佺敤" lay-filter="statusSwitch" {{ d.status === 1 ? 'checked' : '' }}>
+</script>
+
+<script type="text/html" id="operate">
+    <a class="layui-btn layui-btn-xs btn-edit" lay-event="edit">缂栬緫</a>
+    <a class="layui-btn layui-btn-xs btn-edit layui-btn-warm" lay-event="resetPwd">閲嶇疆瀵嗙爜</a>
+</script>
+
+<script type="text/html" id="userToolbar">
+    <div class="layui-btn-container">
+        <button class="layui-btn layui-btn-sm layui-btn-normal" id="btn-add" lay-event="add"><i class="layui-icon">&#xe654;</i>鏂板</button>
+        <button class="layui-btn layui-btn-sm layui-btn-danger" id="btn-delete" lay-event="del"><i class="layui-icon">&#xe640;</i>鍒犻櫎</button>
+    </div>
+</script>
+
+<!-- 閲嶇疆瀵嗙爜 -->
+<script type="text/html" id="resetpwd-window">
+    <form class="layui-form model-form">
+        <input type="hidden" id="resetUserId" name="resetUserId">
+        <div class="layui-form-item">
+            <label class="layui-form-label layui-form-required">鏂板瘑鐮�:</label>
+            <div class="layui-input-block">
+                <input id="resetPassword" name="resetPassword" placeholder="璇疯緭鍏ユ柊瀵嗙爜" class="layui-input" lay-verify="required" autocomplete="off">
+            </div>
+        </div>
+        <div class="layui-form-item text-right">
+            <button class="layui-btn layui-btn-normal" id="savePwd" lay-filter="savePwd" lay-submit="">纭畾</button>
+            <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+        </div>
+    </form>
+</script>
+
+<!-- 琛ㄥ崟寮圭獥 -->
+<script type="text/html" id="editDialog">
+    <form id="detail" lay-filter="detail" class="layui-form admin-form">
+        <input name="id" type="hidden">
+        <input name="status" type="hidden">
+        <div class="layui-row">
+
+            <div class="layui-col-md6">
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">鐧诲綍璐︽埛</label>
+                    <div class="layui-input-block">
+                        <input name="username" placeholder="璇疯緭鍏ョ櫥褰曡处鎴�" class="layui-input" lay-vertype="tips" lay-verify="required" required="">
+                    </div>
+                </div>
+
+                <div class="layui-form-item">
+                    <label class="layui-form-label">瑙掕壊锛�</label>
+                    <div class="layui-input-block cool-auto-complete">
+                        <input name="roleId" class="layui-input" style="display: none">
+                        <input id="roleName" name="roleName" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇烽�夋嫨瑙掕壊" onfocus=this.blur()>
+                        <div class="cool-auto-complete-window">
+                            <input class="cool-auto-complete-window-input" data-key="roleQuery" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                            <select class="cool-auto-complete-window-select" data-key="roleQuerySelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                            </select>
+                        </div>
+                    </div>
+                </div>
+            </div>
+
+            <div class="layui-col-md6">
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">鎵嬫満鍙�</label>
+                    <div class="layui-input-block">
+                        <input name="mobile" placeholder="璇疯緭鍏ユ墜鏈哄彿" class="layui-input" lay-vertype="tips" lay-verify="required" required="">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">閭</label>
+                    <div class="layui-input-block">
+                        <input name="email" placeholder="璇疯緭鍏ラ偖绠�" class="layui-input">
+                    </div>
+                </div>
+
+            </div>
+        </div>
+        <hr class="layui-bg-gray">
+        <div class="layui-form-item text-right">
+            <button class="layui-btn" lay-filter="editSubmit" lay-submit="">淇濆瓨</button>
+            <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+        </div>
+    </form>
+</script>
+
+<script type="text/javascript" src="../../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../../static/js/handlebars/handlebars-v4.5.3.js"></script>
+<script type="text/javascript" src="../../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/tools/md5.js"></script>
+<script type="text/javascript" src="../../../static/js/user/user.js" charset="utf-8"></script>
+
+<!-- 椤圭洰缂栬緫绐楀彛 -->
+<script type="text/html" id="hostEditDialog">
+    <form id="hostEditForm" lay-filter="hostEditForm" class="layui-form model-form">
+        <input name="id" type="hidden"/>
+        <div class="layui-form-item">
+            <label class="layui-form-label layui-form-required">椤圭洰鍚嶇О:</label>
+            <div class="layui-input-block">
+                <input name="name" placeholder="璇疯緭鍏ョ被鍨嬪悕绉�" class="layui-input"
+                       lay-verType="tips" lay-verify="required" required/>
+            </div>
+        </div>
+        <div class="layui-form-item text-right">
+            <button class="layui-btn" lay-filter="hostEditSubmit" lay-submit>淇濆瓨</button>
+            <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+        </div>
+    </form>
+</script>
+</body>
+</html>
+
diff --git a/src/main/webapp/views/admin/user/user_detail.html b/src/main/webapp/views/admin/user/user_detail.html
new file mode 100644
index 0000000..e5213f4
--- /dev/null
+++ b/src/main/webapp/views/admin/user/user_detail.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../static/css/cool.css" media="all">
+    <link rel="stylesheet" href="../../static/css/common.css" media="all">
+</head>
+<body>
+
+<!-- 璇︽儏 -->
+<div id="data-detail" class="layer_self_wrap">
+    <form id="detail" class="layui-form" style="text-align: center">
+        <div class="layui-inline"  style="display: none">
+            <label class="layui-form-label"><span class="not-null">*</span>缂栥��銆�鍙凤細</label>
+            <div class="layui-input-inline">
+                <input id="id" class="layui-input" type="text" placeholder="缂栧彿">
+            </div>
+        </div>
+<!--        <div class="layui-inline"  style="width:31%;display: none">-->
+<!--            <label class="layui-form-label"><span class="not-null">*</span>鎺堟潈鍟嗘埛锛�</label>-->
+<!--            <div class="layui-input-inline cool-auto-complete">-->
+<!--                <input id="hostId" class="layui-input" type="text" placeholder="鎺堟潈鍟嗘埛" lay-verify="required"  style="display: none">-->
+<!--                <input id="hostName" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="鎺堟潈鍟嗘埛" onfocus=this.blur()>-->
+<!--                <div class="cool-auto-complete-window">-->
+<!--                    <input class="cool-auto-complete-window-input" data-key="hostQuery" onkeyup="autoLoad(this.getAttribute('data-key'))">-->
+<!--                    <select class="cool-auto-complete-window-select" data-key="hostQuerySelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">-->
+<!--                    </select>-->
+<!--                </div>-->
+<!--            </div>-->
+<!--        </div>-->
+        <div class="layui-inline"  style="width:80%;">
+            <label class="layui-form-label"><span class="not-null">*</span>甯愩��銆�鍙凤細</label>
+            <div class="layui-input-inline">
+                <input id="mobile" class="layui-input" type="text" placeholder="璐﹀彿" lay-verify="required" autocomplete="off">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:80%;">
+            <label class="layui-form-label"><span class="not-null">*</span>鍚嶃��銆�绉帮細</label>
+            <div class="layui-input-inline">
+                <input id="username" class="layui-input" type="text" placeholder="鍚嶇О" lay-verify="required"  autocomplete="off">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:80%;">
+            <label class="layui-form-label">瀵嗐��銆�鐮侊細</label>
+            <div class="layui-input-inline">
+                <input id="password" class="layui-input" type="text" placeholder="瀵嗙爜" autocomplete="off">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:80%;">
+            <label class="layui-form-label"><span class="not-null">*</span>瑙掋��銆�鑹诧細</label>
+            <div class="layui-input-inline cool-auto-complete">
+                <input id="roleId" class="layui-input" type="text" placeholder="瑙掕壊" lay-verify="required"  style="display: none">
+                <input id="roleName" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="瑙掕壊" onfocus=this.blur()>
+                <div class="cool-auto-complete-window">
+                    <input class="cool-auto-complete-window-input" data-key="roleQuery" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                    <select class="cool-auto-complete-window-select" data-key="roleQuerySelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                    </select>
+                </div>
+            </div>
+        </div>
+
+        <hr class="layui-bg-gray">
+
+        <div id="data-detail-btn" class="layui-btn-container layui-form-item">
+            <div id="data-detail-submit" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="edit">淇濆瓨</div>
+            <div id="data-detail-close" type="button" class="layui-btn" lay-submit lay-filter="close">鍏抽棴</div>
+        </div>
+
+        <div id="prompt">
+            娓╅Θ鎻愮ず锛氳浠旂粏濉啓鐩稿叧淇℃伅锛�<span class="extrude"><span class="not-null">*</span> 涓哄繀濉�夐」銆�</span>
+        </div>
+    </form>
+</div>
+</body>
+<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/tools/md5.js"></script>
+<script type="text/javascript" src="../../static/js/user/user.js" charset="utf-8"></script>
+</html>
+
diff --git a/src/main/webapp/views/admin/userLogin/userLogin.html b/src/main/webapp/views/admin/userLogin/userLogin.html
new file mode 100644
index 0000000..052eec9
--- /dev/null
+++ b/src/main/webapp/views/admin/userLogin/userLogin.html
@@ -0,0 +1,61 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/cool.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/common.css" media="all">
+</head>
+<body>
+
+<!-- 鎼滅储鏍� -->
+<div id="search-box" class="layui-form layui-card-header">
+    <div class="layui-inline">
+        <div class="layui-input-inline cool-auto-complete">
+            <input id="userId" class="layui-input" name="user_id" type="text" placeholder="璇疯緭鍏�" autocomplete="off" style="display: none">
+            <input id="userUsername" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="鐢ㄦ埛" onfocus=this.blur()>
+            <div class="cool-auto-complete-window">
+                <input class="cool-auto-complete-window-input" data-key="userQuery" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                <select class="cool-auto-complete-window-select" data-key="userQuerySelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                </select>
+            </div>
+        </div>
+    </div>
+
+    <!-- 寰呮坊鍔� -->
+    <div id="data-search-btn" class="layui-btn-container layui-form-item">
+        <button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">鎼滅储</button>
+        <button id="reset" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">閲嶇疆</button>
+    </div>
+</div>
+
+<!-- 琛ㄦ牸 -->
+<table class="layui-hide" id="userLogin" lay-filter="userLogin"></table>
+<script type="text/html" id="toolbar">
+    <div class="layui-btn-container">
+        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>
+        <button class="layui-btn layui-btn-sm" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData">瀵煎嚭</button>
+    </div>
+</script>
+
+<script type="text/html" id="operate">
+    <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">璇︽儏</a>
+    <a class="layui-btn layui-btn-xs btn-edit" lay-event="edit">缂栬緫</a>
+</script>
+
+<script type="text/javascript" src="../../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/userLogin/userLogin.js" charset="utf-8"></script>
+
+<iframe id="detail-iframe" scrolling="auto" style="display:none;"></iframe>
+
+</body>
+</html>
+
diff --git a/src/main/webapp/views/admin/userLogin/userLogin_detail.html b/src/main/webapp/views/admin/userLogin/userLogin_detail.html
new file mode 100644
index 0000000..2d1b2cc
--- /dev/null
+++ b/src/main/webapp/views/admin/userLogin/userLogin_detail.html
@@ -0,0 +1,69 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/cool.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/common.css" media="all">
+</head>
+<body>
+
+<!-- 璇︽儏 -->
+<div id="data-detail" class="layer_self_wrap">
+    <form id="detail" class="layui-form">
+        <div class="layui-inline"  style="display: none">
+            <label class="layui-form-label"><span class="not-null">*</span>缂栥��銆�鍙凤細</label>
+            <div class="layui-input-inline">
+                <input id="id" class="layui-input" type="text" placeholder="缂栧彿">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label"><span class="not-null">*</span>鍛樸��銆�宸ワ細</label>
+            <div class="layui-input-inline cool-auto-complete">
+                <input id="userId" class="layui-input" type="text" placeholder="鍛樺伐" lay-verify="required" style="display: none">
+                <input id="userUsername" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="鍛樺伐" onfocus=this.blur()>
+                <div class="cool-auto-complete-window">
+                    <input class="cool-auto-complete-window-input" data-key="userQuery" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                    <select class="cool-auto-complete-window-select" data-key="userQuerySelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                    </select>
+                </div>
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label"><span class="not-null">*</span>鍑� 璇� 鍊硷細</label>
+            <div class="layui-input-inline">
+                <input id="token" class="layui-input" type="text" placeholder="鍑瘉鍊�" lay-verify="required" >
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label"><span class="not-null">*</span>娣诲姞鏃堕棿锛�</label>
+            <div class="layui-input-inline">
+                <input id="createTime$" class="layui-input" type="text" placeholder="娣诲姞鏃堕棿" lay-verify="required" >
+            </div>
+        </div>
+
+
+        <hr class="layui-bg-gray">
+
+        <div id="data-detail-btn" class="layui-btn-container layui-form-item">
+            <div id="data-detail-submit" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="edit">淇濆瓨</div>
+            <div id="data-detail-close" type="button" class="layui-btn" lay-submit lay-filter="close">鍏抽棴</div>
+        </div>
+
+        <div id="prompt">
+            娓╅Θ鎻愮ず锛氳浠旂粏濉啓鐩稿叧淇℃伅锛�<span class="extrude"><span class="not-null">*</span> 涓哄繀濉�夐」銆�</span>
+        </div>
+    </form>
+</div>
+</body>
+<script type="text/javascript" src="../../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/userLogin/userLogin.js" charset="utf-8"></script>
+</html>
+
diff --git a/src/main/webapp/views/admin/wrkLastno/wrkLastno.html b/src/main/webapp/views/admin/wrkLastno/wrkLastno.html
new file mode 100644
index 0000000..d7eb4d2
--- /dev/null
+++ b/src/main/webapp/views/admin/wrkLastno/wrkLastno.html
@@ -0,0 +1,58 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/cool.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/common.css" media="all">
+</head>
+<body>
+
+<!-- 鎼滅储鏍� -->
+<div id="search-box" class="layui-form layui-card-header">
+    <!--<div class="layui-inline">-->
+        <!--<label class="layui-form-label">缂栥��銆�鍙凤細</label>-->
+        <!--<div class="layui-input-inline">-->
+            <!--<input class="layui-input" type="text" name="id" placeholder="璇疯緭鍏�" autocomplete="off">-->
+        <!--</div>-->
+    <!--</div>-->
+
+    <!--&lt;!&ndash; 寰呮坊鍔� &ndash;&gt;-->
+    <!--<div id="data-search-btn" class="layui-btn-container layui-form-item">-->
+        <!--<button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">鎼滅储</button>-->
+        <!--<button id="reset" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">閲嶇疆</button>-->
+    <!--</div>-->
+</div>
+
+<!-- 琛ㄦ牸 -->
+<div class="layui-form">
+    <table class="layui-hide" id="wrkLastno" lay-filter="wrkLastno"></table>
+</div>
+<script type="text/html" id="toolbar">
+    <div class="layui-btn-container">
+        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>
+        <button class="layui-btn layui-btn-sm" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData">瀵煎嚭</button>
+    </div>
+</script>
+
+<script type="text/html" id="operate">
+    <!--<a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">璇︽儏</a>-->
+    <a class="layui-btn layui-btn-xs btn-edit" lay-event="edit">缂栬緫</a>
+</script>
+
+<script type="text/javascript" src="../../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/wrkLastno/wrkLastno.js" charset="utf-8"></script>
+
+<iframe id="detail-iframe" scrolling="auto" style="display:none;"></iframe>
+
+</body>
+</html>
+
diff --git a/src/main/webapp/views/admin/wrkLastno/wrkLastno_detail.html b/src/main/webapp/views/admin/wrkLastno/wrkLastno_detail.html
new file mode 100644
index 0000000..8387b4a
--- /dev/null
+++ b/src/main/webapp/views/admin/wrkLastno/wrkLastno_detail.html
@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/cool.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/common.css" media="all">
+</head>
+<body>
+
+<!-- 璇︽儏 -->
+<div id="data-detail" class="layer_self_wrap">
+    <form id="detail" class="layui-form">
+    <!--
+        <div class="layui-inline"  style="display: none">
+            <label class="layui-form-label"><span class="not-null">*</span>缂栥��銆�鍙凤細</label>
+            <div class="layui-input-inline">
+                <input id="id" class="layui-input" type="text" placeholder="缂栧彿">
+            </div>
+        </div>
+    -->
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label"><span class="not-null">*</span>绫汇��銆�鍨嬶細</label>
+            <div class="layui-input-inline">
+                <input id="wrkMk" class="layui-input" type="text" onkeyup="check(this.id, 'wrkLastno')">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label"><span class="not-null">*</span>褰撳墠ID锛�</label>
+            <div class="layui-input-inline">
+                <input id="wrkNo" class="layui-input" type="text" lay-verify="required" >
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label"><span class="not-null">*</span>缁堟ID锛�</label>
+            <div class="layui-input-inline">
+                <input id="eno" class="layui-input" type="text" lay-verify="required" >
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label"><span class="not-null">*</span>璧峰ID锛�</label>
+            <div class="layui-input-inline">
+                <input id="sno" class="layui-input" type="text" lay-verify="required" >
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">澶囥��銆�娉細</label>
+            <div class="layui-input-inline">
+                <input id="memoM" class="layui-input" type="text">
+            </div>
+        </div>
+
+
+        <hr class="layui-bg-gray">
+
+        <div id="data-detail-btn" class="layui-btn-container layui-form-item">
+            <div id="data-detail-submit-save" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="save">淇濆瓨</div>
+            <div id="data-detail-submit-edit" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="edit">淇敼</div>
+            <div id="data-detail-close" type="button" class="layui-btn" lay-submit lay-filter="close">鍏抽棴</div>
+        </div>
+
+        <div id="prompt">
+            娓╅Θ鎻愮ず锛氳浠旂粏濉啓鐩稿叧淇℃伅锛�<span class="extrude"><span class="not-null">*</span> 涓哄繀濉�夐」銆�</span>
+        </div>
+    </form>
+</div>
+</body>
+<script type="text/javascript" src="../../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/wrkLastno/wrkLastno.js" charset="utf-8"></script>
+</html>
+
diff --git a/src/main/webapp/views/task.html b/src/main/webapp/views/admin/wrkMast/wrkMast.html
similarity index 95%
rename from src/main/webapp/views/task.html
rename to src/main/webapp/views/admin/wrkMast/wrkMast.html
index d4b48bb..169f899 100644
--- a/src/main/webapp/views/task.html
+++ b/src/main/webapp/views/admin/wrkMast/wrkMast.html
@@ -4,12 +4,12 @@
 	<head>
 		<meta charset="UTF-8">
 		<title>浠诲姟绠$悊</title>
-		<link rel="stylesheet" href="../static/vue/element/element.css">
-		<script type="text/javascript" src="../static/js/jquery/jquery-3.3.1.min.js"></script>
-		<script type="text/javascript" src="../static/layui/layui.js"></script>
-		<script type="text/javascript" src="../static/js/common.js"></script>
-		<script type="text/javascript" src="../static/vue/js/vue.min.js"></script>
-		<script type="text/javascript" src="../static/vue/element/element.js"></script>
+		<link rel="stylesheet" href="../../../static/vue/element/element.css">
+		<script type="text/javascript" src="../../../static/js/jquery/jquery-3.3.1.min.js"></script>
+		<script type="text/javascript" src="../../../static/layui/layui.js"></script>
+		<script type="text/javascript" src="../../../static/js/common.js"></script>
+		<script type="text/javascript" src="../../../static/vue/js/vue.min.js"></script>
+		<script type="text/javascript" src="../../../static/vue/element/element.js"></script>
 		<style>
 			.el-table .success-row {
 				background: #b6ff8e;
diff --git a/src/main/webapp/views/admin/wrkMastLog/wrkDetlLog.html b/src/main/webapp/views/admin/wrkMastLog/wrkDetlLog.html
new file mode 100644
index 0000000..240e970
--- /dev/null
+++ b/src/main/webapp/views/admin/wrkMastLog/wrkDetlLog.html
@@ -0,0 +1,99 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/cool.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/common.css" media="all">
+    <style>
+    </style>
+</head>
+<body>
+<div class="layui-inline"  style="width:20%;margin-top: 20px">
+    <label class="layui-form-label">宸� 浣� 鍙凤細</label>
+    <div class="layui-input-inline">
+        <input id="wrkNo" class="layui-input" type="text" disabled="disabled">
+    </div>
+</div>
+<div class="layui-inline"  style="width:20%;margin-top: 20px">
+    <label class="layui-form-label">宸ヤ綔鏃堕棿锛�</label>
+    <div class="layui-input-inline">
+        <input id="ioTime" class="layui-input" type="text" disabled="disabled">
+    </div>
+</div>
+
+<table class="layui-hide" id="wrkDetlLogByMast" lay-filter="wrkDetlLogByMast"></table>
+</body>
+<script type="text/javascript" src="../../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/locMast/locMast.js" charset="utf-8"></script>
+<script type="text/javascript">
+    var pageCur;
+    function getCol() {
+        let cols = [
+            {field: 'wrkNo', align: 'center',title: '宸ヤ綔鍙�'}
+            ,{field: 'ioTime$', align: 'center',title: '宸ヤ綔鏃堕棿',width:160}
+        ];
+        cols.push.apply(cols, detlCols);
+        return cols;
+    }
+    layui.use(['table','laydate', 'form'], function() {
+        table = layui.table;
+        var $ = layui.jquery;
+        var form = layui.form;
+
+        $('#wrkNo').val(parent.wrkNo);
+        $('#ioTime').val(top.dateToStr(parent.ioTime, true));
+        // 鏁版嵁娓叉煋
+        tableIns1 = table.render({
+            elem: '#wrkDetlLogByMast',
+            headers: {token: localStorage.getItem('token')},
+            url: baseUrl+'/wrkDetlLogByMast/list/auth',
+            where: {wrk_no: parent.wrkNo,ioTime: top.dateToStr(parent.ioTime, true)},
+            page: true,
+            limit: 16,
+            limits: [16, 30, 50, 100, 200, 500],
+            even: true,
+            toolbar: '#toolbar',
+            cellMinWidth: 50,
+            cols: [getCol()],
+            request: {
+                pageName: 'curr',
+                pageSize: 'limit'
+            },
+            parseData: function (res) {
+                return {
+                    'code': res.code,
+                    'msg': res.msg,
+                    'count': res.data.total,
+                    'data': res.data.records
+                }
+            },
+            response: {
+                statusCode: 200
+            },
+            done: function(res, curr, count) {
+                if (res.code === 403) {
+                    top.location.href = baseUrl+"/";
+                }
+                pageCur=curr;
+                form.on('checkbox(tableCheckbox)', function (data) {
+                    var _index = $(data.elem).attr('table-index')||0;
+                    if(data.elem.checked){
+                        res.data[_index][data.value] = 'Y';
+                    }else{
+                        res.data[_index][data.value] = 'N';
+                    }
+                });
+            }
+        });
+    });
+</script>
+</html>
+
diff --git a/src/main/webapp/views/admin/wrkMastLog/wrkMastLog.html b/src/main/webapp/views/admin/wrkMastLog/wrkMastLog.html
new file mode 100644
index 0000000..a5b7f06
--- /dev/null
+++ b/src/main/webapp/views/admin/wrkMastLog/wrkMastLog.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/cool.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/common.css" media="all">
+</head>
+<body>
+<!-- 鎼滅储鏍� -->
+<div id="search-box" class="layui-form layui-card-header">
+    <div class="layui-inline">
+        <div class="layui-input-inline">
+            <input class="layui-input" type="text" name="wrk_no" placeholder="宸ヤ綔鍙�" autocomplete="off">
+        </div>
+    </div>
+    <div class="layui-inline">
+        <div class="layui-input-inline cool-auto-complete">
+            <input id="wrkSts" class="layui-input" name="wrk_sts" type="text" placeholder="璇疯緭鍏�" autocomplete="off" style="display: none">
+            <input id="wrkSts$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="宸ヤ綔鐘舵��" onfocus=this.blur()>
+            <div class="cool-auto-complete-window">
+                <input class="cool-auto-complete-window-input" data-key="basWrkStatusQueryBywrkSts" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                <select class="cool-auto-complete-window-select" data-key="basWrkStatusQueryBywrkStsSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                </select>
+            </div>
+        </div>
+    </div>
+    <div class="layui-inline">
+        <div class="layui-input-inline cool-auto-complete">
+            <input id="ioType" class="layui-input" name="io_type" type="text" placeholder="璇疯緭鍏�" autocomplete="off" style="display: none">
+            <input id="ioType$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="鍏ュ嚭搴撶被鍨�" onfocus=this.blur()>
+            <div class="cool-auto-complete-window">
+                <input class="cool-auto-complete-window-input" data-key="basWrkIotypeQueryByioType" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                <select class="cool-auto-complete-window-select" data-key="basWrkIotypeQueryByioTypeSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                </select>
+            </div>
+        </div>
+    </div>
+    <div class="layui-inline">
+        <div class="layui-input-inline cool-auto-complete">
+            <input id="crnNo" class="layui-input" name="crn_no" type="text" placeholder="璇疯緭鍏�" autocomplete="off" style="display: none">
+            <input id="crnNo$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="鍫嗗灈鏈哄彿" onfocus=this.blur()>
+            <div class="cool-auto-complete-window">
+                <input class="cool-auto-complete-window-input" data-key="basCrnpQueryBycrnNo" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                <select class="cool-auto-complete-window-select" data-key="basCrnpQueryBycrnNoSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                </select>
+            </div>
+        </div>
+    </div>
+    <!-- 鏃ユ湡鑼冨洿 -->
+    <div class="layui-inline" style="width: 300px">
+        <div class="layui-input-inline">
+            <input class="layui-input layui-laydate-range" name="io_time" type="text" placeholder="璧峰鏃堕棿 - 缁堟鏃堕棿" autocomplete="off" style="width: 300px">
+        </div>
+    </div>
+    <div class="layui-inline">
+        <div class="layui-input-inline">
+            <input class="layui-input" type="text" name="condition" placeholder="璇疯緭鍏�" autocomplete="off">
+        </div>
+    </div>
+
+    <!-- 寰呮坊鍔� -->
+    <div id="data-search-btn" class="layui-btn-container layui-form-item">
+        <button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">鎼滅储</button>
+        <button id="reset" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">閲嶇疆</button>
+    </div>
+</div>
+
+<!-- 琛ㄦ牸 -->
+<div class="layui-form">
+    <table class="layui-hide" id="wrkMastLog" lay-filter="wrkMastLog"></table>
+</div>
+<script type="text/html" id="toolbar">
+    <div class="layui-btn-container">
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="margin-top: 10px">瀵煎嚭</button>
+    </div>
+</script>
+
+<script type="text/html" id="operate">
+    <a class="layui-btn layui-btn-xs btn-detlShow" lay-event="detlShow">鏄庣粏</a>
+<!--    <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">璇︽儏</a>-->
+</script>
+
+<script type="text/javascript" src="../../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/wrkMastLog/wrkMastLog.js" charset="utf-8"></script>
+
+<iframe id="detail-iframe" scrolling="auto" style="display:none;"></iframe>
+
+</body>
+</html>
+
diff --git a/src/main/webapp/views/admin/wrkMastLog/wrkMastLog_detail.html b/src/main/webapp/views/admin/wrkMastLog/wrkMastLog_detail.html
new file mode 100644
index 0000000..436ff77
--- /dev/null
+++ b/src/main/webapp/views/admin/wrkMastLog/wrkMastLog_detail.html
@@ -0,0 +1,196 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/cool.css" media="all">
+    <link rel="stylesheet" href="../../../static/css/common.css" media="all">
+</head>
+<body>
+
+<!-- 璇︽儏 -->
+<div id="data-detail" class="layer_self_wrap">
+    <form id="detail" class="layui-form">
+        <div class="layui-inline"  style="width:31%;display: none">
+            <label class="layui-form-label"><span class="not-null">*</span>缂栥��銆�鍙凤細</label>
+            <div class="layui-input-inline">
+                <input id="id" class="layui-input" type="text" onkeyup="check(this.id, 'wrkMastLog')" lay-verify="number" >
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label"><span class="not-null">*</span>宸� 浣� 鍙凤細</label>
+            <div class="layui-input-inline">
+                <input id="wrkNo" class="layui-input" type="text" onkeyup="check(this.id, 'wrkMastLog')" lay-verify="required|number" >
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">宸ヤ綔鐘舵�侊細</label>
+            <div class="layui-input-inline cool-auto-complete">
+                <input id="wrkSts" class="layui-input" type="text" lay-verify="number"  style="display: none">
+                <input id="wrkSts$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏�..." onfocus=this.blur()>
+                <div class="cool-auto-complete-window">
+                    <input class="cool-auto-complete-window-input" data-key="basWrkStatusQueryBywrkSts" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                    <select class="cool-auto-complete-window-select" data-key="basWrkStatusQueryBywrkStsSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                    </select>
+                </div>
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">鍏ュ嚭搴撶被鍨嬶細</label>
+            <div class="layui-input-inline cool-auto-complete">
+                <input id="ioType" class="layui-input" type="text" lay-verify="number"  style="display: none">
+                <input id="ioType$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏�..." onfocus=this.blur()>
+                <div class="cool-auto-complete-window">
+                    <input class="cool-auto-complete-window-input" data-key="basWrkIotypeQueryByioType" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                    <select class="cool-auto-complete-window-select" data-key="basWrkIotypeQueryByioTypeSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                    </select>
+                </div>
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">鍫嗗灈鏈哄彿锛�</label>
+            <div class="layui-input-inline cool-auto-complete">
+                <input id="crnNo" class="layui-input" type="text" lay-verify="number"  style="display: none">
+                <input id="crnNo$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏�..." onfocus=this.blur()>
+                <div class="cool-auto-complete-window">
+                    <input class="cool-auto-complete-window-input" data-key="basCrnpQueryBycrnNo" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                    <select class="cool-auto-complete-window-select" data-key="basCrnpQueryBycrnNoSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                    </select>
+                </div>
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">浼� 鍏� 绾э細</label>
+            <div class="layui-input-inline">
+                <input id="ioPri" class="layui-input" type="text" lay-verify="number" >
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">鐩爣搴撲綅锛�</label>
+            <div class="layui-input-inline cool-auto-complete">
+                <input id="locNo" class="layui-input" type="text" style="display: none">
+                <input id="locNo$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏�..." onfocus=this.blur()>
+                <div class="cool-auto-complete-window">
+                    <input class="cool-auto-complete-window-input" data-key="locMastQueryBylocNo" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                    <select class="cool-auto-complete-window-select" data-key="locMastQueryBylocNoSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                    </select>
+                </div>
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">鐩� 鏍� 绔欙細</label>
+            <div class="layui-input-inline cool-auto-complete">
+                <input id="staNo" class="layui-input" type="text" lay-verify="number"  style="display: none">
+                <input id="staNo$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏�..." onfocus=this.blur()>
+                <div class="cool-auto-complete-window">
+                    <input class="cool-auto-complete-window-input" data-key="basDevpQueryBystaNo" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                    <select class="cool-auto-complete-window-select" data-key="basDevpQueryBystaNoSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                    </select>
+                </div>
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">婧愩��銆�绔欙細</label>
+            <div class="layui-input-inline cool-auto-complete">
+                <input id="sourceStaNo" class="layui-input" type="text" lay-verify="number"  style="display: none">
+                <input id="sourceStaNo$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏�..." onfocus=this.blur()>
+                <div class="cool-auto-complete-window">
+                    <input class="cool-auto-complete-window-input" data-key="basDevpQueryBysourceStaNo" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                    <select class="cool-auto-complete-window-select" data-key="basDevpQueryBysourceStaNoSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                    </select>
+                </div>
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">婧� 搴� 浣嶏細</label>
+            <div class="layui-input-inline cool-auto-complete">
+                <input id="sourceLocNo" class="layui-input" type="text" style="display: none">
+                <input id="sourceLocNo$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏�..." onfocus=this.blur()>
+                <div class="cool-auto-complete-window">
+                    <input class="cool-auto-complete-window-input" data-key="locMastQueryBysourceLocNo" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                    <select class="cool-auto-complete-window-select" data-key="locMastQueryBysourceLocNoSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                    </select>
+                </div>
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">鎷c��銆�鏂欙細</label>
+            <div class="layui-input-inline">
+                <input id="picking" class="layui-input" type="checkBox" lay-skin="primary" lay-filter='detailCheckbox'>
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">閫�銆�銆�鍑猴細</label>
+            <div class="layui-input-inline">
+                <input id="exitMk" class="layui-input" type="checkBox" lay-skin="primary" lay-filter='detailCheckbox'>
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">绌恒��銆�鏉匡細</label>
+            <div class="layui-input-inline">
+                <input id="emptyMk" class="layui-input" type="checkBox" lay-skin="primary" lay-filter='detailCheckbox'>
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">宸ヤ綔鏃堕棿锛�</label>
+            <div class="layui-input-inline">
+                <input id="ioTime$" class="layui-input" type="text" autocomplete="off">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label" style="font-size: x-small">鍫嗗灈鏈哄惎鍔ㄦ椂闂达細</label>
+            <div class="layui-input-inline">
+                <input id="crnStrTime$" class="layui-input" type="text" autocomplete="off">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label" style="font-size: x-small">鍫嗗灈鏈哄仠姝㈡椂闂达細</label>
+            <div class="layui-input-inline">
+                <input id="crnEndTime$" class="layui-input" type="text" autocomplete="off">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">鎷f枡鏃堕棿锛�</label>
+            <div class="layui-input-inline">
+                <input id="plcStrTime$" class="layui-input" type="text" autocomplete="off">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">鏉°��銆�鐮侊細</label>
+            <div class="layui-input-inline">
+                <input id="barcode" class="layui-input" type="text">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">婊°��銆�鏉匡細</label>
+            <div class="layui-input-inline">
+                <input id="fullPlt" class="layui-input" type="checkBox" lay-skin="primary" lay-filter='detailCheckbox'>
+            </div>
+        </div>
+
+
+        <hr class="layui-bg-gray">
+
+        <div id="data-detail-btn" class="layui-btn-container layui-form-item">
+            <div id="data-detail-submit-save" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="save">淇濆瓨</div>
+            <div id="data-detail-submit-edit" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="edit">淇敼</div>
+            <div id="data-detail-close" type="button" class="layui-btn" lay-submit lay-filter="close">鍏抽棴</div>
+        </div>
+
+        <div id="prompt">
+            娓╅Θ鎻愮ず锛氳浠旂粏濉啓鐩稿叧淇℃伅锛�<span class="extrude"><span class="not-null">*</span> 涓哄繀濉�夐」銆�</span>
+        </div>
+    </form>
+</div>
+</body>
+<script type="text/javascript" src="../../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../../static/js/wrkMastLog/wrkMastLog.js" charset="utf-8"></script>
+</html>
+
diff --git a/src/main/webapp/views/forklift.html b/src/main/webapp/views/forklift.html
index 205a290..f19da2c 100644
--- a/src/main/webapp/views/forklift.html
+++ b/src/main/webapp/views/forklift.html
@@ -4,7 +4,7 @@
     <meta charset="UTF-8">
     <title>鎻愬崌鏈虹洃鎺х鐞�</title>
     <link rel="stylesheet" type="text/css" href="../static/css/normalize.css">
-    <link rel="stylesheet" type="text/css" href="../static/css/common.css">
+    <link rel="stylesheet" type="text/css" href="../static/css/common_wcs.css">
     <link rel="stylesheet" type="text/css" href="../static/layui/css/layui.css">
     <link rel="stylesheet" href="../static/css/lift.css">
     <script type="text/javascript" src="../static/js/jquery/jquery-3.3.1.min.js"></script>
diff --git a/src/main/webapp/views/index.html b/src/main/webapp/views/index.html
index 1f51411..4b32f17 100644
--- a/src/main/webapp/views/index.html
+++ b/src/main/webapp/views/index.html
@@ -21,9 +21,8 @@
             <li><a id="console" onclick="nav(this.id)" class="nav-select" href="#">涓绘帶鍥�</a></li>
             <li><a id="pipeline" onclick="nav(this.id)" class="nav-unselect" href="#">杈撻�佽澶�</a></li>
             <li><a id="forklift" onclick="nav(this.id)" class="nav-unselect" href="#">鎻愬崌鏈�</a></li>
-<!--            <li><a id="ste" onclick="nav(this.id)" class="nav-unselect" href="#">绌挎杞�</a></li>-->
             <li><a id="shuttle" onclick="nav(this.id)" class="nav-unselect" href="#">鍥涘悜绌挎杞�</a></li>
-            <li><a id="task" onclick="nav(this.id)" class="nav-unselect" href="#">浠诲姟绠$悊</a></li>
+            <li><a id="admin" onclick="nav(this.id)" class="nav-unselect" href="#">绠$悊鍚庡彴</a></li>
         </ul>
     </div>
 </div>
@@ -37,6 +36,10 @@
 <script>
     // 瀵艰埅鏍�
     function nav(id) {
+        if(id == 'admin') {
+            window.open('./admin/index.html')
+            return
+        }
         $('.nav-select').attr("class", "nav-unselect");
         $('#'+id).attr("class", "nav-select");
         $('#content').attr("src", id+".html");
diff --git a/src/main/webapp/views/led.html b/src/main/webapp/views/led.html
deleted file mode 100644
index 85a8695..0000000
--- a/src/main/webapp/views/led.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="UTF-8">
-    <title>Title</title>
-</head>
-<body>
-<h1>LED</h1>
-</body>
-</html>
\ No newline at end of file
diff --git a/src/main/webapp/views/lift.html b/src/main/webapp/views/lift.html
index 93cc432..f8db854 100644
--- a/src/main/webapp/views/lift.html
+++ b/src/main/webapp/views/lift.html
@@ -4,7 +4,7 @@
     <meta charset="UTF-8">
     <title>鎻愬崌鏈虹洃鎺х鐞�</title>
     <link rel="stylesheet" type="text/css" href="../static/css/normalize.css">
-    <link rel="stylesheet" type="text/css" href="../static/css/common.css">
+    <link rel="stylesheet" type="text/css" href="../static/css/common_wcs.css">
     <link rel="stylesheet" type="text/css" href="../static/layui/css/layui.css">
     <link rel="stylesheet" href="../static/css/lift.css">
     <script type="text/javascript" src="../static/js/jquery/jquery-3.3.1.min.js"></script>
diff --git a/src/main/webapp/views/pipeline.html b/src/main/webapp/views/pipeline.html
index 009b117..34bc757 100644
--- a/src/main/webapp/views/pipeline.html
+++ b/src/main/webapp/views/pipeline.html
@@ -7,7 +7,7 @@
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
     <link rel="stylesheet" type="text/css" href="../static/css/normalize.css">
-    <link rel="stylesheet" type="text/css" href="../static/css/common.css">
+    <link rel="stylesheet" type="text/css" href="../static/css/common_wcs.css">
     <link rel="stylesheet" type="text/css" href="../static/css/pipeline.css">
     <script type="text/javascript" src="../static/js/jquery/jquery-3.3.1.min.js"></script>
     <script type="text/javascript" src="../static/js/common.js"></script>
diff --git a/src/main/webapp/views/shuttle.html b/src/main/webapp/views/shuttle.html
index f5455f1..b559d4f 100644
--- a/src/main/webapp/views/shuttle.html
+++ b/src/main/webapp/views/shuttle.html
@@ -4,7 +4,7 @@
     <meta charset="UTF-8">
     <title>鍥涘悜绌挎杞︾洃鎺х鐞�</title>
     <link rel="stylesheet" type="text/css" href="../static/css/normalize.css">
-    <link rel="stylesheet" type="text/css" href="../static/css/common.css">
+    <link rel="stylesheet" type="text/css" href="../static/css/common_wcs.css">
     <link rel="stylesheet" type="text/css" href="../static/layui/css/layui.css">
     <link rel="stylesheet" href="../static/css/shuttle.css">
     <script type="text/javascript" src="../static/js/jquery/jquery-3.3.1.min.js"></script>
diff --git a/src/main/webapp/views/shuttle2.html b/src/main/webapp/views/shuttle2.html
index 40adc13..48a661a 100644
--- a/src/main/webapp/views/shuttle2.html
+++ b/src/main/webapp/views/shuttle2.html
@@ -4,7 +4,7 @@
     <meta charset="UTF-8">
     <title>鍥涘悜绌挎杞︾洃鎺х鐞�</title>
     <link rel="stylesheet" type="text/css" href="../static/css/normalize.css">
-    <link rel="stylesheet" type="text/css" href="../static/css/common.css">
+    <link rel="stylesheet" type="text/css" href="../static/css/common_wcs.css">
     <link rel="stylesheet" type="text/css" href="../static/layui/css/layui.css">
     <link rel="stylesheet" href="../static/css/shuttle.css">
     <script type="text/javascript" src="../static/js/jquery/jquery-3.3.1.min.js"></script>
diff --git a/src/main/webapp/views/shuttle_zs.html b/src/main/webapp/views/shuttle_zs.html
index c0621a7..4ce44b2 100644
--- a/src/main/webapp/views/shuttle_zs.html
+++ b/src/main/webapp/views/shuttle_zs.html
@@ -4,7 +4,7 @@
     <meta charset="UTF-8">
     <title>鍥涘悜绌挎杞︾洃鎺х鐞�</title>
     <link rel="stylesheet" type="text/css" href="../static/css/normalize.css">
-    <link rel="stylesheet" type="text/css" href="../static/css/common.css">
+    <link rel="stylesheet" type="text/css" href="../static/css/common_wcs.css">
     <link rel="stylesheet" type="text/css" href="../static/layui/css/layui.css">
     <link rel="stylesheet" href="../static/css/shuttle.css">
     <script type="text/javascript" src="../static/js/jquery/jquery-3.3.1.min.js"></script>

--
Gitblit v1.9.1