Browse Source

1.添加权限控制页面

slambb 2 years ago
parent
commit
783cca67d2

+ 3 - 5
src/main/java/com/YuyeTech/HeartRate/game/controller/LoginController.java

@@ -1,7 +1,6 @@
 package com.YuyeTech.HeartRate.game.controller;
 
 import cn.binarywang.wx.miniapp.api.WxMaService;
-import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
 import cn.binarywang.wx.miniapp.bean.WxMaUserInfo;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
@@ -9,7 +8,6 @@ import cn.hutool.json.JSONUtil;
 import com.YuyeTech.HeartRate.VO.ClientStateVO;
 import com.YuyeTech.HeartRate.dataobject.*;
 import com.YuyeTech.HeartRate.enums.*;
-import com.YuyeTech.HeartRate.exception.AuthorizeException;
 import com.YuyeTech.HeartRate.form.ClientForm;
 import com.YuyeTech.HeartRate.game.TP_AppleInfo.projo.AppleInfo;
 import com.YuyeTech.HeartRate.game.TP_AppleInfo.service.AppleInfoService;
@@ -19,6 +17,8 @@ import com.YuyeTech.HeartRate.game.userinfo.projo.MainInfo;
 import com.YuyeTech.HeartRate.game.userinfo.projo.UserInfo;
 import com.YuyeTech.HeartRate.game.userinfo.service.MainInfoService;
 import com.YuyeTech.HeartRate.game.userinfo.service.UserInfoService;
+import com.YuyeTech.HeartRate.game.versionCode.projo.VersionCode;
+import com.YuyeTech.HeartRate.game.versionCode.service.VersionCodeService;
 import com.YuyeTech.HeartRate.service.*;
 import com.YuyeTech.HeartRate.utils.*;
 import com.alibaba.fastjson.JSONObject;
@@ -34,7 +34,6 @@ import com.YuyeTech.HeartRate.exception.WxInfoException;
 import freemarker.template.Template;
 import freemarker.template.TemplateException;
 import lombok.extern.slf4j.Slf4j;
-import me.chanjar.weixin.common.error.WxErrorException;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -54,7 +53,6 @@ import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.io.IOException;
 import java.util.*;
-import java.util.concurrent.TimeUnit;
 
 /**
  * 登录
@@ -1093,7 +1091,7 @@ public class LoginController {
                                    @RequestParam("channel") String channel,
                                    @RequestParam(value = "platform", required = false) Integer platform) {
         try {
-            VersionCode versionCode = versionCodeService.findByCode(code);
+            VersionCode versionCode = versionCodeService.findByVersionCodeAndShowConfigKey(code,channel);
 
             if (versionCode == null) {
                 return ResultVOUtil.error(ResultEnum.VERSION_CODE_NULL.getCode(), ResultEnum.VERSION_CODE_NULL.getMessage());

+ 88 - 0
src/main/java/com/YuyeTech/HeartRate/game/versionCode/controller/BackstageVersionCodeController.java

@@ -0,0 +1,88 @@
+package com.YuyeTech.HeartRate.game.versionCode.controller;
+
+import com.YuyeTech.HeartRate.annotation.Decrypt;
+import com.YuyeTech.HeartRate.annotation.Encrypt;
+import com.YuyeTech.HeartRate.common.pojo.PageInfo;
+import com.YuyeTech.HeartRate.common.pojo.Result;
+import com.YuyeTech.HeartRate.game.versionCode.projo.VersionCode;
+import com.YuyeTech.HeartRate.game.versionCode.service.VersionCodeService;
+import com.YuyeTech.HeartRate.game.versionCode.vo.VersionCodeVo;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+
+/**
+ * @author:slambb
+ * @date:2023/08/29
+ */
+@RestController
+@RequestMapping("/backstage_version_code")
+@Slf4j
+public class BackstageVersionCodeController {
+
+    @Autowired
+    private VersionCodeService versionCodeService;
+
+    /**
+     * 前端view跳转,配置菜单路径
+     * 设置默认参数
+     *
+     * @return
+     */
+    @GetMapping("gotoView")
+    public ModelAndView gotoView() {
+        ModelAndView modelAndView = new ModelAndView("client/statesInfo");
+        return modelAndView;
+    }
+
+    /**
+     * 分页查询数据
+     *
+     * @param vo
+     * @return
+     */
+    @PostMapping("findAll")
+    @Decrypt
+    @Encrypt
+    public Result<PageInfo<VersionCodeVo>> findAll(VersionCodeVo vo) {
+        return versionCodeService.page(vo);
+    }
+
+
+    /**
+     * 删除数据
+     * 删除时候,需要更新缓存列表
+     *
+     * @param id
+     * @return
+     */
+    @PostMapping("delete")
+    @Decrypt
+    @Encrypt
+    public Result delete(@RequestParam("id") Integer id) {
+        return versionCodeService.delete(id);
+    }
+
+
+    @PostMapping("saveVersionCodeInfo")
+    @Decrypt
+    @Encrypt
+    public Result saveVersionCodeInfo(@RequestParam("id") Integer id,
+                               @RequestParam("limitPlatform") Integer limitPlatform) {
+        VersionCodeVo versionCode = versionCodeService.getVo(id);
+        versionCode.setLimitPlatform(limitPlatform);
+        return versionCodeService.save(versionCode);
+    }
+
+    @PostMapping("saveShowConfigInfo")
+    @Decrypt
+    @Encrypt
+    public Result saveShowConfigInfo(@RequestParam("id") Integer id,
+                                      @RequestParam("showConfig") String showConfig) {
+        VersionCodeVo versionCode = versionCodeService.getVo(id);
+        versionCode.setShowConfig(showConfig);
+        return versionCodeService.save(versionCode);
+    }
+}

