usePagination.ts 956 B

12345678910111213141516171819202122232425262728293031323334
  1. import type { Ref } from 'vue';
  2. import { ref, unref, computed } from 'vue';
  3. function pagination<T = any>(list: T[], pageNo: number, pageSize: number): T[] {
  4. const offset = (pageNo - 1) * Number(pageSize);
  5. const ret =
  6. offset + Number(pageSize) >= list.length
  7. ? list.slice(offset, list.length)
  8. : list.slice(offset, offset + Number(pageSize));
  9. return ret;
  10. }
  11. export function usePagination<T = any>(list: Ref<T[]>, pageSize: number) {
  12. const currentPage = ref(1);
  13. const pageSizeRef = ref(pageSize);
  14. const getPaginationList = computed(() => {
  15. return pagination(unref(list), unref(currentPage), unref(pageSizeRef));
  16. });
  17. const getTotal = computed(() => {
  18. return unref(list).length;
  19. });
  20. function setCurrentPage(page: number) {
  21. currentPage.value = page;
  22. }
  23. function setPageSize(pageSize: number) {
  24. pageSizeRef.value = pageSize;
  25. }
  26. return { setCurrentPage, getTotal, setPageSize, getPaginationList };
  27. }