From 1662cd2f5c686973a9a596865dfe412fc5c8ae6d Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期三, 20 十二月 2023 16:02:15 +0800
Subject: [PATCH] #

---
 zy-asrs-wms/src/main/webapp/static/js/user/user.js                                    |   22 
 zy-asrs-common/src/main/java/com/zy/asrs/common/web/AuthController.java               |   46 +++
 zy-asrs-wms/src/main/webapp/views/user/user.html                                      |   57 ++++
 zy-asrs-common/src/main/resources/mapper/sys/HostMapper.xml                           |    4 
 zy-asrs-common/src/main/java/com/zy/asrs/common/sys/service/impl/HostServiceImpl.java |    5 
 zy-asrs-common/src/main/java/com/zy/asrs/common/web/BaseController.java               |   25 +
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/config/AdminInterceptor.java                |    6 
 zy-asrs-wms/src/main/webapp/static/js/hostTable.js                                    |  153 +++++++++++
 zy-asrs-common/src/main/java/com/zy/asrs/common/sys/entity/Host.java                  |    8 
 zy-asrs-common/src/main/java/com/zy/asrs/common/sys/controller/UserController.java    |    5 
 zy-asrs-common/src/main/java/com/zy/asrs/common/sys/entity/UserLogin.java             |    7 
 zy-asrs-common/src/main/java/com/zy/asrs/common/sys/controller/HostController.java    |   25 +
 zy-asrs-wms/src/main/webapp/views/host/host.html                                      |  254 +++++++++++++++++--
 zy-asrs-wms/src/main/webapp/views/index.html                                          |  101 +++++++
 zy-asrs-common/src/main/java/com/zy/asrs/common/sys/mapper/HostMapper.java            |    2 
 zy-asrs-common/src/main/java/com/zy/asrs/common/sys/service/HostService.java          |    2 
 16 files changed, 654 insertions(+), 68 deletions(-)

diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/sys/controller/HostController.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/sys/controller/HostController.java
index 2805b16..e60e8ca 100644
--- a/zy-asrs-common/src/main/java/com/zy/asrs/common/sys/controller/HostController.java
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/sys/controller/HostController.java
@@ -1,5 +1,6 @@
 package com.zy.asrs.common.sys.controller;
 
+import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.zy.asrs.common.sys.entity.Host;
@@ -14,6 +15,7 @@
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.sql.Wrapper;
 import java.util.*;
 
 @RestController
@@ -56,6 +58,8 @@
     @RequestMapping(value = "/host/add/auth")
     @ManagerAuth
     public R add(Host host) {
+        host.setStatus(1);
+        host.setCreateTime(new Date());
         hostService.save(host);
         return R.ok();
     }
@@ -66,14 +70,15 @@
         if (Cools.isEmpty(host) || null==host.getId()){
             return R.error();
         }
+        host.setUpdateTime(new Date());
         hostService.updateById(host);
         return R.ok();
     }
 
     @RequestMapping(value = "/host/delete/auth")
     @ManagerAuth
