Files
lotteryAdmin/src/lib/admin-status-tone.ts

134 lines
3.4 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 后台状态色标:统一映射到可读色调,列表/详情一眼可辨。
*/
export type AdminStatusTone =
| "success"
| "info"
| "warning"
| "danger"
| "neutral"
| "indigo"
| "draft"
| "active"
| "archived";
export const ADMIN_STATUS_TONE_CLASSES: Record<AdminStatusTone, string> = {
success:
"border-emerald-500/30 bg-emerald-500/12 text-emerald-800 dark:text-emerald-300",
info: "border-primary/30 bg-primary/10 text-primary",
warning:
"border-amber-500/30 bg-amber-500/12 text-amber-900 dark:text-amber-300",
danger:
"border-destructive/35 bg-destructive/10 text-destructive dark:text-red-300",
neutral: "border-border/80 bg-muted text-muted-foreground",
indigo:
"border-indigo-500/30 bg-indigo-500/12 text-indigo-800 dark:text-indigo-300",
draft:
"border-amber-500/30 bg-amber-500/12 text-amber-900 dark:text-amber-300",
active:
"border-emerald-500/30 bg-emerald-500/12 text-emerald-800 dark:text-emerald-300",
archived:
"border-slate-400/35 bg-slate-500/10 text-slate-600 dark:text-slate-300",
};
const STATUS_TONE_MAP: Record<string, AdminStatusTone> = {
// 配置版本
draft: "draft",
active: "active",
archived: "archived",
// 期次
open: "info",
closing: "warning",
closed: "neutral",
drawing: "indigo",
review: "warning",
cooldown: "neutral",
pending: "info",
settling: "indigo",
settled: "success",
cancelled: "danger",
// 结算批次
running: "warning",
pending_review: "info",
approved: "indigo",
rejected: "neutral",
paid: "success",
completed: "success",
failed: "danger",
// 注单
pending_confirm: "info",
partial_pending_confirm: "warning",
success: "success",
pending_payout: "warning",
settled_win: "success",
settled_lose: "neutral",
// 钱包 / 划转
processing: "info",
posted: "success",
pending_reconcile: "warning",
reversed: "neutral",
manually_processed: "indigo",
// 对账
mismatch: "danger",
matched: "success",
pending_check: "warning",
// 开关 / 布尔
enabled: "success",
disabled: "neutral",
true: "success",
false: "neutral",
// 玩家 status 数值
"0": "success",
"1": "warning",
"2": "danger",
// 管理员/角色1=启用 0=停用)
"role_enabled": "success",
"role_disabled": "neutral",
};
/** 玩家0 正常 1 冻结 2 封禁 */
export function resolvePlayerStatusTone(status: number): AdminStatusTone {
if (status === 0) return "success";
if (status === 1) return "warning";
if (status === 2) return "danger";
return "neutral";
}
/** 后台用户0 启用 1 停用 */
export function resolveAdminUserStatusTone(status: number): AdminStatusTone {
return status === 0 ? "success" : "neutral";
}
/** 角色1 启用 0 停用 */
export function resolveRoleStatusTone(status: number): AdminStatusTone {
return status === 1 ? "success" : "neutral";
}
export function resolveAdminStatusTone(
status: string | number | boolean | null | undefined,
): AdminStatusTone {
if (status === null || status === undefined || status === "") {
return "neutral";
}
if (typeof status === "boolean") {
return status ? "success" : "neutral";
}
const key = String(status).trim().toLowerCase();
return STATUS_TONE_MAP[key] ?? "neutral";
}
export function adminStatusBadgeClassName(
tone: AdminStatusTone,
className?: string,
): string {
return `${ADMIN_STATUS_TONE_CLASSES[tone]} ${className ?? ""}`.trim();
}