bef09cb5b5
新增 shop-key-delete.ts(删除确认文案 + 删除后目标页回退) 并在 shop-key-api.ts
增加 deleteShopKey(DELETE /api/admin/shop-keys/{id})。
TDD: task-87.test.ts 8 用例先 RED 后 GREEN。
40 lines
1.9 KiB
TypeScript
40 lines
1.9 KiB
TypeScript
/** 店铺密钥删除确认与刷新(任务 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))
|
|
}
|