vxe-table 如何实现跟 excel 一样的筛选框,支持字符串、数值、日期类型筛选

vxe-table 如何实现跟 excel 一样的筛选框,支持字符串、数值、日期类型筛选,实现跟 excel 类似的筛选框

https://vxetable.cn

字符串类型

通过设置 filterRender.cellType='string' 或空默认设置为字符串类型筛选框

html 复制代码
<template>
  <div>
    <vxe-grid v-bind="gridOptions"></vxe-grid>
  </div>
</template>

<script setup>
import { reactive } from 'vue'

const gridOptions = reactive({
  border: true,
  height: 500,
  showOverflow: true,
  columnConfig: {
    resizable: true
  },
  columns: [
    { type: 'seq', width: 70 },
    {
      field: 'name',
      title: '名称',
      sortable: true,
      filterRender: {
        name: 'FilterCombination'
      }
    },
    {
      field: 'nickname',
      title: '昵称',
      sortable: true,
      filterRender: {
        name: 'FilterCombination'
      }
    },
    { field: 'role', title: '角色' },
    { field: 'sex', title: '性别' },
    { field: 'age', title: '年龄' },
    { field: 'num', title: '分数' },
    { field: 'rate', title: '评分' },
    { field: 'address', title: '地址', minWidth: 200 }
  ],
  data: [
    { id: 10001, name: '张三', nickname: '非主流昵称', role: '前端开发', sex: 'Man', num: 23, age: 28, rate: 3, address: '北京市朝阳区33号' },
    { id: 10002, name: '小李', nickname: '使用说明', role: '测试人员', sex: 'Women', num: 38, age: 22, rate: 4, address: '广州市白云区964号' },
    { id: 10003, name: '小明', nickname: '自定义的', role: '项目经理', sex: 'Man', num: 33, age: 32, rate: 0, address: '深圳市龙华区94号' },
    { id: 10004, name: '李四', nickname: '一直风吹过', role: '前端开发', sex: 'Women', num: 456, age: 24, rate: 1, address: '广州市白云区15号' },
    { id: 10005, name: '王五', nickname: '暂无', role: '测试人员', sex: 'Women', num: 42, age: 42, rate: 5, address: '北京市朝阳区32号' },
    { id: 10006, name: '张三', nickname: '使用说明', role: '后端开发', sex: 'Man', num: 23, age: 38, rate: 0, address: '深圳市罗湖区94号' },
    { id: 10007, name: '小李', nickname: '一直风吹过', role: '前端开发', sex: 'Women', num: 100, age: 24, rate: 1, address: '上海市黄浦区44号' },
    { id: 10008, name: '小徐', nickname: '非主流昵称', role: '设计师', sex: 'Man', num: 345, age: 34, rate: 3, address: '上海市虹口区44号' },
    { id: 10009, name: '李四', nickname: '暂无', role: '前端开发', sex: 'Man', num: 67, age: 52, rate: 1, address: '深圳市龙岗区94号' },
    { id: 10010, name: '小明', nickname: '一直风吹过', role: '项目经理', sex: 'Women', num: 23, age: 44, rate: 5, address: '北京市朝阳区105号' },
    { id: 10011, name: '王五', nickname: '自定义的', role: '测试人员', sex: 'Man', num: 56, age: 52, rate: 4, address: '深圳市南山区98号' },
    { id: 10012, name: '小李', nickname: '非主流昵称', role: '设计师', sex: 'Women', num: 24, age: 16, rate: 2, address: '北京市朝阳区863号' }
  ]
})
</script>

数值类型

通过设置 filterRender.cellType='number' 设置为数值类型筛选框

html 复制代码
<template>
  <div>
    <vxe-grid v-bind="gridOptions"></vxe-grid>
  </div>
</template>

<script setup>
import { reactive } from 'vue'

