springboot+echarts+layui使用记录

之前java项目里面用到layui
layui官网
这是一种快速上手的前端框架,不需要搭建其他环境, 如vue运行环境,也不需要单独运行的框架 。只需要下载对应的layui 依赖放入springboot的static文件夹下
在对应的 html文件中 按照路径引用layui.js 和css ,启动项目访问页面就能显示需要的效果。在实践中发现 springboot+layui+thymeleaf 就能简单进行全栈开发。在本次开发中也会用到。
注意。在springboot中使用 thymeleaf需要进行配置

	  #templates 配置
spring
  mvc:
    static-path-pattern: /static/**
  thymeleaf:
    servlet.content-type: text/html
    mode: HTML
    cache: true
    prefix: classpath:/templates/
    suffix: .html

static 文件夹路径如下, 将layui 资源下载并解压后直接丢进此文件夹路径。echarts 是当前项目中使用了,并不是强制需要。
在这里插入图片描述
templates文件夹路径是默认的html文件夹。当controller返回一个html文件路径的时候,会默认到此文件夹下寻找对应的同名html文件。
如下
在这里插入图片描述

html文件的 body部分代码如下

<body class="layui-layout-body">
<div class="layui-layout layui-layout-admin">
    <div class="layui-body">
        <!-- 内容主体区域 -->
        <div>
        <!-- 渲染html的时候,会先拿到从controller里面携带过来的参数值 userId 设置到此元素中,然后再去执行script里面的脚本代码 -->
            <input type="hidden" id="userId" th:value="${userId}">
            <div class="layui-inline">
                <button id="add" type="button" class="layui-btn layui-btn-fluid layui-btn-sm layui-btn-normal">添加</button>
            </div>
            <table id="demo" lay-filter="test"></table>
            <script type="text/html" id="barDemo">
                <a class="layui-btn layui-btn-xs"  lay-event="edit">设置</a>
                <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="setValue">编辑</a>
            </script>

        </div>
    </div>
</div>
</body>

script脚本代码如下

<script type="text/javascript" th:inline="none">
        //数据表格 th:inline="none" 必须设置 因为使用取值userId的表达式 必须开启这个设置
        // 前面这些都是使用layui组件的默认写法
        layui.use(['table','layer','form'], function(){
             // 获取table元素
            var table = layui.table;
            var layer=layui.layer;
             // 获取form表单
            var form=layui.form;
            // 获取jquery
            var $=layui.$;
            // 因为是先渲染的html所以这里取值是一定会有的
            var userId=$("#userId").val();
            // 渲染表格
            table.render({
            // table元素的id
                elem: '#demo'
                // 分页列表数据获取访问的url ,因为是在同一个项目中 所以可以不用写http://localhost:端口号 这些数据
                ,url:'/page?userId='+userId
                // 开启分页
                ,page:true
                , cols: [[
                // 设置每行数据
                    {field: 'id', width: 260, title: 'ID',hide:true},
                    {field: 'name', width: 260, align: 'center', title: '名字'},
                    // 使用 templet: function (d) {
		//对参数进行处理的函数逻辑 方式 对参数进行想要的数据设置 
	} 
                    {field: 'userColor', width: 260, align: 'center', title: '颜色' ,templet: function (d) {
                            return '<input  readonly="readonly" style="background-color:'+d.userColor+'"></input>'
                        }},
                    {field: 'sortNum', width: 260,  align: 'center', title: '排序'},
                    // toolbar 就是指定刚刚在secript脚本id 设置到此处。#barDemo 就是指定脚本的id 下面的脚本文件在html中已经存在,此处只是注释,不用打开。 
                    // <script type="text/html" 	//id="barDemo">
  //              <a class="layui-btn layui-btn-xs"  lay-event="edit">设置</a>
    //            <a class="layui-btn layui-btn-danger //layui-btn-xs" lay-event="setValue">编辑</a> </script>
                    {title: '操作', width: 650, toolbar: '#barDemo', align: "center"}
                ]],
                //可以选择的每页条数
                limits: [10, 15, 20, 25, 50, 100],
                limit: 10,
                skin: 'line'
            });
			// 指定的元素的点击方法
            $("#add").click(function () {
            // layui 指定的打开弹窗的方法
                layer.open({
                	// layer提供了5种层类型。可传入的值有:0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层)。 若你采用layer.open({type: 1})方式调用,则type为必填项(信息框除外) 如果是要打开一个页面通常是设置type:2
                    type:2,
                    title:"添加",
                    // 打开页面的路径 默认会去找static文件夹 的此文件 所以如果打开的是一个html 那么此文件一定要在 static文件夹下,否则容易报错404
                    content: '../static/page/add.html',
                    // 打开页面的宽高 也可以设置成 100% 
                    area:["800px","800px"],
                    // 遮罩默认是0.3
                    shade:0.3,
                    // 弹出层动画 看官网中设置,此处无业务逻辑
                    anim:5,
                    // 弹出层关闭执行的方法
                    end:function(){
                        console.log("添加层被关闭了....");
                        //刷新整合页面
                        //location.reload();
                        //只重载表格
                        table.reload("demo");
                    }
                });
            })

            //获取按钮 在table元素上面 添加了lay-filter="test" 
       //<table id="demo" lay-filter="test"></table>
            table.on('tool(test)', function(obj){
                var data = obj.data; //获得当前行数据
                var tr=obj.tr//活动当前行tr 的  DOM对象
                if(obj.event === 'edit'){ //设置值
                    layer.open({
                        type:2,
                        title:"修改",
                        content: '../static/page/update.html',
                        area:["500px","500px"],
                        shade:0.3,
                        anim:5,
                        // 打开弹出层成功后执行的方法,但是这个方法时元素渲染后 才设置值的方法,如果想要在设置数据之前的话,在 content 中直接指定一个完整的url路径 如下 content:'http://localhost:8080/index/goUpdatePage?id='+data.id,  在对应的controller中用 model.addAttribute("id", id); 的方式来传递参数 在要开的hmtl页面总用el表达式来取值进行参数初始化 。 
                        // 这种方式适合在 不用在页面初始化的时候需要获取的需要的值的时候,的操作,否则取前面说的那种方式
                        success:function(layero,index){
                            var body= layer.getChildFrame('body',index);
                            body.find('#id').val(data.id);
                        },
                        end:function(){
                            console.log("添加层被关闭了....");
                            //刷新整合页面
                            //location.reload();
                            //只重载表格
                            table.reload("demo");
                        },
                        // 点击右上角的关闭弹窗按钮执行的操作
                        cancel: function(index, layero){
                            var body= layer.getChildFrame('body',index);
                            body.find('#id').val("");
                            table.reload("demo");
                        }
                    });

                } else if(obj.event === 'edit'){
                    layer.open({
                        type:2,
                        title:"设置风险区间值",
                        content: 'http://localhost:8080/index/targetList?targetId='+data.id,
                        area:["100%","100%"],
                        shade:0.3,
                        anim:5,
                        end:function(){
                            //只重载表格
                            table.reload("demo");
                        },
                        success:function(layero,index){
                          	// 初始化打开页面元素的值
                            var body= layer.getChildFrame('body',index);
                            body.find('#targetId').val(data.id);
                        },
                        cancel: function(index, layero){
                            // 删除旧的数据
                            var body= layer.getChildFrame('body',index);
                            body.find('#id').val("");
                        }

                    });
                }
            });
        })

    </script>
  • 22
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值