/** * 考勤模块共享常量(消除 types.ts / attendance-sheet.tsx / attendance-filters.tsx / parent-attendance-calendar.tsx 重复定义)。 * * 注意:标签使用 i18n key(`status.*`),由组件层通过 `useTranslations("attendance")` 解析。 */ import type { AttendanceStatus } from "./types" /** 重导出类型,便于组件层从 constants 单点导入(消除 types/constants 双源混乱) */ export type { AttendanceStatus } from "./types" /** 考勤状态选项(顺序即 UI 展示顺序) */ export const ATTENDANCE_STATUS_OPTIONS: AttendanceStatus[] = [ "present", "absent", "late", "early_leave", "excused", ] /** 考勤状态 → i18n key 映射(组件层 `t(key)` 解析) */ export const ATTENDANCE_STATUS_LABEL_KEYS: Record = { present: "status.present", absent: "status.absent", late: "status.late", early_leave: "status.early_leave", excused: "status.excused", } /** 考勤状态 → Badge variant 映射 */ export const ATTENDANCE_STATUS_BADGE_VARIANTS: Record = { present: "default", absent: "destructive", late: "secondary", early_leave: "outline", excused: "outline", } /** 考勤状态 → Tailwind 圆点颜色类 */ export const ATTENDANCE_STATUS_DOT_COLORS: Record = { present: "bg-green-500", absent: "bg-red-500", late: "bg-yellow-500", early_leave: "bg-blue-500", excused: "bg-purple-500", } /** 键盘快捷键映射 */ export const ATTENDANCE_STATUS_SHORTCUTS: Record = { p: "present", a: "absent", l: "late", e: "early_leave", x: "excused", } /** 初始化状态计数,避免 `{} as Record<...>` 类型断言 */ export function createInitialStatusCounts(): Record { return { present: 0, absent: 0, late: 0, early_leave: 0, excused: 0, } }