TaskSystem-admin/src/hooks/usePaging.ts
weipengfei 06ea40c91c 更新
2023-08-26 10:51:40 +08:00

74 lines
1.7 KiB
TypeScript

import { reactive, toRaw } from "vue";
// 分页钩子函数
interface Options {
page?: number;
size?: number;
limit?: number;
fetchFun: (_arg: any) => Promise<any>;
params?: Record<any, any>;
firstLoading?: boolean;
}
export function usePaging(options: Options) {
const {
page = 1,
size = 15,
fetchFun,
params = {},
firstLoading = false,
} = options;
// 记录分页初始参数
const paramsInit: Record<any, any> = Object.assign({}, toRaw(params));
// 分页数据
const pager = reactive({
page,
size,
loading: firstLoading,
count: 0,
lists: [] as any[],
extend: {} as Record<string, any>,
});
// 请求分页接口
const getLists = () => {
pager.loading = true;
return fetchFun({
page_no: pager.page,
page_size: pager.size,
...params,
})
.then((res: any) => {
pager.count = res?.count;
res.lists ? (pager.lists = res.lists) : (pager.lists = res.data);
if(pager.lists==[]||pager.lists==null||pager.lists==undefined)res.list ? pager.lists = res.list: null;
// pager.lists = res?.lists
pager.extend = res?.extend;
return Promise.resolve(res);
})
.catch((err: any) => {
return Promise.reject(err);
})
.finally(() => {
pager.loading = false;
});
};
// 重置为第一页
const resetPage = () => {
pager.page = 1;
getLists();
};
// 重置参数
const resetParams = () => {
Object.keys(paramsInit).forEach((item) => {
params[item] = paramsInit[item];
});
getLists();
};
return {
pager,
getLists,
resetParams,
resetPage,
};
}