<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      很多業務系統中都會用到表格/列表,大部分都是用組件,配合搜索接口可以實現,搜索按鈕是發送請求獲取數據來更新表格數據。

      但不是所有的列表都會有對應的后端搜索接口,比如在對一個彈窗里面的列表進行選擇,數據量不是特別大的情況下希望前端支持篩選,可以更加方便快捷的對數據進行操作,這時候就需要用到數據篩選。
      這部分代碼是大佬寫的,我覺得封裝的函數很好,所以在這里記錄學習一下。(應該不會被本人看到吧)

      // 搜索相關數據
      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: '',
      });
      
      posted on 2023-11-03 16:58  CrashedCat  閱讀(195)  評論(0)    收藏  舉報



      主站蜘蛛池模板: 精品 无码 国产观看| 午夜福利伦伦电影理论片在线观看 | 亚洲国产成人久久一区久久| 亚洲男人av天堂久久资源| 人妻中文字幕不卡精品| 欧美视频免费一区二区三区| 德清县| 成人自拍小视频在线观看| 国内精品极品久久免费看| 欧美一区二区三区啪啪| 石林| 亚洲精品一区二区三区婷婷月| 中文字幕人妻av第一区| 人妻放荡乱h文| 中文字幕久久国产精品| 久久国内精品自在自线91| 一本色道久久综合熟妇人妻| 99中文字幕精品国产| 亚洲第一极品精品无码久久| 欧美成人精品三级网站| 成人午夜大片免费看爽爽爽| 亚洲中文字幕久久精品蜜桃| 性欧美vr高清极品| 67194熟妇在线观看线路| 乱码中文字幕| 久女女热精品视频在线观看| 日本一二三区视频在线| 日韩国产中文字幕精品| 少妇人妻偷人精品系列| 国产女高清在线看免费观看| 午夜精品久久久久久久爽| 黄色舔女人逼一区二区三区| 国产老熟女国语免费视频| 中文字幕亚洲精品人妻| 国产av仑乱内谢| 一区二区三区av在线观看| 精品国产一区二区三区av性色| 国产午夜美女福利短视频| 亚洲av成人在线一区| 亚洲国产精品久久久久婷婷老年| 成人精品动漫一区二区|