qingyiay
2023-07-10 8a1a8689a2d7e236a733ffb822da503d16fcb88e
websocket增加重连
5个文件已修改
604 ■■■■■ 已修改文件
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 503 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/tabbar-page/index-tabbar/index-tabbar.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
store/index.js 93 ●●●●● 补丁 | 查看 | 原始文档 | 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,271 +41,307 @@
        <!-- 新建车队弹出框 -->
        <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>
<script>
import { redirectLogin } from '@/utils/status';
export default {
    data() {
        return {
            fleetData: [],
            // 新建车队
            addGroupForm: {
                name: ''
                // wxUserId: uni.getStorageSync('userInfo').id
            },
            updateGroupShow: false,
            options1: [
                {
    import { redirectLogin } from '@/utils/status';
    export default {
        data() {
            return {
                fleetData: [],
                // 新建车队
                addGroupForm: {
                    name: ''
                    // wxUserId: uni.getStorageSync('userInfo').id
                },
                updateGroupShow: false,
                options1: [{
                    text: '删除'
                }
            ],
            // 删除车队模态框
            deleteFleetId: null, // 删除车队id
            deleteFleetShow: false,
            deleteFleetTitle: '',
            deleteFleetContent: '',
            // 退出模态框
            logoutShow: false,
            logoutTitle: '提示',
            logoutContent: '是否确认退出'
        };
    },
    onShow() {
        this.init();
    },
    methods: {
        init() {
            this.getFleet();
                }],
                // 删除车队模态框
                deleteFleetId: null, // 删除车队id
                deleteFleetShow: false,
                deleteFleetTitle: '',
                deleteFleetContent: '',
                // 退出模态框
                logoutShow: false,
                logoutTitle: '提示',
                logoutContent: '是否确认退出'
            };
        },
        // 获取车队
        getFleet() {
            // this.$reqGet('getFleet', { wxUserId: this.addGroupForm.wxUserId }).then(res => {
            this.$reqGet('getFleet').then(res => {
                console.log('货代1车队', res);
                this.fleetData = res.data;
            });
        onShow() {
            this.init();
        },
        // 添加车队
        addFleet() {
            console.log('添加车队');
            this.updateGroupShow = true;
        },
        addNewFleetPopupClose() {
            this.updateGroupShow = false;
            this.addGroupForm.name = '';
        },
        addNewFleetPopupOpen() {
            console.log('添加车队打开');
        },
        // 确认新建车队按钮
        addNewGroupClick() {
            this.updateGroupShow = false;
            this.$reqPost('saveFleet', this.addGroupForm, 'params').then(res => {
                if (res.code == 0) {
                    this.$u.toast('添加成功');
                    this.getFleet();
                }
            });
        },
        // 删除车队
        deleteFleetClick(args) {
            console.log(args.name, '车队id');
            this.deleteFleetId = args.name;
            this.deleteFleetShow = true;
            this.fleetData.forEach(item => {
                if (item.id == this.deleteFleetId) {
                    this.deleteFleetContent = '确认删除车队' + item.name;
                }
            });
        },
        deleteFleetClose() {
            this.deleteFleetShow = false;
        },
        deleteFleetCancel() {
            this.deleteFleetShow = false;
        },
        deleteFleetConfirm() {
            this.deleteFleetShow = false;
            uni.showLoading({
                title: '加载中...'
            });
            this.$reqPost('deleteFleet', { id: this.deleteFleetId }, 'params').then(res => {
                console.log('删除车队', res);
                if (res.code == 0) {
                    this.$u.toast('删除成功');
                } else {
                    this.$u.toast(res.msg ? res.msg : '删除失败');
                }
                uni.hideLoading();
        methods: {
            init() {
                this.getFleet();
            });
        },
        // 车队详情
        tofleetDetails(id) {
            uni.navigateTo({
                url: `/pages/customer-page/fleet-management/fleet-management?id=${id}`
            });
        },
        logout() {
            this.logoutShow = true;
        },
        logoutConfirm() {
            redirectLogin();
        },
        logoutCancel() {
            this.logoutShow = false;
        },
        // 跳转发运统计页面
        statistics() {
            uni.navigateTo({
                url: '/pages/customer-page/customer-my/faYunstatistics/faYunstatistics'
            });
            },
            // 获取车队
            getFleet() {
                // this.$reqGet('getFleet', { wxUserId: this.addGroupForm.wxUserId }).then(res => {
                this.$reqGet('getFleet').then(res => {
                    console.log('货代1车队', res);
                    this.fleetData = res.data;
                });
            },
            // 添加车队
            addFleet() {
                console.log('添加车队');
                this.updateGroupShow = true;
            },
            addNewFleetPopupClose() {
                this.updateGroupShow = false;
                this.addGroupForm.name = '';
            },
            addNewFleetPopupOpen() {
                console.log('添加车队打开');
            },
            // 确认新建车队按钮
            addNewGroupClick() {
                this.updateGroupShow = false;
                this.$reqPost('saveFleet', this.addGroupForm, 'params').then(res => {
                    if (res.code == 0) {
                        this.$u.toast('添加成功');
                        this.getFleet();
                    }
                });
            },
            // 删除车队
            deleteFleetClick(args) {
                console.log(args.name, '车队id');
                this.deleteFleetId = args.name;
                this.deleteFleetShow = true;
                this.fleetData.forEach(item => {
                    if (item.id == this.deleteFleetId) {
                        this.deleteFleetContent = '确认删除车队' + item.name;
                    }
                });
            },
            deleteFleetClose() {
                this.deleteFleetShow = false;
            },
            deleteFleetCancel() {
                this.deleteFleetShow = false;
            },
            deleteFleetConfirm() {
                this.deleteFleetShow = false;
                uni.showLoading({
                    title: '加载中...'
                });
                this.$reqPost('deleteFleet', { id: this.deleteFleetId }, 'params').then(res => {
                    console.log('删除车队', res);
                    if (res.code == 0) {
                        this.$u.toast('删除成功');
                    } else {
                        this.$u.toast(res.msg ? res.msg : '删除失败');
                    }
                    uni.hideLoading();
                    this.getFleet();
                });
            },
            // 车队详情
            tofleetDetails(id) {
                uni.navigateTo({
                    url: `/pages/customer-page/fleet-management/fleet-management?id=${id}`
                });
            },
            logout() {
                this.logoutShow = true;
            },
            logoutConfirm() {
                redirectLogin();
                this.$store.commit('changeisLogin', false)
                this.$store.dispatch('websocketOnClose')
            },
            logoutCancel() {
                this.logoutShow = false;
            },
            // 跳转发运统计页面
            statistics() {
                uni.navigateTo({
                    url: '/pages/customer-page/customer-my/faYunstatistics/faYunstatistics'
                });
            }
        }
    }
};
    };
</script>
<style lang="scss" scoped>
.statistics {
    margin-top: vww(10);
    margin-bottom: vww(10);
}
.utils-button {
    margin-top: vww(35);
    .utils {
<style lang="scss"
    scoped>
    .statistics {
        margin-top: vww(10);
        margin-bottom: vww(10);
        /deep/ .u-button {
            width: 631rpx;
            height: 74rpx;
            border: 2px solid #3b56eb;
            background-color: #fff;
            color: #3b56eb;
            border-radius: 37rpx 37rpx 37rpx 37rpx;
        }
    }
}
::v-deep.freightForwarder-my {
    width: 100%;
    margin: vww(90) auto;
    .driver-banner {
        width: 100%;
        height: 430rpx;
        background: linear-gradient(0deg, #ffffff 0%, #0055fe 100%);
        background-size: contain;
        position: fixed;
        top: 0;
        .navgation {
            width: 80rpx;
            height: 37rpx;
            font-size: 40rpx;
            font-weight: normal;
            color: #ffffff;
            line-height: 69rpx;
            margin: vww(60) auto;
        }
    }
    .personal-information {
        width: 100%;
        display: flex;
        align-items: center;
        justify-content: space-around;
        flex-direction: column;
        position: relative;
        top: vww(20);
        &-block {
            width: 690rpx;
            min-height: 478rpx;
            background: #ffffff;
            box-shadow: 0rpx 0rpx 14rpx 0rpx rgba(73, 120, 240, 0.14), 0rpx 7rpx 45rpx 0rpx rgba(73, 120, 240, 0.12);
            border-radius: 20rpx;
            display: flex;
            flex-direction: column;
            justify-content: space-between;
            margin-top: vww(8);
            .block-main {
                width: 636rpx;
                margin: vww(10) vww(14);
            }
        }
    }
    // 新建车队
    .addNewGroup {
        .u-popup {
            .u-popup__content {
                width: 94%;
                height: vww(160);
                border-radius: 1%;
                .title {
                    width: 100%;
                    text-align: center;
                    font-size: 20;
                    .u-text {
                        .u-text__value {
                        }
                    }
                }
                .addCarForm {
                    width: 80%;
                    margin: 0 auto vww(30);
                }
                .addCarButton {
                    width: 40%;
                    margin: 0 auto;
                    color: rgb(10, 108, 255);
                }
    .utils-button {
        margin-top: vww(35);
        .utils {
            margin-top: vww(10);
            margin-bottom: vww(10);
            /deep/ .u-button {
                width: 631rpx;
                height: 74rpx;
                border: 2px solid #3b56eb;
                background-color: #fff;
                color: #3b56eb;
                border-radius: 37rpx 37rpx 37rpx 37rpx;
            }
        }
    }
    .fleet-container {
        .fleet-list {
            .u-swipe-action {
                .u-swipe-action-item {
                    .u-swipe-action-item__right {
                        .u-swipe-action-item__right__button {
                            .u-swipe-action-item__right__button__wrapper {
                                background-color: #f56c6c !important;
    ::v-deep.freightForwarder-my {
        width: 100%;
        margin: vww(90) auto;
        .driver-banner {
            width: 100%;
            height: 430rpx;
            background: linear-gradient(0deg, #ffffff 0%, #0055fe 100%);
            background-size: contain;
            position: fixed;
            top: 0;
            .navgation {
                width: 80rpx;
                height: 37rpx;
                font-size: 40rpx;
                font-weight: normal;
                color: #ffffff;
                line-height: 69rpx;
                margin: vww(60) auto;
            }
        }
        .personal-information {
            width: 100%;
            display: flex;
            align-items: center;
            justify-content: space-around;
            flex-direction: column;
            position: relative;
            top: vww(20);
            &-block {
                width: 690rpx;
                min-height: 478rpx;
                background: #ffffff;
                box-shadow: 0rpx 0rpx 14rpx 0rpx rgba(73, 120, 240, 0.14), 0rpx 7rpx 45rpx 0rpx rgba(73, 120, 240, 0.12);
                border-radius: 20rpx;
                display: flex;
                flex-direction: column;
                justify-content: space-between;
                margin-top: vww(8);
                .block-main {
                    width: 636rpx;
                    margin: vww(10) vww(14);
                }
            }
        }
        // 新建车队
        .addNewGroup {
            .u-popup {
                .u-popup__content {
                    width: 94%;
                    height: vww(160);
                    border-radius: 1%;
                    .title {
                        width: 100%;
                        text-align: center;
                        font-size: 20;
                        .u-text {
                            .u-text__value {}
                        }
                    }
                    .addCarForm {
                        width: 80%;
                        margin: 0 auto vww(30);
                    }
                    .addCarButton {
                        width: 40%;
                        margin: 0 auto;
                        color: rgb(10, 108, 255);
                    }
                }
            }
        }
        .fleet-container {
            .fleet-list {
                .u-swipe-action {
                    .u-swipe-action-item {
                        .u-swipe-action-item__right {
                            .u-swipe-action-item__right__button {
                                .u-swipe-action-item__right__button__wrapper {
                                    background-color: #f56c6c !important;
                                }
                            }
                        }
                    }
@@ -307,5 +349,4 @@
            }
        }
    }
}
</style>
</style>
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)
            }
        }
    }
})