sort-order.ts 1.1 KB

1234567891011121314151617181920212223242526272829
  1. /**
  2. * 新增时默认排序号:当前列表中最大 sortOrder + 1;无任何数据时为 0。
  3. * 依赖列表接口按 sort_order 升序分页(最后一页含最大排序号)。
  4. */
  5. import { MAX_ADMIN_LIST_PAGE_SIZE } from '@/utils/fetch-paged-list'
  6. export async function fetchNextSortOrder(
  7. fetchList: (params: {
  8. page: number
  9. pageSize: number
  10. keyword?: string
  11. isActive?: boolean | number | string | undefined
  12. }) => Promise<{ list: { sortOrder?: number }[]; total: number }>,
  13. options?: { pageSize?: number }
  14. ): Promise<number> {
  15. const requested = options?.pageSize ?? MAX_ADMIN_LIST_PAGE_SIZE
  16. const pageSize = Math.min(Math.max(1, requested), MAX_ADMIN_LIST_PAGE_SIZE)
  17. const first = await fetchList({ page: 1, pageSize })
  18. const total = first.total ?? 0
  19. if (total === 0) return 0
  20. const lastPage = Math.ceil(total / pageSize)
  21. const res = lastPage <= 1 ? first : await fetchList({ page: lastPage, pageSize })
  22. const list = res.list ?? []
  23. const nums = list.map((r) => {
  24. const n = Number(r.sortOrder)
  25. return Number.isFinite(n) ? n : 0
  26. })
  27. return (nums.length ? Math.max(...nums) : 0) + 1
  28. }