+ 1 - 1
src/main/java/com/YuyeTech/HeartRate/dataobject/VersionCode.java → src/main/java/com/YuyeTech/HeartRate/game/versionCode/projo/VersionCode.java

@@ -1,4 +1,4 @@
-package com.YuyeTech.HeartRate.dataobject;
+package com.YuyeTech.HeartRate.game.versionCode.projo;
 
 import lombok.Data;
 import org.hibernate.annotations.DynamicUpdate;

+ 18 - 0
src/main/java/com/YuyeTech/HeartRate/game/versionCode/repository/VersionCodeRepository.java

@@ -0,0 +1,18 @@
+package com.YuyeTech.HeartRate.game.versionCode.repository;
+
+import com.YuyeTech.HeartRate.common.repository.CommonRepository;
+import com.YuyeTech.HeartRate.game.versionCode.projo.VersionCode;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import java.util.Optional;
+
+/**
+ * @author:slambb
+ * @date:2020/12/23
+ */
+public interface VersionCodeRepository extends CommonRepository<VersionCode,Integer>{
+
+    Optional<VersionCode> findByCode(String Code);
+
+    Optional<VersionCode> findByCodeAndShowConfigKey(String code,String showConfigKey);
+}

+ 18 - 0
src/main/java/com/YuyeTech/HeartRate/game/versionCode/service/VersionCodeService.java

@@ -0,0 +1,18 @@
+package com.YuyeTech.HeartRate.game.versionCode.service;
+import com.YuyeTech.HeartRate.common.service.CommonService;
+import com.YuyeTech.HeartRate.game.versionCode.projo.VersionCode;
+import com.YuyeTech.HeartRate.game.versionCode.vo.VersionCodeVo;
+
+/**
+ * 版本信息
+ *
+ * @author:slambb
+ * @date:2020/12/23
+ */
+public interface VersionCodeService extends CommonService<VersionCodeVo, VersionCode, Integer> {
+
+  @Deprecated
+  VersionCode findByCode(String code);
+
+  VersionCode findByVersionCodeAndShowConfigKey(String code,String showConfigKey);
+}

+ 37 - 0
src/main/java/com/YuyeTech/HeartRate/game/versionCode/service/VersionCodeServiceImpl.java

