首页 > 其他分享 >列表/表格搜索方法->前端实现

列表/表格搜索方法->前端实现

时间:2023-11-03 17:15:20浏览次数:39  
标签:searchParams const 表格 allDataList page pageNumber filterKey 列表 前端

很多业务系统中都会用到表格/列表,大部分都是用组件,配合搜索接口可以实现,搜索按钮是发送请求获取数据来更新表格数据。

但不是所有的列表都会有对应的后端搜索接口,比如在对一个弹窗里面的列表进行选择,数据量不是特别大的情况下希望前端支持筛选,可以更加方便快捷的对数据进行操作,这时候就需要用到数据筛选。
这部分代码是大佬写的,我觉得封装的函数很好,所以在这里记录学习一下。(应该不会被本人看到吧)

// 搜索相关数据
export function useSearchData<T extends Record<string, string | undefined>>(
  defaultSearchParams: T,
) {
  // 搜索参数
  const searchParams = reactive({
    ...defaultSearchParams,
  });

  // 分页参数
  const page = reactive({
    pageNumber: 1,
    pageSize: 10,
  });

  // 返回的数据
  const allDataList = ref<any[]>([]);
  //通过筛选匹配实现搜索,使用计算属性实现双向数据和缓存
  const filteredList = computed(() => allDataList.value.filter((item) => {
    const filterKeys = Object.keys(defaultSearchParams);
    return filterKeys.every((filterKey) => !filterKey
      || !item[filterKey]
      || (item[filterKey].toLowerCase()?.includes(
        (searchParams[filterKey] || '').toLowerCase(),
      )));
  }));
  // 匹配上查询条件总条数
  const total = computed(() => filteredList.value.length);

  // 当前页面匹配上查询条件的数据
  const dataList = computed(() => {
    const start = (page.pageNumber - 1) * page.pageSize;
    const end = page.pageNumber * page.pageSize;
    return filteredList.value.slice(start, end);
  });

//实时监听筛选,数据一变化就回到第一页,重新渲染数据
  watch(searchParams, () => {
    page.pageNumber = 1;
  }, { deep: true });
  watch(allDataList, () => {
    page.pageNumber = 1;
  });

  const visible = ref(false);
  //支持可选择列表
  const selectedRowKeys: Ref<string[]> = ref([]);
  const loading = ref(false);

//把要用到的数据都反出去,方便外部与组件配合使用。
  return {
    loading,
    visible,
    searchParams,
    page,
    total,
    dataList,
    allDataList,
    selectedRowKeys,
    setAllDataList(list) {
      allDataList.value = list;
    },
  };
}

使用案例

const {
  // visible: showSelectTableDialog,
  searchParams,
  dataList,
  allDataList,
  selectedRowKeys,
  setAllDataList,
} = useFESearchData({
//传入固定参数默认值
  databaseName: undefined,
  tableName: '',
});

标签:searchParams,const,表格,allDataList,page,pageNumber,filterKey,列表,前端
From: https://www.cnblogs.com/crashedCat/p/17807988.html

相关文章

  • "利用Lazada API揭秘电商数据:一键获取海量商品评论列表!"
    要使用LazadaAPI获取Lazada商品评论列表,您需要先注册Lazada开发者账号并获取授权码和密钥。然后,通过调用LazadaAPI的item_comments接口,传入商品ID和国家域名后缀,即可获取到商品的评论列表。以下是使用LazadaAPI获取Lazada商品评论列表的步骤:注册Lazada开发者账号并获取授权码和......
  • 飞码LowCode前端技术:如何便捷配置出页面
    简介飞码是京东科技平台研发部研发的低代码产品,可使营销运营域下web页面快速搭建。本文将从三个方面来讲解如何便捷配置出页面,第一部分从数据、事件、业务支持三个方面进行分析,第二部分从模板与页面收藏与升级、页面UI结构、画布功能三个方面进行分析,第三部分从监控、页面配置、......
  • C++构造函数初始化列表
    构造函数的一项重要功能是对成员变量进行初始化,为了达到这个目的,可以在构造函数的函数体中对成员变量一一赋值,还可以采用初始化列表。C++构造函数的初始化列表使得代码更加简洁,请看下面的例子:#include<iostream>usingnamespacestd;classStudent{private:......
  • RuoYi前端分离版
    1、检查版本JDK>=1.8mysql>=5.5Redis>=3.0Maven>=3.0Node>=102、打开redisredis解压后打开redis安装目录,在上图红色箭头头部点击一下,输入cmd,进入该目录下的命令行窗口,然后输入以下命令打开redisredis-server.exeredis.windows.conf注意:在整个若依运行过程中......
  • 关于在页面列表里查询数据的时间和页面实时弹窗中的时间差1秒钟的问题
    1、问题:在一次告警中心功能的演示时,告警列表页中的实时告警数据,每次都跟弹窗的告警提示信息查一秒,有时候有事正常的,就很奇怪。2、解决:经过进行代码断点,发现在插入告警时间时,使用的LocalDateTime,该时间时带有纳秒时间的,比如在程序中显示的时间值是:1990-01-01T00:01:01.111,此时存......
  • 飞码LowCode前端技术:如何便捷配置出页面 | 京东云技术团队
    简介飞码是京东科技平台研发部研发的低代码产品,可使营销运营域下web页面快速搭建。本文将从三个方面来讲解如何便捷配置出页面,第一部分从数据、事件、业务支持三个方面进行分析,第二部分从模板与页面收藏与升级、页面UI结构、画布功能三个方面进行分析,第三部分从监控、页面配置、页......
  • 前端课程推荐
    前端课程推荐入门到实战前端必学40个精选案例实战一课吃透HTML5+CSS3+JS吃透前端工程化,大厂级实战项目以战带练......
  • 【chrome】如何临时修改已上线的打包好的前端代码?
    找到需要修改的代码在压缩后的文件位置。进入前端静态文件存放目录,确定搜索关键词,执行查找命令grep-c"xxx"./*#-i忽略大小写#-c计算出现次数#-n输出行号#-r查找当前目录及子目录在Portal端进入需要修改的页面,此时才能请求到需要的js文件。对比两边确认需要替......
  • 前端
    csssprite是什么,有什么优缺点概念:将多个小图片拼接到一个图片中。通过background-position和元素尺寸调节需要显示的背景图案。优点:1、减少HTTP请求数,极大地提高页面加载速度新版,2增加图片信息重复度,提高压缩比,减少图片大小3、更换风格方便,只需在一张或几张图片上修改颜色或......
  • 前端基础之JavaScript
    前端基础之JavaScriptJavaScript概述ECMAScript和JavaScript的关系1996年11月,JavaScript的创造者--Netscape公司,决定将JavaScript提交给国际标准化组织ECMA,希望这门语言能够成为国际标准。次年,ECMA发布262号标准文件(ECMA-262)的第一版,规定了浏览器脚本语言的标准,并将这种语言称......