layui table

layui提供了table工具,具有非常丰富的功能,下面记录一次table的开发
首先是html,在html中我们有一个table要用layui,代码如下:

 <table class="layui-hide" id="subTable" lay-filter="subTableEvent"></table>

然后我们通过layui内置模块对该table进行数据加载和渲染,以及一些事件绑定等

<script src="/layui/layui.js"></script>
<script  th:inline="none"> //th:inline="none"为解决我引用了thymeleaf,下面的cols后面有两个[导致的报错问题
    layui.use(['table','element'], function(){
        var table = layui.table,element = layui.element;
        table.render({
            elem: '#subTable'   //html中要绑定table的id
            ,height: 420       //设置表格高度
            ,url: '/user/table/subject'         //后台接口
            ,title: '用户表'                   //表名
            ,page: true                     //开启分页
            ,toolbar:'default'              //表头工具栏,default用了默认的,可以自定义工具栏模板,如下面的toolbar
             ,cols: [[ //表头
                {type: 'checkbox', fixed: 'left'},          //设置复选框
                {field:'subject_no', title:'主键值'}           //字段值
                ,{field:'subject_code', title:'编号',width:150}
                ,{field:'subject_nam', title: '名称'}
                ,{field:'user_type', title: '用户类型'}
                ,{field:'seq_num', title:'排序'}
                ,{fixed: 'right', width: 165, title: '操作', align:'center', toolbar: '#bar'} //最后加了工具栏一列,绑定了下面的bar模板
            ]]

        });

        //监听行工具事件
        table.on('tool(subTableEvent)', function(obj){ //注:tool 是工具条事件名(固定),subTableEvent 是 table 原始容器的属性 lay-filter="对应的值"
            var data = obj.data                 //获得当前行数据
                ,layEvent = obj.event;          //获得 lay-event 对应的值
            if(layEvent === 'detail'){
                layer.msg('查看操作');
            } else if(layEvent === 'del'){
                layer.confirm('真的删除行么', function(index){
                    obj.del();              //删除对应行(tr)的DOM结构
                    layer.close(index);
                                            //向服务端发送删除指令
                });
            } else if(layEvent === 'edit'){
                layer.msg('编辑操作');
            }
        });
        //监听头工具栏事件
        table.on('toolbar(subTableEvent)', function(obj){ //注:toolbar 是工具条事件名(固定),subTableEvent 是 table 原始容器的属性 lay-filter="对应的值"
            var checkStatus = table.checkStatus(obj.config.id)
                ,data = checkStatus.data; //获取选中的数据
            switch(obj.event){
                case 'add':
                    layer.msg('添加');
                    break;
                case 'update':
                    if(data.length === 0){
                        layer.msg('请选择一行');
                    } else if(data.length > 1){
                        layer.msg('只能同时编辑一个');
                    } else {
                        layer.alert('编辑 [id]:'+ checkStatus.data[0].id);
                    }
                    break;
                case 'delete':
                    if(data.length === 0){
                        layer.msg('请选择一行');
                    } else {
                        layer.msg('删除');
                    }
                    break;
            };
        });
    });
</script>
<script type="text/html" id="bar">
//自定义工具栏,此处的工具栏绑定在了列上,也可以绑定到表头工具栏
    <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">查看</a>
    <a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
    <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
</script>

<script type="text/html" id="toolbar">
//自定义工具栏,可将toolbar:‘default’换成 toolbar:‘#toobar’进行引用
    <div class="layui-btn-container">
        <button class="layui-btn layui-btn-sm" lay-event="add">添加</button>
        <button class="layui-btn layui-btn-sm" lay-event="delete">删除</button>
        <button class="layui-btn layui-btn-sm" lay-event="update">编辑</button>
    </div>
</script>

后台采用了springboot

   @ResponseBody
    @RequestMapping(value = "/user/table/subject" , method = RequestMethod.GET , produces="application/json;charset=utf-8")
    public JSONObject getModelInfo(){
        JSONObject subjectJo = subjectService.getSubjectInfoFormatTable();
        return subjectJo;
    }
package com.base.myweb.service.serviceImpl;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.base.myweb.mapper.SubjectMapper;
import com.base.myweb.pojo.Subject;
import com.base.myweb.service.SubjectService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class SubjectServiceImpl implements SubjectService {

    @Autowired
    SubjectMapper subjectMapper;

    @Override
    public JSONObject getSubjectInfoFormatTable() {
        JSONObject subjectJo = new JSONObject();
        List<Subject> subjectList = subjectMapper.selectList(null);
        JSONArray dataArr = new JSONArray();
        for (Subject subject:subjectList ) {
            JSONObject subJo = new JSONObject();
            subJo.put("subject_no",String.valueOf(subject.getSubjectNo()));
            subJo.put("subject_code",subject.getSubjectCode());
            subJo.put("subject_nam",subject.getSubjectNam());
            subJo.put("user_type",subject.getUserType());
            subJo.put("seq_num",String.valueOf(subject.getSeqNum()));
            dataArr.add(subJo);
        }
        subjectJo.put("data",dataArr);
        subjectJo.put("count",subjectList.size());
        subjectJo.put("msg","");
        subjectJo.put("code",0);
        return subjectJo;
    }
}

访问后台获取到的数据格式如下:

{
    "msg": "",
    "code": 0,
    "data": [
        {
            "subject_code": "question",
            "user_type": "customer",
            "subject_nam": "Quest",
            "subject_no": "1",
            "seq_num": "1"
        },
        {
            "subject_code": "share",
            "user_type": "customer",
            "subject_nam": "Share",
            "subject_no": "2",
            "seq_num": "2"
        },
        {
            "subject_code": "notice",
            "user_type": "admin",
            "subject_nam": "Notice",
            "subject_no": "3",
            "seq_num": "5"
        },
        {
            "subject_code": "suggest",
            "user_type": "customer",
            "subject_nam": "Suggest",
            "subject_no": "4",
            "seq_num": "4"
        },
        {
            "subject_code": "discuss",
            "user_type": "customer",
            "subject_nam": "Discuss",
            "subject_no": "5",
            "seq_num": "3"
        }
    ],
    "count": 5
}

最后帖一张效果图,似乎checkbox样式存在一点问题

在这里插入图片描述
我们在js的table.on中绑定了对应的方法,列的工具栏和表头的工具栏都是可以进行方法定义并使用的,表头右侧的显示列,导出和打印功能不需要我们进行处理就可使用。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值