Files
CICD/docs/work_log.md
SpecialX 538805bad0 docs
2026-03-02 12:43:38 +08:00

155 lines
9.5 KiB
Markdown
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.

# Work Log
## 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).