- Add flex column layout for landscape full-screen fill
- Show teacher name and student names in matrix event blocks
- Refactor useClazzViewModel with makeEvent() helper
- Fix CSS nesting for .slot-row
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Add "创建排课" custom button in FullCalendar header toolbar, defaults
to current date/time + 45min duration, guarded by is_teacher check
- Add margin-bottom to 操作记录 cell so it doesn't crowd the footer buttons
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- CoursePackageStore: don't show error when no orgId and unauth,
just show empty state
- index.vue: only render CoursePackageStore when org_id is available
in URL, otherwise show original login prompt
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
When a student has no claimed teachers, redirect them to the
teacher-select page instead of silently landing on the home page
with no teacher. The teacher-select page falls back to showing
available valid teachers when the student's teacher list is empty.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Remove the "请选择您的老师" page (v-else-if block) that showed teachers
from all orgs
- Remove the mine.length === 0 guard in watchEffect - students with no
teachers now redirect to home page normally
- Teacher selection moves to profile page /student/teacher-select
- Remove unused code (getAllTeachers, teachers computed, chooseTeacher)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Update chooseRole STUDENT branch: redirect to / instead of teacher-select
- Update org/select.vue: redirect to / for students (index page handles auto-select)
- Remove unused imports
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Replace getValidTeachers() with getAllTeachers() for org-scoped teacher list
- Fix chooseTeacher() to use async/await with error handling instead of reload
- After claiming teacher, refresh mine list and navigate without page reload
- Fix chooseRole STUDENT branch: clear teacher and redirect to teacher-select
- Remove auto-select on role switch (user should pick explicitly)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Add tryAutoSelect() to teacher store to pick first teacher when none selected
- Auto-select first teacher when student role is confirmed (both auto-login and manual role selection)
- Redirect students to /student/teacher-select after org switch, clearing previous teacher
- Covers: chooseRole(), single-role auto-login, and index page initialization
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Add teacher context for students: show current teacher in profile,
allow switching via new teacher-select page. Filter daka queries
by selected teacher when available.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Add detail/show page with conditional action buttons
- Route /course/course-package/detail with props query params
- List page click navigates to detail instead of edit
- Edit page redirects if package is published (published_at set)
- Store: add publish/unpublish API functions
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Course-package picker only showed org-visible groups, but supervisors
also need to see and use their own course groups. Add "我的课节" tab
for course-package mode.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- CourseGroup: add org_visible field, teacher toggle on add/edit
- CoursePackage: add selectedGroups state, sync/list package items API
- Group picker: support COURSE_PACKAGE target, show org-visible groups
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Add list/add/edit views for course-package under the qumu section,
visible to TEACHER and SUPERVISOR roles via the 教学资源库 tab.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
WeChat webview can desync route query from route props; use useRoute for course_id and log API failures to console. Watch course_id to refetch when query changes.
Made-with: Cursor
Sanitize course section resources payloads across list and id queries to avoid runtime filter/some failures from malformed resource shapes, with CourseSectionResourceDebug diagnostics.
Made-with: Cursor
Normalize paged and list responses for course section APIs to prevent runtime errors on infinite scroll and emit CourseSectionPayloadDebug diagnostics for malformed payloads.
Made-with: Cursor
Prevent runtime filter crashes in /clazz by normalizing API payloads to arrays and emitting ClazzPayloadDebug diagnostics when response shape is unexpected.
Made-with: Cursor
Normalize find_all_courses response to an array and add page-level array fallback to prevent filter runtime errors when response payload is malformed.
Made-with: Cursor
Parse current_org_id/current_org_role_keys from subject payload when tokens are encoded under claims.sub, so org switch context is correctly detected.
Made-with: Cursor
Record before/after jwt org context decode details for org switch into console and localStorage, and surface actionable debug dialog when returned token lacks org context.
Made-with: Cursor
Validate current_org_id from switch token before accepting it, align auth/sudo tokens, and force full navigation to home after switch to avoid staying on org-select state.
Made-with: Cursor
After org switch, sync sudo token and navigate to home immediately instead of awaiting read() chain, preventing org select page from stalling.
Made-with: Cursor
Add base64 padding before atob when parsing token payload so current_org_id extraction no longer fails intermittently and loops users back to org select.
Made-with: Cursor
After org switch, set HtySudoerToken to the refreshed Authorization token so ws endpoints receive current_org_id instead of a sudo2 token without org context.
Made-with: Cursor
Regenerate HtySudoerToken after switching organization so ws endpoints that read org context from sudo token no longer fail with current_org_id required.
Made-with: Cursor
Ensure authenticated users without current_org_id are redirected or auto-switched before entering business routes, preventing global 500 errors after multi-organization rollout.
Made-with: Cursor
Introduce organization selection/homepage flows, show current organization on profile pages, and scope displayed roles to the active organization context while preserving system-wide behavior.
Made-with: Cursor