1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- import { computed, ref } from "vue";
- export enum PaginationType {
- DEFAULT = 0,
- CONCAT = 1,
- }
- export const DEFAULT_PAGE_SIZE = 10;
- export const usePagination = <T>(
- handler: (params: { pageNum: number; pageSize: number }) => any,
- type = PaginationType.DEFAULT,
- size = DEFAULT_PAGE_SIZE
- ) => {
- const pageNum = ref(1);
- const total = ref(0);
- const loading = ref(false);
- const list = ref<T[]>([]);
- const noData = computed(() => !total.value && !loading.value);
- const noMore = computed(() => size * pageNum.value < total.value);
- const getList = async () => {
- try {
- loading.value = true;
- const data = await handler({
- pageNum: pageNum.value,
- pageSize: size,
- });
- total.value = data.total;
- if (type === PaginationType.DEFAULT) {
- list.value = data.records;
- } else {
- list.value =
- pageNum.value > 1 ? list.value.concat(data.records) : data.records;
- }
- } finally {
- loading.value = false;
- }
- };
- const resetParams = () => {
- pageNum.value = 1;
- total.value = 0;
- list.value = [];
- };
- return {
- pageNum,
- loading,
- list,
- total,
- noData,
- noMore,
- getList,
- resetParams,
- };
- };
|