| import React, { useState, useRef, useEffect } from 'react'; | 
| import { Descriptions, Button, Skeleton, Badge, Space } from 'antd'; | 
| import { FormattedMessage, useIntl, useModel } from '@umijs/max'; | 
| import { createStyles } from 'antd-style'; | 
| import * as Utils from '../../utils' | 
| import Http from '@/utils/http'; | 
| import BoolValueIcon from '@/components/BoolValueIcon'; | 
| import ShuttleHandle from './handle'; | 
|   | 
| const useStyles = createStyles(({ token, css }) => { | 
|     return { | 
|         infoBox: { | 
|             height: '100%', | 
|             display: 'flex', | 
|             gap: '0px', | 
|         }, | 
|         tableInfo: { | 
|             height: '100%', | 
|             width: '100%', | 
|             padding: '0 10px 0 15px', | 
|             overflow: 'auto', | 
|         }, | 
|         tableButton: { | 
|             width: '100%', | 
|             marginBottom: '10px', | 
|             fontWeight: 'bold', | 
|             letterSpacing: '1px', | 
|         } | 
|     } | 
| }) | 
|   | 
| const updateEnable = async (deviceNo, enable) => { | 
|     const resp = await Http.doPost('api/dict/update', { val }); | 
|     if (resp.code === 200) { | 
|         message.success(intl.formatMessage({ id: 'page.update.success', defaultMessage: '更新成功' })); | 
|         return true; | 
|     } else { | 
|         message.error(resp.msg); | 
|         return false; | 
|     } | 
| } | 
|   | 
| const ShuttleView = (props) => { | 
|     const intl = useIntl(); | 
|     const { styles } = useStyles(); | 
|   | 
|     const { data } = props; | 
|     const [loading, setLoading] = React.useState(false); | 
|     const [childrenDrawer, setChildrenDrawer] = useState(false); | 
|     const [info, setInfo] = React.useState(null); | 
|   | 
|     useEffect(() => { | 
|         setLoading(true); | 
|         const fetchShuttleInfo = async (shuttleNo) => { | 
|             const res = await Http.doGet('/api/map/shuttle/info', { shuttleNo: shuttleNo }); | 
|             if (res?.data) { | 
|                 setInfo(res.data); | 
|             } | 
|             setLoading(false); | 
|         } | 
|         fetchShuttleInfo(data.no); | 
|   | 
|         const timer = setInterval(() => { | 
|             fetchShuttleInfo(data.no); | 
|         }, 1000); | 
|         return () => { | 
|             clearInterval(timer); | 
|         } | 
|     }, [data]); | 
|   | 
|     return ( | 
|         <> | 
|             <div className={styles.infoBox}> | 
|                 {loading ? ( | 
|                     <Skeleton active /> | 
|                 ) : ( | 
|                     <div className={styles.tableInfo}> | 
|                         <Descriptions | 
|                             bordered | 
|                             title='' | 
|                             size='middle'    // default | middle | small | 
|                             layout="vertical"   // horizontal | vertical | 
|                             column={4} | 
|                             items={ | 
|                                 [ | 
|                                     { | 
|                                         label: intl.formatMessage({ id: 'map.shuttle.no', defaultMessage: '穿梭车编号' }), | 
|                                         children: info?.shuttleNo, | 
|                                     }, | 
|                                     { | 
|                                         label: intl.formatMessage({ id: 'map.task.no', defaultMessage: '任务号' }), | 
|                                         children: info?.taskNo, | 
|                                     }, | 
|                                     { | 
|                                         label: intl.formatMessage({ id: 'map.device.status', defaultMessage: '设备状态' }), | 
|                                         children: <Badge status="processing" text={info?.status} />, | 
|                                     }, | 
|                                     { | 
|                                         label: intl.formatMessage({ id: 'map.shuttle.current.code', defaultMessage: '定位条码' }), | 
|                                         children: info?.currentCode, | 
|                                     }, | 
|                                     { | 
|                                         label: intl.formatMessage({ id: 'map.loc.no', defaultMessage: '库位号' }), | 
|                                         children: info?.currentLocNo, | 
|                                     }, | 
|                                     { | 
|                                         label: intl.formatMessage({ id: 'map.pallet.barcode', defaultMessage: '托盘条码' }), | 
|                                         children: info?.zpallet, | 
|                                     }, | 
|                                     { | 
|                                         label: intl.formatMessage({ id: 'map.origin.loc', defaultMessage: '起始库位' }), | 
|                                         children: info?.originLocNo, | 
|                                     }, | 
|                                     { | 
|                                         label: intl.formatMessage({ id: 'map.dest.loc', defaultMessage: '目标库位' }), | 
|                                         children: info?.destLocNo, | 
|                                     }, | 
|   | 
|                                     { | 
|                                         label: intl.formatMessage({ id: 'map.shuttle.batter.power', defaultMessage: '电池电量' }), | 
|                                         children: info?.batteryPower, | 
|                                     }, | 
|                                     { | 
|                                         label: intl.formatMessage({ id: 'map.shuttle.batter.voltage', defaultMessage: '电池电压' }), | 
|                                         children: info?.batteryVoltage, | 
|                                     }, | 
|                                     { | 
|                                         label: intl.formatMessage({ id: 'map.shuttle.batter.temp', defaultMessage: '电池温度' }), | 
|                                         children: info?.batteryTemp, | 
|                                     }, | 
|                                     { | 
|                                         label: intl.formatMessage({ id: 'map.error', defaultMessage: '异常信号' }), | 
|                                         children: info?.errorCode, | 
|                                     }, | 
|                                     { | 
|                                         label: intl.formatMessage({ id: 'map.shuttle.has.lift', defaultMessage: '顶升信号' }), | 
|                                         children: <BoolValueIcon value={info?.hasLift} />, | 
|                                     }, | 
|                                     { | 
|                                         label: intl.formatMessage({ id: 'map.shuttle.has.pallet', defaultMessage: '托盘信号' }), | 
|                                         children: <BoolValueIcon value={info?.hasPallet} />, | 
|                                     }, | 
|                                     { | 
|                                         label: intl.formatMessage({ id: 'map.shuttle.has.charge', defaultMessage: '充电信号' }), | 
|                                         children: <BoolValueIcon value={info?.hasCharge} />, | 
|                                     }, | 
|                                     { | 
|                                         label: intl.formatMessage({ id: 'map.pakmk', defaultMessage: '作业标记' }), | 
|                                         children: <BoolValueIcon value={info?.pakMk} />, | 
|                                     }, | 
|                                     { | 
|                                         label: intl.formatMessage({ id: 'map.is.enable', defaultMessage: '是否启用' }), | 
|                                         children: <BoolValueIcon value={info?.enable} />, | 
|                                     }, | 
|                                     { | 
|                                         label: intl.formatMessage({ id: 'map.loc.operation', defaultMessage: '库位操作' }), | 
|                                         span: 3, | 
|                                         children: ( | 
|                                             <> | 
|                                                 <Button className={styles.tableButton} size='default' type="primary" danger> | 
|                                                     <FormattedMessage id='map.diable' defaultMessage='禁用' /> | 
|                                                 </Button> | 
|                                                 <Button className={styles.tableButton} size='default' disabled> | 
|                                                     <FormattedMessage id='map.enable' defaultMessage='启用' /> | 
|                                                 </Button> | 
|                                                 <Button | 
|                                                     className={styles.tableButton} | 
|                                                     size='default' | 
|                                                     onClick={() => { | 
|                                                         setChildrenDrawer(true); | 
|                                                     }} | 
|                                                 > | 
|                                                     <FormattedMessage id='map.handle' defaultMessage='手动操作' /> | 
|                                                 </Button> | 
|                                             </> | 
|                                         ) | 
|                                     }, | 
|                                 ] | 
|                             } | 
|                         /> | 
|                         <ShuttleHandle | 
|                             open={childrenDrawer} | 
|                             refCurr={props.refCurr} | 
|                             shuttleNo={data.no} | 
|                             onClose={() => { | 
|                                 setChildrenDrawer(false) | 
|                             }} | 
|                         /> | 
|                     </div> | 
|                 )} | 
|             </div> | 
|         </> | 
|     ) | 
| } | 
|   | 
| export default ShuttleView; |