Layui 表格组件 头部工具栏 筛选列 加入全选和全不选的功能

Layui 表格组件 头部工具栏 筛选列 加入全选和全不选的功能

问题

前端使用Layui表格组件展示后台数据,因数据中涉及字段较多,因此加入了组件中固有的控制表格列隐藏显示的功能。奈何客户希望再此基础上,加入“全选”和“全不选”的功能,更方便的选择想要单独显示的列名。不废话,上图。

表格组件中原始筛选列的效果
上图为:表格组件中原始筛选列的效果

加入全选和全不选后的效果
上图为:加入全选和全不选控制表格列显示的效果

解决过程

编写控制列全选和全不选的代码

var tbLay = {
	//筛选列加入全选和全不选的功能
    tableExtendColumnFilter:function(tbId){
        var $tbView = null;
        $(".layui-table-view").each(function(index,item){
            if($(item).attr("lay-id") == tbId){
                $tbView = $(this);
                return;
            }
        });
        //.layui-table-tool-panel
        var $iconCols = $tbView.find(".layui-icon-cols");
        $iconCols.click(function(){
            var selected = `<div class="tb-col-selected-yes-no" style="position: absolute;right: 15px;top: 35px;z-index: 999;width: 120px;">
                <button type="button" class="layui-btn layui-btn-sm" οnclick="tbLay.tableExtendColumnFilterShow(this,true)">全选</button>
                <button type="button" class="layui-btn layui-btn-sm" οnclick="tbLay.tableExtendColumnFilterShow(this,false)">全不选</button>
            </div>`;
            if($(this).prev().attr("class") == "tb-col-selected-yes-no"){
                $(".tb-col-selected-yes-no").show();
                return;
            }
            $(this).before(selected);
        });
    },
    //筛选列全选和全不选点击事件
    tableExtendColumnFilterShow:function(thisDom,isAllChecked){
        var liArr = $(thisDom).parent().siblings(".layui-table-tool-panel").find("li");
        console.log(liArr);
        liArr.each(function(index,item){
            var $itemDiv = $(item).find("div");
            var checked = $itemDiv.hasClass("layui-form-checked"); //原始状态
            if((isAllChecked && !checked) || (!isAllChecked && checked)){ //全选 || 全不选
                $itemDiv.click();
            }
        });
    }
}

将上述代码放入tbLayUtil.js

编写控制全选和全不选按钮消失的代码

$(function(){
    //点击空白处,隐藏筛选列全选和全不选
    $(document).click(function(e){
        if(!$(e.target).is(".layui-inline")){
            $(".tb-col-selected-yes-no").hide();
        }
    });
})

将上述代码放入tbLayUtil.js

引入并调用控制列全选和全不选的方法

table.render({
                    elem: '#tb',
                    cols: column,
                    method: "post",
                    headers: {
                        token: $.cookie('token')
                    },
                    url: app.url + "case/yxk/listYxk.do",
                    where: param,
                    parseData: function(res) { //res 即为原始返回的数据
                        return {
                            "code": res.code, //解析接口状态
                            "msg": res.msg, //解析提示文本
                            "count": res.data.count, //解析数据长度
                            "data": res.data.data //解析数据列表
                        };
                    },
                    response: {
                        statusCode: 200 //规定成功的状态码,默认:0
                    },
                    toolbar: true,
                    defaultToolbar: ['filter',{
                        title: '导出', //标题
                        layEvent: 'LAYTABLE_DOWN', //事件名,用于 toolbar 事件中使用
                        icon: 'layui-icon-download-circle' //图标类名
                    }],
                    page: true,
                    autoSort: false, //禁用前段排序
                    height: 'full-60', //高度最大化减去差值
                    width: 'full',
                    done: function(res, curr, count) {
                    	//控制列全选和全不选,此处为关键代码
                        tbLay.tableExtendColumnFilter('tb');
                        layer.closeAll('loading'); //关闭加载层
                    }
                });

将tbLayUtil.js引入表格页面

查看效果即可

  • 9
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
你可以通过自定义 QListWidgetItem 的方式,将第一设置为复选框,并将第二和第三设置为自定义的 QWidget。具体步骤如下: 1. 创建自定义的 QWidget ```cpp class MyWidget : public QWidget { public: MyWidget(QWidget* parent = nullptr) : QWidget(parent) { // 创建两个按钮 QPushButton* btn1 = new QPushButton("Button 1", this); QPushButton* btn2 = new QPushButton("Button 2", this); // 使用水平布局将两个按钮添加到 QWidget 中 QHBoxLayout* layout = new QHBoxLayout(this); layout->addWidget(btn1); layout->addWidget(btn2); layout->setContentsMargins(0, 0, 0, 0); setLayout(layout); } }; ``` 2. 在 QListWidget 中添加数据 ```cpp QListWidget* listWidget = new QListWidget(this); // 循环添加数据 for (int i = 0; i < 10; i++) { QListWidgetItem* item = new QListWidgetItem(); item->setSizeHint(QSize(0, 40)); // 设置每一行的高度 item->setFlags(item->flags() | Qt::ItemIsUserCheckable); // 允许用户勾选复选框 item->setCheckState(Qt::Unchecked); // 默认未勾选 // 创建自定义的 QWidget,并将其设置为第二和第三 MyWidget* widget = new MyWidget(listWidget); listWidget->setItemWidget(item, widget, Qt::AlignCenter); // 将 QListWidgetItem 添加到 QListWidget 中 listWidget->addItem(item); } ``` 3. 添加全选全不选功能 ```cpp // 全选按钮的槽函数 void selectAll() { for (int i = 0; i < listWidget->count(); i++) { QListWidgetItem* item = listWidget->item(i); item->setCheckState(Qt::Checked); } } // 全不选按钮的槽函数 void unselectAll() { for (int i = 0; i < listWidget->count(); i++) { QListWidgetItem* item = listWidget->item(i); item->setCheckState(Qt::Unchecked); } } // 在合适的地方连接槽函数即可 connect(selectAllBtn, &QPushButton::clicked, this, &MyWidget::selectAll); connect(unselectAllBtn, &QPushButton::clicked, this, &MyWidget::unselectAll); ``` 这样就可以实现在 QListWidget 中显示三数据,并且第一为复选框,第二和第三为自定义的 QWidget,同时具有全选全不选功能了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

songhuageini

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值