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();