fastbee/yack-mini/miniprogram/app.js

106 lines
2.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 应用入口
*/
const envConfig = require('./env.config.js');
const storage = require('./utils/storage.js');
const { gateway } = require('./services/gateway.js');
App({
globalData: {
// 用户信息
userInfo: null,
userId: null,
token: null,
// 环境配置
envConfig: envConfig,
// 当前连接的设备
currentDevice: null,
// MQTT 客户端
mqttClient: null,
},
onLaunch() {
console.log('[App] onLaunch');
// 检查登录态
this.checkLoginStatus();
},
// 回到前台:让网关补起连接/重连/补传离线
onShow() {
console.log('[App] onShow');
if (this.isLoggedIn()) {
gateway.resume();
}
},
// 切后台:记录时间并暂停网关主动重试(不 teardown)
onHide() {
console.log('[App] onHide');
gateway.suspend();
},
/**
* 检查登录状态
* 登录态只依赖 userId(登录一次即可,业务流程不使用 token)
*/
checkLoginStatus() {
const userInfo = storage.getUserInfo();
if (userInfo && userInfo.userId) {
this.globalData.userInfo = userInfo;
this.globalData.userId = userInfo.userId;
// token 可选保存(仅登录流程使用,业务不依赖)
this.globalData.token = storage.getToken() || null;
console.log('[App] 已登录, userId:', userInfo.userId);
} else {
console.log('[App] 未登录');
}
},
/**
* 设置登录信息
* @param {Object} data - 登录返回数据 { token, user }
*/
setLoginInfo(data) {
const userInfo = {
userId: data.userId,
userName: data.userName,
phonenumber: data.phonenumber,
avatar: data.avatar,
};
this.globalData.token = data.token;
this.globalData.userInfo = userInfo;
this.globalData.userId = data.userId;
// 持久化存储
storage.setToken(data.token);
storage.setUserInfo(userInfo);
console.log('[App] 登录成功, userId:', data.userId);
},
/**
* 清除登录信息
*/
clearLoginInfo() {
// 先停网关(断开 BLE/MQTT),再清登录态
gateway.stop();
this.globalData.token = null;
this.globalData.userInfo = null;
this.globalData.userId = null;
storage.removeToken();
storage.removeUserInfo();
console.log('[App] 已退出登录');
},
/**
* 检查是否已登录
* 只检查 userId,token 过期不影响登录态(登录一次即可)
* @returns {boolean}
*/
isLoggedIn() {
return !!this.globalData.userId;
},
});