#
whycq
2024-11-21 75201fffb3d5f469cfa4a77e2e71c98a13224f01
#
3个文件已添加
2个文件已修改
707 ■■■■■ 已修改文件
Monitor-APP/manifest.json 173 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Monitor-APP/pages/home/home.vue 161 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Monitor-APP/static/js/WebSocketClient.js 191 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Monitor-APP/static/js/WebSocketClient02.js 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Monitor-APP/static/js/dispatcher.js 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Monitor-APP/manifest.json
@@ -26,22 +26,165 @@
            /* android打包配置 */
            "android" : {
                "permissions" : [
                    "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
                    "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
                    "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
                    "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
                    "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
                    "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
                    "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
                    "<uses-permission android:name=\"android.permission.CAMERA\"/>",
                    "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
                    "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
                    "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
                    "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
                    "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
                    "<uses-feature android:name=\"android.hardware.camera\"/>",
                    "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
                ]
                    "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
                    "<uses-permission android:name=\"android.permission.ACCESS_CHECKIN_PROPERTIES\"/>",
                    "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
                    "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
                    "<uses-permission android:name=\"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\"/>",
                    "<uses-permission android:name=\"android.permission.ACCESS_MOCK_LOCATION\"/>",
                    "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
                    "<uses-permission android:name=\"android.permission.ACCESS_SURFACE_FLINGER\"/>",
                    "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
                    "<uses-permission android:name=\"android.permission.ACCOUNT_MANAGER\"/>",
                    "<uses-permission android:name=\"android.permission.ADD_VOICEMAIL\"/>",
                    "<uses-permission android:name=\"android.permission.AUTHENTICATE_ACCOUNTS\"/>",
                    "<uses-permission android:name=\"android.permission.BATTERY_STATS\"/>",
                    "<uses-permission android:name=\"android.permission.BIND_ACCESSIBILITY_SERVICE\"/>",
                    "<uses-permission android:name=\"android.permission.BIND_APPWIDGET\"/>",
                    "<uses-permission android:name=\"android.permission.BIND_CARRIER_MESSAGING_SERVICE\"/>",
                    "<uses-permission android:name=\"android.permission.BIND_DEVICE_ADMIN\"/>",
                    "<uses-permission android:name=\"android.permission.BIND_DREAM_SERVICE\"/>",
                    "<uses-permission android:name=\"android.permission.BIND_INPUT_METHOD\"/>",
                    "<uses-permission android:name=\"android.permission.BIND_NFC_SERVICE\"/>",
                    "<uses-permission android:name=\"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE\"/>",
                    "<uses-permission android:name=\"android.permission.BIND_PRINT_SERVICE\"/>",
                    "<uses-permission android:name=\"android.permission.BIND_REMOTEVIEWS\"/>",
                    "<uses-permission android:name=\"android.permission.BIND_TEXT_SERVICE\"/>",
                    "<uses-permission android:name=\"android.permission.BIND_TV_INPUT\"/>",
                    "<uses-permission android:name=\"android.permission.BIND_VOICE_INTERACTION\"/>",
                    "<uses-permission android:name=\"android.permission.BIND_VPN_SERVICE\"/>",
                    "<uses-permission android:name=\"android.permission.BIND_WALLPAPER\"/>",
                    "<uses-permission android:name=\"android.permission.BLUETOOTH\"/>",
                    "<uses-permission android:name=\"android.permission.BLUETOOTH_ADMIN\"/>",
                    "<uses-permission android:name=\"android.permission.BLUETOOTH_PRIVILEGED\"/>",
                    "<uses-permission android:name=\"android.permission.BODY_SENSORS\"/>",
                    "<uses-permission android:name=\"android.permission.BRICK\"/>",
                    "<uses-permission android:name=\"android.permission.BROADCAST_PACKAGE_REMOVED\"/>",
                    "<uses-permission android:name=\"android.permission.BROADCAST_SMS\"/>",
                    "<uses-permission android:name=\"android.permission.BROADCAST_STICKY\"/>",
                    "<uses-permission android:name=\"android.permission.BROADCAST_WAP_PUSH\"/>",
                    "<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
                    "<uses-permission android:name=\"android.permission.CALL_PRIVILEGED\"/>",
                    "<uses-permission android:name=\"android.permission.CAMERA\"/>",
                    "<uses-permission android:name=\"android.permission.CAPTURE_AUDIO_OUTPUT\"/>",
                    "<uses-permission android:name=\"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT\"/>",
                    "<uses-permission android:name=\"android.permission.CAPTURE_VIDEO_OUTPUT\"/>",
                    "<uses-permission android:name=\"android.permission.CHANGE_COMPONENT_ENABLED_STATE\"/>",
                    "<uses-permission android:name=\"android.permission.CHANGE_CONFIGURATION\"/>",
                    "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
                    "<uses-permission android:name=\"android.permission.CHANGE_WIFI_MULTICAST_STATE\"/>",
                    "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
                    "<uses-permission android:name=\"android.permission.CLEAR_APP_CACHE\"/>",
                    "<uses-permission android:name=\"android.permission.CLEAR_APP_USER_DATA\"/>",
                    "<uses-permission android:name=\"android.permission.CONTROL_LOCATION_UPDATES\"/>",
                    "<uses-permission android:name=\"android.permission.DELETE_CACHE_FILES\"/>",
                    "<uses-permission android:name=\"android.permission.DELETE_PACKAGES\"/>",
                    "<uses-permission android:name=\"android.permission.DEVICE_POWER\"/>",
                    "<uses-permission android:name=\"android.permission.DIAGNOSTIC\"/>",
                    "<uses-permission android:name=\"android.permission.DISABLE_KEYGUARD\"/>",
                    "<uses-permission android:name=\"android.permission.DUMP\"/>",
                    "<uses-permission android:name=\"android.permission.EXPAND_STATUS_BAR\"/>",
                    "<uses-permission android:name=\"android.permission.FACTORY_TEST\"/>",
                    "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
                    "<uses-permission android:name=\"android.permission.FORCE_BACK\"/>",
                    "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
                    "<uses-permission android:name=\"android.permission.GET_PACKAGE_SIZE\"/>",
                    "<uses-permission android:name=\"android.permission.GET_TASKS\"/>",
                    "<uses-permission android:name=\"android.permission.GET_TOP_ACTIVITY_INFO\"/>",
                    "<uses-permission android:name=\"android.permission.GLOBAL_SEARCH\"/>",
                    "<uses-permission android:name=\"android.permission.HARDWARE_TEST\"/>",
                    "<uses-permission android:name=\"android.permission.INJECT_EVENTS\"/>",
                    "<uses-permission android:name=\"android.permission.INSTALL_LOCATION_PROVIDER\"/>",
                    "<uses-permission android:name=\"android.permission.INSTALL_PACKAGES\"/>",
                    "<uses-permission android:name=\"android.permission.INSTALL_SHORTCUT\"/>",
                    "<uses-permission android:name=\"android.permission.INTERNAL_SYSTEM_WINDOW\"/>",
                    "<uses-permission android:name=\"android.permission.INTERNET\"/>",
                    "<uses-permission android:name=\"android.permission.KILL_BACKGROUND_PROCESSES\"/>",
                    "<uses-permission android:name=\"android.permission.LOCATION_HARDWARE\"/>",
                    "<uses-permission android:name=\"android.permission.MANAGE_ACCOUNTS\"/>",
                    "<uses-permission android:name=\"android.permission.MANAGE_APP_TOKENS\"/>",
                    "<uses-permission android:name=\"android.permission.MANAGE_DOCUMENTS\"/>",
                    "<uses-permission android:name=\"android.permission.MASTER_CLEAR\"/>",
                    "<uses-permission android:name=\"android.permission.MEDIA_CONTENT_CONTROL\"/>",
                    "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
                    "<uses-permission android:name=\"android.permission.MODIFY_PHONE_STATE\"/>",
                    "<uses-permission android:name=\"android.permission.MOUNT_FORMAT_FILESYSTEMS\"/>",
                    "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
                    "<uses-permission android:name=\"android.permission.NFC\"/>",
                    "<uses-permission android:name=\"android.permission.PERSISTENT_ACTIVITY\"/>",
                    "<uses-permission android:name=\"android.permission.PROCESS_OUTGOING_CALLS\"/>",
                    "<uses-permission android:name=\"android.permission.READ_CALENDAR\"/>",
                    "<uses-permission android:name=\"android.permission.READ_CALL_LOG\"/>",
                    "<uses-permission android:name=\"android.permission.READ_CONTACTS\"/>",
                    "<uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/>",
                    "<uses-permission android:name=\"android.permission.READ_FRAME_BUFFER\"/>",
                    "<uses-permission android:name=\"android.permission.READ_HISTORY_BOOKMARKS\"/>",
                    "<uses-permission android:name=\"android.permission.READ_INPUT_STATE\"/>",
                    "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
                    "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
                    "<uses-permission android:name=\"android.permission.READ_PROFILE\"/>",
                    "<uses-permission android:name=\"android.permission.READ_SMS\"/>",
                    "<uses-permission android:name=\"android.permission.READ_SOCIAL_STREAM\"/>",
                    "<uses-permission android:name=\"android.permission.READ_SYNC_SETTINGS\"/>",
                    "<uses-permission android:name=\"android.permission.READ_SYNC_STATS\"/>",
                    "<uses-permission android:name=\"android.permission.READ_USER_DICTIONARY\"/>",
                    "<uses-permission android:name=\"android.permission.READ_VOICEMAIL\"/>",
                    "<uses-permission android:name=\"android.permission.REBOOT\"/>",
                    "<uses-permission android:name=\"android.permission.RECEIVE_BOOT_COMPLETED\"/>",
                    "<uses-permission android:name=\"android.permission.RECEIVE_MMS\"/>",
                    "<uses-permission android:name=\"android.permission.RECEIVE_SMS\"/>",
                    "<uses-permission android:name=\"android.permission.RECEIVE_WAP_PUSH\"/>",
                    "<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
                    "<uses-permission android:name=\"android.permission.REORDER_TASKS\"/>",
                    "<uses-permission android:name=\"android.permission.REQUEST_INSTALL_PACKAGES\"/>",
                    "<uses-permission android:name=\"android.permission.RESTART_PACKAGES\"/>",
                    "<uses-permission android:name=\"android.permission.SEND_RESPOND_VIA_MESSAGE\"/>",
                    "<uses-permission android:name=\"android.permission.SEND_SMS\"/>",
                    "<uses-permission android:name=\"android.permission.SET_ACTIVITY_WATCHER\"/>",
                    "<uses-permission android:name=\"android.permission.SET_ALARM\"/>",
                    "<uses-permission android:name=\"android.permission.SET_ALWAYS_FINISH\"/>",
                    "<uses-permission android:name=\"android.permission.SET_ANIMATION_SCALE\"/>",
                    "<uses-permission android:name=\"android.permission.SET_DEBUG_APP\"/>",
                    "<uses-permission android:name=\"android.permission.SET_ORIENTATION\"/>",
                    "<uses-permission android:name=\"android.permission.SET_POINTER_SPEED\"/>",
                    "<uses-permission android:name=\"android.permission.SET_PREFERRED_APPLICATIONS\"/>",
                    "<uses-permission android:name=\"android.permission.SET_PROCESS_LIMIT\"/>",
                    "<uses-permission android:name=\"android.permission.SET_TIME\"/>",
                    "<uses-permission android:name=\"android.permission.SET_TIME_ZONE\"/>",
                    "<uses-permission android:name=\"android.permission.SET_WALLPAPER\"/>",
                    "<uses-permission android:name=\"android.permission.SET_WALLPAPER_HINTS\"/>",
                    "<uses-permission android:name=\"android.permission.SIGNAL_PERSISTENT_PROCESSES\"/>",
                    "<uses-permission android:name=\"android.permission.STATUS_BAR\"/>",
                    "<uses-permission android:name=\"android.permission.SUBSCRIBED_FEEDS_READ\"/>",
                    "<uses-permission android:name=\"android.permission.SUBSCRIBED_FEEDS_WRITE\"/>",
                    "<uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\"/>",
                    "<uses-permission android:name=\"android.permission.TRANSMIT_IR\"/>",
                    "<uses-permission android:name=\"android.permission.UNINSTALL_SHORTCUT\"/>",
                    "<uses-permission android:name=\"android.permission.UPDATE_DEVICE_STATS\"/>",
                    "<uses-permission android:name=\"android.permission.USE_CREDENTIALS\"/>",
                    "<uses-permission android:name=\"android.permission.USE_FINGERPRINT\"/>",
                    "<uses-permission android:name=\"android.permission.USE_SIP\"/>",
                    "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
                    "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
                    "<uses-permission android:name=\"android.permission.WRITE_APN_SETTINGS\"/>",
                    "<uses-permission android:name=\"android.permission.WRITE_CALENDAR\"/>",
                    "<uses-permission android:name=\"android.permission.WRITE_CALL_LOG\"/>",
                    "<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>",
                    "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
                    "<uses-permission android:name=\"android.permission.WRITE_GSERVICES\"/>",
                    "<uses-permission android:name=\"android.permission.WRITE_HISTORY_BOOKMARKS\"/>",
                    "<uses-permission android:name=\"android.permission.WRITE_PROFILE\"/>",
                    "<uses-permission android:name=\"android.permission.WRITE_SECURE_SETTINGS\"/>",
                    "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>",
                    "<uses-permission android:name=\"android.permission.WRITE_SMS\"/>",
                    "<uses-permission android:name=\"android.permission.WRITE_SOCIAL_STREAM\"/>",
                    "<uses-permission android:name=\"android.permission.WRITE_SYNC_SETTINGS\"/>",
                    "<uses-permission android:name=\"android.permission.WRITE_USER_DICTIONARY\"/>",
                    "<uses-permission android:name=\"android.permission.WRITE_VOICEMAIL\"/>",
                    "<uses-permission android:name=\"android.permission.RECEIVE_USER_PRESENT\"/>"
                ],
                "abiFilters" : [ "armeabi-v7a", "arm64-v8a", "x86" ]
            },
            /* ios打包配置 */
            "ios" : {
Monitor-APP/pages/home/home.vue
@@ -328,6 +328,7 @@
<script>
    import demodata from '@/mockdata/demodata.json';
    import ycqdata from '@/pages/index/data.json';
    import {WebSocketClient} from "@/static/js/WebSocketClient"
    export default {
        data() {
            return {
@@ -416,42 +417,148 @@
            // this.getUrl()
        },
        onLoad() {
            // this.ws()
            setInterval(()=>{
                this.getServerData()
                this.initlineChart()
                this.initPieChart()
                this.getOther()
                this.getDate()
                this.getDate2()
                this.getInfo()
                this.getError()
                // this.getInfo2()
                // this.getError2()
                this.getUrl()
                // this.initlineChart()
                // this.initPieChart()
                // this.getOther()
                // // this.getDate()
                // this.getDate2()
                // this.getInfo()
                // this.getError()
                // // this.getInfo2()
                // // this.getError2()
                // this.getUrl()
                this.controller()
                // this.statisticalModel()
                // 测试用
                
            },1000)
            
            setInterval(()=> {
                setTimeout(()=>{
                    plus.runtime.restart();
                },100)
            },1000*60*60*4)
            setInterval(()=> {
                setTimeout(()=>{
                    var time = new Date();
                    var hh = time.getHours();
                    var mm = time.getMinutes();
                    if(hh > this.oldHours && mm >this.oldMin && this.oldMin - mm < 55){
                        plus.runtime.restart();
                    }
                    if(mm >this.oldMin && mm - this.oldMin >2){
                        plus.runtime.restart();
                    }
                },100)
            },1000*30)
        },
        created() {
            let that = this
            const BaseIP = uni.getStorageSync('BaseIp');
            const BaseLedId = uni.getStorageSync('BaseLedId');
            const BasePort = uni.getStorageSync('BasePort');
            const BaseCrnId = uni.getStorageSync('BaseCrnId');
            const PROJ = uni.getStorageSync('UPROJ');
            that.baseUrl = "pswcs"
            that.baseIP = "10.10.10.230"
            that.baseLedId = BaseLedId
            that.basePort = "9090"
            that.baseCrnId = BaseCrnId
            that.webSockerInit();
        },
        methods: {
            ws() {
                let _this = this
                _this.connectWS()
                uni.onSocketOpen(function (res) {
                    console.log("Open");
                })
                uni.onSocketClose(function (res) {
                    console.log("Close");
                    setInterval(()=>{
                        _this.connectWS()
                    },1000)
                })
            },
            connectWS() {
                uni.connectSocket({ url: `http://127.0.0.1:9090/pswcs/console/websocket`, })
            webSockerInit(){
                let that = this;
                that.commonUrl = that.baseIP + ':' +that.basePort + "/" +that.baseUrl
                let socketUrl = "ws://"+that.commonUrl+"/led/"+that.baseLedId
                        // socketUrl = "ws://10.0.100.150:8080/gtctu/led/113"
                const ws = new WebSocketClient(socketUrl);
                ws.connect()
                ws.onmessage((msg)=>{
                 let data = JSON.parse(msg.data)
                 if(data.type === "default"){
                     that.chartsData.Pie.series[0].data = data.pie
                     that.baseInfo.stockCount = data.stockCunt
                     that.baseInfo.emptyCount = data.emptyCount
                     that.baseInfo.noneCount =data.noneCount
                     that.baseInfo.used = data.used
                     that.baseInfo.usedPr = data.usedPr
                     that.chartsData.Line.categories = [
                         that.getDateFormat(-11),that.getDateFormat(-10),that.getDateFormat(-9),that.getDateFormat(-8),
                         that.getDateFormat(-7),that.getDateFormat(-6),that.getDateFormat(-5),that.getDateFormat(-4),
                         that.getDateFormat(-3),that.getDateFormat(-2),that.getDateFormat(-1),that.getDateFormat(0),]
                     that.chartsData.Line.series = data.rows
                     that.calendar = data.year + "年" + data.month + "月" + data.day + "日 " + data.hour + ":" + data.minute + ":" + data.second + " " + data.week
                     that.currDate = data.year + "/" + data.month + "/" + data.day
                     that.locList = data.inventoryData
                    that.oldHours = data.hour
                    that.oldMin = data.minute
                 }else if(data.type === "error"){
                     if (data.errMsg && data.errMsg !== "") {
                         var errorInfo = data.errMsg
                         if (that.infoType == 1) {
                             that.infoType = 3
                             that.infoText.title = "其他信息"
                             // that.infoText.title = "异常"
                             that.infoText.error = errorInfo
                             return
                         }
                         that.infoType = 2
                         that.infoText.title = "其他信息"
                         // that.infoText.title = "异常"
                         that.infoText.error = errorInfo
                     } else {
                         if (that.infoType == 1) {
                             return
                         }
                         that.infoType = 0
                     }
                 }else if(data.type === "task"){
                     if (data.taskList && data.taskList !== "" && data.taskList.length !=0) {
                         if (that.infoType == 2 || that.infoType == 3) {
                             return;
                         }
                         // infoType1:只有拣料等信息
                         that.infoType = 1
                         if (data.taskList[0].ioType === 101) {
                             that.infoText.title = '全板出库'
                         } else if(data.taskList[0].ioType === 103) {
                             that.infoText.title = '拣料出库'
                         } else if(data.taskList[0].ioType === 107) {
                             that.infoText.title = '盘点出库'
                         } else if(data.taskList[0].ioType === 1) {
                             that.infoText.title = '入库'
                         } else if(data.taskList[0].ioType === 10) {
                             that.infoText.title = '空托入库'
                         } else if(data.taskList[0].ioType === 110) {
                             that.infoText.title = '空托出库'
                         }else if(data.taskList[0].ioType === 104) {
                             that.infoText.title = '并板出库'
                         }
                         that.infoText.barcode = data.taskList[0].barcode
                         that.infoText.workNo = data.taskList[0].workNo
                         that.infoText.sourceLocNo = data.taskList[0].sourceLocNo
                         that.infoText.staNo = data.taskList[0].staNo
                         that.swiperList = data.taskList[0].matDtos
                         // that.infoText.matnr = res.data[0].matDtos[0].matnr
                         // that.infoText.specs = res.data[0].matDtos[0].specs
                         // that.infoText.maknx = res.data[0].matDtos[0].maknx
                         // that.infoText.count = res.data[0].matDtos[0].count
                     } else {
                         if (that.infoType == 2 || that.infoType == 3) {
                             return;
                         }
                         that.infoType = 0
                     }
                 }
                })
            },
            timeOut1() {
                console.log(this.times);
Monitor-APP/static/js/WebSocketClient.js
New file
@@ -0,0 +1,191 @@
import { EventDispatcher } from './dispatcher';
export class WebSocketClient extends EventDispatcher {
    // #socket链接
    url = '';
    // #socket实例
    socket = null;
    // #重连次数
    reconnectAttempts = 0;
    // #最大重连数
    maxReconnectAttempts = 20;
    // #重连间隔
    reconnectInterval = 60000; // 10 seconds
    // #发送心跳数据间隔
    heartbeatInterval = 1000 * 30;
    // #计时器id
    heartbeatTimer = undefined;
    // #彻底终止ws
    stopWs = false;
    // *构造函数
    constructor(url) {
        super();
        this.url = url;
    }
    // >生命周期钩子
    onopen(callBack) {
        this.addEventListener('open', callBack);
    }
    onmessage(callBack) {
        this.addEventListener('message', callBack);
    }
    onclose(callBack) {
        this.addEventListener('close', callBack);
    }
    onerror(callBack) {
        this.addEventListener('error', callBack);
    }
    // >消息发送
    send(message) {
        if (this.socket && this.socket.readyState === WebSocket.OPEN) {
            this.socket.send({
                data:message,
            });
        } else {
            console.error('[WebSocket] 未连接');
        }
    }
    // !初始化连接
    connect() {
        if (this.reconnectAttempts === 0) {
            this.log('WebSocket', `初始化连接中...          ${this.url}`);
        }
        if (this.socket && this.socket.readyState === WebSocket.OPEN) {
            return;
        }
        this.socket = uni.connectSocket({
            url: this.url,
            complete: ()=> {}
        });
        this.socket.onOpen((event)=>{
            this.stopWs = false;
            // 重置重连尝试成功连接
            this.reconnectAttempts = 0;
            // 在连接成功时停止当前的心跳检测并重新启动
            this.startHeartbeat();
            this.log('WebSocket', `连接成功,等待服务端数据推送[onopen]...     ${this.url}`);
            this.dispatchEvent('open', event);
        })
        // !websocket连接成功
        // this.socket.onOpen = event => {
        //     this.stopWs = false;
        //     // 重置重连尝试成功连接
        //     this.reconnectAttempts = 0;
        //     // 在连接成功时停止当前的心跳检测并重新启动
        //     this.startHeartbeat();
        //     this.log('WebSocket', `连接成功,等待服务端数据推送[onopen]...     ${this.url}`);
        //     this.dispatchEvent('open', event);
        // };
        this.socket.onMessage((event)=>{
            this.dispatchEvent('message', event);
            this.startHeartbeat();
        })
   //      this.socket.onMessage = event => {
            // console.log(event)
           // this.dispatchEvent('message', event);
           // this.startHeartbeat();
   //      };
        this.socket.onClose((event)=>{
            if (this.reconnectAttempts === 0) {
                this.log('WebSocket', `连接断开[onclose]...    ${this.url}`);
            }
            if (!this.stopWs) {
                this.handleReconnect();
            }
            this.dispatchEvent('close', event);
        })
        // this.socket.onClose = event => {
        //     if (this.reconnectAttempts === 0) {
        //         this.log('WebSocket', `连接断开[onclose]...    ${this.url}`);
        //     }
        //     if (!this.stopWs) {
        //         this.handleReconnect();
        //     }
        //     this.dispatchEvent('close', event);
        // };
        this.socket.onError((event)=>{
            if (this.reconnectAttempts === 0) {
                this.log('WebSocket', `连接异常[onerror]...    ${this.url}`);
            }
            if (!this.stopWs) {
                this.handleReconnect();
            }
            this.closeHeartbeat();
            this.dispatchEvent('error', event);
        })
        // uni.onSocketError((event)=>{
        //     console.log("333")
        //     if (this.reconnectAttempts === 0) {
        //         this.log('WebSocket', `连接异常[onerror]...    ${this.url}`);
        //     }
        //     if (!this.stopWs) {
        //         this.handleReconnect();
        //     }
        //     this.closeHeartbeat();
        //     this.dispatchEvent('error', event);
        // })
        // this.socket.onError = event => {
        //     if (this.reconnectAttempts === 0) {
        //         this.log('WebSocket', `连接异常[onerror]...    ${this.url}`);
        //     }
        //     this.closeHeartbeat();
        //     this.dispatchEvent('error', event);
        // };
    }
    // > 断网重连逻辑
    handleReconnect() {
        if (this.reconnectAttempts < this.maxReconnectAttempts) {
            this.reconnectAttempts++;
            this.log('WebSocket', `尝试重连... (${this.reconnectAttempts}/${this.maxReconnectAttempts})       ${this.url}`);
            setTimeout(() => {
                this.connect();
            }, this.reconnectInterval);
        } else {
            plus.runtime.restart();
            // this.closeHeartbeat();
            // this.log('WebSocket', `最大重连失败,终止重连: ${this.url}`);
        }
    }
    // >关闭连接
    close() {
        if (this.socket) {
            this.stopWs = true;
            this.socket.close();
            this.socket = null;
            this.removeEventListener('open');
            this.removeEventListener('message');
            this.removeEventListener('close');
            this.removeEventListener('error');
        }
        this.closeHeartbeat();
    }
    // >开始心跳检测 -> 定时发送心跳消息
    startHeartbeat() {
        if (this.stopWs) return;
        if (this.heartbeatTimer) {
            this.closeHeartbeat();
        }
        this.heartbeatTimer = setInterval(() => {
            if (this.socket) {
                this.socket.send({
                    data: JSON.stringify({ type: 'heartBeat', data: {} }),
                });
                this.log('WebSocket', '送心跳数据...');
            } else {
                console.error('[WebSocket] 未连接');
            }
        }, this.heartbeatInterval);
    }
    // >关闭心跳
    closeHeartbeat() {
        clearInterval(this.heartbeatTimer);
        this.heartbeatTimer = undefined;
    }
}
Monitor-APP/static/js/WebSocketClient02.js
New file
@@ -0,0 +1,141 @@
// import { EventDispatcher } from './dispatcher';
export class WebSocketClient extends EventDispatcher {
    // #socket链接
    url = '';
    // #socket实例
    socket = null;
    // #重连次数
    reconnectAttempts = 0;
    // #最大重连数
    maxReconnectAttempts = 5;
    // #重连间隔
    reconnectInterval = 10000; // 10 seconds
    // #发送心跳数据间隔
    heartbeatInterval = 1000 * 30;
    // #计时器id
    heartbeatTimer = undefined;
    // #彻底终止ws
    stopWs = false;
    // *构造函数
    constructor(url) {
        super();
        this.url = url;
    }
    // >生命周期钩子
    onopen(callBack) {
        this.addEventListener('open', callBack);
    }
    onmessage(callBack) {
        this.addEventListener('message', callBack);
    }
    onclose(callBack) {
        this.addEventListener('close', callBack);
    }
    onerror(callBack) {
        this.addEventListener('error', callBack);
    }
    // >消息发送
    send(message) {
        if (this.socket && this.socket.readyState === WebSocket.OPEN) {
            this.socket.send(message);
        } else {
            console.error('[WebSocket] 未连接');
        }
    }
    // !初始化连接
    connect() {
        if (this.reconnectAttempts === 0) {
            this.log('WebSocket', `初始化连接中...          ${this.url}`);
        }
        if (this.socket && this.socket.readyState === WebSocket.OPEN) {
            return;
        }
        this.socket = new WebSocket(this.url);
        // !websocket连接成功
        this.socket.onopen = event => {
            this.stopWs = false;
            // 重置重连尝试成功连接
            this.reconnectAttempts = 0;
            // 在连接成功时停止当前的心跳检测并重新启动
            this.startHeartbeat();
            this.log('WebSocket', `连接成功,等待服务端数据推送[onopen]...     ${this.url}`);
            this.dispatchEvent('open', event);
        };
        this.socket.onmessage = event => {
            this.dispatchEvent('message', event);
            this.startHeartbeat();
        };
        this.socket.onclose = event => {
            if (this.reconnectAttempts === 0) {
                this.log('WebSocket', `连接断开[onclose]...    ${this.url}`);
            }
            if (!this.stopWs) {
                this.handleReconnect();
            }
            this.dispatchEvent('close', event);
        };
        this.socket.onerror = event => {
            if (this.reconnectAttempts === 0) {
                this.log('WebSocket', `连接异常[onerror]...    ${this.url}`);
            }
            this.closeHeartbeat();
            this.dispatchEvent('error', event);
        };
    }
    // > 断网重连逻辑
    handleReconnect() {
        if (this.reconnectAttempts < this.maxReconnectAttempts) {
            this.reconnectAttempts++;
            this.log('WebSocket', `尝试重连... (${this.reconnectAttempts}/${this.maxReconnectAttempts})       ${this.url}`);
            setTimeout(() => {
                this.connect();
            }, this.reconnectInterval);
        } else {
            this.closeHeartbeat();
            this.log('WebSocket', `最大重连失败,终止重连: ${this.url}`);
        }
    }
    // >关闭连接
    close() {
        if (this.socket) {
            this.stopWs = true;
            this.socket.close();
            this.socket = null;
            this.removeEventListener('open');
            this.removeEventListener('message');
            this.removeEventListener('close');
            this.removeEventListener('error');
        }
        this.closeHeartbeat();
    }
    // >开始心跳检测 -> 定时发送心跳消息
    startHeartbeat() {
        if (this.stopWs) return;
        if (this.heartbeatTimer) {
            this.closeHeartbeat();
        }
        this.heartbeatTimer = setInterval(() => {
            if (this.socket) {
                this.socket.send(JSON.stringify({ type: 'heartBeat', data: {} }));
                this.log('WebSocket', '送心跳数据...');
            } else {
                console.error('[WebSocket] 未连接');
            }
        }, this.heartbeatInterval);
    }
    // >关闭心跳
    closeHeartbeat() {
        clearInterval(this.heartbeatTimer);
        this.heartbeatTimer = undefined;
    }
}
Monitor-APP/static/js/dispatcher.js
New file
@@ -0,0 +1,41 @@
class Log {
    static console = true;
    log(title, text) {
        // if (!Log.console) return;
        // if (import.meta.env.MODE === 'production') return;
        const color = '#ff4d4f';
        console.log(
            `%c ${title} %c ${text} %c`,
            `background:${color};border:1px solid ${color}; padding: 1px; border-radius: 2px 0 0 2px; color: #fff;`,
            `border:1px solid ${color}; padding: 1px; border-radius: 0 2px 2px 0; color: ${color};`,
            'background:transparent'
        );
    }
    closeConsole() {
        Log.console = false;
    }
}
export class EventDispatcher extends Log {
    listeners = {};
    addEventListener(type, listener) {
        if (!this.listeners[type]) {
            this.listeners[type] = [];
        }
        if (this.listeners[type].indexOf(listener) === -1) {
            this.listeners[type].push(listener);
        }
    }
    removeEventListener(type) {
        this.listeners[type] = [];
    }
    dispatchEvent(type, data) {
        const listenerArray = this.listeners[type] || [];
        if (listenerArray.length === 0) return;
        listenerArray.forEach(listener => {
            listener.call(this, data);
        });
    }
}