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

相关推荐
VT.馒头5 分钟前
【力扣】2625. 扁平化嵌套数组
前端·javascript·算法·leetcode·职场和发展·typescript
数研小生34 分钟前
Full Analysis of Taobao Item Detail API taobao.item.get
java·服务器·前端
Shirley~~43 分钟前
Vue-skills的中文文档
前端·人工智能
毎天要喝八杯水1 小时前
搭建vue前端后端环境
前端·javascript·vue.js
计算机程序设计小李同学1 小时前
幼儿园信息管理系统的设计与实现
前端·bootstrap·html·毕业设计
开开心心就好1 小时前
键盘改键工具免安装,自定义键位屏蔽误触
java·网络·windows·随机森林·计算机外设·电脑·excel
雨季6661 小时前
Flutter 三端应用实战:OpenHarmony “极简手势轨迹球”——指尖与屏幕的诗意对话
开发语言·javascript·flutter
雨季6662 小时前
Flutter 三端应用实战:OpenHarmony “专注时光盒”——在碎片洪流中守护心流的数字容器
开发语言·前端·安全·flutter·交互
tao3556672 小时前
【用AI学前端】HTML-02-HTML 常用标签(基础)
前端·html
2601_949532842 小时前
Psello HTML Template: A Developer‘s Deep-Dive Review and Guide - Download Free
前端·windows·html·seo·wordpress·gpl