From 18060d44a85123d19c0c19469e15e315b6af1712 Mon Sep 17 00:00:00 2001 From: wangziqi Date: Fri, 10 Jul 2026 09:50:45 +0800 Subject: [PATCH] fix: pass user name and mobile to backend when importing students --- .../src/pages/IntegrationConfig/index.tsx | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/apps/admin/src/pages/IntegrationConfig/index.tsx b/apps/admin/src/pages/IntegrationConfig/index.tsx index bb2b6a5..0a9b1fb 100644 --- a/apps/admin/src/pages/IntegrationConfig/index.tsx +++ b/apps/admin/src/pages/IntegrationConfig/index.tsx @@ -209,16 +209,30 @@ const IntegrationConfigPage: React.FC = () => { const treeData = useMemo(() => buildTreeData(orgTree), [orgTree, buildTreeData]); + const extractCheckedUsers = useCallback((): Array<{ dingUserId: string; name: string; mobile?: string }> => { + const result: Array<{ dingUserId: string; name: string; mobile?: string }> = []; + const walk = (nodes: DingOrgTreeNodeExt[]) => { + for (const node of nodes) { + for (const u of node.users) { + if (checkedKeys.includes(`user-${u.userid}`)) { + result.push({ dingUserId: u.userid, name: u.name, mobile: u.mobile || undefined }); + } + } + walk(node.children); + } + }; + walk(orgTree); + return result; + }, [checkedKeys, orgTree]); + const handleJoinClass = async () => { if (selectedClassId === null) return message.warning('请先选择一个班级'); - const userIds = checkedKeys - .filter((k) => String(k).startsWith('user-')) - .map((k) => String(k).replace('user-', '')); - if (userIds.length === 0) return message.warning('请勾选要导入的用户'); + const users = extractCheckedUsers(); + if (users.length === 0) return message.warning('请勾选要导入的用户'); setImporting(true); try { - const res = await api.post(`/classes/${selectedClassId}/students/import`, { dingUserIds: userIds }); + const res = await api.post(`/classes/${selectedClassId}/students/import`, { users }); message.success(`导入 ${res.imported} 人,跳过 ${res.skipped} 人`); setCheckedKeys([]); setSelectedClassId(null); @@ -233,10 +247,8 @@ const IntegrationConfigPage: React.FC = () => { const handleCreateClass = async () => { try { const values = await classForm.validateFields(); - const userIds = checkedKeys - .filter((k) => String(k).startsWith('user-')) - .map((k) => String(k).replace('user-', '')); - await api.post('/classes', { ...values, dingUserIds: userIds }); + const users = extractCheckedUsers(); + await api.post('/classes', { ...values, users }); message.success('班级创建成功'); setClassModalOpen(false); classForm.resetFields();