import React from 'react'; import { Modal, Button, Card, Row, Col, Tag } from 'antd'; import { AppstoreOutlined } from '@ant-design/icons'; import { designTokens } from '../../config/theme'; import { getStatusConfig, getTypeLabel, getDeviceTypeIcon } from '../../utils/deviceUtils.jsx'; const modalHeaderStyle = { display: 'flex', alignItems: 'center', gap: '8px', fontSize: '18px', fontWeight: 600, }; const secondaryActionStyle = { height: '40px', borderRadius: designTokens.borderRadius.small, border: `1px solid ${designTokens.colors.border.light}`, fontWeight: '500', }; const DeviceDetailModal = ({ visible, device, deviceFields, onClose, onEdit, onViewTickets, onCreateTicket, }) => { if (!device) return null; return ( 设备详情 } open={visible} onCancel={onClose} footer={[ , , , , ]} width={700} destroyOnHidden styles={{ header: { borderBottom: '1px solid #f0f0f0', padding: '16px 24px', position: 'relative', }, body: { padding: '0', overflow: 'auto' }, }} >
{getDeviceTypeIcon(device.type)}
{device.name}
{getTypeLabel(device.type)} | {device.deviceId} | {device.status ? getStatusConfig(device.status).text : '-'}
基本信息} style={{ marginBottom: '16px', borderRadius: '8px' }} >
设备型号
{device.model || '-'}
序列号
{device.serialNumber || '-'}
IP地址
{device.ipAddress || '-'}
所在机房
{device.Rack?.Room?.name || '-'}
所在机柜
{device.Rack?.name || '-'}
位置(U)
U{device.position || '-'}
高度
{device.height ? `${device.height}U` : '-'}
功率
{device.power ? `${device.power}W` : '-'}
状态
{device.status ? getStatusConfig(device.status).text : '-'}
维保信息} style={{ marginBottom: '16px', borderRadius: '8px' }} >
购买日期
{device.purchaseDate ? new Date(device.purchaseDate).toLocaleDateString('zh-CN') : '-'}
保修到期
{device.warrantyExpiry ? new Date(device.warrantyExpiry).toLocaleDateString('zh-CN') : '-'}
{device.description && ( 描述} style={{ marginBottom: '16px', borderRadius: '8px' }} >
{device.description}
)} {device.customFields && Object.keys(device.customFields).length > 0 && ( 自定义字段} style={{ borderRadius: '8px' }} > {Object.entries(device.customFields).map(([key, value]) => { const fieldConfig = deviceFields.find((f) => f.fieldName === key); const displayName = fieldConfig?.displayName || key; return (
{displayName}
{String(value)}
); })}
)}
); }; export default React.memo(DeviceDetailModal);