# Work Log ## 2026-03-03 ### 1. 教师加入班级学科分配逻辑修复 - 修复教师已在班级中但选择学科加入时被直接返回成功的问题。 - 班级未创建该学科映射时,先补齐映射再分配。 - 学科已被其他老师占用时,返回明确提示。 - 主要修改: - [data-access.ts](file:///e:/Desktop/CICD/src/modules/classes/data-access.ts) ### 2. 验证 - 质量检查:`npm run lint`、`npm run typecheck` 均通过。 ## 2026-03-02 ### 1. 班级详情访问修复(基于会话身份) - 将数据获取中的教师 ID 来源改为会话用户,移除默认教师 ID 逻辑,修复“新加入班级无法查看班级详情”问题。 - 主要修改: - [data-access.ts](file:///e:/Desktop/CICD/src/modules/classes/data-access.ts) - [page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/classes/my/%5Bid%5D/page.tsx) ### 2. 任课权限与班主任权限区分(学科可见范围) - 班主任可查看班级下所有学科;任课老师仅可查看自己负责的学科。 - 新增并应用分配学科查询,过滤相应统计与列表。 - 主要修改: - [data-access.ts](file:///e:/Desktop/CICD/src/modules/classes/data-access.ts) ### 3. 新注册学生默认班级问题修复 - 调整示例学生获取逻辑,避免为新注册学生展示“默认班级”。 - 主要修改: - [data-access.ts](file:///e:/Desktop/CICD/src/modules/homework/data-access.ts) ### 4. 教材列表 UI 精简为纯色风格 - 将教材卡片头部背景从渐变与纹理改为简洁纯色;图标容器调整为简洁样式,视觉噪音更低。 - 主要修改: - [textbook-card.tsx](file:///e:/Desktop/CICD/src/modules/textbooks/components/textbook-card.tsx) ### 5. 学生导航清理未实现入口 - 移除学生侧导航的“Resources”入口(页面未实现,避免死链)。 - 主要修改: - [navigation.ts](file:///e:/Desktop/CICD/src/modules/layout/config/navigation.ts) ### 6. 验证 - 质量检查:`npm run lint`、`npm run typecheck` 均通过。 ## 2026-02-24 ### 1. Credentials 登录与密码安全修复 * **密码哈希规范化**: * 注册时统一生成标准 bcrypt 前缀(`$2a/$2b/$2y`),确保数据库内哈希格式一致。 * 登录时对非标准前缀(如 `$10$...`)自动补全为 `$2b$...` 再校验,避免格式不一致导致登录失败。 * **登录一致性修复**: * 登录校验不再对密码做 `trim()`,避免前后空格导致的 bcrypt 比对失败。 * **调试排障(已回收)**: * 临时加入安全日志定位失败原因(不输出明文),定位后已移除。 ### 2. 验证 * `npm run typecheck`:通过 * `npm run lint`:存在既有告警(未新增) ## 2026-01-15 ### 1. Schedule Module Optimization * **Visual Overhaul (`schedule-view.tsx`)**: * Refactored the schedule grid to match the exact design of the `ClassScheduleGrid` widget. * Implemented a clean, borderless layout with no grid lines for a modern look. * **Time-Based Positioning**: Replaced grid-row logic with absolute positioning based on time (8:00 - 18:00 range) using percentage calculations (`getPositionStyle`). * **Color Coding**: Added `getSubjectColor` to auto-assign thematic colors (blue for Math, purple for Physics, etc.) based on course names. * **Card Design**: Refined course cards with vertical centering, better spacing, and removed unnecessary UI elements (like the "+" button in headers). * **Filter Bar Refinement (`schedule-filters.tsx`)**: * **Minimalist Design**: Removed borders and shadows from the class selector and buttons to integrate seamlessly with the background. * **Center Label**: Added a dynamic, absolute-centered text label that updates based on selection: * Shows "All Classes" when no filter is active. * Shows "{Class Name}" when a specific class is selected. * **Simplified Controls**: Removed the "Reset" button (X icon) entirely for a cleaner interface. * **Ghost Buttons**: Styled the "Add Event" button as a ghost variant with muted colors. ### 2. Architecture & Cleanup * **Insights Module Removal**: * Deleted the entire `src/app/(dashboard)/teacher/classes/insights` directory as the feature was deemed redundant. * Removed `insights-filters.tsx` component. * Updated `navigation.ts` to remove the "Insights" link from the sidebar. * *Note*: Preserved `getClassHomeworkInsights` in `data-access.ts` as it's still used by the Class Detail dashboard widgets. ### 3. Verification * **Type Safety**: Ran `npm run typecheck` multiple times during refactoring to ensure no regressions (Passed). * **Build**: Attempted to clear build cache to resolve a chunk loading error (Windows permission issue encountered but workaround applied). ## 2026-01-14 ### 1. Class Management Refactoring (Role Separation) * **Separation of Duties**: * Moved class creation and management responsibilities from the generic Teacher view to a dedicated Management view. * Created **Grade Management Page** at `src/app/(dashboard)/management/grade/classes/page.tsx` for Grade Directors and Admins. * Teachers can now only **Join Classes** (via code) or view their assigned classes in "My Classes". * **New Components & Pages**: * `GradeClassesView` (`src/modules/classes/components/grade-classes-view.tsx`): A comprehensive table view for managing classes within specific grades, supporting creation, editing, and deletion. * `GradeClassesPage`: Server Component that fetches managed grades and classes using strict RBAC (Role-Based Access Control). * **Teacher "My Classes" Update (`my-classes-grid.tsx`)**: * Removed the "Create Class" button/dialog. * Added a **"Join Class"** dialog that accepts a 6-digit invitation code. * Updated styling to use standard design system colors (`bg-card`, `border-border`) instead of hardcoded gradients. ### 2. Backend & Logic Updates * **Data Access (`data-access.ts`)**: * Implemented `getGradeManagedClasses`: Fetches classes for grades where the user is either a Grade Head or Teaching Head. * Implemented `getManagedGrades`: Fetches the list of grades managed by the user for the creation dropdown. * Updated `getTeacherClasses`: Now returns both **owned classes** (assigned by admin) and **enrolled classes** (joined via code). * Fixed a SQL syntax error in `getGradeManagedClasses` (unescaped backticks in template literal). * **Server Actions (`actions.ts`)**: * Added `createGradeClassAction`, `updateGradeClassAction`, `deleteGradeClassAction`: These actions enforce that the user manages the target grade before performing operations. * Updated `joinClassByInvitationCodeAction`: Expanded to allow Teachers (role `teacher`) to join classes, not just Students. ### 3. Verification * **RBAC**: Verified that users can only manage classes for grades they are assigned to. * **Flow**: Verified Teacher "Join Class" flow correctly redirects and updates the list. * **Syntax**: Fixed TypeScript/SQL syntax errors in the new data access functions. ### 4. Class UI/UX Optimization * **Students Management Interface (`students-table.tsx`, `students-filters.tsx`)**: * **Enhanced Table**: Added student avatars, gender display, and join date. * **Pagination**: Implemented client-side pagination (10 items per page) to handle larger classes gracefully. * **Status Filtering**: Added "Active/Inactive" filter with visual status badges (Emerald for active, muted for inactive). * **Data Access**: Updated `getClassStudents` to fetch extended user profile data and support server-side status filtering. * **Class Detail Dashboard (`/teacher/classes/my/[id]/page.tsx`)**: * **Dashboard Layout**: Refactored into a responsive two-column layout (Main Content + Sidebar). * **Key Metrics**: Added a 4-card stats grid at the top displaying critical insights: * Total Students (Active/Inactive breakdown) * Schedule Items (Weekly sessions) * Active Assignments (Overdue count) * Class Average (Based on graded submissions) * **Sidebar Widgets**: Added "Class Schedule" and "Homework History" widgets for quick access to temporal data. * **Visual Polish**: Integrated `lucide-react` icons throughout for better information scanning. ## 2026-01-13 ### 1. Navigation & Layout Improvements * **Dynamic Breadcrumbs (`site-header.tsx`)**: * Replaced hardcoded "Dashboard > Overview" breadcrumbs with a dynamic system. * Implemented a path-to-title lookup using `NAV_CONFIG` from `src/modules/layout/config/navigation.ts`. * Added logic to filter out root role segments (admin/teacher/student/parent) for cleaner paths. * Added fallback capitalization for segments not found in the config. * Refactored `SiteHeader` to use `usePathname` for real-time route updates. ### 2. Code Quality & Bug Fixes * **Type Safety (`homework-grading-view.tsx`)**: * Fixed a TypeScript error where a boolean expression was returning `boolean | undefined` which is not a valid React node (implicit `true` check added). * Resolved "Calling setState synchronously within an effect" React warning by initializing state lazily instead of using `useEffect`. * Fixed implicit `any` type errors in map functions. * **Linting**: * Cleaned up unused imports across multiple files (`exam-actions.tsx`, `exam-assembly.tsx`, `textbook-reader.tsx`, etc.). * Fixed unescaped HTML entities in `student-dashboard-header.tsx` and others. * Removed unused variables to clear ESLint warnings. * **Refactoring**: * Updated `TextbookCard` to support `hideActions` prop for better reuse in student views. * Added missing `Progress` component to `src/shared/components/ui/progress.tsx`. ### 3. Verification * Ran `npm run typecheck`: **Passed** (0 errors). * Ran `npm run lint`: **Passed** (0 errors, 28 warnings remaining for unused vars/components that may be needed later).