import React, { useState, useEffect } from 'react'; import { Table, Card, Button, Modal, Form, Input, Select, Space, message, Popconfirm, Tag, Avatar, Row, Col, DatePicker } from 'antd'; import { PlusOutlined, EditOutlined, DeleteOutlined, UserOutlined, ReloadOutlined, SearchOutlined, KeyOutlined } from '@ant-design/icons'; import { adminAPI } from '../../services/api'; import dayjs from 'dayjs'; const { Option } = Select; const { RangePicker } = DatePicker; const AdminManagement = () => { const [form] = Form.useForm(); const [searchForm] = Form.useForm(); const [modalVisible, setModalVisible] = useState(false); const [resetPasswordModalVisible, setResetPasswordModalVisible] = useState(false); const [passwordForm] = Form.useForm(); const [editingRecord, setEditingRecord] = useState(null); const [resetPasswordRecord, setResetPasswordRecord] = useState(null); const [loading, setLoading] = useState(false); const [admins, setAdmins] = useState([]); const [pagination, setPagination] = useState({ current: 1, pageSize: 10, total: 0, }); const [filters, setFilters] = useState({}); // 获取管理员列表 const fetchAdmins = async (params = {}) => { try { setLoading(true); const queryParams = { page: pagination.current, size: pagination.pageSize, ...filters, ...params, }; // 处理时间范围参数 if (queryParams.createStart && queryParams.createEnd) { // 保持原格式 } const response = await adminAPI.getAdminList(queryParams); if (response.code === 0) { setAdmins(response.data.content || []); setPagination(prev => ({ ...prev, total: response.data.totalElements || 0, })); } else { message.error(response.msg || '获取管理员列表失败'); } } catch (error) { console.error('获取管理员列表失败:', error); message.error(error.message || '获取管理员列表失败'); } finally { setLoading(false); } }; // 页面初始化加载数据 useEffect(() => { fetchAdmins(); }, [pagination.current, pagination.pageSize]); // 处理分页变化 const handleTableChange = (paginationInfo) => { setPagination(prev => ({ ...prev, current: paginationInfo.current, pageSize: paginationInfo.pageSize, })); }; // 处理搜索 const handleSearch = () => { const values = searchForm.getFieldsValue(); const newFilters = {}; if (values.username) { newFilters.username = values.username; } if (values.name) { newFilters.name = values.name; } if (values.role) { newFilters.role = values.role; } if (values.status !== undefined && values.status !== null) { newFilters.status = values.status; } if (values.createTimeRange && values.createTimeRange.length === 2) { newFilters.createStart = values.createTimeRange[0].format('YYYY-MM-DD HH:mm:ss'); newFilters.createEnd = values.createTimeRange[1].format('YYYY-MM-DD HH:mm:ss'); } setFilters(newFilters); setPagination(prev => ({ ...prev, current: 1 })); fetchAdmins(newFilters); }; // 重置搜索 const handleReset = () => { searchForm.resetFields(); setFilters({}); setPagination(prev => ({ ...prev, current: 1 })); fetchAdmins({}); }; const columns = [ { title: '管理员', key: 'admin', render: (_, record) => ( } />
{record.name}
{record.username}
), }, { title: '手机号', dataIndex: 'phone', key: 'phone', }, { title: '角色', dataIndex: 'role', key: 'role', render: (role) => { const colorMap = { 'admin': 'red', 'user': 'blue', 'operator': 'green', }; const roleNameMap = { 'admin': '管理员', 'user': '普通用户', 'operator': '操作员', }; return {roleNameMap[role] || role}; }, }, { title: '状态', dataIndex: 'status', key: 'status', render: (status) => ( {status === '1' ? '正常' : '禁用'} ), }, { title: '所属区域', key: 'area', render: (_, record) => { const areas = []; if (record.districtName) areas.push(record.districtName); if (record.subdistrictName) areas.push(record.subdistrictName); if (record.communityName) areas.push(record.communityName); return areas.length > 0 ? areas.join(' / ') : '-'; }, }, { title: '最后登录', dataIndex: 'lastLoginTime', key: 'lastLoginTime', render: (time) => time || '-', }, { title: '创建时间', dataIndex: 'createTime', key: 'createTime', }, { title: '操作', key: 'action', width: 200, render: (_, record) => ( handleDelete(record.id)} okText="确定" cancelText="取消" > ), }, ]; const handleAdd = () => { setEditingRecord(null); form.resetFields(); form.setFieldsValue({ status: '1', role: 'user', }); setModalVisible(true); }; const handleEdit = async (record) => { try { setLoading(true); const response = await adminAPI.getAdminById(record.id); if (response.code === 0 && response.data) { setEditingRecord(response.data); form.setFieldsValue({ ...response.data, }); setModalVisible(true); } else { message.error('获取管理员详情失败'); } } catch (error) { console.error('获取管理员详情失败:', error); message.error(error.message || '获取管理员详情失败'); } finally { setLoading(false); } }; const handleDelete = async (id) => { try { const response = await adminAPI.deleteAdmins(id.toString()); if (response.code === 0) { message.success('删除成功'); fetchAdmins(); } else { message.error(response.msg || '删除失败'); } } catch (error) { console.error('删除管理员失败:', error); message.error(error.message || '删除管理员失败'); } }; const handleResetPassword = (record) => { setResetPasswordRecord(record); passwordForm.resetFields(); setResetPasswordModalVisible(true); }; const handleResetPasswordOk = async () => { try { const values = await passwordForm.validateFields(); setLoading(true); const response = await adminAPI.resetPassword(resetPasswordRecord.id, values.newPassword); if (response.code === 0) { message.success('密码重置成功'); setResetPasswordModalVisible(false); passwordForm.resetFields(); } else { message.error(response.msg || '密码重置失败'); } } catch (error) { console.error('密码重置失败:', error); if (error.errorFields) { // 表单验证错误 return; } message.error(error.message || '密码重置失败'); } finally { setLoading(false); } }; const handleModalOk = async () => { try { const values = await form.validateFields(); setLoading(true); const formData = { ...values }; // 如果是编辑且有ID,需要传递ID if (editingRecord && editingRecord.id) { formData.id = editingRecord.id; } const response = await adminAPI.saveAdmin(formData); if (response.code === 0) { message.success(editingRecord ? '更新成功' : '添加成功'); setModalVisible(false); form.resetFields(); fetchAdmins(); } else { message.error(response.msg || '保存失败'); } } catch (error) { console.error('保存管理员失败:', error); if (error.errorFields) { // 表单验证错误 return; } message.error(error.message || '保存管理员失败'); } finally { setLoading(false); } }; const handleModalCancel = () => { setModalVisible(false); setEditingRecord(null); form.resetFields(); }; return (

管理员管理

管理系统管理员账号和权限

`第 ${range[0]}-${range[1]} 条/共 ${total} 条`, }} onChange={handleTableChange} /> {/* 新增/编辑管理员弹窗 */}
{!editingRecord && ( )}
{/* 重置密码弹窗 */} { setResetPasswordModalVisible(false); passwordForm.resetFields(); }} confirmLoading={loading} >
); }; export default AdminManagement;