/** 店铺密钥删除确认与刷新(任务 87):删除前确认文案与删除后目标页计算,纯逻辑。 */ import { SHOP_PAGE_DEFAULT_SIZE } from './shop-dto.ts' import type { ShopKeyItem } from './shop-dto.ts' function nameOrFallback(item: ShopKeyItem | null | undefined): string { if (!item || typeof item !== 'object') return '' if (typeof item.ziniaoAccountName === 'string' && item.ziniaoAccountName.trim()) { return item.ziniaoAccountName.trim() } if (typeof item.id === 'number' && Number.isFinite(item.id) && item.id >= 1) { return `#${Math.floor(item.id)}` } return '' } /** 确认文案用到的可读名称(账号名优先,空则回退 #id)。 */ export function shopKeyDeleteTargetName(item: ShopKeyItem | null | undefined): string { return nameOrFallback(item) } /** 删除确认文案;空记录返回 null(不弹可误删的确认)。 */ export function shopKeyDeleteConfirmText(item: ShopKeyItem | null | undefined): string | null { const name = nameOrFallback(item) return name ? `确定删除店铺密钥“${name}”吗?` : null } function pageSizeOr(size: unknown, fallback: number): number { return typeof size === 'number' && Number.isFinite(size) && size >= 1 ? Math.floor(size) : fallback } /** 删除一行后应请求的目标页:若被删的是末页最后一条则回退,否则保持原页。 */ export function nextShopKeyPageAfterDelete(page: unknown, pageSize: unknown, totalBefore: unknown): number { const size = pageSizeOr(pageSize, SHOP_PAGE_DEFAULT_SIZE) const before = typeof totalBefore === 'number' && Number.isFinite(totalBefore) ? Math.max(Math.floor(totalBefore), 0) : 0 const after = Math.max(before - 1, 0) const pagesAfter = after === 0 ? 1 : Math.max(1, Math.ceil(after / size)) const requested = typeof page === 'number' && Number.isFinite(page) ? Math.floor(page) : 1 return Math.max(1, Math.min(requested, pagesAfter)) }