python + layui.table 实现数据表格呈现、工具栏监听

1、页面表格呈现

渲染表格:

layui.use('table',function(){

  var table =layui.table;

  table.render({

    elem:'#api_table',

    url:'/get_data/',//数据接口

    method:'get',

    page:true,

    limit:10,

    limits:[10,20,50],

    cols: [[

      {field:'id',title:'ID',width:80,sort:true,fixed:'left'},

      {field:'cat_name',title:'分类',width:177},

      {field:'api_name',title:'接口名称',width:80},

      {field:'api_url',title:'url',width:80,},

      {field:'method',title:'method',width:80},

      {field:'right',title:'操作',toolbar:'#bar',width:200}

    ]]

  });

});

table.render参数:

参数 说明
elem 指向表格id
url 请求接口
method 请求方式
page 展开分页
limit 当前每页显示数量
limits 可选择设置的每页显示数量
cols 设置表头。field需要和返回数据的字段名一致,title为表头字段名称,width列宽,sort:true该列展开排序,style样式,edit: 'text'单元格可编辑,totalRow:true该列需要合计,需要和table.render的totalRow搭配使用

还有一些其它的常用参数:

参数 说明
where 其它需要传给接口的参数,比如where:{keyword:''}
width 设置表宽度
height 设置表高度
defaultToolbar 头部工具栏右侧图标,默认值["filter","exports","print"],分别是筛选、导出、打印
toolbar 头部左侧工具栏,指定到模版id
totalRow 开启合计

前端body部分:

<table id="api_table"></table>

数据结构:

class Cat(db.Model):
    __tablename__ = 'cat'  # 表名
    id=db.Column(db.Integer,primary_key=True,autoincrement=True)  # 主键
    cat_name = db.Column(db.String(200), nullable=False)  # 分类名称、不能为空

class Api(db.Model):
    __tablename__ = 'api'  # 表名
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)  # 主键
    api_name = db.Column(db.String(200), nullable=False)      # 接口名称、不能为空
    api_url = db.Column(db.String(200), nullable=False)      # 接口地址、不能为空
    method = db.Column(db.String(200), nullable=False)    # 请求方式、不能为空
    cat_id = db.Column(db.Integer, db.ForeignKey('cat.id'))  # 外键

后端接口:

@app.route('/get_data/',methods=['get'])
def get_data():
    limit = request.args.get('limit')
    page = request.args.get('page')
    api = db.session.query(Api, Cat).outerjoin(Cat, Cat.id == Api.cat_id).paginate(
        page=int(page), per_page=int(limit)).items
    list = []
    data = {}
    for api in api:
        data = dict(id=api[0].id, api_name=api[0].api_name, api_url=api[0].api_url, method=api[0].method,
                    cat_id=api[0].cat_id, cat_name=api[1].cat_name)
        list.append(data)
    count = len(db.session.query(Api, Cat).outerjoin(Cat, Cat.id == Api.cat_id).all())
    print('code:', 0, 'msg:', '获取数据成功', 'count:', count, 'data:', list)
    return jsonify({'code': 0, 'msg': '获取数据成功', 'count': count, 'data': list})

传给前端的数据需要是{'code':'','msg':'','count':'','data':''}的格式

页面呈现:

image.png

2、监听工具栏

table加上lay-filter属性:

<table id="api_table" lay-filter="api_table"></table>

body部分增加代码:

<script type="text/html" id="bar">
    <a class="layui-btn layui-btn-xs" lay-event="edit">修改</a>
    <a class="layui-btn layui-btn-xs layui-btn-danger" lay-event="del">删除</a>
</script>

script 的id和操作列的toolbar属性值一致,lay-event需要用来监控不同的事件。

修改js:

    layui.use(['table','layer'], function(){
        var table = layui.table,layer = layui.layer;
        table.render({
            elem: '#api_table',
            url: '/get_data/', //数据接口
            method:'get',
            page: true,
            limit:10,
            limits:[10,20,50],
            cols: [[
                {field: 'id', title: 'ID', width:80, sort: true, fixed: 'left'},
                {field: 'cat_name', title: '分类', width: 177},
                {field: 'api_name', title: '接口名称', width:80},
                {field: 'api_url', title: 'url', width:80,},
                {field: 'method', title: 'method', width:80},
                {field: 'right',title:'操作',toolbar:'#bar',width: 200}
            ]]
        });
        table.on('tool(api_table)',function (obj) {  //绑定table的lay-filter属性
            if(obj.event==='edit'){
                layer.msg('edit')
            }else if(obj.event==='del'){
                layer.msg('del')
            }
        })
    });

点击【修改】按钮查看效果:
image.png

点击修改时,layer.msg('edit'),toast提示“edit”

点击【删除】按钮查看效果:
image.png

点击修改时,layer.msg('del'),toast提示“del”

3、监听头部工具栏

头部工具栏和工具行事件类似

table.render添加参数

toolbar:'#toolbar',

body中增加代码

<script type="text/html" id="toolbar">
    <button  class="layui-btn layui-btn-sm" lay-event="add">添加</button >
    <button  class="layui-btn layui-btn-sm layui-btn-danger" lay-event="del">删除</button>
</script>

监听头部工具栏:

table.on('toolbar(api_table)', function(obj){
    if(obj.event==='add'){
        layer.msg('add')
    }else if(obj.event==='del'){
         layer.msg('del')
    }
 })

点击头部按钮【添加】查看效果
image.png

点击头部按钮【删除】查看效果
image.png

前端js和css都是基于layui-v2.6.8

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,607评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,239评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,960评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,750评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,764评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,604评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,347评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,253评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,702评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,893评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,015评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,734评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,352评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,934评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,052评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,216评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,969评论 2 355

推荐阅读更多精彩内容

  • LayUI 主要内容 LayUI 的安装及使用 LayUI 的介绍 ​ layui(谐音:类UI) 是一款采用自身...
    一纸油伞阅读 1,134评论 0 0
  • LayUI LayUI 的安装及使用 LayUI 的介绍 ​ layui(谐音:类UI) 是一款采用自身模块规范编...
    xyx清风暖阳阅读 1,846评论 0 1
  • LayUI 的安装及使用 LayUI 的介绍 layui(谐音:类UI) 是一款采用自身模块规范编写的前端 UI ...
    芝麻小叮当阅读 1,203评论 0 0
  • 最近通过方法渲染去加载表格数据的时候,遇到一个问题,表格操作栏的按钮怎么去显示? 加载表格数据 头部工具栏配置to...
    云三木阅读 378评论 0 0
  • layui复选框在点击换页选择的数据会重置这个问题暂时未解决!!! 第一种方法: //删除多行 //删除多行操作 ...
    触碰梦的菱角阅读 989评论 0 0