layui学习笔记(三)关于layui渲染表格因权限判断需要动态隐藏列的研究

这篇具有很好参考价值的文章主要介绍了layui学习笔记(三)关于layui渲染表格因权限判断需要动态隐藏列的研究。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

学习场景:

TP6+Layuiadmin+apache+mysql+vscode学习研究layui前端技术


问题描述

layui2.76版本,渲染的表格,因同一页面不同用户权限判断,所需要有不同的表格列来支持时,目前无法满足。

layui文档中有hide:true这一方法。
单独使用hide:true隐藏时是没问题的,但是这是个初始化隐藏,无法进行判断。
网上的方法都是使用done方法,表格渲染完成后的回调,根据条件判断,修改表格列的display属性进行隐藏。
代码如下:(css和attr两种方式都试过了

, done: function (res) {
    if (uid != 2) {
        $("[data-field='dispaly']").css('display','none');
    }
}

layui.setter,layui学习笔记,layui,学习,前端

结果:要隐藏的列隐藏了,但是后面会有一个预留出来的空列,表格的最后有个整体空列。

layui官方说会在layui2.8的版本中,增加这个功能。
layui.setter,layui学习笔记,layui,学习,前端

layui.setter,layui学习笔记,layui,学习,前端

相关链接:table如何动态地隐藏/显示某列? · Issue #I5RUAJ · Layui/layui - Gitee.com


解决方案:

 在layui2.8正式版没有出来之前,还是得要有解决方案的。

1.使用如下图layui表格 02自动渲染和03静态表格渲染。这里不介绍了。在table里直接做判断就可以了。

渲染方法详见layui文档:table 数据表格文档 - Layui

layui.setter,layui学习笔记,layui,学习,前端

 2.如果必须用01的方法渲染方式,也就是table.render()方式。

自己琢磨了很久,发现table.render()中cols参数其实就是个大数组。

那我的方法就是把数组分开,进行权限判断后再拼接在一起。

HTML部分(仅供学习参考)

<div class="layui-card-body">
            <table id="LAY-app-article-list" lay-filter="LAY-app-article-list"></table>
            <script type="text/html" id="table-content-list">
                <div class="layui-btn-group">
                    {{# if(d.qs == 1){ }}
                    <a class="layui-btn layui-btn-xs" id="{{- d.id }}"><i class="layui-icon layui-icon-chart"></i>签收情况</a>
                    {{# } }}
                    <a class="layui-btn layui-btn-normal 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"><i class="layui-icon layui-icon-delete"></i>删除</a>
                </div>
            </script>
            <script type="text/html" id="switchSort">
                <input type="checkbox" name="sort" value="{{d.sort}}" lay-skin="switch" lay-text=" 是 | 否 " lay-filter="switch_filter" {{ d.sort ==1 ? 'checked' : 0 }}>
            </script>
            <script type="text/html" id="switchDisplay">
                {{# if(d.image == ''){ }}
                <span style="color:#999;">无图</span>
                {{# }else{ }}
                <input type="checkbox" name="display" value="{{d.display}}" lay-skin="switch" lay-text=" 显 | 隐 " lay-filter="switch_filter" {{ d.display ==1 ? 'checked' : 0 }}>
                {{# } }}
            </script>
            <script type="text/html" id="switchAudit">
                <a class="layui-btn layui-btn-primary layui-btn-xs layui-border-green" lay-event="audit" id="{{- d.id }}">审核信息</a>
            </script>
</div>

layui的js部分(仅供学习参考)

<script>
    layui.use(['admin', 'table', 'form'], function () {
        var $ = layui.$
            , admin = layui.admin
            , setter = layui.setter
            , view = layui.view
            , table = layui.table
            , layer = layui.layer
            , form = layui.form;
        let uid = layui.data(setter.tableName).uid;//获取用户ID值
        var cols1 = [//将固定显示列的数组赋值。
            { type: 'checkbox', fixed: 'left' }
            , { field: 'id', width: 70, title: 'ID', align: 'center' }
            , { field: 'title', title: '分类名称' }
            , { field: 'cat_name', title: '文章分类', width: 115, align: 'center', unresize: true }
            , { field: 'user_name', title: '发布人', width: 78, align: 'center', unresize: true }
            , { field: 'add_time', title: '发布日期', width: 110, align: 'center', unresize: true }
        ]
        if (uid == 1) {//用户ID判断
            var cols2 = [//将列的数组赋值。
                { field: 'dispaly', title: '幻灯显隐', width: 92, align: 'center', templet:'#switchDisplay', unresize: true }
                , { field: 'sort', title: '是否置顶', width: 88, align: 'center', templet:'#switchSort', unresize: true }
                , { title: '审核信息', width: 90, align: 'center', templet:'#switchAudit', unresize: true }                
            ]
        } else {
            var cols2 = [{//将列的数组赋值。
                field: 'sh', title: '审核状态', width: 87, align: 'center', templet: function (d) {
                    switch (d.sh) {
                        case 0:
                            return '<b style="color:#0351f0">待审核</b>';
                            break;
                        case 1:
                            return '<b style="color:#43ae02">已审核</b>';
                            break;
                        case 2:
                            return '<b style="color:#d70000">未通过</b>';
                            break;
                    }
                }
            }]
        }
        var cols3 = [//将最后操作列的数组赋值
            { title: '操作', width: 210, align: 'center', fixed: 'right', toolbar: '#table-content-list', unresize: true }
        ]
        //拼接三个数组,使用的是concat
        var sumarr = cols1.concat(cols2).concat(cols3);
        //文章列表
        table.render({
            elem: '#LAY-app-article-list'
            , url: '/ccadmins/Article/article_list_index' //接口
            , cols: [sumarr]  //将拼接好的数组给cols参数
            , where: { uid: uid } //传递用户ID值给后端
            , page: true
            , limit: 15
            , limits: [10, 15, 20, 25, 30, 50, 100]
            , text: {
                none: '暂无相关数据'
            }
        });
        form.render(null, 'app-article-content-list');
    });
</script>

thinkphp6部分(仅供学习参考)

<?php
namespace app\admins\controller;

use think\facade\Db;
use think\facade\Request;
class Article
{
    //列表首页
    public function article_list_index(){
        $data = Request::instance()->param();
        $where = [];
        $s = trim(Request::instance()->param('searcharticle.s'));
        $cat_id = Request::instance()->param('searcharticle.aritcle_cat_id');
        $user_id = Request::instance()->param('searcharticle.aritcle_user_id');
        $page = $data['page'];
        $limit = $data['limit'];
        $uid = $data['uid'];  //获取前台传递的用户ID
        if (!empty($s)) {
            $where[] = array('title', 'like', '%'.$s.'%');
        }
        if (!empty($cat_id)) {
            $where[] = array('cat_id', '=', $cat_id);
        }
        if (!empty($user_id)) {
            $where[] = array('user_id', '=', $user_id);
        }
        if ($uid == 1) {
            $where[] = array('sh','=','1');
            $order = 'sort DESC, add_time DESC';
        }else{
            $where[] = array('user_id','=',$uid);
            $order = 'sh ASC, add_time DESC';
        }
        $where[] =array(['delete','=','0']);
        $count = Db::name('article')->where($where)->count();//文章总条数
        $ret = Db::name('article')
            ->where($where) //查询条件
            ->order($order) //排序方式
            ->withAttr('add_time',function ($value,$data) {
                return date("Y-m-d",$value);//格式化时间戳日期格式
            })
            ->withAttr('shtime',function ($value,$data) {
                return date("Y-m-d",$value);//格式化时间戳日期格式
            })
            ->page($page,$limit)
            ->select()
            ->toArray();
            foreach ($ret as $key=>$value){//获取文章分类
                $cate = Db::name('article_category')->where(['cat_id' => $value['cat_id']])->field('cat_name')->find();
                $ret[$key]['cat_name'] =$cate['cat_name'];
            }
            foreach ($ret as $key=>$value){//获取文章发布人和文章审核人
                $cate = Db::name('admin')->where(['user_id' => $value['user_id']])->field('user_name')->find();
                $shr = Db::name('admin')->where(['user_id' => $value['shr']])->field('user_name')->find();
                $ret[$key]['user_name'] =$cate['user_name'];
                $ret[$key]['shr'] = $shr['user_name'];
            }
            return json(['code'=>0,'msg'=>'ok','limit'=>$limit,'page'=>$page,'count'=>$count,'data'=>$ret]);
    }
}


layui.setter,layui学习笔记,layui,学习,前端

 layui.setter,layui学习笔记,layui,学习,前端

 文章来源地址https://www.toymoban.com/news/detail-812673.html

到了这里,关于layui学习笔记(三)关于layui渲染表格因权限判断需要动态隐藏列的研究的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android 13 关于安卓判断通知权限

    判断权限是否开启: public class NoticePermissionUtil {       private static final String CHECK_OP_NO_THROW = \\\"checkOpNoThrow\\\";     private static final String OP_POST_NOTIFICATION = \\\"OP_POST_NOTIFICATION\\\";       //调用该方法获取是否开启通知栏权限     public static boolean isNotifyEnabled(Context context) {        

    2023年04月13日
    浏览(43)
  • layui框架学习(40:数据表格_主要事件)

      Layui数据表格模块主要通过各类事件响应工具栏操作、单元格编辑或点击等交互操作,本文学习table数据表格模块中的主要事件及处理方式。    头部工具栏事件 。通过代码“table.on(‘toolbar(test)’, function(obj))”获取lay-filter属性为test的数据表格的头部工具栏事件,头部

    2024年02月10日
    浏览(45)
  • 【前端】layui前端框架学习笔记

    【前端目录贴】 参考视频 :LayUI 参考笔记 :https://blog.csdn.net/qq_61313896/category_12432291.html 官网:http://layui.apixx.net/index.html 国人16年开发的框架,拿来即用,门槛低 … Layui 是一套开源的 Web UI 组件库,采用自身轻量级模块化规范,遵循原生态的 HTML/CSS/JavaScript 开发模式,极易上手,

    2024年04月23日
    浏览(49)
  • Layui禁止表格部分复选框,layui禁止表格自带第一列复选框,layui禁止表格部分复选框,layui获取表格复选框选中数据

    禁止某些行可以勾选操作,及选中后的操作和行操作 执行一个table示例 cols 的第一列就是需要重写的复选框 其中templet: \\\"#toolCheck\\\"的标签块 监听全选重写 获取复选框选中的值,tempTableList当前列表返回的数组 以上即可! 监听行复选框点击(如果没有重写复选框就可以用) 标签

    2024年02月09日
    浏览(57)
  • layui.table表格重载(表格搜索)

    同样,由于官方文档比较笼统,还是做一些layui的探索。本次内容为layui.table重载。 引入问题: 传统web更新页面用页面跳转的方式,现多用局部元素重载,提高用户体验。Ajax技术就是为了实现此功能而诞生的。layui框架在table模块中提供了类似的功能,为避免二次渲染,同时

    2024年02月09日
    浏览(37)
  • LayUI模板引擎渲染数据

    接上节Spring boot项目开发实战——(LayUI实现前后端数据交换与定义方法渲染数据) 模板引擎能简化开发,极大提高效率,小编之前使用过JSP和Thymeleaf,以及python的jinja2,这些是后端的模板引擎,数据的渲染都需要借助服务器,对html重新解析,在特定标识符处填入数据。 No

    2023年04月08日
    浏览(41)
  • 关于Redis,你需要学习了解的知识

    关于 Redis ,涵盖多个方面,从基础概念到高级应用,以及最佳实践等。比如以下内容: 认识 Redis: Redis 是什么?它的特点和优势是什么? Redis 的数据结构:字符串、哈希、列表、集合、有序集合、位图等。 安装和配置 Redis: 在不同操作系统上安装 Redis。 配置 Redis 的基本

    2024年02月13日
    浏览(47)
  • layui表格合并的方法

    摘自文章: layui表格合并_忘记昵称了的博客-CSDN博客_layui 表格合并  摘自文章:layui表格行合并_destiny ~的博客-CSDN博客_layui导出excel合并单元格

    2024年02月13日
    浏览(40)
  • layui表格事件分析实例

    在 layui 的表格组件中,区分表头事件和行内事件是通过事件类型(toolbar 和 tool)以及 lay-filter 值来实现的。 我们有一个表格,其中有一个工具栏按钮和操作按钮。我们将使用 layui 的 table 组件来处理这些事件。 HTML 结构: JavaScript 代码: 通过在按钮的 HTML 模板中使用 lay-e

    2024年02月11日
    浏览(38)
  • 【前端】Layui动态数据表格拖动排序

    目的:使用Layui的数据表格,拖动行进行排序。 使用插件:layui-soul-table 和 Layui 1.layui-soul-table文档:https://soultable.yelog.org/#/zh-CN/component/start/install 2.layui文档:Layui table模块 | 数据表格 | datatable - 在线演示 结合Layui并参看layui-soul-table官方教程,写的比较详细页比较简单。 实现

    2024年02月10日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包