From 1f63a53222ab8d29906203bdfc8e75fad8d7ce44 Mon Sep 17 00:00:00 2001 From: wangziqi Date: Thu, 9 Jul 2026 17:16:08 +0800 Subject: [PATCH] feat: rewrite sync drawer with checkable tree + class batch import --- .../src/pages/IntegrationConfig/index.tsx | 442 +++++++----------- 1 file changed, 169 insertions(+), 273 deletions(-) diff --git a/apps/admin/src/pages/IntegrationConfig/index.tsx b/apps/admin/src/pages/IntegrationConfig/index.tsx index 36ee791..c8d3533 100644 --- a/apps/admin/src/pages/IntegrationConfig/index.tsx +++ b/apps/admin/src/pages/IntegrationConfig/index.tsx @@ -1,11 +1,12 @@ import React, { useEffect, useState, useMemo, useCallback } from 'react'; import { Card, Form, Input, Button, Space, message, Spin, Switch, Alert, Descriptions, Tag, - Tabs, Drawer, Tree, Checkbox, Select, TreeSelect, Modal, DatePicker, InputNumber, Table, Popconfirm, + Tabs, Drawer, Tree, Select, TreeSelect, Modal, DatePicker, InputNumber, Table, Popconfirm, + Row, Col, List, } from 'antd'; import { SaveOutlined, ApiOutlined, CheckCircleOutlined, CloseCircleOutlined, - SyncOutlined, ReloadOutlined, PlusOutlined, + SyncOutlined, PlusOutlined, BankOutlined, UserOutlined, } from '@ant-design/icons'; import type { DataNode } from 'antd/es/tree'; import api from '../../api'; @@ -25,12 +26,6 @@ interface DingOrgTreeNodeExt { users: Array<{ userid: string; name: string; mobile: string; deptIds: number[] }>; } -interface RoleItem { - id: number; - name: string; - status: number; -} - interface OrgTreeNodeRaw { id: number; name: string; @@ -47,52 +42,21 @@ interface OrgTreeWithUsersResponse { data: DingOrgTreeNodeExt[]; } -interface ImportUsersResponse { - success: boolean; - teacherCount: number; - studentCount: number; - classCount: number; - skipped: number; - warnings: string[]; -} - -interface ClassMarkForm { - deptId: number; +interface ClassItem { + id: number; name: string; code: string; - classType: string; + classType?: string; startDate?: string; endDate?: string; maxStudents?: number; notes?: string; } -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 && ( - - - - - - - - - + + + + + +