/* eslint-disable @typescript-eslint/no-use-before-define */ import CustomTree from '@/pages/components/customTree'; import { deleteUser } from '@/services/userList'; import { DeleteOutlined, DownOutlined, PlusOutlined, TeamOutlined, } from '@ant-design/icons'; import { Button, Input, message, Popconfirm, Popover, Table } from 'antd'; import type { ColumnsType } from 'antd/es/table'; import React, { useEffect, useState } from 'react'; import { OrganizationNode, Device } from './contast'; import styles from './index.less'; import EditModal from './mod/eidtDevice'; import CreatGroup from './mod/group'; const UserListPage: React.FC = () => { const [orgTreeData, setOrgTreeData] = useState([]); const [selectedOrg, setSelectedOrg] = useState(''); // 用户列表 const [dataSource, setDataSource] = useState([]); const [loading, setLoading] = useState(false); const [searchText, setSearchText] = useState(''); const [selectedRowKeys, setSelectedRowKeys] = useState<[]>([]); // 分页参数 const [currentPage, setCurrentPage] = useState(1); const [pageSize, setPageSize] = useState(10); const [total, setTotal] = useState(0); // 编辑用户 const [currentUserInfo, setCurrentUserInfo] = useState({ visible: false, }); // 添加分组 const [visible, setVisible] = useState(false); // 获取用户分组组织树 useEffect(() => { getGroupList(); }, []); // 获取用户列表数据 useEffect(() => { getDataSource(); }, [selectedOrg, currentPage, pageSize]); const getGroupList = () => { const mockOrgData: OrganizationNode[] = [ { name: 'Headquartershdy', id: '1', children: [ { name: 'HR Department', id: '2', }, { name: 'IT Department', id: '3', children: [ { name: 'Frontend Team', id: '4', }, { name: 'Backend Team', id: '5', }, ], }, { name: 'Finance Department', id: '6', }, ], }, ]; setSelectedOrg(mockOrgData[0].id as string); setOrgTreeData(mockOrgData); }; const getDataSource = () => { setLoading(true); setTimeout(() => { const startIndex = (currentPage - 1) * pageSize; const mockUsers: Device[] = 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', }), ); setDataSource(mockUsers); setTotal(100); setLoading(false); }, 300); }; const onDelete = (device?: Device) => { const { user_id } = device || {}; const payload = { ids: user_id ? [user_id] : selectedRowKeys, }; deleteUser(payload as any).then((res) => { console.log('res=====', res); const { success } = res || {}; if (success) { message.success('删除成功'); setSelectedRowKeys([]); getDataSource(); } }); }; const handleEditUserInfo = (device: Device) => { setCurrentUserInfo({ recordData: { ...device }, visible: true, }); }; const columns: ColumnsType = [ { title: '显示名称', dataIndex: 'username', key: 'username', }, { title: '终端名称', dataIndex: 'loginName', key: 'loginName', }, { title: '终端分组', dataIndex: 'userGroup', key: 'userGroup', }, { title: 'IP地址', dataIndex: 'sex', key: 'sex', }, { title: '终端标识', dataIndex: 'mac_addr', key: 'mac_addr', }, { title: '终端类型', dataIndex: 'device_type', key: 'device_type', }, { title: '操作', key: 'actions', align: 'center', width: 150, render: (_, record) => (
onDelete(record)} // onCancel={cancel} okText="删除" cancelText="取消" >
} > e.preventDefault()}> 更多 ), }, ]; const onOrgSelect = (selectedKeys: React.Key[]) => { if (selectedKeys.length > 0) { setSelectedOrg(selectedKeys[0] as string); setCurrentPage(1); } }; const handlePageChange = (page: number, size: number) => { setCurrentPage(page); setPageSize(size); }; const handlePageSizeChange = (current: number, size: number) => { setCurrentPage(1); setPageSize(size); }; const onSelectChange = (newSelectedRowKeys: React.Key[]) => { console.log('selectedRowKeys changed: ', newSelectedRowKeys); setSelectedRowKeys(newSelectedRowKeys as any); }; const onDeleteGroup = () => {}; return (
console.log('Search org:', value)} />
} />
onDelete()} // onCancel={cancel} okText="删除" cancelText="取消" disabled={selectedRowKeys.length === 0} >
setSearchText(e.target.value)} style={{ width: 300 }} onSearch={(value) => { console.log('Search user:', value); setCurrentPage(1); // Reset to first page when searching }} />
{ return `共${total}条数据`; }, }} scroll={{ x: 'max-content', y: 55 * 12 }} /> { setVisible(false); }} selectedOrg={selectedOrg} onOk={() => {}} orgTreeData={orgTreeData} /> { setCurrentUserInfo({ recordData: {}, visible: false, }); }} onOk={() => {}} /> ); }; export default UserListPage;