import { DeleteOutlined, PlusOutlined, TeamOutlined } from '@ant-design/icons'; import { Button, Col, Input, Pagination, Row, Table, Tree } from 'antd'; import type { ColumnsType } from 'antd/es/table'; import type { DataNode } from 'antd/es/tree'; import React, { useEffect, useState } from 'react'; import CreatGroup from './mod/group'; import styles from './index.less'; interface User { id: string; username: string; loginName: string; userGroup: string; userType: string; } interface OrganizationNode { id: string; name: string; children?: OrganizationNode[]; } const UserListPage: React.FC = () => { // State for organization tree const [orgTreeData, setOrgTreeData] = useState([]); const [selectedOrg, setSelectedOrg] = useState(''); // State for user list const [users, setUsers] = useState([]); const [loading, setLoading] = useState(false); const [searchText, setSearchText] = useState(''); const [selectedRowKeys, setSelectedRowKeys] = useState([]); // State for pagination const [currentPage, setCurrentPage] = useState(1); const [pageSize, setPageSize] = useState(10); const [totalUsers, setTotalUsers] = useState(0); // 添加分组 const [visible, setVisible] = useState(false); // Mock data for organization tree useEffect(() => { // In a real application, this would come from an API const mockOrgData: DataNode[] = [ { title: 'Headquarters', key: '1', children: [ { title: 'HR Department', key: '2', }, { title: 'IT Department', key: '3', children: [ { title: 'Frontend Team', key: '4', }, { title: 'Backend Team', key: '5', }, ], }, { title: 'Finance Department', key: '6', }, ], }, ]; setSelectedOrg(mockOrgData[0].key as string); setOrgTreeData(mockOrgData); }, []); // Mock data for users with pagination useEffect(() => { // In a real application, this would come from an API based on selected organization setLoading(true); // Simulate API call delay setTimeout(() => { // Generate mock users based on current page and page size const startIndex = (currentPage - 1) * pageSize; const mockUsers: User[] = Array.from( { length: pageSize }, (_, index) => ({ id: `${startIndex + index + 1}`, username: `User ${startIndex + index + 1}`, loginName: `login${startIndex + index + 1}`, userGroup: index % 3 === 0 ? 'Admin' : index % 3 === 1 ? 'Manager' : 'User', userType: index % 4 === 0 ? 'Full-time' : index % 4 === 1 ? 'Part-time' : index % 4 === 2 ? 'Contractor' : 'Intern', }), ); setUsers(mockUsers); setTotalUsers(100); // Mock total count setLoading(false); }, 300); }, [selectedOrg, currentPage, pageSize]); // Define columns for the user table const columns: ColumnsType = [ { title: '登录名', dataIndex: 'username', key: 'username', }, { title: '用户姓名', dataIndex: 'loginName', key: 'loginName', }, { title: '用户分组', dataIndex: 'userGroup', key: 'userGroup', }, { title: '性别', dataIndex: 'sex', key: 'sex', }, { title: '状态', dataIndex: 'status', key: 'status', }, { title: '用户类别', dataIndex: 'userType', key: 'userType', }, { title: '操作', key: 'actions', render: (_, record) => (
), }, ]; const handleUserAction = (user: User) => { console.log('Editing user:', user); // Implement user edit logic here }; const onOrgSelect = (selectedKeys: React.Key[]) => { if (selectedKeys.length > 0) { setSelectedOrg(selectedKeys[0] as string); // Reset to first page when organization changes setCurrentPage(1); } }; const handlePageChange = (page: number, size: number) => { setCurrentPage(page); setPageSize(size); }; const handlePageSizeChange = (current: number, size: number) => { setCurrentPage(1); // Reset to first page when page size changes setPageSize(size); }; const onSelectChange = (newSelectedRowKeys: React.Key[]) => { console.log('selectedRowKeys changed: ', newSelectedRowKeys); setSelectedRowKeys(newSelectedRowKeys); }; return (
console.log('Search org:', value)} />
} />
setSearchText(e.target.value)} style={{ width: 300 }} onSearch={(value) => { console.log('Search user:', value); setCurrentPage(1); // Reset to first page when searching }} />
`Showing ${range[0]}-${range[1]} of ${total} items` } />
{setVisible(false)}} onOk={()=>{}} orgTreeData={[]}/> ); }; export default UserListPage;