@@ -0,0 +1,37 @@
+package com.YuyeTech.HeartRate.game.versionCode.service;
+
+import com.YuyeTech.HeartRate.common.service.CommonServiceImpl;
+import com.YuyeTech.HeartRate.game.versionCode.projo.VersionCode;
+import com.YuyeTech.HeartRate.game.versionCode.vo.VersionCodeVo;
+import com.YuyeTech.HeartRate.game.versionCode.repository.VersionCodeRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author:slambb
+ * @date:2021/2/23
+ */
+@Service
+public class VersionCodeServiceImpl  extends CommonServiceImpl<VersionCodeVo, VersionCode, Integer> implements VersionCodeService {
+
+
+    @Autowired
+    private VersionCodeRepository versionCodeRepository;
+
+    @Override
+    public VersionCode findByCode(String code) {
+        return versionCodeRepository.findByCode(code).orElse(null);
+
+    }
+
+    /**
+     * todo 后续用redis优化
+     * @param code
+     * @param showConfigKey
+     * @return
+     */
+    @Override
+    public VersionCode findByVersionCodeAndShowConfigKey(String code, String showConfigKey) {
+        return versionCodeRepository.findByCodeAndShowConfigKey(code,showConfigKey).orElse(null);
+    }
+}

+ 30 - 0
src/main/java/com/YuyeTech/HeartRate/game/versionCode/vo/VersionCodeSimpleVo.java

@@ -0,0 +1,30 @@
+package com.YuyeTech.HeartRate.game.versionCode.vo;
+
+import com.YuyeTech.HeartRate.common.pojo.PageCondition;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author:slambb
+ * @date:2023/08/29
+ */
+@Data
+public class VersionCodeSimpleVo  implements Serializable {
+    
+    private Integer id;
+    private String title;
+    private String code;
+    /**0:全都限制,1:限制 android ,2:限制ios,*/
+    private Integer limitPlatform;
+    private Integer isShowGame;
+    private Integer isShowVideo;
+    private Integer isShowTool;
+    private String describe;
+    private String showConfig;
+    private String showConfigKey;
+    private Date deleteTime;
+    private Date createTime;
+    private Date updateTime;
+}

+ 32 - 0
src/main/java/com/YuyeTech/HeartRate/game/versionCode/vo/VersionCodeVo.java

@@ -0,0 +1,32 @@
+package com.YuyeTech.HeartRate.game.versionCode.vo;
+
+import com.YuyeTech.HeartRate.common.pojo.PageCondition;
+import lombok.Data;
+import org.hibernate.annotations.DynamicUpdate;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author:slambb
+ * @date:2023/08/29
+ */
+@Data
+public class VersionCodeVo extends PageCondition implements Serializable {
+
+    private Integer id;
+    private String title;
+    private String code;
+    /**0:全都限制,1:限制 android ,2:限制ios,*/
+    private Integer limitPlatform;
+    private Integer isShowGame;
+    private Integer isShowVideo;
+    private Integer isShowTool;
+    private String describe;
+    private String showConfig;
+    private String showConfigKey;
+    private Date deleteTime;
+    private Date createTime;
+    private Date updateTime;
+}

+ 0 - 15
src/main/java/com/YuyeTech/HeartRate/repository/VersionCodeRepository.java

@@ -1,15 +0,0 @@
-package com.YuyeTech.HeartRate.repository;
-
-import com.YuyeTech.HeartRate.dataobject.VersionCode;
-import org.springframework.data.jpa.repository.JpaRepository;
-
-import java.util.Optional;
-
-/**
- * @author:slambb
- * @date:2020/12/23
- */
-public interface VersionCodeRepository extends JpaRepository<VersionCode,Integer> {
-
-    Optional<VersionCode> findByCode(String Code);
-}

+ 0 - 14
src/main/java/com/YuyeTech/HeartRate/service/VersionCodeService.java

@@ -1,14 +0,0 @@
-package com.YuyeTech.HeartRate.service;
-import com.YuyeTech.HeartRate.dataobject.VersionCode;
-
-/**
- * 版本信息
- *
- * @author:slambb
- * @date:2020/12/23
- */
-public interface VersionCodeService {
-
-  VersionCode findByCode(String code);
-
-}

