import React, { useState } from 'react'; import { Button, Table, Space, Form, Input, Select, message, Modal, Card, Row, Col, Typography, Switch, Badge, Image, Popconfirm, Tag, } from 'antd'; import { useQuery } from '@tanstack/react-query'; import dayjs from 'dayjs'; import 'dayjs/locale/zh-cn'; import type { ZichanInfo, RackServerType, RackInfo, RackServer } from '../share/monitorTypes.ts'; import { ServerType, ServerTypeNameMap } from '../share/monitorTypes.ts'; import { EnableStatus, EnableStatusNameMap } from '../share/types.ts' import { RackAPI, RackServerAPI , RackServerTypeAPI, ZichanAPI, getOssUrl} from './api/index.ts'; const { Title } = Typography; // 机柜管理页面 export const RackManagePage = () => { const [form] = Form.useForm(); const [formMode, setFormMode] = useState<'create' | 'edit'>('create'); const [editingId, setEditingId] = useState(null); const [modalVisible, setModalVisible] = useState(false); const [isLoading, setIsLoading] = useState(false); const [searchParams, setSearchParams] = useState({ page: 1, limit: 10, rack_name: '', rack_code: '', area: '' }); // 查询机柜列表 const { data: rackResult = { data: [], pagination: { total: 0, current: 1, pageSize: 10 } }, isLoading: isFetching, refetch } = useQuery({ queryKey: ['racks', searchParams], queryFn: () => RackAPI.getRackList(searchParams), }); // 提取数据和分页信息 const rackList = rackResult.data || []; const pagination = rackResult.pagination || { total: 0, current: 1, pageSize: 10 }; // 处理表单提交 const handleSubmit = async (values: Partial) => { try { setIsLoading(true); if (formMode === 'create') { await RackAPI.createRack(values); message.success('机柜创建成功'); } else { if (editingId) { await RackAPI.updateRack(editingId, values); message.success('机柜更新成功'); } } setModalVisible(false); refetch(); } catch (error: any) { message.error(error.response?.data?.error || '操作失败'); } finally { setIsLoading(false); } }; // 处理编辑 const handleEdit = async (id: number) => { try { setIsLoading(true); const data = await RackAPI.getRack(id); form.setFieldsValue(data); setEditingId(id); setFormMode('edit'); setModalVisible(true); } catch (error: any) { message.error(error.response?.data?.error || '获取机柜详情失败'); } finally { setIsLoading(false); } }; // 处理删除 const handleDelete = async (id: number) => { try { await RackAPI.deleteRack(id); message.success('机柜删除成功'); refetch(); } catch (error: any) { message.error(error.response?.data?.error || '删除机柜失败'); } }; // 处理搜索 const handleSearch = (values: any) => { setSearchParams({ ...searchParams, page: 1, // 重置为第一页 rack_name: values.rack_name, rack_code: values.rack_code, area: values.area }); }; // 处理页码变化 const handlePageChange = (page: number, pageSize?: number) => { setSearchParams({ ...searchParams, page, limit: pageSize || 10 }); }; // 处理新增 const handleAdd = () => { form.resetFields(); setFormMode('create'); setEditingId(null); setModalVisible(true); }; // 表格列定义 const columns = [ { title: '机柜ID', dataIndex: 'id', key: 'id', width: 80 }, { title: '机柜名称', dataIndex: 'rack_name', key: 'rack_name' }, { title: '机柜编号', dataIndex: 'rack_code', key: 'rack_code' }, { title: '区域', dataIndex: 'area', key: 'area' }, { title: '机房', dataIndex: 'room', key: 'room' }, { title: '容量(U)', dataIndex: 'capacity', key: 'capacity' }, { title: '状态', dataIndex: 'is_disabled', key: 'is_disabled', render: (status: EnableStatus) => ( ) }, { title: '创建时间', dataIndex: 'created_at', key: 'created_at', render: (date: string) => date ? dayjs(date).format('YYYY-MM-DD HH:mm:ss') : '-' }, { title: '操作', key: 'action', width: 200, render: (_: any, record: RackInfo) => ( ) } ]; return (
机柜管理
`共 ${total} 条记录` }} /> setModalVisible(false)} footer={null} width={700} >
); };