import React, {useMemo, useState} from 'react'; import {Search, Truck, Plane, Inbox} from 'lucide-react'; const labels = { RECEIVING:'接收正常',GOOD:'正常',CONNECTED:'服务连接正常',STALE:'数据已过期', NOT_RECEIVED:'未接收',MISSING:'未采到',ERROR:'数据异常',WAITING:'等待数据同步', INVALID_TIME:'时间异常',INVALID_VALUE:'数值异常',AMBIGUOUS:'来源不明确', online:'在线',offline:'离线',UNKNOWN:'未接入', }; export function Status({state='UNKNOWN', label}) { const tone = ['RECEIVING','GOOD','CONNECTED','online'].includes(state) ? 'good' : ['STALE','INVALID_TIME','AMBIGUOUS'].includes(state) ? 'warn' : ['ERROR','INVALID_VALUE'].includes(state) ? 'bad' : 'muted'; return {label || labels[state] || labels.UNKNOWN}; } export function Panel({title,children,extra,className=''}) { return
{(title||extra)&&

{title}

{extra&&
{extra}
}
}{children}
; } export function Empty({title='暂无数据',description,icon:Icon=Inbox}) { return
{title}{description&&

{description}

}
; } export function EquipmentIcon({equipment,size=25}) { const air=/无人机|航空|飞行|UAV/i.test(`${equipment?.name||''} ${equipment?.code||''} ${equipment?.type||''}`); const Icon=air?Plane:Truck; return ; } export function EquipmentList({equipments=[],selectedId,onSelect,title='实装列表',emptyText='暂无已绑定装备'}) { const [search,setSearch]=useState(''); const filtered=useMemo(()=>equipments.filter(item=>`${item.name||''} ${item.code||''}`.toLowerCase().includes(search.trim().toLowerCase())),[equipments,search]); return
{filtered.map(item=>)}
{!filtered.length&&}
; } export function EquipmentHeader({equipment,statusLabel}) { if(!equipment)return null; return

{equipment.name||equipment.code||'未命名装备'}

{equipment.code||'—'}·{equipment.type||'实装装备'}

最近接收
; } export function formatTime(value) { if(value===null||value===undefined||value==='')return '—'; const date=new Date(value); if(Number.isNaN(date.getTime()))return '—'; return new Intl.DateTimeFormat('zh-CN',{timeZone:'Asia/Shanghai',hour:'2-digit',minute:'2-digit',second:'2-digit',hour12:false}).format(date); }