import React, { useEffect, useRef, useState } from "react"; 
 | 
import { getToken } from '@/utils/token-util' 
 | 
import Http from '@/utils/http'; 
 | 
import { Badge, Button, Descriptions, Drawer, Input, Card, Select, message } from 'antd'; 
 | 
import { 
 | 
    PageContainer, 
 | 
} from '@ant-design/pro-components'; 
 | 
import './index.less' 
 | 
  
 | 
const Main = () => { 
 | 
    const [deviceInfos, setDeviceInfos] = useState([]); 
 | 
    const [ws, setWs] = useState(null); 
 | 
    const [openOpera, setOpenOpera] = useState(false); 
 | 
    const [currentData, setCurrentData] = useState(null); 
 | 
    const [moveLocType, setMoveLocType] = useState(1); 
 | 
    const [mapLev, setMapLev] = useState([]); 
 | 
  
 | 
    useEffect(() => { 
 | 
        var newWs = new WebSocket("ws://127.0.0.1:9090/wcs/ws/lift/websocket"); 
 | 
        setWs(newWs); 
 | 
  
 | 
        getMapLev(); 
 | 
  
 | 
        return () => { 
 | 
            if (ws) { 
 | 
                ws.close(); 
 | 
            } 
 | 
        } 
 | 
    }, []) 
 | 
  
 | 
    useEffect(() => { 
 | 
        if (ws) { 
 | 
            ws.onopen = function () { 
 | 
                console.log("open"); 
 | 
  
 | 
                sendWs(JSON.stringify({ 
 | 
                    "url": "login", 
 | 
                    "data": { 
 | 
                        "token": getToken() 
 | 
                    } 
 | 
                })) 
 | 
            } 
 | 
  
 | 
            ws.onmessage = function (e) { 
 | 
                const result = JSON.parse(e.data); 
 | 
                if (result.url == "login") { 
 | 
                    setInterval(function () { 
 | 
                        getDeviceInfo(); 
 | 
                    }, 1000) 
 | 
                } else if (result.url == "/lift/status/list") { 
 | 
                    const data = JSON.parse(result.data); 
 | 
                    setDeviceInfos(data); 
 | 
                } 
 | 
            } 
 | 
  
 | 
            ws.onclose = function (e) { 
 | 
                console.log("close"); 
 | 
            } 
 | 
  
 | 
            ws.onerror = function (e) { 
 | 
                console.log(e); 
 | 
            } 
 | 
        } 
 | 
    }, [ws]); 
 | 
  
 | 
    const sendWs = (message) => { 
 | 
        if (ws.readyState == WebSocket.OPEN) { 
 | 
            ws.send(message) 
 | 
        } 
 | 
    } 
 | 
  
 | 
    const getDeviceInfo = () => { 
 | 
        sendWs(JSON.stringify({ 
 | 
            "url": "/lift/status/list", 
 | 
            "data": {} 
 | 
        })) 
 | 
    } 
 | 
  
 | 
    const showOpera = (data) => { 
 | 
        setOpenOpera(true); 
 | 
        console.log(data); 
 | 
        setCurrentData(data); 
 | 
    }; 
 | 
  
 | 
    const closeOpera = () => { 
 | 
        setOpenOpera(false); 
 | 
    }; 
 | 
  
 | 
    const getMapLev = async () => { 
 | 
        try { 
 | 
            const resp = await Http.doPost('api/basLift/getMapLev', {}); 
 | 
            if (resp.code === 200) { 
 | 
                let arr = []; 
 | 
                for (let i = 1; i <= resp.data; i++) { 
 | 
                    arr.push({ 
 | 
                        value: i, 
 | 
                        label: i 
 | 
                    }) 
 | 
                } 
 | 
                setMapLev(arr); 
 | 
                return true; 
 | 
            } else { 
 | 
                message.warning(resp.msg); 
 | 
                return false; 
 | 
            } 
 | 
        } catch (error) { 
 | 
            message.warning("请求失败"); 
 | 
            return false; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    const targetLocChange = (e) => { 
 | 
        setTargetLoc(e.target.value) 
 | 
    } 
 | 
  
 | 
    const liftOperator = async (type) => { 
 | 
        try { 
 | 
            const resp = await Http.doPost('api/basLift/operator/lift', { 
 | 
                liftNo: currentData.liftNo, 
 | 
                liftTaskMode: type, 
 | 
                sourceStaNo: 0, 
 | 
                staNo: moveLocType 
 | 
            }); 
 | 
            if (resp.code === 200) { 
 | 
                message.success("请求成功"); 
 | 
                return true; 
 | 
            } else { 
 | 
                message.warning(resp.msg); 
 | 
                return false; 
 | 
            } 
 | 
        } catch (error) { 
 | 
            message.warning("请求失败"); 
 | 
            return false; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    const moveLocTypeChange = (e) => { 
 | 
        setMoveLocType(e) 
 | 
    } 
 | 
  
 | 
    let codeContent = (<PageContainer 
 | 
        header={{ 
 | 
            breadcrumb: {}, 
 | 
        }} 
 | 
    > 
 | 
        <div style={{ display: 'flex', flexWrap: 'wrap', justifyContent: 'space-around' }}> 
 | 
            {deviceInfos.map(item => { 
 | 
                if (item == null) { 
 | 
                    return; 
 | 
                } 
 | 
                let tmpTitle = item.liftNo + "号提升机" 
 | 
                let tmpData = [ 
 | 
                    { 
 | 
                        key: '1', 
 | 
                        label: '任务号', 
 | 
                        children: item.taskNo, 
 | 
                    }, 
 | 
                    { 
 | 
                        key: '2', 
 | 
                        label: '工作状态', 
 | 
                        children: <Badge status="processing" text={item.protocolStatusType} />, 
 | 
                    }, 
 | 
                    { 
 | 
                        key: '3', 
 | 
                        label: '设备状态', 
 | 
                        children: <Badge status="processing" text={item.run$} />, 
 | 
                    }, 
 | 
                    { 
 | 
                        key: '4', 
 | 
                        label: '就绪状态', 
 | 
                        children: <Badge status="processing" text={item.ready$} />, 
 | 
                    }, 
 | 
                    { 
 | 
                        key: '5', 
 | 
                        label: '模式', 
 | 
                        children: item.model$, 
 | 
                    }, 
 | 
                    { 
 | 
                        key: '6', 
 | 
                        label: '错误码', 
 | 
                        children: item.errorCode, 
 | 
                    }, 
 | 
                    { 
 | 
                        key: '7', 
 | 
                        label: '有托盘', 
 | 
                        children: item.hasTray ? 'Y' : 'N', 
 | 
                    }, 
 | 
                    { 
 | 
                        key: '8', 
 | 
                        label: '有小车', 
 | 
                        children: item.hasCar ? 'Y' : 'N', 
 | 
                    }, 
 | 
                    { 
 | 
                        key: '9', 
 | 
                        label: '作业标记', 
 | 
                        children: item.pakMk ? 'Y' : 'N', 
 | 
                    }, 
 | 
                ]; 
 | 
                return <div key={item.id} style={{ width: '45%' }}> 
 | 
                    <div style={{ marginBottom: '10px' }}> 
 | 
                        <span style={{ marginRight: '10px' }}>{tmpTitle}</span> 
 | 
                        <Button type="primary" onClick={() => showOpera(item)}>操作</Button> 
 | 
                    </div> 
 | 
                    <Descriptions size="small" bordered items={tmpData} /> 
 | 
                </div> 
 | 
            })} 
 | 
        </div> 
 | 
    </PageContainer>); 
 | 
  
 | 
    if (currentData) { 
 | 
        codeContent = ( 
 | 
            <> 
 | 
                {codeContent} 
 | 
                <Drawer title="操作面板" onClose={closeOpera} open={openOpera}> 
 | 
                    <h2 style={{ marginBottom: '15px' }}>{currentData.liftNo}号提升机</h2> 
 | 
                    <div style={{ marginBottom: '15px' }}> 
 | 
                        <Card title="移动指令" style={{ width: 300 }}> 
 | 
                            <p> 
 | 
                                <Select 
 | 
                                    defaultValue="1" 
 | 
                                    onChange={moveLocTypeChange} 
 | 
                                    style={{ width: 120 }} 
 | 
                                    options={mapLev} 
 | 
                                /> 
 | 
                                <span><Button onClick={() => liftOperator('move')}>移动</Button></span> 
 | 
                            </p> 
 | 
                        </Card> 
 | 
                    </div> 
 | 
  
 | 
                    <div style={{ marginBottom: '15px' }}> 
 | 
                        <Card title="相关指令" style={{ width: 300 }}> 
 | 
                            <div className="commandItem"> 
 | 
                                <Button onClick={() => liftOperator('reset')}>复位</Button> 
 | 
                            </div> 
 | 
                        </Card> 
 | 
                    </div> 
 | 
                </Drawer> 
 | 
            </> 
 | 
        ) 
 | 
    } 
 | 
  
 | 
    return (codeContent); 
 | 
} 
 | 
  
 | 
export default Main; 
 |