import { computed, reactive } from 'vue-demi' export type PaginationReq = T & { currenPage: number, pageSize: number } export interface PaginationRes { total: number, data: Array } export function usePagination (size = 10) { const pagination = reactive({ currenPage: 1, pageSize: size, total: 0 }) const pages = computed(() => Math.ceil(pagination.total / pagination.pageSize) || 1) function wrapperPagePromise (p: Promise>) { return p.then(({ total, data }) => { pagination.total = total ?? 0 return data }) } /** * 自动分页 * @param queryFunc */ function wrapperPagePromiseFn (queryFunc: (params: PaginationReq) => Promise>) { return (params: T) => { const queryParam = { ...params, ...pagination } return wrapperPagePromise(queryFunc(queryParam as PaginationReq)) } } return { pagination, pages, wrapperPagePromise, wrapperPagePromiseFn } }