qq_41295110
2026-02-26 e6977c225f3b089a43ce9b8bccc3c07d2ca92358
App.vue
@@ -1,20 +1,104 @@
<script>
    import WebSocketServices from "./utils/WebSocketServices";
    import {
        getOpenId,
        setUserInfo,
        setToken,
        getToken
        getToken,
        getUserInfo
    } from "./utils/auth";
    import getuiUtils from "./utils/getuiUtils";
    export default {
        onLaunch: function() {
            console.log('App Launch')
            // #ifdef H5
            // 测试时,H5页面刷新会丢失WebSocket连接,需触发重连 (需要测试的时候再解除注释,否则会影响热更新)
            // if (uni.getStorageSync("userinfo")) {
            //     if (WebSocketServices.wsInstance) { // 假设你的 WebSocket 实例存在 wsInstance 中
            //         WebSocketServices.closeConnect(); // 调用你封装的“关闭连接”方法
            //     }
            //     setTimeout(() => {
            //         WebSocketServices.createConnect(
            //             getUserInfo()["Czybm"],
            //             getUserInfo()["Czymc"],
            //         )
            //     }, 500)
            // }
            // // 关键:监听热更新模块替换,销毁旧连接
            // if (module.hot) {
            //     module.hot.accept(); // 允许当前模块热更新
            //     module.hot.dispose(() => {
            //         // 热更新替换模块前,销毁 WebSocket 连接
            //         if (WebSocketServices.wsInstance) {
            //             WebSocketServices.closeConnect();
            //             WebSocketServices.wsInstance = null; // 重置实例
            //         }
            //     });
            // }
            // #endif
            // #ifdef APP-PLUS || APP
            // 监听 App 启动时的推送参数(冷启动:App 关闭后点击通知启动)
            const launchOpts = plus.runtime.launchArguments;
            if (launchOpts && launchOpts.payload) {
                this.handlePushJump(launchOpts.payload); // 处理跳转
            }
            // 监听通知点击事件(热启动:App 后台运行时点击通知)
            plus.push.addEventListener("click", (msg) => {
                let payload = {};
                console.log('msg: ', msg);
                // 兼容不同格式的 payload(本地推送 vs 远程推送)
                if (typeof msg.payload === "string") {
                    payload = JSON.parse(msg.payload); // 远程推送可能是字符串,需解析
                } else {
                    payload = msg.payload; // 本地推送是对象
                }
                this.handlePushJump(payload); // 处理跳转
            });
            // 个推v1版本只能通过透传传参
            plus.push.addEventListener('receive', (msg) => {
                console.log('收到 V1 版本透传消息:', msg);
                // 仅透传模板需要(通知模板无需处理)
                if (msg.payload) {
                    this.handlePushJump(msg.payload);
                }
            }, false);
            // #endif
        },
        onShow: function() {
            console.log('App Show')
        },
        onHide: function() {
            console.log('App Hide')
        },
        methods: {
            // 处理通知跳转逻辑
            handlePushJump(payload) {
                console.log('payload-enter: ', payload);
                if (!payload || !payload.pagePath) return;
                // 确保 App 处于前台
                // plus.runtime.foreground();
                // 跳转到指定页面
                setTimeout(() => {
                    uni.navigateTo({
                        url: `${payload.pagePath}?itemId=${payload.itemId}`, // 携带参数
                        fail: (err) => {
                            // 若页面栈满(最多10层),使用 redirectTo 替换当前页面
                            uni.redirectTo({
                                url: `${payload.pagePath}?itemId=${payload.itemId}`,
                            });
                        }
                    });
                }, 300)
            }
        }
    }
</script>
@@ -30,7 +114,7 @@
    /* 用于解决picker内部设置 disabled input 时不响应的问题 */
    .picker-overlay {
      box-sizing: border-box;
        box-sizing: border-box;
        position: absolute;
        top: 0;
        left: 0;