diff --git a/apps/admin/src/pages/Schedules/index.tsx b/apps/admin/src/pages/Schedules/index.tsx index 1cdaccbf..f20b225e 100644 --- a/apps/admin/src/pages/Schedules/index.tsx +++ b/apps/admin/src/pages/Schedules/index.tsx @@ -10,6 +10,7 @@ import { RightOutlined, DeleteOutlined, CloudSyncOutlined, + PlusOutlined, } from '@ant-design/icons'; import dayjs, { Dayjs } from 'dayjs'; import api from '../../api'; @@ -49,6 +50,12 @@ interface ClassItem { code: string; } + +interface UserItem { + id: number; + username: string; + name: string; +} interface ScheduleFormValues { classId: number; subject: string; @@ -83,6 +90,7 @@ const SchedulesPage: React.FC = () => { // Data const [classrooms, setClassrooms] = useState([]); const [classes, setClasses] = useState([]); + const [users, setUsers] = useState([]); const [matrix, setMatrix] = useState>>({}); const [loading, setLoading] = useState(false); @@ -236,6 +244,10 @@ const SchedulesPage: React.FC = () => { fetchData(); }, [fetchData]); + useEffect(() => { + api.get('/rbac/users').then(setUsers).catch(() => {}); + }, []); + // ---- Filtered classrooms ---- const filteredClassrooms = useMemo(() => { @@ -394,6 +406,15 @@ const SchedulesPage: React.FC = () => { [classes], ); + const userOptions = useMemo( + () => + users.map((u) => ({ + value: u.id, + label: `${u.name || u.username}${u.name ? ` (${u.username})` : ''}`, + })), + [users], + ); + // ---- Render ---- const selectedClassroom = selectedCell @@ -785,10 +806,15 @@ const SchedulesPage: React.FC = () => { (v ? Number(v) : undefined)} + label="教师(可选)" > - +