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;
|