P2 修复(来自审计报告): - 2.4.4: Server Action 错误消息 i18n 化(attendance/elective 全部 Action) - 2.5.3: 抽取 AttendancePageLayout 组件复用(admin/teacher 页面) - 2.5.4: 抽取 ElectivePageLayout 组件复用(admin/teacher 列表页) - 2.6.3: 考勤月历键盘导航(tabIndex + 方向键 + Home/End + role=grid) - 2.8.2: getStudentAttendanceSummary 分页优化(SQL 聚合统计 + LIMIT 分页) - 2.8.3: resolveCourseDisplayNames 缓存优化(React cache 去重) - 2.1.4: elective data-access 跨模块依赖接口抽象(resolvers.ts 可注入) P2 建议项: - 选课时间冲突检测(parseSchedule + isScheduleConflict 纯函数 + checkScheduleConflict) - 学分上限校验(MAX_CREDIT_PER_TERM + checkCreditLimit) - 考勤/选课数据导出 Excel(export.ts + API 路由扩展) 新增文件: - src/modules/attendance/components/attendance-page-layout.tsx - src/modules/elective/components/elective-page-layout.tsx - src/modules/elective/resolvers.ts - src/modules/attendance/export.ts - src/modules/elective/export.ts 校验: - npm run lint 通过(exit 0) - npx tsc --noEmit attendance/elective/parent 相关零错误
114 lines
3.5 KiB
JSON
114 lines
3.5 KiB
JSON
{
|
|
"title": {
|
|
"adminList": "Elective Courses",
|
|
"create": "Create Course",
|
|
"edit": "Edit Course",
|
|
"teacher": "My Elective Courses",
|
|
"student": "Course Selection"
|
|
},
|
|
"description": {
|
|
"adminList": "Manage elective courses, open/close selection and lottery.",
|
|
"create": "Create a new elective course.",
|
|
"edit": "Update elective course details.",
|
|
"teacher": "View and manage the elective courses you teach.",
|
|
"student": "Browse available courses and make selections."
|
|
},
|
|
"status": {
|
|
"draft": "Draft",
|
|
"open": "Open",
|
|
"closed": "Closed",
|
|
"cancelled": "Cancelled"
|
|
},
|
|
"selectionMode": {
|
|
"fcfs": "First Come First Served",
|
|
"lottery": "Lottery"
|
|
},
|
|
"filters": {
|
|
"allStatuses": "All Modes"
|
|
},
|
|
"selectionStatus": {
|
|
"selected": "Selected",
|
|
"enrolled": "Enrolled",
|
|
"waitlist": "Waitlist",
|
|
"dropped": "Dropped",
|
|
"rejected": "Rejected"
|
|
},
|
|
"fields": {
|
|
"name": "Course Name",
|
|
"subject": "Subject",
|
|
"teacher": "Teacher",
|
|
"grade": "Grade",
|
|
"description": "Description",
|
|
"capacity": "Capacity",
|
|
"enrolled": "Enrolled",
|
|
"classroom": "Classroom",
|
|
"schedule": "Schedule",
|
|
"startDate": "Start Date",
|
|
"endDate": "End Date",
|
|
"selectionStart": "Selection Start",
|
|
"selectionEnd": "Selection End",
|
|
"selectionMode": "Selection Mode",
|
|
"credit": "Credit"
|
|
},
|
|
"actions": {
|
|
"create": "Create Course",
|
|
"edit": "Edit",
|
|
"delete": "Delete",
|
|
"openSelection": "Open Selection",
|
|
"closeSelection": "Close Selection",
|
|
"runLottery": "Run Lottery",
|
|
"select": "Select",
|
|
"drop": "Drop",
|
|
"cancel": "Cancel",
|
|
"save": "Save"
|
|
},
|
|
"list": {
|
|
"empty": "No elective courses",
|
|
"emptyStudent": "No available courses",
|
|
"emptyDescription": "No elective courses have been created yet."
|
|
},
|
|
"form": {
|
|
"createTitle": "Create Elective Course",
|
|
"editTitle": "Edit Elective Course",
|
|
"namePlaceholder": "Enter course name",
|
|
"descriptionPlaceholder": "Enter course description"
|
|
},
|
|
"student": {
|
|
"mySelections": "My Selections",
|
|
"availableCourses": "Available Courses",
|
|
"selected": "Selected",
|
|
"enrolled": "Enrolled",
|
|
"waitlist": "Waitlist",
|
|
"capacityFull": "Capacity full",
|
|
"selectSuccess": "Course selected successfully",
|
|
"dropSuccess": "Course dropped successfully",
|
|
"confirmDrop": "Are you sure you want to drop this course?"
|
|
},
|
|
"lottery": {
|
|
"result": "Lottery result: {enrolled} enrolled, {waitlist} waitlisted",
|
|
"running": "Running lottery..."
|
|
},
|
|
"errors": {
|
|
"notFound": "Course not found",
|
|
"noOwnership": "You do not own this course",
|
|
"capacityFull": "Course capacity is full",
|
|
"alreadySelected": "You have already selected this course",
|
|
"selectionClosed": "Selection is closed",
|
|
"gradeMismatch": "Your grade does not match the course requirement",
|
|
"scheduleConflict": "Schedule conflicts with your existing courses",
|
|
"creditExceeded": "Credit limit exceeded ({current}/{max})",
|
|
"invalidForm": "Invalid form data",
|
|
"unexpected": "Unexpected error"
|
|
},
|
|
"messages": {
|
|
"created": "Elective course created",
|
|
"updated": "Elective course updated",
|
|
"deleted": "Elective course deleted",
|
|
"selectionOpened": "Selection opened",
|
|
"selectionClosed": "Selection closed",
|
|
"lotteryCompleted": "Lottery completed: {enrolled} enrolled, {waitlist} waitlisted",
|
|
"courseDropped": "Course dropped",
|
|
"ownershipCheckFailed": "Ownership check failed"
|
|
}
|
|
}
|