fix: org-filtered teacher list and fix teacher selection redirect loop
- 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>
This commit is contained in:
+17
-10
@@ -75,9 +75,9 @@ export default defineComponent({
|
||||
props: ["params"],
|
||||
setup({ params }) {
|
||||
const router = useRouter();
|
||||
const { store, setRole, getValidTeachers, chooseRole, claimTeacher, update } = useUser(router);
|
||||
const { store, setRole, getAllTeachers, chooseRole, claimTeacher, getMyTeachers, update } = useUser(router);
|
||||
const { store: orgStore, loadMyOrgs, switchOrg } = useOrg();
|
||||
const { tryAutoSelect } = useTeacher();
|
||||
const { tryAutoSelect, switchTeacher } = useTeacher();
|
||||
let { unionid, openid, status, nickName, avatarUrl, scene, tongzhi_id, page_path } = params;
|
||||
console.log(params)
|
||||
console.log("loaded at...", Date.now())
|
||||
@@ -90,13 +90,26 @@ export default defineComponent({
|
||||
openid, scene, avatarUrl, nickName, status
|
||||
}
|
||||
|
||||
getValidTeachers();
|
||||
getAllTeachers();
|
||||
|
||||
const teachers = computed(() => store.teachers.valid.map(x => ({text: x.real_name, value: x.hty_id})))
|
||||
const teachers = computed(() => store.teachers.all.map(x => ({text: x.real_name, value: x.hty_id})))
|
||||
|
||||
const has_teacher = computed(() => store.teachers.mine.length > 0);
|
||||
const is_student = computed(() => store.currentRole === HtyBaseRoles.STUDENT);
|
||||
|
||||
const chooseTeacher = async (teacher_id: string, teacher_name: string) => {
|
||||
try {
|
||||
await showConfirmDialog({message: "确认选择【" + teacher_name + "】老师?"})
|
||||
await claimTeacher(store.current.hty_id, teacher_id);
|
||||
// Refresh teachers and select
|
||||
await getMyTeachers();
|
||||
switchTeacher(teacher_id);
|
||||
await router.push('/student/home');
|
||||
} catch (e) {
|
||||
console.error('choose teacher failed', e);
|
||||
}
|
||||
};
|
||||
|
||||
onMounted(async () => {
|
||||
console.log('on mounted');
|
||||
// update openid
|
||||
@@ -193,12 +206,6 @@ export default defineComponent({
|
||||
}
|
||||
})
|
||||
|
||||
const chooseTeacher = async (teacher_id: string, teacher_name: string) => {
|
||||
await showConfirmDialog({message: "确认选择【" + teacher_name + "】老师?"})
|
||||
await claimTeacher(store.current.hty_id, teacher_id);
|
||||
window.location.reload();
|
||||
};
|
||||
|
||||
return {
|
||||
is_registered, is_enabled, teachers, is_student,
|
||||
has_login, authorized, activeRoles, chooseRole, setRole, store, chooseTeacher,
|
||||
|
||||
+9
-6
@@ -574,12 +574,6 @@ export default function useUser(router?: Router) {
|
||||
setKey("current_role", role);
|
||||
getUnreadTongzhis();
|
||||
|
||||
// Auto-select first teacher when student role is chosen
|
||||
if (role === HtyBaseRoles.STUDENT && store.teachers.mine.length > 0) {
|
||||
const { tryAutoSelect } = useTeacher();
|
||||
tryAutoSelect(store.teachers.mine);
|
||||
}
|
||||
|
||||
if (prev !== role && !window.location.pathname.split('/').includes(role.toLowerCase())) {
|
||||
let len = window.history.length;
|
||||
// clear session history to prevent user go back to pages of prev role
|
||||
@@ -588,6 +582,15 @@ export default function useUser(router?: Router) {
|
||||
router?.push("/tongzhi")
|
||||
} else if (role === HtyBaseRoles.GUEST) {
|
||||
router?.push('/guest')
|
||||
} else if (role === HtyBaseRoles.STUDENT) {
|
||||
// Clear teacher and redirect to teacher selection
|
||||
const { clearTeacher } = useTeacher();
|
||||
clearTeacher();
|
||||
if (store.teachers.mine.length > 0) {
|
||||
router?.push('/student/teacher-select');
|
||||
} else {
|
||||
router?.push('/');
|
||||
}
|
||||
} else {
|
||||
// go to profile page
|
||||
router?.push('/' + role.toLowerCase() + '/profile')
|
||||
|
||||
Reference in New Issue
Block a user