chenhaozhe
4 天以前 f5287b188f882f8d4bc2c6d0e3ca2638c50159c8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
<script>
    import WebSocketServices from "./utils/WebSocketServices";
    import {
        getOpenId,
        setUserInfo,
        setToken,
        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>
 
<style>
    /*每个页面公共css */
    .over {
        color: #888;
        font-size: 28rpx;
        text-align: center;
        padding: 60rpx 0;
    }
 
    /* 用于解决picker内部设置 disabled input 时不响应的问题 */
    .picker-overlay {
        box-sizing: border-box;
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        background-color: transparent;
        /* 透明背景 */
        z-index: 1;
        /* 确保在 input 上方 */
    }
</style>