forked from wangziqi/gongxue-base
feat: improve admin responsive pages and teacher candidates
This commit is contained in:
44
apps/admin/src/pages/Classes/teacher-candidate.ts
Normal file
44
apps/admin/src/pages/Classes/teacher-candidate.ts
Normal file
@@ -0,0 +1,44 @@
|
||||
export interface TeacherCandidateRole {
|
||||
code?: string | null;
|
||||
name: string;
|
||||
}
|
||||
|
||||
export interface TeacherCandidateUser {
|
||||
id: number;
|
||||
username: string;
|
||||
name?: string | null;
|
||||
isActive: boolean;
|
||||
isArchived: boolean;
|
||||
studentStatus?: string | null;
|
||||
roles?: TeacherCandidateRole[];
|
||||
profile?: { subjects?: string[] } | null;
|
||||
}
|
||||
|
||||
const isSuperAdminRole = (role: TeacherCandidateRole) =>
|
||||
role.code === 'super_admin' || role.name === '超级管理员' || role.name === '超管';
|
||||
|
||||
export const isTeacherCandidate = (user: TeacherCandidateUser) => {
|
||||
if (!user.isActive || user.isArchived) return false;
|
||||
if (user.studentStatus && user.studentStatus !== 'staff') return false;
|
||||
return !(user.roles || []).some(isSuperAdminRole);
|
||||
};
|
||||
|
||||
export const buildTeacherCandidateLabel = (user: TeacherCandidateUser) => {
|
||||
const displayName = user.name?.trim();
|
||||
const identity =
|
||||
displayName && displayName !== user.username
|
||||
? `${displayName}(${user.username})`
|
||||
: user.username;
|
||||
const roleNames = [...new Set((user.roles || []).map((role) => role.name).filter(Boolean))];
|
||||
const subjects = [
|
||||
...new Set((user.profile?.subjects || []).map((subject) => subject.trim()).filter(Boolean)),
|
||||
];
|
||||
|
||||
return [identity, roleNames.join('/'), subjects.join('/')].filter(Boolean).join(' · ');
|
||||
};
|
||||
|
||||
export const buildTeacherCandidateOptions = (users: TeacherCandidateUser[]) =>
|
||||
users.filter(isTeacherCandidate).map((user) => ({
|
||||
value: user.id,
|
||||
label: buildTeacherCandidateLabel(user),
|
||||
}));
|
||||
Reference in New Issue
Block a user