usePagination.ts 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. export default function usePagination() {
  2. const pagination = ref({
  3. page: 1,
  4. size: 10,
  5. total: 0,
  6. sizes: [10, 20, 50, 100],
  7. layout: 'total, sizes, ->, prev, pager, next, jumper',
  8. sort: null as string | null,
  9. order: null as string | null,
  10. })
  11. function getParams(params = {}) {
  12. const baseParams: {
  13. [key: string]: any
  14. page: number
  15. limit: number
  16. sort?: string
  17. order?: string
  18. } = {
  19. page: pagination.value.page <= 1 ? 1 : pagination.value.page - 1,
  20. limit: pagination.value.size,
  21. }
  22. if (pagination.value.sort && pagination.value.order) {
  23. baseParams.sort = pagination.value.sort
  24. baseParams.order = pagination.value.order
  25. }
  26. Object.assign(baseParams, params)
  27. return baseParams
  28. }
  29. async function onSizeChange(size: number) {
  30. pagination.value.size = size
  31. }
  32. async function onCurrentChange(page: number) {
  33. pagination.value.page = page
  34. }
  35. async function onSortChange(prop: string, order: string) {
  36. pagination.value.sort = prop
  37. pagination.value.order = order === 'ascending' ? 'asc' : 'desc'
  38. }
  39. return {
  40. pagination,
  41. getParams,
  42. onSizeChange,
  43. onCurrentChange,
  44. onSortChange,
  45. }
  46. }