feat: attendance frontend page + backend list/classes endpoints

- Create AttendancePage with filter bar, table, calendar view toggle, batch add modal
- Register /attendance route with PermissionRoute (attendance:view)
- Add menu item in MainLayout with CheckCircleOutlined icon
- Add GET /attendance-records with pagination and filters
- Add GET /attendance-records/classes for class dropdown
- Add source column to AttendanceRecord entity (default: manual)
- Frontend tsc --noEmit: clean; backend: only pre-existing test errors
This commit is contained in:
2026-07-05 19:49:53 +08:00
parent b6e308ae2a
commit 41f381e941
7 changed files with 763 additions and 0 deletions

View File

@@ -13,6 +13,7 @@ import {
BatchCreateAttendanceDto,
AttendanceSummaryQueryDto,
AttendanceCalendarQueryDto,
QueryAttendanceRecordsDto,
QueryDingRawDto,
MatchDingRecordDto,
} from './dto/attendance.dto';
@@ -50,6 +51,20 @@ export class AttendanceController {
return result;
}
// ── List attendance records with filters ──
@Get('attendance-records')
@RequirePermission('attendance:view')
findAll(@Query() query: QueryAttendanceRecordsDto) {
return this.service.findAll(query);
}
// ── Get distinct classes with attendance records ──
@Get('attendance-records/classes')
@RequirePermission('attendance:view')
getClasses() {
return this.service.getClasses();
}
// ── Attendance summary ──
@Get('attendance-records/summary')
@RequirePermission('attendance:view')