106 lines
2.5 KiB
JavaScript
106 lines
2.5 KiB
JavaScript
/**
|
||
* 应用入口
|
||
*/
|
||
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;
|
||
},
|
||
}); |