+ 0 - 25
src/main/java/com/YuyeTech/HeartRate/service/impl/VersionCodeServiceImpl.java

@@ -1,25 +0,0 @@
-package com.YuyeTech.HeartRate.service.impl;
-
-import com.YuyeTech.HeartRate.dataobject.VersionCode;
-import com.YuyeTech.HeartRate.repository.VersionCodeRepository;
-import com.YuyeTech.HeartRate.service.VersionCodeService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-/**
- * @author:slambb
- * @date:2021/2/23
- */
-@Service
-public class VersionCodeServiceImpl implements VersionCodeService {
-
-
-    @Autowired
-    private VersionCodeRepository versionCodeRepository;
-
-    @Override
-    public VersionCode findByCode(String code) {
-        return versionCodeRepository.findByCode(code).orElse(null);
-
-    }
-}

+ 250 - 0
src/main/resources/static/client/js/statesInfo.js

@@ -0,0 +1,250 @@
+let tableIns;
+let editIns;
+let openIndex;
+let showConfig;
+let showIndexConfig;
+let currentData;
+
+let mainTableUrl = "/backstage_version_code/findAll";
+let mainDeleteUrl = "/backstage_version_code/delete";
+let mainSaveUrl = "/backstage_version_code/saveVersionCodeInfo";
+let mainSaveShowConfigUrl = "/backstage_version_code/saveShowConfigInfo";
+
+
+layui.config({
+    base: ctx + '/common/'
+}).extend({
+    xmSelect: 'layui/xm-select',
+    step: 'step-lay/step',
+    dragMove: 'dragMove/dragMove'
+})
+layui.use(['element', 'form', 'table', 'layer', 'laydate', 'util', 'upload', 'xmSelect', 'step', 'dragMove'], function () {
+    let element = layui.element; //导航的hover效果、二级菜单等功能,需要依赖element模块
+    let laydate = layui.laydate;
+    let table = layui.table, upload = layui.upload, form = layui.form;//select、单选、复选等依赖form
+    let step = layui.step, xmSelect = layui.xmSelect, dragMove = layui.dragMove;//引入工具
+    let layer = layui.layer;
+    form.verify({
+        // positiveInteger: [/^(([0-9]+[\.]?[0-9]+)|[1-9])$/, '只能填写正整数'],//必填,且只能输入正整数
+        positiveInteger: [/^[1-9]\d*$/, '只能填写正整数'],//必填,且只能输入正整数
+    });
+    /**
+     * 渲染图片查看
+     */
+    dragMove.render({
+        elem: "#cardBody", //指向图片的父容器
+        layerArea: ["960px", "720px"], //弹窗的宽高,同layer的area,默认["960px","720px"]
+        layerShade: 0.6, //遮罩的透明度,同layer的shade,默认0.6
+        layerMove: false, //触发拖动的元素,同layer的move,这里默认禁止,可设置为'.layui-layer-title'
+        maxZoom: 1 //图片能放大的最大倍数,默认1倍
+    });
+    //主列表渲染
+    tableIns = table.render({
+        elem: '#mainTable'
+        , url: ctx + mainTableUrl
+        , method: 'POST'
+        //请求前参数处理
+        , request: {
+            pageName: 'page' //页码的参数名称,默认:page
+            , limitName: 'rows' //每页数据量的参数名,默认:limit
+        }
+        // , where: {sidx: "desc", sord: "createTime"}
+        , response: {
+            statusName: 'flag' //规定数据状态的字段名称,默认:code
+            , statusCode: true //规定成功的状态码,默认:0
+            , msgName: 'msg' //规定状态信息的字段名称,默认:msg
+            , countName: 'records' //规定数据总数的字段名称,默认:count
+            , dataName: 'rows' //规定数据列表的字段名称,默认:data
+        }
+        //响应后数据处理
+        , parseData: function (res) { //res 即为原始返回的数据
+            let data = res.data;
+            // console.log("mainTableUrl数据:", data);
+            // if (data.rows && data.rows.length > 0) {
+            // }
+            return {
+                "flag": res.flag, //解析接口状态
+                "msg": res.msg, //解析提示文本
+                "records": data.records, //解析数据长度
+                "rows": data.rows //解析数据列表
+            };
+        }
+        , toolbar: '#mainTableToolbarDemo'
+        , title: '列表'
+        , cols: [[
+            {field: 'id', title: 'ID', sort: true}
+            , {field: 'title', title: '名称', sort: true}
+            , {field: 'code', title: '版本号', sort: true}
+            , {field: 'limitPlatform', title: '限制平台',  templet: function (d) {
+                    if (d.limitPlatform == 0) {
+                        return '<span style="color: green">全部</span>';
+                    } else if (d.limitPlatform == 1) {
+                        return '<span style="color: red">Android</span>';
+                    } else if (d.limitPlatform == 2) {
+                        return '<span style="color: red">IOS</span>';
+                    }  else if (d.limitPlatform == 3) {
+                        return '<span style="color: red">不限制</span>';
+                    }else {
+                        return '未添加:' + d.limitPlatform;
+                    }
+                },sort: true}
+            , {field: 'showConfigKey', title: '渠道', sort: true}
+            , {field: 'showConfig', title: '配置信息', templet: '#configButton', sort: true}
+            , {field: 'describe', title: '描述', hide: true, sort: true}
+            , {field: 'isShowGame', title: '游戏', hide: true,sort: true}
+            , {field: 'isShowVideo', title: '视频', hide: true,sort: true}
+            , {field: 'isShowTool', title: '工具',hide: true, sort: true}
+            , {field: 'deleteTime', title: '删除时间', hide: true, sort: true}
+            , {field: 'createTime', title: '创建时间', hide: true, sort: true}
+            , {field: 'updateTime', title: '更新时间', hide: true, sort: true}
+            , {fixed: 'right', title: '操作', width: 300, toolbar: '#mainTableBarDemo'}
+        ]]
+        , defaultToolbar: ['', 'exports', 'print']
+        , page: true
+        , cellMinWidth: 80
+    });
+
+    //头工具栏事件
+    table.on('toolbar(test)', function (obj) {
+        switch (obj.event) {
+            case 'addNewRow':
+
+                break;
+        }
+    });
+
+    element.on('tab(statesTab)', function(data){
+        // console.log(this); //当前Tab标题所在的原始DOM元素
+        // console.log(data.index); //得到当前Tab的所在下标
+        // console.log(data.elem); //得到当前的Tab大容器
+        showIndexConfig = showConfig[data.index];
+        // console.log(showIndexConfig)
+
+        $("input[name=isShow][value='0']").prop("checked", showIndexConfig.isShow == 0?true : false);
+        $("input[name=isShow][value='1']").prop("checked", showIndexConfig.isShow == 1?true : false);
+        $("input[name=isNeedConnect][value='0']").prop("checked", showIndexConfig.isNeedConnect == 0?true : false);
+        $("input[name=isNeedConnect][value='1']").prop("checked", showIndexConfig.isNeedConnect == 1?true : false);
+
+        $("#comForm").form(showIndexConfig);
+        form.render();
+    });
+
+    //监听行工具事件
+    table.on('tool(test)', function (obj) {
+        let data = obj.data;
+        // console.log("data:", data);
+        currentData = data;
+        //编辑
+        if (obj.event === 'edit') {
+            $('#limitPlatform').find("option").remove();
+            $('#limitPlatform').append(new Option("全都限制", "0", data.limitPlatform === 0));
+            $('#limitPlatform').append(new Option("限制Android", "1", data.limitPlatform === 1));
+            $('#limitPlatform').append(new Option("限制ios", "2", data.limitPlatform === 2));
+            $('#limitPlatform').append(new Option("都不限制", "3", data.limitPlatform === 2));
+            form.render("select");
+
+            $("#comStateForm").form(data);
+            form.render();
+            editIns = layer.open({
+                type: 1,  //可传入的值有:0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层)
+                title: ['修改版本控制属性', 'font-size:18px;'],//数组第二项可以写任意css样式;如果你不想显示标题栏,你可以title: false
+                area: ['50%', '50%'],
+                content: $('#show_state_div')
+            });
+
+        } else if (obj.event === 'del') {
+            layer.confirm('真的删除这个渠道版本么?', function (index) {
+                $.post(ctx + mainDeleteUrl, {id: data.id}, function (data) {
+                    if (!data.flag) {
+                        layer.msg(data.msg, {icon: 2, time: 2000}, function () {
+                        });
+                        return;
+                    }
+                    obj.del();
+                    tableIns.reload();
+                });
+                layer.close(index);
+            });
+        } else if(obj.event === 'config'){
+            //調整設置
+            showConfig = JSON.parse(data.showConfig);
+            // console.log(showConfig)
+            let tabtitle = $(".layui-tab-title li");
+            let ids = new Array();
+            $.each(tabtitle, function (i) {
+                ids[i] = $(this).attr("lay-id");
+            })
+            $.each(ids, function (i,item) {
+                element.tabDelete("statesTab", item); //ids是一个数组,里面存放了多个id,调用tabDelete方法分别删除
+            })
+            for (let i = 0; i < showConfig.length; i++) {
+                element.tabAdd('statesTab', {
+                    title: showConfig[i].name,
+                    content: '',
+                    id: 'statesTab_' + i
+                });
+            }
+            element.tabChange('statesTab', 'statesTab_0');
+
+            showIndexConfig = showConfig[0];
+            $("input[name=isShow][value='0']").prop("checked", showIndexConfig.isShow == 0?true : false);
+            $("input[name=isShow][value='1']").prop("checked", showIndexConfig.isShow == 1?true : false);
+            $("input[name=isNeedConnect][value='0']").prop("checked", showIndexConfig.isNeedConnect == 0?true : false);
+            $("input[name=isNeedConnect][value='1']").prop("checked", showIndexConfig.isNeedConnect == 1?true : false);
+
+            $("#comForm").form(showIndexConfig);
+            form.render();
+
+            openIndex = layer.open({
+                type: 1,  //可传入的值有:0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层)
+                title: ['修改栏目属性', 'font-size:18px;'],//数组第二项可以写任意css样式;如果你不想显示标题栏,你可以title: false
+                area: ['80%', '80%'],
+                content: $('#show_div')
+            });
+        }
+    });
+
+    //监听提交
+    //保存配置信息
+    form.on('submit(comFilter)', function (data) {
+        // console.log(data.field);
+        showConfig[data.field.index] = Object.assign({},showIndexConfig,{isNeedConnect:Number(data.field.isNeedConnect),isShow:Number(data.field.isShow)});
+        // console.log(showConfig);
+        if (!currentData) {
+            layer.msg("选择编辑的对象", {icon: 2, time: 1000}, function () {
+            });
+            return;
+        }
+        $.post(ctx + mainSaveShowConfigUrl, {id:currentData.id,showConfig:JSON.stringify(showConfig)}, function (data) {
+            if (!data.flag) {
+                layer.msg(data.msg, {icon: 2, time: 2000}, function () {
+                });
+                return;
+            }
+            layer.close(openIndex);
+            tableIns.reload();
+        });
+    });
+
+    form.on('submit(comStateFilter)', function (data) {
+        // console.log(data.field);
+        let _field = data.field;
+        if (!_field.id) {
+            layer.msg("选择编辑的对象", {icon: 2, time: 1000}, function () {
+            });
+            return;
+        }
+        $.post(ctx + mainSaveUrl, {id:Number(_field.id),limitPlatform:Number(_field.limitPlatform)}, function (data) {
+            if (!data.flag) {
+                layer.msg(data.msg, {icon: 2, time: 2000}, function () {
+                });
+                return;
+            }
+            layer.close(editIns);
+            tableIns.reload();
+        });
+    });
+
+
+});
+