const gridOptions = reactive({
  border: true,
  height: 500,
  showOverflow: true,
  columnConfig: {
    resizable: true
  },
  columns: [
    { type: 'seq', width: 70 },
    { field: 'name', title: '名称' },
    { field: 'nickname', title: '昵称' },
    { field: 'role', title: '角色' },
    { field: 'sex', title: '性别' },
    { field: 'age', title: '年龄' },
    {
      field: 'num',
      title: '分数',
      sortable: true,
      filterRender: {
        name: 'FilterCombination',
        cellType: 'number'
      }
    },
    {
      field: 'rate',
      title: '评分',
      sortable: true,
      filterRender: {
        name: 'FilterCombination',
        cellType: 'number'
      }
    },
    { field: 'address', title: '地址', minWidth: 200 }
  ],
  data: [
    { id: 10001, name: '张三', nickname: '非主流昵称', role: '前端开发', sex: 'Man', num: 23, age: 28, rate: 3, address: '北京市朝阳区33号' },
    { id: 10002, name: '小李', nickname: '使用说明', role: '测试人员', sex: 'Women', num: 38, age: 22, rate: 4, address: '广州市白云区964号' },
    { id: 10003, name: '小明', nickname: '自定义的', role: '项目经理', sex: 'Man', num: 33, age: 32, rate: 0, address: '深圳市龙华区94号' },
    { id: 10004, name: '李四', nickname: '一直风吹过', role: '前端开发', sex: 'Women', num: 456, age: 24, rate: 1, address: '广州市白云区15号' },
    { id: 10005, name: '王五', nickname: '暂无', role: '测试人员', sex: 'Women', num: 42, age: 42, rate: 5, address: '北京市朝阳区32号' },
    { id: 10006, name: '张三', nickname: '使用说明', role: '后端开发', sex: 'Man', num: 23, age: 38, rate: 0, address: '深圳市罗湖区94号' },
    { id: 10007, name: '小李', nickname: '一直风吹过', role: '前端开发', sex: 'Women', num: 100, age: 24, rate: 1, address: '上海市黄浦区44号' },
    { id: 10008, name: '小徐', nickname: '非主流昵称', role: '设计师', sex: 'Man', num: 345, age: 34, rate: 3, address: '上海市虹口区44号' },
    { id: 10009, name: '李四', nickname: '暂无', role: '前端开发', sex: 'Man', num: 67, age: 52, rate: 1, address: '深圳市龙岗区94号' },
    { id: 10010, name: '小明', nickname: '一直风吹过', role: '项目经理', sex: 'Women', num: 23, age: 44, rate: 5, address: '北京市朝阳区105号' },
    { id: 10011, name: '王五', nickname: '自定义的', role: '测试人员', sex: 'Man', num: 56, age: 52, rate: 4, address: '深圳市南山区98号' },
    { id: 10012, name: '小李', nickname: '非主流昵称', role: '设计师', sex: 'Women', num: 24, age: 16, rate: 2, address: '北京市朝阳区863号' }
  ]
})
</script>

日期类型

通过设置 filterRender.cellType='date' 设置为日期类型筛选框

html 复制代码
<template>
  <div>
    <vxe-grid v-bind="gridOptions"></vxe-grid>
  </div>
</template>

<script setup>
import { reactive } from 'vue'

