edu/admin/src/hooks/usePaging.ts

63 lines
1.5 KiB
TypeScript
Raw Normal View History

2022-04-08 02:42:44 +00:00
import { reactive, toRaw } from 'vue'
// 分页钩子函数
interface Options {
page?: number
size?: number
2022-08-12 10:44:09 +00:00
fetchFun: (_arg: any) => Promise<any>
2022-04-08 02:42:44 +00:00
params?: Record<any, any>
2022-08-12 10:44:09 +00:00
firstLoading?: boolean
2022-04-08 02:42:44 +00:00
}
2022-08-12 10:44:09 +00:00
export function usePaging(options: Options) {
const { page = 1, size = 15, fetchFun, params = {}, firstLoading = false } = options
2022-04-08 02:42:44 +00:00
// 记录分页初始参数
2022-08-12 10:44:09 +00:00
const paramsInit: Record<any, any> = Object.assign({}, toRaw(params))
2022-04-08 02:42:44 +00:00
// 分页数据
const pager = reactive({
page,
size,
2022-08-12 10:44:09 +00:00
loading: firstLoading,
2022-04-08 02:42:44 +00:00
count: 0,
lists: [] as any[]
})
// 请求分页接口
2022-08-12 10:44:09 +00:00
const getLists = () => {
2022-04-08 02:42:44 +00:00
pager.loading = true
2022-08-12 10:44:09 +00:00
return fetchFun({
2022-04-15 07:32:37 +00:00
pageNo: pager.page,
pageSize: pager.size,
2022-04-08 02:42:44 +00:00
...params
})
.then((res: any) => {
pager.count = res?.count
pager.lists = res?.lists
return Promise.resolve(res)
})
.catch((err: any) => {
return Promise.reject(err)
})
.finally(() => {
pager.loading = false
})
}
// 重置为第一页
const resetPage = () => {
pager.page = 1
2022-08-12 10:44:09 +00:00
getLists()
2022-04-08 02:42:44 +00:00
}
// 重置参数
const resetParams = () => {
2022-08-12 10:44:09 +00:00
Object.keys(paramsInit).forEach((item) => {
2022-04-08 02:42:44 +00:00
params[item] = paramsInit[item]
})
2022-08-12 10:44:09 +00:00
getLists()
2022-04-08 02:42:44 +00:00
}
return {
pager,
2022-08-12 10:44:09 +00:00
getLists,
2022-04-08 02:42:44 +00:00
resetParams,
resetPage
}
}