qingyiay
2023-07-10 8a1a8689a2d7e236a733ffb822da503d16fcb88e
websocket增加重连
5个文件已修改
194 ■■■■ 已修改文件
pages/customer-page/customer-my/customer-my.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/driver-page/drvier-my/drvier-my.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/freight-forwarder-page/freightForwarder-my/freightForwarder-my.vue 95 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/tabbar-page/index-tabbar/index-tabbar.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
store/index.js 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/customer-page/customer-my/customer-my.vue
@@ -360,6 +360,8 @@
            },
            logoutConfirm() {
                redirectLogin();
                this.$store.commit('changeisLogin', false)
                this.$store.dispatch('websocketOnClose')
            },
            logoutCancel() {
                this.logoutShow = false;
pages/driver-page/drvier-my/drvier-my.vue
@@ -567,6 +567,8 @@
            },
            logoutConfirm() {
                redirectLogin();
                this.$store.commit('changeisLogin', false)
                this.$store.dispatch('websocketOnClose')
            },
            logoutCancel() {
                this.logoutShow = false;
pages/freight-forwarder-page/freightForwarder-my/freightForwarder-my.vue
@@ -1,11 +1,14 @@
<template>
    <view class="freightForwarder-my">
        <view class="driver-banner"><view class="navgation">我的</view></view>
        <view class="driver-banner">
            <view class="navgation">我的</view>
        </view>
        <view class="personal-information">
            <view class="personal-information-block">
                <view class="block-main">
                    <view class="fleet-container">
                        <combined-title title="我的车队" @rightText="addFleet">
                        <combined-title title="我的车队"
                            @rightText="addFleet">
                            <template v-slot:rightText>
                                <text>添加</text>
                            </template>
@@ -13,16 +16,19 @@
                        <view class="fleet-list">
                            <u-swipe-action>
                                <u-cell-group :border="false">
                                    <u-swipe-action-item
                                        :options="options1"
                                    <u-swipe-action-item :options="options1"
                                        v-for="(item, index) in fleetData"
                                        :index="index"
                                        :name="item.id"
                                        :key="index"
                                        @click="deleteFleetClick"
                                    >
                                        <u-cell :title="item.name" :value="item.userSijisum + '辆'" @click="tofleetDetails(item.id)">
                                            <u-icon name="arrow-right" color="#999999" size="30" slot="right-icon"></u-icon>
                                        @click="deleteFleetClick">
                                        <u-cell :title="item.name"
                                            :value="item.userSijisum + '辆'"
                                            @click="tofleetDetails(item.id)">
                                            <u-icon name="arrow-right"
                                                color="#999999"
                                                size="30"
                                                slot="right-icon"></u-icon>
                                        </u-cell>
                                    </u-swipe-action-item>
                                </u-cell-group>
@@ -35,43 +41,64 @@
        <!-- 新建车队弹出框 -->
        <view class="addNewGroup">
            <u-popup :show="updateGroupShow" @close="addNewFleetPopupClose" @open="addNewFleetPopupOpen" mode="center">
                <view class="title"><u--text text="新建车队" size="30" lineHeight="80" align="center"></u--text></view>
            <u-popup :show="updateGroupShow"
                @close="addNewFleetPopupClose"
                @open="addNewFleetPopupOpen"
                mode="center">
                <view class="title"><u--text text="新建车队"
                        size="30"
                        lineHeight="80"
                        align="center"></u--text></view>
                <view class="addCarForm">
                    <u--form labelPosition="left" :model="addGroupForm" ref="form1" labelAlign="center">
                        <u-form-item label="组名" borderBottom ref="groupName" labelWidth="100">
                            <u--input v-model="addGroupForm.name" border="none" placeholder="请输入车队名称"></u--input>
                    <u--form labelPosition="left"
                        :model="addGroupForm"
                        ref="form1"
                        labelAlign="center">
                        <u-form-item label="组名"
                            borderBottom
                            ref="groupName"
                            labelWidth="100">
                            <u--input v-model="addGroupForm.name"
                                border="none"
                                placeholder="请输入车队名称"></u--input>
                        </u-form-item>
                        <!-- <u-form-item label="车牌" borderBottom ref="cars" labelWidth="80">
                            <u--textarea maxlength="2000" v-model="addGroupForm.carNums" placeholder="请输入车牌" height="150"></u--textarea>
                        </u-form-item> -->
                    </u--form>
                </view>
                <view class="addCarButton"><u-button text="添加" type="primary" @click="addNewGroupClick"></u-button></view>
                <view class="addCarButton"><u-button text="添加"
                        type="primary"
                        @click="addNewGroupClick"></u-button></view>
            </u-popup>
        </view>
        <!-- <view class="statistics"><u-button text="发运统计" type="primary" @click="statistics"></u-button></view> -->
        <view class="utils-button">
            <view class="utils"><u-button text="退出登录" type="primary" @click="logout"></u-button></view>
            <view class="utils"><u-button text="退出登录"
                    type="primary"
                    @click="logout"></u-button></view>
        </view>
        <!-- 删除车队模态框 -->
        <view class="deleteFleetModal">
            <u-modal
                :show="deleteFleetShow"
            <u-modal :show="deleteFleetShow"
                :title="deleteFleetTitle"
                @close="deleteFleetClose"
                @cancel="deleteFleetCancel"
                @confirm="deleteFleetConfirm"
                :closeOnClickOverlay="true"
                :showCancelButton="true"
            >
                :showCancelButton="true">
                <view class="slot-content"><rich-text :nodes="deleteFleetContent"></rich-text></view>
            </u-modal>
        </view>
        <view class="logoutModel">
            <u-modal :show="logoutShow" :title="logoutTitle" showCancelButton :content="logoutContent" @confirm="logoutConfirm" @cancel="logoutCancel"></u-modal>
            <u-modal :show="logoutShow"
                :title="logoutTitle"
                showCancelButton
                :content="logoutContent"
                @confirm="logoutConfirm"
                @cancel="logoutCancel"></u-modal>
        </view>
    </view>
</template>
@@ -88,11 +115,9 @@
                // wxUserId: uni.getStorageSync('userInfo').id
            },
            updateGroupShow: false,
            options1: [
                {
                options1: [{
                    text: '删除'
                }
            ],
                }],
            // 删除车队模态框
            deleteFleetId: null, // 删除车队id
            deleteFleetShow: false,
