- Create SchedulesPage with week selector, classroom/class filters - Matrix: rows=classrooms, cols=Mon-Sun, cells show subject/teacher/time - Click empty cell -> create modal with schedule form - Click occupied cell -> detail modal with delete button - Conflict: backend 409/400 -> message.error with conflict info - Route /schedules with PermissionRoute (schedule:view) - Menu item '排课管理' with CalendarOutlined icon
- Move backend/ to apps/server/ via git mv - Move frontend/ to apps/admin/ via git mv - Create packages/typescript-config/ with base, nestjs, and react-vite presets