30 lines
1.1 KiB
TypeScript
30 lines
1.1 KiB
TypeScript
/**
|
|
* 新增时默认排序号:当前列表中最大 sortOrder + 1;无任何数据时为 0。
|
|
* 依赖列表接口按 sort_order 升序分页(最后一页含最大排序号)。
|
|
*/
|
|
import { MAX_ADMIN_LIST_PAGE_SIZE } from '@/utils/fetch-paged-list'
|
|
|
|
export async function fetchNextSortOrder(
|
|
fetchList: (params: {
|
|
page: number
|
|
pageSize: number
|
|
keyword?: string
|
|
isActive?: boolean | number | string | undefined
|
|
}) => Promise<{ list: { sortOrder?: number }[]; total: number }>,
|
|
options?: { pageSize?: number }
|
|
): Promise<number> {
|
|
const requested = options?.pageSize ?? MAX_ADMIN_LIST_PAGE_SIZE
|
|
const pageSize = Math.min(Math.max(1, requested), MAX_ADMIN_LIST_PAGE_SIZE)
|
|
const first = await fetchList({ page: 1, pageSize })
|
|
const total = first.total ?? 0
|
|
if (total === 0) return 0
|
|
const lastPage = Math.ceil(total / pageSize)
|
|
const res = lastPage <= 1 ? first : await fetchList({ page: lastPage, pageSize })
|
|
const list = res.list ?? []
|
|
const nums = list.map((r) => {
|
|
const n = Number(r.sortOrder)
|
|
return Number.isFinite(n) ? n : 0
|
|
})
|
|
return (nums.length ? Math.max(...nums) : 0) + 1
|
|
}
|