+ 193 - 0
src/main/resources/templates/client/statesInfo.html

@@ -0,0 +1,193 @@
+<!DOCTYPE html>
+<!--解决idea thymeleaf 表达式模板报红波浪线-->
+<!--suppress ALL -->
+<html xmlns:th="http://www.thymeleaf.org">
+<head>
+
+<!--    <link th:href="@{/common/step-lay/step.css}" rel="stylesheet" type="text/css"/>-->
+    <!-- 引入公用部分 -->
+    <script th:replace="common/head::static"></script>
+
+    <style type="text/css">
+        /*.layui-form-label {*/
+        /*    width: 380px !important;*/
+        /*}*/
+        .layui-table-cell{height:60px;line-height:60px}
+    </style>
+</head>
+<body>
+<div class="layui-row layui-col-space15">
+    <!-- 树 -->
+    <div class="layui-col-md12">
+        <div class="layui-card">
+            <div class="layui-card-body" id="cardBody">
+                <!-- 表格主体 -->
+                <table class="layui-hide" id="mainTable" lay-filter="test"></table>
+                <!-- 模板 -->
+                <script type="text/html" id="mainTableToolbarDemo">
+                    <div class="layui-form" action="">
+                        <div class="layui-form-item">
+                            <div class="layui-inline tool-btn">
+<!--                                <button class="layui-btn layui-btn-sm" lay-event="addNewRow">新增</button>-->
+                            </div>
+                        </div>
+                    </div>
+                </script>
+
+                <script type="text/html" id="mainTableBarDemo">
+                    <a class="layui-btn layui-btn-xs" lay-event="edit">编辑<i class="layui-icon layui-icon-edit"></i></a>
+                    <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
+                </script>
+                <script type="text/html" id="configButton">
+                    {{# if(d.showConfig !== null){}}
+                    <a class="layui-btn layui-btn-xs" lay-event="config">设置配置信息<i class="layui-icon layui-icon-edit"></i></a>
+                    {{#}}}
+                </script>
+
+                <script type="text/html" id="gamePicture">
+                    <img  src="{{domainName}}{{d.gamePicture}}" style="" width="60" height="60" alt="">
+                </script>
+                <script type="text/html" id="gameIcon">
+                    <img src="{{domainName}}{{d.gameIcon}}" style="" width="60" height="60" alt="">
+                </script>
+
+            </div>
+        </div>
+
+    </div>
+    <!-- 操作表单 -->
+    <div class="layui-col-md12" style="display:none;" id="show_state_div">
+        <div class="layui-card">
+            <div class="layui-card-body">
+                <form id="comStateForm" class="layui-form layui-form-pane" lay-filter="comStateForm">
+                    <div class="layui-form-item">
+                        <label class="layui-form-label">限制展示平台</label>
+                        <div class="layui-input-block">
+                            <select name="limitPlatform" id="limitPlatform" lay-verify="required" lay-filter="xmFilter">
+                                <option value="">请选择</option>
+                            </select>
+                        </div>
+                    </div>
+                    <input type="text" name="id" hidden="hidden"/>
+                    <div class="layui-form-item">
+                        <a id="saveStateBtn" class="layui-btn" type="submit" lay-submit lay-filter="comStateFilter">保存数据修改</a>
+                    </div>
+                </form>
+
+            </div>
+        </div>
+    </div>
+    <div class="layui-col-md12" style="display:none;" id="show_div">
+        <div class="layui-tab layui-tab-brief" lay-filter="statesTab">
+            <ul class="layui-tab-title">
+<!--                <li class="layui-this">首页</li>-->
+            </ul>
+            <div class="layui-tab-content">
+<!--                <div class="layui-tab-item layui-show">1</div>-->
+            </div>
+        </div>
+
+        <div class="layui-card">
+            <div class="layui-card-body">
+                <form id="comForm" class="layui-form layui-form-pane" lay-filter="comForm">
+                    <div class="layui-form-item">
+                        <label class="layui-form-label">下标</label>
+                        <div class="layui-input-block">
+                            <input type="text" name="index" autocomplete="off" placeholder="index"
+                                   class="layui-input"  readonly="readonly">
+                        </div>
+                    </div>
+                    <div class="layui-form-item">
+                        <label class="layui-form-label">名称</label>
+                        <div class="layui-input-block">
+                            <input type="text" name="name" autocomplete="off" placeholder="name"
+                                   class="layui-input"  readonly="readonly">
+                        </div>
+                    </div>
+                    <div class="layui-form-item">
+                        <label class="layui-form-label">是否显示</label>
+                        <div class="layui-input-block">
+                            <input type="radio" name="isShow"  value="1" title="是">
+                            <input type="radio" name="isShow"  value="0" title="否">
+                        </div>
+                    </div>
+                    <div class="layui-form-item">
+                        <label class="layui-form-label">是否需要连接设备</label>
+                        <div class="layui-input-block">
+                            <input type="radio" name="isNeedConnect"  value="1" title="是">
+                            <input type="radio" name="isNeedConnect"  value="0" title="否">
+                        </div>
+                    </div>
+
+                    <input type="text" name="isTabbar" hidden="hidden"/>
+                    <input type="text" name="connectInfo" hidden="hidden"/>
+                    <input type="text" name="id" hidden="hidden"/>
+                    <div class="layui-form-item">
+                        <a id="saveBtn" class="layui-btn" type="submit" lay-submit lay-filter="comFilter">保存数据修改</a>
+                    </div>
+                </form>
+
+            </div>
+        </div>
+    </div>
+
+<!--    <div class="layui-col-md12" style="display:none;" id="show_add_div">-->
+<!--        <div class="layui-card">-->
+<!--            <div class="layui-card-body">-->
+<!--                <form id="comForm" class="layui-form layui-form-pane" lay-filter="comForm">-->
+<!--                    <div class="layui-form-item">-->
+<!--                        <label class="layui-form-label">名称</label>-->
+<!--                        <div class="layui-input-block">-->
+<!--                            <input type="text" name="title" autocomplete="off" placeholder="title"-->
+<!--                                   class="layui-input" >-->
+<!--                        </div>-->
+<!--                    </div>-->
+<!--                    <div class="layui-form-item">-->
+<!--                        <label class="layui-form-label">版本号</label>-->
+<!--                        <div class="layui-input-block">-->
+<!--                            <input type="number" name="code" autocomplete="off" placeholder="code"-->
+<!--                                   class="layui-input" >-->
+<!--                        </div>-->
+<!--                    </div>-->
+<!--                    <div class="layui-form-item">-->
+<!--                        <label class="layui-form-label">模式类型</label>-->
+<!--                        <div class="layui-input-block" >-->
+<!--                            <div id="multiselectTag" style="width: 600px;"></div>-->
+<!--                        </div>-->
+<!--                    </div>-->
+<!--                    <div class="layui-form-item">-->
+<!--                        <label class="layui-form-label">是否显示</label>-->
+<!--                        <div class="layui-input-block">-->
+<!--                            <input type="radio" name="isShow" value= 1 title="是">-->
+<!--                            <input type="radio" name="isShow" value= 0 title="否">-->
+<!--                        </div>-->
+<!--                    </div>-->
+<!--                    <div class="layui-form-item">-->
+<!--                        <label class="layui-form-label">是否需要连接设备</label>-->
+<!--                        <div class="layui-input-block">-->
+<!--                            <input type="radio" name="isNeedConnect" value= 1 title="是">-->
+<!--                            <input type="radio" name="isNeedConnect" value= 0 title="否">-->
+<!--                        </div>-->
+<!--                    </div>-->
+
+<!--                    <input type="number" name="isTabbar" hidden="hidden"/>-->
+<!--                    <input type="text" name="connectInfo" hidden="hidden"/>-->
+<!--                    <input type="number" name="id" hidden="hidden"/>-->
+<!--                    <div class="layui-form-item">-->
+<!--                        <a id="saveBtn" class="layui-btn" type="submit" lay-submit lay-filter="comFilter">保存数据修改</a>-->
+<!--                    </div>-->
+<!--                </form>-->
+
+<!--            </div>-->
+<!--        </div>-->
+<!--    </div>-->
+
+</div>
+</body>
+<!--<script type="text/javascript" th:inline="javascript">-->
+<!--    //新增数据表单-->
+<!--    categoryList = [[${categoryList}]];-->
+<!--    allCustomTags = [[${allCustomTags}]];-->
+<!--</script>-->
+<script th:src="@{/client/js/statesInfo.js}"></script>
+</html>