@@ -185,6 +210,8 @@
        },
        logoutConfirm() {
            redirectLogin();
                this.$store.commit('changeisLogin', false)
                this.$store.dispatch('websocketOnClose')
        },
        logoutCancel() {
            this.logoutShow = false;
@@ -199,16 +226,20 @@
};
</script>
<style lang="scss" scoped>
<style lang="scss"
    scoped>
.statistics {
    margin-top: vww(10);
    margin-bottom: vww(10);
}
.utils-button {
    margin-top: vww(35);
    .utils {
        margin-top: vww(10);
        margin-bottom: vww(10);
        /deep/ .u-button {
            width: 631rpx;
            height: 74rpx;
@@ -219,9 +250,11 @@
        }
    }
}
::v-deep.freightForwarder-my {
    width: 100%;
    margin: vww(90) auto;
    .driver-banner {
        width: 100%;
        height: 430rpx;
@@ -229,6 +262,7 @@
        background-size: contain;
        position: fixed;
        top: 0;
        .navgation {
            width: 80rpx;
            height: 37rpx;
@@ -239,6 +273,7 @@
            margin: vww(60) auto;
        }
    }
    .personal-information {
        width: 100%;
        display: flex;
@@ -247,6 +282,7 @@
        flex-direction: column;
        position: relative;
        top: vww(20);
        &-block {
            width: 690rpx;
            min-height: 478rpx;
@@ -257,12 +293,14 @@
            flex-direction: column;
            justify-content: space-between;
            margin-top: vww(8);
            .block-main {
                width: 636rpx;
                margin: vww(10) vww(14);
            }
        }
    }
    // 新建车队
    .addNewGroup {
        .u-popup {
@@ -270,19 +308,22 @@
                width: 94%;
                height: vww(160);
                border-radius: 1%;
                .title {
                    width: 100%;
                    text-align: center;
                    font-size: 20;
                    .u-text {
                        .u-text__value {
                            .u-text__value {}
                        }
                    }
                }
                .addCarForm {
                    width: 80%;
                    margin: 0 auto vww(30);
                }
                .addCarButton {
                    width: 40%;
                    margin: 0 auto;
pages/tabbar-page/index-tabbar/index-tabbar.vue
@@ -171,11 +171,11 @@
        },
        onShow() {
            this.init();
            console.log(this.globalisconnect);
            if (this.globalisconnect) {
                this.$store.dispatch('websocketInit')
                this.changeisconnect(false)
                console.log(this.globalisconnect, 'index的ws心事’');
                this.$store.commit('changeisLogin', true)
                console.log(this.globalisconnect, 'index的ws数据');
            }
            this.userAuthorization();
            this.messageReq();
store/index.js
@@ -78,6 +78,9 @@
        socketTask: null,
        websocketData: null, // 存放从后端接收到的websocket数据
        globalIntervalId: null,
        is_open_socket: false, //避免重复连接
        connectNum: 1, //重连次数,
        reconnectTimeOut: null
    },
    mutations: {
        lengthchange(state, payload) {
@@ -131,7 +134,19 @@
        },
        setWebsocketData(state, data) {
            state.websocketData = data
        },
        // 改变重连状态
        changereconnectState(state, payload) {
            state.is_open_socket = payload
        },
        // 改变重连次数
        changereconnectNum(state, payload) {
            if (state.connectNum < 6) {
                state.connectNum += payload
            } else {
                state.connectNum = payload
        }
        },
    },
    actions: {
        websocketInit({ state, dispatch, commit }) {
@@ -139,20 +154,29 @@
            state.socketTast = uni.connectSocket({
                url: wsUrl,
                header: { CLIENT_TOC: 'Y' },
                complete: res => {
                    console.log(res, 'socket结果')
                success: res => {
                    console.log(res, 'socketSuccess')
                    if (res.errMsg === 'connectSocket:ok') {
                        commit('changeisconnect', true)
                        commit('changereconnectState', true)
                    }
                },
                fail: res => {
                    console.log(res, 'socketFail')
                    console.log('ws失败');
                    commit('changereconnectState', false)
                    dispatch('reconnect')
                }
            })
            state.socketTast.onOpen(() => dispatch('websocketOnOpen'))
            state.socketTast.onMessage(result => dispatch('websocketOnMessage', result.data))
            state.socketTast.onClose(e => dispatch('websocketOnClose', e))
            state.socketTast.onError(e => dispatch('websocketOnError'))
            state.socketTast.onError(e => dispatch('websocketOnError', e))
        },
        websocketOnOpen({ state, commit }) {
            console.log('onOpen')
            console.log('ws打开')
            clearInterval(state.reconnectTimeOut)
            clearInterval(state.globalIntervalId)
            state.globalIntervalId = setInterval(() => {
                state.socketTast.send({
                    data: JSON.stringify({ type: 'ping' }),
@@ -162,19 +186,70 @@
                })
            }, 30000)
        },
        websocketOnClose({ state, commit }) {
        websocketOnClose({ state, commit, dispatch }, e) {
            if (!state.socketTast) return
            console.log('ws关闭', e)
            state.socketTast.close(e => {
                commit('changeisconnect', false)
            })
            console.log('ws关闭')
            clearInterval(state.globalIntervalId)
            clearInterval(state.reconnectTimeOut)
            state.socketTast = null
            commit('changereconnectState', false)
            if (state.connectNum < 6 && state.globalisLogin) {
                uni.showToast({
                    title: `连接失败,正在尝试第${state.connectNum}次连接`,
                    icon: 'none'
                })
                commit('changereconnectNum', 1)
                dispatch('reconnect')
            } else if (state.connectNum > 6 && state.globalisLogin) {
                commit('changereconnectNum', 1)
                uni.showToast({
                    title: '网络异常,请稍后重试',
                    icon: 'none'
                })
            } else {
                return
            }
        },
        websocketOnError(e) {
            console.log('socket报错', e)
        websocketOnError({ state, commit, dispatch }, e) {
            // 如果重连状态为false则不进行重连,为true才会
            console.log('ws报错', e)
            clearInterval(state.globalIntervalId)
            clearInterval(state.reconnectTimeOut)
            state.socketTast = null
            commit('changereconnectState', false)
            if (state.connectNum < 6 && state.globalisLogin) {
                uni.showToast({
                    title: `连接失败,正在尝试第${state.connectNum}次连接`,
                    icon: 'none'
                })
                commit('changereconnectNum', 1)
                dispatch('reconnect')
            } else if (state.connectNum > 6 && state.globalisLogin) {
                commit('changereconnectNum', 1)
                uni.showToast({
                    title: '网络异常,请稍后重试',
                    icon: 'none'
                })
            } else {
                return
            }
        },
        // 接收数据
        websocketOnMessage({ state, commit }, result) {
            commit('setWebsocketData', result)
        },
        // 重新连接
        reconnect({ state, commit, dispatch }) {
            console.log(state.is_open_socket, '重新连接socket状态');
            clearInterval(state.globalIntervalId)
            if (!state.is_open_socket && state.globalisLogin) {
                state.reconnectTimeOut = setInterval(() => {
                    dispatch('websocketInit')
                }, 5000)
            }
        }
    }
})