vue3 antd项目实战——table表格的自定义筛选【纯前端filters过滤、自定义筛选table表格数据】

往期知识调用(步骤不懂就看这儿)

文章内容文章链接
vue3 antd table表格的基础搭建https://blog.csdn.net/XSL_HR/article/details/128072745
ant design vue组件库的引入与使用https://blog.csdn.net/XSL_HR/article/details/127396384

场景复现

后台管理系统中,我们需要对大量的数据进行展示、处理和操作,table表格也因此无处不在。而ant design vue组件库中的table表格,给出了诸多属性来方便数据管理。本期文章向大家介绍的是filters属性——在表头添加自定义筛选功能,实现对表格列数据自定义筛选

需求:表格数据能够在表头进行自定义筛选操作
方法:借助ant design vue组件库的filters属性

最终效果:(部分页面)
请添加图片描述


实战演示

下面将用三个具体的项目例子来具体介绍,如何实现table表格的自定义筛选

项目的UI框架依旧采用ant design vue组件库(移步官方文档查看详情

实例1——筛选发布状态🔥

页面的实现这里就不过多阐述了,直接进入正题,怎么实现自定义筛选

1、双向绑定表格列目录、表格数据

<a-table 
   :columns="columns" 
   :dataSource="tableData"
    style="margin-top:5px" 
    >
    <!--表格内的插槽及数据渲染-->
</a-table>

2、编写列目录内容及参数类型

(1)目录内容:

const columns = ref<columnsType[]>([
    {
        title: "新建人",
        dataIndex: "create_user",
        key: "create_user",
        width: 120,
        align: "center",
    },
    {
        title: "新建日期",
        dataIndex: "create_date",
        key: "create_date",
        width: 120,
        align: "center",
        customRender:function({text} : any) {
            return dayjs(text).format("YYYY-MM-DD");
        },
    },
    {
        title: "发布状态",
        dataIndex: "enable",
        key: "enable",
        width: 100,
        align: "center",      
    },
    {
        title: "邮箱状态",
        dataIndex: "email",
        key: "email",
        width: 100,
        align: "center",
    },
    {
        title: "操作",
        dataIndex: "operation",
        key: "operation",
        width: 200,
        align: "center",
    },
]) 

(2)参数类型(里面的每个参数分别对应什么,已注释表明)

export interface columnsType {
    title: string; // 标题
    dataIndex: string; // 数据
    key: string; // 键值
    width: number; // 宽度
    align: string; // 位置
    customRender?: any; // 插槽
    sorter?: any; // 排序
    sortDirections?: any; // 排序方式 
    fixed?: string; // 固定列
    filters?: any; // 筛选
    onFilter?: any; // 本地筛选
}

官方文档中的详细说明
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、在columns中添加自定义筛选功能🔥

        filters: [
            { 
                text: '已发布', 
                value: 1 
            },
            { 
                text: '未发布',
                value: 0 
            },
        ],
        onFilter: (value: number | string | boolean, record: tableDataType) =>
            record.state === value,     

在这里插入图片描述

解释说明

  • filters中存放的是一个数组,数组的元素个数即为筛选项的个数,每一个元素对应两个参数,分别是textvaluetext对应页面展示出来的筛选项文本value则与数据的属性值一一对应
  • (当然在我的表格数据中,代表发布状态的属性值state为1即已发布,为0则未发布
  • onFilterfilters可谓成对出现,有filters的地方,onFilter也一定存在。(前提为本地筛选
  • onFilter对应的是一个函数,函数有两个变量valuerecord,分别对应筛选项对应的值表单中该列数据所对应的值,当这两个值相等时,则表示筛选成功,并将筛选后的数据展示在页面中。

最终实现效果(部分页面)请添加图片描述
其实并不难,看官方文档的教程不如来看看实战操作,立马学会。下面我们来复用一下上面的方法,再实现几个自定义筛选。

自己写数据的时候,如果有报错,要么是数据类型出了问题,要么是少了数据,要么是少了逗号等标识符

实例2——筛选通知状态

我们接着上面的框架,对邮箱通知状态进行自定义筛选。

        filters: [
            { 
                text: '已通知', 
                value: 1 
            },
            { 
                text: '未通知',
                value: 0 
            },
        ],
        onFilter: (value: number | string | boolean, record: tableDataType) =>
            record.email === value,

在这里插入图片描述
最终实现效果请添加图片描述
和实例一类似,除了参数和数据以外,逻辑上几乎没有区别,如果还有点模糊的话,来看看第三个实例吧。

实例3——筛选部门

1、列目录columns数据、参数类型columnType

interface columnType {
    title: string;
    dataIndex: string;
    key: string;
    width: number;
    align: string;
    customRender?: any;
    filters?: any;
    onFilter?: any;
    children?: any; // 子表格
    tags?: any; // 标签
    fixed?: any
}
const columns = ref<columnType[]>([
    {
        title: "部门",
        dataIndex: "files_department",
        key: "files_department",
        width: 195,
        align: "center",
    {
        title: "入职档案",
        dataIndex: "files_onboard",
        key: "files_onboard",
        width: 270,
        align: "left",
    },
]) 

2、在columns中添加filters和onFilter实现自定义筛选

          filters: [
            { 
                text: '技术研发与测试部', 
                value: '技术研发与测试部' 
            },
            { 
                text: '产品与UED部',
                value: '产品与UED部' 
            },
            { 
                text: '综合管理部',
                value: '综合管理部' 
            },
            { 
                text: '学科教研部部',
                value: '学科教研部' 
            },
            { 
                text: '校园媒体部',
                value: '校园媒体部' 
            },
        ],
        onFilter: (value: string, record: tableDataType) =>
            record.files_department === value,

最终实现效果
请添加图片描述


想必看到这里的你,一定学会了如何自定义筛选表格数据了吧! 若有疑问,欢迎评论区留言或私信~


后期文章将进一步介绍table表格的一些骚操作,比如各种规则排序
感兴趣的小伙伴可以订阅本专栏,方便后续了解学习~
觉得这篇文章有用的小伙伴们可以点赞➕收藏➕关注哦~
阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 9
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
Element Plus 的树形表格也可以使用类似的方式实现全选反选功能。以下是示例代码: ```html <template> <div> <el-checkbox v-model="allChecked" @change="selectAll">全选</el-checkbox> <el-table :data="tableData" style="width: 100%"> <el-table-column type="selection" v-model="checkedItems"></el-table-column> <el-table-column prop="name" label="名称"></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> </el-table> </div> </template> <script> import { ref, computed } from 'vue'; import { ElTable, ElTableColumn, ElCheckbox } from 'element-plus'; export default { components: { ElTable, ElTableColumn, ElCheckbox }, setup() { const tableData = ref([ { id: 1, name: 'John', age: 25, children: [ { id: 11, name: 'Mike', age: 22 }, { id: 12, name: 'Mary', age: 20 } ] }, { id: 2, name: 'Tom', age: 30, children: [ { id: 21, name: 'Jack', age: 28 }, { id: 22, name: 'Lucy', age: 26 } ] } ]); const checkedItems = ref([]); const checkAll = ref(false); const allChecked = computed({ get() { return checkedItems.value.length === tableData.value.length; }, set(val) { checkedItems.value = val ? tableData.value.slice() : []; } }); function selectAll() { checkedItems.value = allChecked.value ? [] : tableData.value.slice(); } return { tableData, checkedItems, checkAll, allChecked, selectAll }; } }; </script> ``` 在上面的代码中,我们使用 Element Plus 的 `ElTable` 和 `ElTableColumn` 组件来实现树形表格,用 `type="selection"` 的方式来添加选择列,将其与 `checkedItems` 变量绑定。在全选复选框中,我们使用 `ElCheckbox` 组件,并将其与 `allChecked` 变量绑定,使用 `@change` 事件监听全选复选框的状态变化,通过 `selectAll` 方法实现全选反选功能。 需要注意的是,在树形表格中,每一行数据可能还包含子节点,因此我们需要修改计算全选状态的逻辑,同时需要修改全选反选的实现方式。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Dorable_Wander

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

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

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

打赏作者

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

抵扣说明:

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

余额充值