6e419d0d80
- 该函数与 parsePositiveIntegerOrZero 行为一致且无任何调用点,删除死代码
61 lines
1.9 KiB
TypeScript
61 lines
1.9 KiB
TypeScript
import { formatAdminApiError, isAdminApiError } from '../api/adminApiClient';
|
|
|
|
export function handlePageError(
|
|
error: unknown,
|
|
onUnauthorized: (message?: string) => void,
|
|
setError: (message: string) => void,
|
|
) {
|
|
if (isAdminApiError(error) && error.status === 401) {
|
|
onUnauthorized('登录状态已失效');
|
|
return;
|
|
}
|
|
|
|
setError(formatAdminApiError(error));
|
|
}
|
|
|
|
export function splitLines(value: string) {
|
|
return value
|
|
.split(/\r?\n|,/)
|
|
.map((item) => item.trim())
|
|
.filter(Boolean);
|
|
}
|
|
|
|
export function formatUnknownJson(value: unknown) {
|
|
if (value === null || typeof value === 'undefined') {
|
|
return '';
|
|
}
|
|
|
|
try {
|
|
return JSON.stringify(value, null, 2);
|
|
} catch {
|
|
return String(value);
|
|
}
|
|
}
|
|
|
|
/** 内部共用:只接受纯十进制数字串(允许前后空白),拒绝小数、科学计数法与非法 token。 */
|
|
function parseSafeIntegerText(value: string): number | null {
|
|
const trimmed = value.trim();
|
|
// 中文注释:只接受纯十进制数字串,避免 `Number` 把 `1.0` / `1e2` / `0x10` / `+5` 当成整数。
|
|
if (!/^\d+$/.test(trimmed)) {
|
|
return null;
|
|
}
|
|
const parsed = Number(trimmed);
|
|
return Number.isSafeInteger(parsed) ? parsed : null;
|
|
}
|
|
|
|
/** 严格解析正安全整数:空串、小数、科学计数法、非十进制、非正数与非数字都返回 `null`。 */
|
|
export function parsePositiveInteger(value: string): number | null {
|
|
const parsed = parseSafeIntegerText(value);
|
|
return parsed !== null && parsed > 0 ? parsed : null;
|
|
}
|
|
|
|
/** 严格解析非负安全整数:空串、小数、科学计数法、非十进制、负数与非数字都返回 `null`。 */
|
|
export function parseNonNegativeInteger(value: string): number | null {
|
|
return parseSafeIntegerText(value);
|
|
}
|
|
|
|
/** 落库用宽松解析:非法输入按 `0` 处理,避免后台保存被输入抖动打断。 */
|
|
export function parsePositiveIntegerOrZero(value: string): number {
|
|
return parsePositiveInteger(value) ?? 0;
|
|
}
|