feat: restore learning feedback and knowledge capabilities
This commit is contained in:
@@ -1,10 +1,14 @@
|
||||
import type { MobileIdentity, RoleKey } from '@/types/api';
|
||||
import { apiRequest } from './api';
|
||||
import {
|
||||
hasSelectedPosition,
|
||||
clearOrgPosition,
|
||||
getSelectedPosition,
|
||||
hasOrgPosition,
|
||||
isSupervisorLearnerMode,
|
||||
leaveSupervisorLearnerMode,
|
||||
normalizePosition,
|
||||
roleKey,
|
||||
saveSelectedPosition,
|
||||
saveOrgPosition,
|
||||
type UserPosition
|
||||
} from './auth';
|
||||
|
||||
@@ -20,7 +24,7 @@ export const isUserRoute = (url: string) => url.startsWith('/pages/user/');
|
||||
export const isSupervisorRoute = (url: string) => url.startsWith('/pages/supervisor/');
|
||||
|
||||
export const routeForMobileRole = (role: RoleKey, requested: string) => {
|
||||
if (role === 'supervisor' && (isUserRoute(requested) || isSupervisorRoute(requested))) {
|
||||
if (role === 'supervisor' && isUserRoute(requested) && !isSupervisorLearnerMode()) {
|
||||
return '/pages/supervisor/index/index';
|
||||
}
|
||||
if (role === 'user' && isSupervisorRoute(requested)) {
|
||||
@@ -39,6 +43,7 @@ export const hydrateMobileRole = async (): Promise<RoleKey> => {
|
||||
});
|
||||
const role = identity.role === 'supervisor' ? 'supervisor' : 'user';
|
||||
uni.setStorageSync(roleKey, role);
|
||||
if (role !== 'supervisor') leaveSupervisorLearnerMode();
|
||||
return role;
|
||||
} catch {
|
||||
// ponytail: role lookup failure fails closed; never reuse a stale supervisor cache.
|
||||
@@ -66,9 +71,11 @@ export const hydratePositionFromOrg = async (): Promise<UserPosition | ''> => {
|
||||
timeout: 15000,
|
||||
clearAuthOnUnauthorized: false
|
||||
});
|
||||
return saveSelectedPosition(identity.positionName);
|
||||
const officialPosition = saveOrgPosition(identity.positionName);
|
||||
if (!officialPosition) clearOrgPosition();
|
||||
return officialPosition;
|
||||
} catch {
|
||||
return '';
|
||||
return hasOrgPosition() ? getSelectedPosition() : '';
|
||||
}
|
||||
};
|
||||
|
||||
@@ -78,7 +85,7 @@ export const nextUserRouteAfterLogin = async (redirect: string) => {
|
||||
if (roleRoute !== redirect) return roleRoute;
|
||||
if (!isUserRoute(redirect)) return redirect;
|
||||
const officialPosition = await hydratePositionFromOrg();
|
||||
if (normalizePosition(officialPosition) || hasSelectedPosition()) return redirect;
|
||||
if (normalizePosition(officialPosition) || hasOrgPosition()) return redirect;
|
||||
return positionSetupUrl(redirect);
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user