统一后台 Table 分页:常开 10/20/50/100 条数切换
- 新增 admin-pagination 工具,标准列表与云触手记录分别配置 - 用户/审计等页补齐 showSizeChanger,避免 total≤50 时无法切换 - ConfigProvider 默认开启条数切换
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
import type { TablePaginationConfig } from 'antd'
|
||||
|
||||
/** 后台标准列表默认每页条数(与后端 normalizePageSize 默认 20 一致) */
|
||||
export const ADMIN_DEFAULT_PAGE_SIZE = 20
|
||||
|
||||
/**
|
||||
* 标准列表可选页大小。
|
||||
* 后端 admin normalizePageSize 上限 100,故不包含更大档位。
|
||||
*/
|
||||
export const ADMIN_PAGE_SIZE_OPTIONS = [10, 20, 50, 100] as const
|
||||
|
||||
/** 云触手发货记录:上游接口更适合大批量拉取 */
|
||||
export const CLOUDTENTACLES_DEFAULT_PAGE_SIZE = 100
|
||||
export const CLOUDTENTACLES_PAGE_SIZE_OPTIONS = [100, 200, 500, 1000] as const
|
||||
|
||||
export function formatAdminTotal(total: number) {
|
||||
return `共 ${total} 条`
|
||||
}
|
||||
|
||||
/** 可复用到 Table.pagination 的标准选项(常开条数切换) */
|
||||
export const ADMIN_TABLE_PAGINATION_BASE: Pick<
|
||||
TablePaginationConfig,
|
||||
'showSizeChanger' | 'pageSizeOptions' | 'showTotal'
|
||||
> = {
|
||||
showSizeChanger: true,
|
||||
pageSizeOptions: [...ADMIN_PAGE_SIZE_OPTIONS],
|
||||
showTotal: formatAdminTotal,
|
||||
}
|
||||
|
||||
/**
|
||||
* 服务端分页列表(任务/订单/用户/审计等)。
|
||||
* 始终展示 10/20/50/100,避免 antd「total ≤ 50 不显示」默认行为。
|
||||
*/
|
||||
export function buildAdminTablePagination(options: {
|
||||
current?: number
|
||||
page?: number
|
||||
pageSize?: number
|
||||
total?: number
|
||||
onChange?: TablePaginationConfig['onChange']
|
||||
} & Partial<TablePaginationConfig>): TablePaginationConfig {
|
||||
const { current, page, pageSize, total, onChange, ...rest } = options
|
||||
return {
|
||||
...ADMIN_TABLE_PAGINATION_BASE,
|
||||
current: current ?? page ?? 1,
|
||||
pageSize: pageSize ?? ADMIN_DEFAULT_PAGE_SIZE,
|
||||
total: total ?? 0,
|
||||
onChange,
|
||||
...rest,
|
||||
}
|
||||
}
|
||||
|
||||
/** 纯前端本地表格分页 */
|
||||
export function buildAdminLocalTablePagination(
|
||||
options: Partial<TablePaginationConfig> = {},
|
||||
): TablePaginationConfig {
|
||||
return {
|
||||
...ADMIN_TABLE_PAGINATION_BASE,
|
||||
pageSize: ADMIN_DEFAULT_PAGE_SIZE,
|
||||
...options,
|
||||
}
|
||||
}
|
||||
|
||||
/** 云触手发货记录分页(100–1000) */
|
||||
export function buildCloudtentaclesTablePagination(options: {
|
||||
current?: number
|
||||
page?: number
|
||||
pageSize?: number
|
||||
total?: number
|
||||
onChange?: TablePaginationConfig['onChange']
|
||||
} & Partial<TablePaginationConfig>): TablePaginationConfig {
|
||||
const { current, page, pageSize, total, onChange, ...rest } = options
|
||||
return {
|
||||
showSizeChanger: true,
|
||||
pageSizeOptions: [...CLOUDTENTACLES_PAGE_SIZE_OPTIONS],
|
||||
showTotal: formatAdminTotal,
|
||||
current: current ?? page ?? 1,
|
||||
pageSize: pageSize ?? CLOUDTENTACLES_DEFAULT_PAGE_SIZE,
|
||||
total: total ?? 0,
|
||||
onChange,
|
||||
...rest,
|
||||
}
|
||||
}
|
||||
|
||||
export function resolveAdminPageSize(
|
||||
raw: unknown,
|
||||
fallback: number = ADMIN_DEFAULT_PAGE_SIZE,
|
||||
): number {
|
||||
const parsed = Number(raw)
|
||||
if (!Number.isFinite(parsed) || parsed <= 0) {
|
||||
return fallback
|
||||
}
|
||||
return Math.min(100, Math.floor(parsed))
|
||||
}
|
||||
Reference in New Issue
Block a user