- 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
Logged-in users on music-room.moicen.com saw a blank center because iframe
targeted huiwings.cn (cross-origin / no session). Redirect to /student/home,
/teacher/home, /admin/teachers, /tester, or supervisor path on same origin.
Made-with: Cursor
- Sanitize page_path before router.push (H5) to prevent cross-user login via shared link
- onShareAppMessage: remove unionid/openid/status and related query keys from shared path
- main.ts: fix login(to.query.toString()) bug; when already logged in, strip foreign unionid from URL instead of logout
Made-with: Cursor