const gridOptions = reactive({
  border: true,
  height: 500,
  showOverflow: true,
  columnConfig: {
    resizable: true
  },
  columns: [
    { type: 'seq', width: 70 },
    { field: 'name', title: '名称' },
    { field: 'nickname', title: '昵称' },
    { field: 'role', title: '角色' },
    {
      field: 'date1',
      title: '日期1',
      sortable: true,
      filterRender: {
        name: 'FilterCombination',
        cellType: 'date'
      }
    },
    {
      field: 'date2',
      title: '日期2',
      sortable: true,
      filterRender: {
        name: 'FilterCombination',
        cellType: 'date'
      }
    },
    { field: 'address', title: '地址', minWidth: 200 }
  ],
  data: [
    { id: 10001, name: '张三', nickname: '非主流昵称', role: '前端开发', sex: 'Man', num: 23, age: 28, rate: 3, date1: '2025-10-02', date2: '', address: '北京市朝阳区33号' },
    { id: 10002, name: '小李', nickname: '使用说明', role: '测试人员', sex: 'Women', num: 38, age: 22, rate: 4, date1: '2025-11-12', date2: '2025-09-24', address: '广州市白云区964号' },
    { id: 10003, name: '小明', nickname: '自定义的', role: '项目经理', sex: 'Man', num: 33, age: 32, rate: 0, date1: '', date2: '2025-10-015', address: '深圳市龙华区94号' },
    { id: 10004, name: '李四', nickname: '一直风吹过', role: '前端开发', sex: 'Women', num: 456, age: 24, rate: 1, date1: '2025-12-18', date2: '2025-08-28', address: '广州市白云区15号' },
    { id: 10005, name: '王五', nickname: '暂无', role: '测试人员', sex: 'Women', num: 42, age: 42, rate: 5, date1: '2026-07-15', date2: '2026-05-21', address: '北京市朝阳区32号' },
    { id: 10006, name: '张三', nickname: '使用说明', role: '后端开发', sex: 'Man', num: 23, age: 38, rate: 0, date1: '2023-04-10', date2: '2025-11-29', address: '深圳市罗湖区94号' },
    { id: 10007, name: '小李', nickname: '一直风吹过', role: '前端开发', sex: 'Women', num: 100, age: 24, rate: 1, date1: '2024-09-10', date2: '2025-02-05', address: '上海市黄浦区44号' },
    { id: 10008, name: '小徐', nickname: '非主流昵称', role: '设计师', sex: 'Man', num: 345, age: 34, rate: 3, date1: '', date2: '2027-12-28', address: '上海市虹口区44号' },
    { id: 10009, name: '李四', nickname: '暂无', role: '前端开发', sex: 'Man', num: 67, age: 52, rate: 1, date1: '2022-08-07', date2: '2029-08-17', address: '深圳市龙岗区94号' },
    { id: 10010, name: '小明', nickname: '一直风吹过', role: '项目经理', sex: 'Women', num: 23, age: 44, rate: 5, date1: '2025-02-05', date2: '2026-05-04', address: '北京市朝阳区105号' },
    { id: 10011, name: '王五', nickname: '自定义的', role: '测试人员', sex: 'Man', num: 56, age: 52, rate: 4, date1: '2025-09-16', date2: '2028-10-15', address: '深圳市南山区98号' },
    { id: 10012, name: '小李', nickname: '非主流昵称', role: '设计师', sex: 'Women', num: 24, age: 16, rate: 2, date1: '2025-10-25', date2: '', address: '北京市朝阳区863号' }
  ]
})
</script>

https://gitee.com/x-extends/vxe-table

相关推荐
CharlesYu019 小时前
前端性能优化的第一性原理,是不断缩短“用户发起意图 → 获得可用结果”之间的时间
前端
平头哥技术团队9 小时前
Day 21 _ 页内锚点_给每段起个 id,目录写 href=_#id_,点一下页面就滚到那一段
前端·html·html5
子兮曰10 小时前
Bun v1.4.1 深度解析:从 Zig 到 Rust,一场 11 天、64 个 AI 代理的语言迁徙
前端·后端·bun
人民广场吃泡面11 小时前
什么是AI Agent?它又能给前端带来哪些效率提升?
前端·人工智能
中科三方11 小时前
两家域名注册商资质被ICANN终止:企业域名资产安全再受关注
前端·网络·安全·域名
bug总结11 小时前
uniapp vue3全局方法注册使用
前端·javascript·uni-app
华无丽言12 小时前
如何在宜搭中实现获取子表中的字段值赋值到父表中?
前端·javascript·低代码
IT_陈寒12 小时前
Vue的computed属性竟然坑了我一把
前端·人工智能·后端
威斯软科的老司机12 小时前
通俗讲解 CNN 图像识别、向量 Embedding、Softmax 概率计算这三块的简化原理
前端·人工智能·ui·数字孪生
2601_9623824313 小时前
剑指大前端全栈工程师(全2册)主要情节
javascript·实战案例·全栈工程师·剑指大前端·html5+css3