diff --git a/apps/admin/src/pages/IntegrationConfig/index.tsx b/apps/admin/src/pages/IntegrationConfig/index.tsx
index 1bbd275..659b294 100644
--- a/apps/admin/src/pages/IntegrationConfig/index.tsx
+++ b/apps/admin/src/pages/IntegrationConfig/index.tsx
@@ -53,6 +53,33 @@ interface ImportUsersResponse {
skipped: number;
}
+const UserTreeNode: React.FC<{
+ u: { userid: string; name: string; mobile: string };
+ isTeacher: boolean;
+ onToggle: () => void;
+ roleId: number | undefined;
+ defaultRoleId: number | null;
+ roles: Array<{ id: number; name: string }>;
+ onRoleChange: (roleId: number) => void;
+}> = React.memo(({ u, isTeacher, onToggle, roleId, defaultRoleId, roles, onRoleChange }) => (
+
+ 老师
+ {u.name}
+ {u.mobile && {u.mobile}}
+ {isTeacher && (
+
+));
+
const IntegrationConfigPage: React.FC = () => {
const [loading, setLoading] = useState(false);
const [saving, setSaving] = useState(false);
@@ -91,8 +118,7 @@ const IntegrationConfigPage: React.FC = () => {
};
useEffect(() => {
- fetchConfig();
- fetchRoles();
+ void Promise.all([fetchConfig(), fetchRoles()]);
}, []);
const handleSave = async () => {
@@ -137,7 +163,7 @@ const IntegrationConfigPage: React.FC = () => {
const teacherRole = activeRoles.find((r) => r.name === '班主任');
setDefaultTeacherRoleId(teacherRole?.id || activeRoles[0]?.id || null);
} catch {
- // ignore
+ message.error('获取角色列表失败');
}
};
@@ -154,7 +180,7 @@ const IntegrationConfigPage: React.FC = () => {
setDeptPickerTree(toTreeNode(res.data));
}
} catch {
- // ignore
+ message.error('获取部门架构失败');
}
};
@@ -230,43 +256,30 @@ const IntegrationConfigPage: React.FC = () => {
...buildTreeData(node.children),
...node.users.map((u) => ({
title: (
-
- {
- setTeacherChecks((prev) => ({
- ...prev,
- [u.userid]: e.target.checked,
- }));
- if (!e.target.checked) {
- setTeacherRoles((prev) => {
- const next = { ...prev };
- delete next[u.userid];
- return next;
- });
- }
- }}
- >
- 老师
-
- {u.name}
- {u.mobile && (
- {u.mobile}
- )}
- {teacherChecks[u.userid] && (
-
+ {
+ setTeacherChecks((prev) => ({
+ ...prev,
+ [u.userid]: !prev[u.userid],
+ }));
+ if (teacherChecks[u.userid]) {
+ setTeacherRoles((prev) => {
+ const next = { ...prev };
+ delete next[u.userid];
+ return next;
+ });
+ }
+ }}
+ roleId={teacherRoles[u.userid]}
+ defaultRoleId={defaultTeacherRoleId}
+ roles={roles}
+ onRoleChange={(roleId) =>
+ setTeacherRoles((prev) => ({ ...prev, [u.userid]: roleId }))
+ }
+ />
),
key: `user-${u.userid}`,
selectable: false,