-    public R delete(Integer[] ids){
-        if (Cools.isEmpty(ids)){
+    public R delete(@RequestParam(value = "ids[]") Integer[] ids) {
+        if (Cools.isEmpty(ids)) {
             return R.error();
         }
         hostService.removeByIds(Arrays.asList(ids));
@@ -97,4 +102,20 @@
         return R.ok(result);
     }
 
+    @RequestMapping(value = "/host/delete/one/auth")
+    @ManagerAuth
+    public R deleteOne(@RequestParam String param){
+        if (getUserId() != 9527) {
+            if (getUser().getRoleId() != 2) {
+                return R.error("鏉冮檺涓嶈冻");
+            }
+        }
+        Host host = JSONArray.parseObject(param, Host.class);
+        if (Cools.isEmpty(host)){
+            return R.error();
+        }
+        hostService.removeById(host.getId());
+        return R.ok();
+    }
+
 }
diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/sys/controller/UserController.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/sys/controller/UserController.java
index ece2a14..3d049f6 100644
--- a/zy-asrs-common/src/main/java/com/zy/asrs/common/sys/controller/UserController.java
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/sys/controller/UserController.java
@@ -42,6 +42,7 @@
                   @RequestParam Map<String, Object> param){
         excludeTrash(param);
         LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(User::getHostId, param.get("host_id"));
         wrapper.orderByDesc(User::getId);
         if (9527 == getUserId()) {
             return R.ok(userService.page(new Page<>(curr, limit), wrapper));
@@ -84,6 +85,10 @@
     @RequestMapping(value = "/user/add/auth")
     @ManagerAuth(memo = "绯荤粺鐢ㄦ埛娣诲姞")
     public R add(User user) {
+        User one = userService.getOne(new LambdaQueryWrapper<User>().eq(User::getUsername, user.getUsername()));
+        if (one != null) {
+            return R.error("璐﹀彿宸插瓨鍦�");
+        }
         user.setStatus(1);
         user.setCreateTime(new Date());
         userService.save(user);
diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/sys/entity/Host.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/sys/entity/Host.java
index 87e3a08..21b1233 100644
--- a/zy-asrs-common/src/main/java/com/zy/asrs/common/sys/entity/Host.java
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/sys/entity/Host.java
@@ -29,11 +29,6 @@
     private String name;
 
     /**
-     * 鏍囪瘑
-     */
-    private String flag;
-
-    /**
      * 娣诲姞鏃堕棿
      */
     private Date createTime;
@@ -50,9 +45,8 @@
 
     public Host() {}
 
-    public Host(String name,String flag,Date createTime,Date updateTime,Integer status) {
+    public Host(String name,Date createTime,Date updateTime,Integer status) {
         this.name = name;
-        this.flag = flag;
         this.createTime = createTime;
         this.updateTime = updateTime;
         this.status = status;
diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/sys/entity/UserLogin.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/sys/entity/UserLogin.java
index d1a4aef..08e2205 100644
--- a/zy-asrs-common/src/main/java/com/zy/asrs/common/sys/entity/UserLogin.java
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/sys/entity/UserLogin.java
@@ -7,6 +7,7 @@
 import com.zy.asrs.common.sys.service.UserService;
 import com.zy.asrs.framework.common.Cools;
 import com.zy.asrs.framework.common.SpringUtils;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -26,6 +27,12 @@
     private Long id;
 
     /**
+     * 浠撳簱
+     */
+    @ApiModelProperty(value= "浠撳簱")
+    private Long hostId;
+
+    /**
      * 鍛樺伐
      */
     private Long userId;
diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/sys/mapper/HostMapper.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/sys/mapper/HostMapper.java
index d540e59..5806f47 100644
--- a/zy-asrs-common/src/main/java/com/zy/asrs/common/sys/mapper/HostMapper.java
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/sys/mapper/HostMapper.java
@@ -9,4 +9,6 @@
 @Repository
 public interface HostMapper extends BaseMapper<Host> {
 
+    Host selectTop1();
+
 }
diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/sys/service/HostService.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/sys/service/HostService.java
index 773f28e..4208175 100644
--- a/zy-asrs-common/src/main/java/com/zy/asrs/common/sys/service/HostService.java
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/sys/service/HostService.java
@@ -6,4 +6,6 @@
 
 public interface HostService extends IService<Host> {
 
+    Host getTop1();
+
 }
diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/sys/service/impl/HostServiceImpl.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/sys/service/impl/HostServiceImpl.java
index 8b9507b..3b0979f 100644
--- a/zy-asrs-common/src/main/java/com/zy/asrs/common/sys/service/impl/HostServiceImpl.java
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/sys/service/impl/HostServiceImpl.java
@@ -9,4 +9,9 @@
 @Service("hostService")
 public class HostServiceImpl extends ServiceImpl<HostMapper, Host> implements HostService {
 
+    @Override
+    public Host getTop1() {
+        return this.baseMapper.selectTop1();
+    }
+
 }
diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/web/AuthController.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/web/AuthController.java
index df4a984..0ec42a1 100644
--- a/zy-asrs-common/src/main/java/com/zy/asrs/common/web/AuthController.java
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/web/AuthController.java
@@ -44,6 +44,8 @@
     private ResourceService resourceService;
     @Autowired
     private RoleResourceService roleResourceService;
+    @Autowired
+    private HostService hostService;
 
     @RequestMapping("/login.action")
     @ManagerAuth(value = ManagerAuth.Auth.NONE, memo = "鐧诲綍")
@@ -79,11 +81,47 @@
         userLogin.setToken(token);
         userLogin.setCreateTime(new Date());
         userLogin.setSystem(system);
+        if (user.getRoleId() == 2) {
+            userLogin.setHostId(hostService.getTop1().getId());
+        }
         userLoginService.save(userLogin);
         Map<String, Object> res = new HashMap<>();
         res.put("username", user.getUsername());
         res.put("token", token);
         return R.ok(res);
+    }
+
+    @RequestMapping("/show/host.action")
+    @ManagerAuth
+    public R showHosts() {
+        Long hostId = getHostId();
+        String hostName = null;
+        if (hostId != null) {
+            Host host = hostService.getById(hostId);
+            if (host != null) {
+                hostName = host.getName();
+            }
+        }
+        return R.ok().add(Cools
+                .add("root", getUser().getRoleId() == 2)
+                .add("host", getHostId() == null)
+                .add("hostName", hostName)
+        );
+    }
+
+    @RequestMapping(value = "/root/change/host/auth")
+    @ManagerAuth
+    public R rootChangeHost(@RequestParam Long hostId) {
+        UserLogin userLogin = userLoginService.getOne(new LambdaQueryWrapper<UserLogin>().eq(UserLogin::getUserId, getUserId()).eq(UserLogin::getSystem, String.valueOf(LoginSystemType.WMS)));
+        if (userLogin != null) {
+            userLogin.setHostId(hostId);
+            if (!userLoginService.updateById(userLogin)) {
+                throw new CoolException("淇敼鍟嗘埛澶辫触");
+            }
+            return R.ok();
+        } else {
+            return R.error();
+        }
     }
 
     @RequestMapping("/code/switch.action")
@@ -130,10 +168,6 @@
             oneLevel = resourceService.list(new LambdaQueryWrapper<Resource>().eq(Resource::getLevel, 1).orderByAsc(Resource::getSort));
             resourceWrapper = new LambdaQueryWrapper<Resource>().eq(Resource::getLevel, 2).eq(Resource::getStatus, 1).orderByAsc(Resource::getSort);
         } else {
-            // 婵�娲荤爜楠岃瘉
-            if (!SystemProperties.SYSTEM_ACTIVATION) {
-                return R.ok();
-            }
             oneLevel = resourceService.list(new LambdaQueryWrapper<Resource>().eq(Resource::getLevel, 1).eq(Resource::getStatus, 1).orderByAsc(Resource::getSort));
             // 鑾峰彇褰撳墠鐢ㄦ埛鐨勬墍鏈変簩绾ц彍鍗�
             user = userService.getById(getUserId());
@@ -158,11 +192,11 @@
                     // 鏄惁鎷ユ湁鏌ョ湅鏉冮檺
                     if (getUserId() != 9527) {
                         Resource view = resourceService.getOne(new LambdaQueryWrapper<Resource>().eq(Resource::getResourceId, resource.getId()).like(Resource::getCode, "#view"));
-                        if (!Cools.isEmpty(view)){
+                        if (!Cools.isEmpty(view)) {
                             RoleResource param = new RoleResource();
                             param.setResourceId(view.getId());
                             param.setRoleId(user.getRoleId());
-                            if (null == roleResourceService.getOne(new LambdaQueryWrapper<>(param))){
+                            if (null == roleResourceService.getOne(new LambdaQueryWrapper<>(param))) {
                                 continue;
                             }
                         }
diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/web/BaseController.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/web/BaseController.java
index fefc3f6..2c489b2 100644
--- a/zy-asrs-common/src/main/java/com/zy/asrs/common/web/BaseController.java
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/web/BaseController.java
@@ -1,8 +1,12 @@
 package com.zy.asrs.common.web;
 
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.zy.asrs.common.sys.entity.User;
+import com.zy.asrs.common.sys.entity.UserLogin;
+import com.zy.asrs.common.sys.service.UserLoginService;
 import com.zy.asrs.common.sys.service.UserService;
 import com.zy.asrs.framework.common.BaseRes;
 import com.zy.asrs.framework.common.Cools;
@@ -27,6 +31,27 @@
     protected HttpServletRequest request;
     @Autowired
     private UserService userService;
+    @Autowired
+    private UserLoginService userLoginService;
+
+    protected Long getHostId(){
+        if (getUserId() == 9527) {
+            return null;
+        }
+        User user = getUser();
+        if (user.getRoleId() == 2) {
+            String hostId = String.valueOf(request.getAttribute("hostId"));
+            if (Cools.isEmpty(hostId)) {
+                UserLogin userLogin = userLoginService.getOne(new LambdaQueryWrapper<UserLogin>().eq(UserLogin::getUserId, user.getId()));
+                if (userLogin != null) {
+                    return userLogin.getHostId();
+                }
+            }
+            return Long.parseLong(hostId);
+        } else {
+            return user.getHostId();
+        }
+    }
 
     protected Long getUserId(){
         return Long.parseLong(String.valueOf(request.getAttribute("userId")));
diff --git a/zy-asrs-common/src/main/resources/mapper/sys/HostMapper.xml b/zy-asrs-common/src/main/resources/mapper/sys/HostMapper.xml
index c976c76..fba7bde 100644
--- a/zy-asrs-common/src/main/resources/mapper/sys/HostMapper.xml
+++ b/zy-asrs-common/src/main/resources/mapper/sys/HostMapper.xml
@@ -2,4 +2,8 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.zy.asrs.common.sys.mapper.HostMapper">
 
+    <select id="selectTop1" resultType="com.zy.asrs.common.sys.entity.Host">
+        select top 1 * from sys_host where 1=1 order by id
+    </select>
+
 </mapper>
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/config/AdminInterceptor.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/config/AdminInterceptor.java
index 4960cac..d17f8ba 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/config/AdminInterceptor.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/config/AdminInterceptor.java
@@ -123,16 +123,12 @@
             }
             // 璇锋眰缂撳瓨
             request.setAttribute("userId", user.getId());
+            request.setAttribute("hostId", userLogin.getHostId());
             // 鏇存柊 token 鏈夋晥鏈�
             userLogin.setCreateTime(new Date());
             userLoginService.updateById(userLogin);
             // 鎿嶄綔鏃ュ織
             if (!Cools.isEmpty(memo)) {
-                // 杩涜婵�娲诲垽鏂�
-                if (!SystemProperties.SYSTEM_ACTIVATION) {
-                    Http.response(response, BaseRes.NO_ACTIVATION);
-                    return false;
-                }
                 // 璁板綍鎿嶄綔鏃ュ織
                 OperateLog operateLog = new OperateLog();
                 operateLog.setAction(Cools.isEmpty(memo)?request.getRequestURI():memo);
diff --git a/zy-asrs-wms/src/main/webapp/static/js/hostTable.js b/zy-asrs-wms/src/main/webapp/static/js/hostTable.js
new file mode 100644
index 0000000..0236566
--- /dev/null
+++ b/zy-asrs-wms/src/main/webapp/static/js/hostTable.js
@@ -0,0 +1,153 @@
+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;
+
+    /****************************************** 宸﹁竟琛� *************************************************/
+
+    var insTb = table.render({
+        elem: '#originTable',
+        url: baseUrl + '/host/list/auth',
+        height: 'full-100',
+        headers: {token: localStorage.getItem('token')},
+        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
+        },
+        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="edit" class="layui-btn layui-btn-sm layui-btn-warm icon-btn"><i class="layui-icon">&#xe642;</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(''),
+        defaultToolbar: [],
+        cols: [[
+            {field: 'id', title: '缂栧彿', width: 70, align: 'center'},
+            {field: 'name', title: '椤圭洰鍚嶇О'}
+        ]],
+        done: function (res, curr, count) {
+            $('#dictTable+.layui-table-view .layui-table-body tbody>tr:first').trigger('click');
+        }
+    });
+
+    /* 琛ㄦ牸鎼滅储 */
+    form.on('submit(originTableSearch)', function (data) {
+        insTb.reload({where: {name: data.field.name}});
+        return false;
+    });
+
+    /* 琛ㄦ牸鎼滅储 */
+    form.on('submit(originTbReset)', function (data) {
+        insTb.reload();
+        insTb2.reload({where: {host_id: null}, page: {curr: 1}});
+        return false;
+    });
+
+    /* 琛ㄦ牸澶村伐鍏锋爮鐐瑰嚮浜嬩欢 */
+    table.on('toolbar(originTable)', function (obj) {
+        if (obj.event === 'add') { // 娣诲姞
+            showEdit();
+        } else if (obj.event === 'edit') { // 淇敼
+            if (selObj == null) {
+                return;
+            }
+            showEdit(selObj.data);
+        } else if (obj.event === 'del') { // 鍒犻櫎
+            if (selObj == null) {
+                return;
+            }
+            doDel(selObj);
+        }
+    });
+
+    /* 鐩戝惉琛屽崟鍑讳簨浠� */
+    var selObj;
+    table.on('row(originTable)', function (obj) {
+        selObj = obj;
+        obj.tr.addClass('layui-table-click').siblings().removeClass('layui-table-click');
+        insTb2.reload({where: {host_id: obj.data.id}, page: {curr: 1}});
+    });
+
+    /* 鏄剧ず琛ㄥ崟寮圭獥 */
+    function showEdit(mData) {
+        admin.open({
+            type: 1,
+            title: (mData ? '淇敼' : '娣诲姞') + '椤圭洰',
+            content: $('#hostEditDialog').html(),
+            success: function (layero, dIndex) {
+                // 鍥炴樉琛ㄥ崟鏁版嵁
+                form.val('hostEditForm', mData);
+                // 琛ㄥ崟鎻愪氦浜嬩欢
+                form.on('submit(hostEditSubmit)', function (data) {
+                    var loadIndex = layer.load(2);
+                    $.ajax({
+                        url: baseUrl+"/host/"+(mData?'update':'add')+"/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: data.field,
+                        method: 'POST',
+                        success: function (res) {
+                            layer.close(loadIndex);
+                            selObj = null;
+                            if (res.code === 200){
+                                layer.close(dIndex);
+                                layer.msg(res.msg, {icon: 1});
+                                insTb.reload();
+                            } else if (res.code === 403){
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg, {icon: 2});
+                            }
+                        }
+                    })
+                    return false;
+                });
+            }
+        });
+    }
+
+    /* 鍒犻櫎 */
+    function doDel(obj) {
+        layer.confirm('纭畾瑕佸垹闄ゆ鍗曟嵁绫诲瀷鍚楋紵', {
+            skin: 'layui-layer-admin',
+            shade: .1
+        }, function (i) {
+            layer.close(i);
+            var loadIndex = layer.load(2);
+            $.ajax({
+                url: baseUrl+"/host/delete/one/auth",
+                headers: {'token': localStorage.getItem('token')},
+                data: {param: JSON.stringify(obj.data)},
+                method: 'POST',
+                success: function (res) {
+                    selObj = null;
+                    layer.close(loadIndex);
+                    if (res.code === 200){
+                        layer.closeAll();
+                        insTb.reload();
+                        $('#dictTable+.layui-table-view .layui-table-body tbody>tr:first').trigger('click');
+                    } else if (res.code === 403){
+                        top.location.href = baseUrl+"/";
+                    } else {
+                        layer.msg(res.msg, {icon: 2});
+                    }
+                }
+            })
+        });
+    }
+
+})
diff --git a/zy-asrs-wms/src/main/webapp/static/js/user/user.js b/zy-asrs-wms/src/main/webapp/static/js/user/user.js
index 0e06c7e..92c751a 100644
--- a/zy-asrs-wms/src/main/webapp/static/js/user/user.js
+++ b/zy-asrs-wms/src/main/webapp/static/js/user/user.js
@@ -23,14 +23,14 @@
         height: 'full-100',
         cols: [[
             {type: 'checkbox'}
-            // ,{field: 'hostName', align: 'center',title: '鎺堟潈鍟嗘埛', templet: '#hostTpl', width: 140}
+            ,{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: 'username', align: 'center',title: '鐢ㄦ埛鍚�'}
             // ,{field: 'deptName', align: 'center',title: '鎵�灞為儴闂�'}
             ,{field: 'roleName', align: 'center',title: '瑙掕壊'}
             ,{field: 'email', align: 'center',title: '閭'}
-            // ,{field: 'sex$', 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}
 
@@ -68,17 +68,18 @@
 
     /* 琛ㄦ牸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) {
+            var checkRows = table.checkStatus('userTable');
+            if (checkRows.data.length === 0) {
                 layer.msg('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁', {icon: 2});
                 return;
             }
-            del(checkStatus.map(function (d) {
+            var ids = checkRows.data.map(function (d) {
                 return d.id;
-            }));
+            });
+            doDelUser({ids: ids});
         }
     });
 
@@ -102,7 +103,8 @@
                 break;
             // 鍒犻櫎
             case 'del':
-                del([data.id]);
+                var ids = [obj.id];
+                doDelUser({ids: ids});
                 break;
             // 閲嶇疆瀵嗙爜
             case 'resetPwd':
@@ -169,7 +171,7 @@
 
 
     /* 鍒犻櫎璁㈠崟 */
-    function del(ids) {
+    function doDelUser(obj) {
         layer.confirm('纭畾瑕佸垹闄ら�変腑鏁版嵁鍚楋紵', {
             skin: 'layui-layer-admin',
             shade: .1
@@ -179,7 +181,7 @@
             $.ajax({
                 url: baseUrl+"/user/delete/auth",
                 headers: {'token': localStorage.getItem('token')},
-                data: {ids: ids},
+                data: {ids: obj.ids},
                 method: 'POST',
                 success: function (res) {
                     layer.close(loadIndex);
diff --git a/zy-asrs-wms/src/main/webapp/views/host/host.html b/zy-asrs-wms/src/main/webapp/views/host/host.html
index 05a3a59..b9eebbb 100644
--- a/zy-asrs-wms/src/main/webapp/views/host/host.html
+++ b/zy-asrs-wms/src/main/webapp/views/host/host.html
@@ -1,55 +1,251 @@
 <!DOCTYPE html>
 <html lang="en">
 <head>
-    <meta charset="utf-8">
-    <title></title>
-    <meta name="renderer" content="webkit">
+    <meta charset="UTF-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <title>浠撳簱绠$悊</title>
     <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">
+    <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all">
+    <!--[if lt IE 9]>
+    <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
+    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
+    <![endif]-->
+    <style>
+        /** 鏌ョ湅璇︽儏寮圭獥鏍峰紡 */
+        .paper-info-group {
+            padding: 15px 25px;
+        }
+
+        .paper-info-group h3 {
+            font-weight: bold;
+            color: #000000;
+            padding-bottom: 8px;
+        }
+
+        .paper-info-group p {
+            color: #666;
+            padding-bottom: 12px;
+            font-size: 16px;
+        }
+
+        .paper-info-group .paper-info-group-imgs {
+            padding-top: 5px;
+        }
+
+        .paper-info-group .paper-info-group-imgs img {
+            margin-right: 15px;
+            margin-bottom: 15px;
+            cursor: zoom-in;
+        }
+
+        .paper-info-group .paper-info-group-imgs img:last-child {
+            margin-right: 0;
+        }
+
+        /* 鏃ユ湡缁勪欢涓嶆樉绀虹 */
+        .laydate-time-list li:last-child {
+            display: none;
+        }
+
+        .laydate-time-list li {
+            width: 50% !important;
+        }
+
+        .laydate-time-list ol li {
+            padding-left: 55px !important;
+            width: 100% !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="id" placeholder="缂栧彿" autocomplete="off">
+<!-- 姝f枃寮�濮� -->
+<div class="layui-fluid">
+    <div class="layui-card">
+        <div class="layui-card-body">
+            <button id="eDialogAddBtn" class="layui-btn">娣诲姞浠撳簱</button>
         </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 class="layui-card">
+        <div class="layui-card-header">浠撳簱 - 鏁版嵁鍒楄〃</div>
+        <div class="layui-card-body">
+            <table id="hostTable" lay-filter="hostTable"></table>
+        </div>
     </div>
 </div>
 
-<!-- 琛ㄦ牸 -->
-<table class="layui-hide" id="host" lay-filter="host"></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 type="text/html" id="editDialog">
+    <form id="detail" lay-filter="detail" class="layui-form model-form layui-row">
+        <input name="id" type="hidden"/>
+        <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="name" placeholder="璇疯緭鍏ヤ粨搴撳悕绉�" 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 class="layui-input" name="memo" placeholder="璇疯緭鍏ュ娉�"/>
+                </div>
+            </div>
+        </div>
+        <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="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 type="text/html" id="eDialogTbBar">
+    <a class="layui-btn layui-btn-sm layui-btn-primary" lay-event="edit"><i class="layui-icon">&#xe642;</i>淇敼</a>
+    <a class="layui-btn layui-btn-sm layui-btn-danger" lay-event="delete"><i class="layui-icon">&#xe640;</i>鍒犻櫎</a>
 </script>
 
+
+<!-- js閮ㄥ垎 -->
 <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/host/host.js" charset="utf-8"></script>
+<script>
+    layui.config({
+        base: baseUrl + "/static/layui/lay/modules/"
+    }).use(['table','laydate', 'form', 'util', 'admin'], function(){
+        var $ = layui.jquery;
+        var layer = layui.layer;
+        var admin = layui.admin;
+        var form = layui.form;
+        var table = layui.table;
+        var laydate = layui.laydate;
 
-<iframe id="detail-iframe" scrolling="auto" style="display:none;"></iframe>
+        // 娣诲姞
+        $('#eDialogAddBtn').click(function () {
+            showEditModel();
+        });
 
+        // 娓叉煋琛ㄦ牸
+        var insTb = table.render({
+            elem: '#hostTable',
+            headers: {token: localStorage.getItem('token')},
+            url: baseUrl+'/host/list/auth',
+            page: true,
+            limit: 16,
+            limits: [16, 30, 50, 100, 200, 500],
+            cellMinWidth: 50,
+            cols: [[
+                {field: 'id', title: '#'}
+                // ,{field: 'id', title: 'ID', sort: true,align: 'center', fixed: 'left', width: 80}
+                ,{field: 'name', align: 'center',title: '浠撳簱鍚嶇О'}
+                // ,{field: 'flag', align: 'center',title: '鏍囪瘑'}
+                // ,{field: 'createTime$', align: 'center',title: '娣诲姞鏃堕棿'}
+                // ,{field: 'status$', 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: '澶囨敞'}
+                ,{align: 'center', toolbar: '#eDialogTbBar', title: '鎿嶄綔', minWidth: 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
+            },
+            size: 'lg'
+        });
+
+        // 宸ュ叿鏉$偣鍑讳簨浠�
+        table.on('tool(hostTable)', function (obj) {
+            var data = obj.data;
+            if (obj.event === 'delete') {
+                var ids = [data.id];
+                doDel({ids: ids});
+            } else if (obj.event === 'edit') {
+                showEditModel(data);
+            }
+        });
+
+        /* 鏄剧ず琛ㄥ崟寮圭獥 */
+        function showEditModel(mData) {
+            admin.open({
+                type: 1,
+                title: (mData ? '淇敼' : '娣诲姞') + '椤圭洰',
+                area: '500px',
+                content: $('#editDialog').html(),
+                success: function (layero, dIndex) {
+                    // 鍥炴樉琛ㄥ崟鏁版嵁
+                    form.val('detail', mData);
+                    // 琛ㄥ崟鎻愪氦浜嬩欢
+                    form.on('submit(editSubmit)', function (data) {
+                        var loadIndex = layer.load(2);
+                        $.ajax({
+                            url: baseUrl+"/host/"+(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;
+                    })
+                }
+            });
+        }
+
+        function doDel(obj) {
+            layer.confirm('纭畾鍒犻櫎鏁版嵁鍚楋紵', {
+                skin: 'layui-layer-admin',
+                shade: .1
+            }, function (i) {
+                layer.close(i);
+                var loadIndex = layer.load(2);
+                $.ajax({
+                    url: baseUrl+"/host/delete/auth",
+                    headers: {'token': localStorage.getItem('token')},
+                    data: {ids: obj.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});
+                        }
+                    }
+                })
+
+            });
+        }
+
+    })
+</script>
 </body>
 </html>
-
diff --git a/zy-asrs-wms/src/main/webapp/views/index.html b/zy-asrs-wms/src/main/webapp/views/index.html
index cbe75fb..79eeb03 100644
--- a/zy-asrs-wms/src/main/webapp/views/index.html
+++ b/zy-asrs-wms/src/main/webapp/views/index.html
@@ -10,6 +10,7 @@
   <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">
+  <link rel="stylesheet" href="../static/css/originTable.css" media="all">
   <style>
     .layui-logo img {
       width: 25px;
@@ -42,8 +43,11 @@
     </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>
+        <a id="hostName"></a>
       </li>
+<!--      <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 layui-hide-xs" lay-unselect>
         <a ew-event="fullScreen" title="鍏ㄥ睆"><i class="layui-icon layui-icon-screen-full"></i></a>
       </li>
@@ -102,13 +106,14 @@
     base: baseUrl + "/static/layui/lay/modules/"
   }).extend({
     notice: 'notice/notice',
-  }).use(['index', 'element', 'layer', 'admin', 'notice'], function () {
+  }).use(['index', 'element', 'layer', 'admin', 'notice', 'table'], 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 table = layui.table;
 
     var easywebIframeMsg = localStorage.getItem("easyweb-iframe");
     if (!isEmpty(easywebIframeMsg)) {
@@ -140,15 +145,36 @@
       }
     });
 
+    // 妫�娴嬫槸鍚︿负瓒呯骇绠$悊鍛�
+    $.ajax({
+      url: baseUrl + "/show/host.action",
+      headers: {'token': localStorage.getItem('token')},
+      method: 'GET',
+      success: function (res) {
+        if (res.code === 200) {
+          if (!isEmpty(res.data.hostName)) {
+            $('#hostName').text(res.data.hostName);
+          }
+          if (res.data.root) {
+            showHost();
+          }
+        } else if (res.code === 403) {
+          top.location.href = baseUrl + "/login";
+        } else {
+          layer.msg(res.msg, {icon: 2});
+        }
+      }
+    });
+
     // 榛樿鍔犺浇涓婚〉
     index.loadHome({
-      menuPath: baseUrl+'/views/home/navigation.html',
+      menuPath: baseUrl + '/views/home/navigation.html',
       menuName: '<i class="layui-icon layui-icon-home"></i>'
     });
 
     $('#username').text(localStorage.getItem('username'));
 
-    $(document).on('click','#logout', function () {
+    $(document).on('click', '#logout', function () {
       window.location.href = "login.html";
       localStorage.removeItem('token');
       localStorage.removeItem('username');
@@ -160,6 +186,73 @@
     var url = logout.getAttribute('href');
     logout.setAttribute('href', baseUrl + "/login");
 
+    // 澶氫粨搴撴ā寮�
+    function showHost() {
+      // var dele = layer.msg('姝e湪鍒犻櫎', {icon: 16, time: 10000}, function(){
+      //     layer.msg('鎴愬姛鍒犻櫎', {icon: 1})
+      // });
+      admin.open({
+        type: 1,
+        title: '浠撳簱閫夋嫨',
+        area: '250px',
+        offset: 'r',
+        shade: false,
+        shadeClose: true,
+        content: '<table id="originTable" lay-filter="originTable"></table>',
+        success: function (layero) {
+          var insTb = table.render({
+            elem: '#originTable',
+            url: baseUrl + '/host/list/auth',
+            height: 'full-600',
+            headers: {token: localStorage.getItem('token')},
+            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
+            },
+            defaultToolbar: [],
+            cols: [[
+              {field: 'id', title: '缂栧彿', width: 70, align: 'center'},
+              {field: 'name', title: '椤圭洰鍚嶇О'}
+            ]],
+            done: function (res, curr, count) {
+              $('.layui-table, .layui-table-view').css("margin", 0);
+              // $('#originTable+.layui-table-view .layui-table-body tbody>tr:first').trigger('click');
+            }
+          });
+          /* 鐩戝惉琛屽崟鍑讳簨浠� */
+          table.on('row(originTable)', function (obj) {
+            obj.tr.addClass('layui-table-click').siblings().removeClass('layui-table-click');
+            // 妫�娴嬫槸鍚︿负瓒呯骇绠$悊鍛�
+            $.ajax({
+              url: baseUrl + "/root/change/host/auth?hostId=" + obj.data.id,
+              headers: {'token': localStorage.getItem('token')},
+              method: 'GET',
+              success: function (res) {
+                if (res.code === 200) {
+                  window.location.reload();
+                } else if (res.code === 403) {
+                  top.location.href = baseUrl + "/login";
+                } else {
+                  layer.msg(res.msg, {icon: 2});
+                }
+              }
+            });
+          });
+        }
+      });
+    }
+
   });
 </script>
 <script type="text/html" id="menuTpl">
diff --git a/zy-asrs-wms/src/main/webapp/views/user/user.html b/zy-asrs-wms/src/main/webapp/views/user/user.html
index d2611c8..d0a15c0 100644
--- a/zy-asrs-wms/src/main/webapp/views/user/user.html
+++ b/zy-asrs-wms/src/main/webapp/views/user/user.html
@@ -26,7 +26,29 @@
 <!-- 姝f枃寮�濮� -->
 <div class="layui-fluid" style="padding-bottom: 0;">
     <div class="layui-row layui-col-space15">
-        <div class="layui-col-md12">
+        <div class="layui-col-md3" id="left-table">
+            <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" style="max-width: 140px;">
+                                <input name="name" class="layui-input" placeholder="杈撳叆椤圭洰鍚嶇О"/>
+                            </div>
+                            <div class="layui-inline">
+                                <button class="layui-btn icon-btn" lay-filter="originTableSearch" lay-submit>
+                                    <i class="layui-icon">&#xe615;</i>鎼滅储
+                                </button>
+                                <button class="layui-btn icon-btn" lay-filter="originTbReset" lay-submit>
+                                    <i class="layui-icon">&#xe666;</i>閲嶇疆
+                                </button>
+                            </div>
+                        </div>
+                    </form>
+                    <table id="originTable" lay-filter="originTable"></table>
+                </div>
+            </div>
+        </div>
+        <div class="layui-col-md9">
             <div class="layui-card">
                 <div class="layui-card-body" style="padding: 10px;">
                     <form class="layui-form toolbar">
@@ -103,9 +125,22 @@
 
             <div class="layui-col-md6">
                 <div class="layui-form-item">
-                    <label class="layui-form-label layui-form-required">鐧诲綍璐︽埛</label>
+                    <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="">
+                        <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 cool-auto-complete">
+                        <input name="hostId" class="layui-input" style="display: none">
+                        <input id="hostName" name="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="hostQueryByhostId" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                            <select class="cool-auto-complete-window-select" data-key="hostQueryByhostIdSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                            </select>
+                        </div>
                     </div>
                 </div>
 
@@ -125,15 +160,26 @@
 
             <div class="layui-col-md6">
                 <div class="layui-form-item">
-                    <label class="layui-form-label layui-form-required">鎵嬫満鍙�</label>
+                    <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="">
+                        <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">
                         <input name="email" placeholder="璇疯緭鍏ラ偖绠�" class="layui-input">
+                    </div>
+                </div>
+
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鎬у埆</label>
+                    <div class="layui-input-block">
+                        <select name="sex">
+                            <option value="2" style="display: none">鏈煡</option>
+                            <option value="0">鐢�</option>
+                            <option value="1">濂�</option>
+                        </select>
                     </div>
                 </div>
 
@@ -154,6 +200,7 @@
 <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/javascript" src="../../static/js/hostTable.js" charset="utf-8"></script>
 
 <!-- 椤圭洰缂栬緫绐楀彛 -->
 <script type="text/html" id="hostEditDialog">

--
Gitblit v1.9.1