Files
WXProgram/miniprogram/app.ts

190 lines
6.4 KiB
TypeScript
Raw Normal View History

2025-10-16 21:32:16 +08:00
// app.ts
import userService from "./services/userService";
2025-10-19 13:40:20 +08:00
import locationTrackingService from "./services/locationTrackingService";
2025-10-16 21:32:16 +08:00
import { showToast } from "./utils/helpers";
// 定义应用类
class MyApp {
globalData: any;
constructor() {
this.globalData = {
userInfo: null as any,
isLoggedIn: false,
openid: undefined as string | undefined,
session_key: undefined as string | undefined,
token: undefined as string | undefined,
};
// 绑定方法确保this指向正确
this.onLaunch = this.onLaunch.bind(this);
this.doGlobalLogin = this.doGlobalLogin.bind(this);
this.doGlobalLogout = this.doGlobalLogout.bind(this);
}
// 应用初始化
async onLaunch() {
console.log("=== 应用启动 ===");
console.log("调试信息 - 开始执行onLaunch");
try {
2025-10-19 13:40:20 +08:00
// 初始化位置追踪服务
console.log("调试信息 - 初始化位置追踪服务");
await locationTrackingService.initialize();
console.log("调试信息 - 位置追踪服务初始化完成");
2025-10-16 21:32:16 +08:00
// 初始化日志存储
const logs = wx.getStorageSync("logs") || [];
logs.unshift(Date.now());
wx.setStorageSync("logs", logs);
console.log("初始化日志存储完成");
// 检查用户是否已签退(避免自动重新登录)
const userStatus = wx.getStorageSync("userStatus");
console.log("调试信息 - 检查本地存储的userStatus:", userStatus);
if (userStatus === 'signed_out') {
console.log("调试信息 - 检测到用户已签退,跳过自动登录");
this.globalData.isLoggedIn = false;
// 直接跳转到首页,不进行登录
console.log("调试信息 - 直接跳转到首页,不进行登录");
wx.switchTab({
url: "/pages/index/index",
});
return;
} else {
console.log("调试信息 - 用户状态不是signed_out继续登录流程");
}
// 检查本地存储的登录信息
const token = wx.getStorageSync("token");
const userInfo = wx.getStorageSync("userInfo");
const openid = wx.getStorageSync("openid");
const session_key = wx.getStorageSync("session_key");
console.log("调试信息 - 本地存储检查结果:");
console.log(" - token:", token ? "存在" : "不存在");
console.log(" - openid:", openid ? "存在" : "不存在");
console.log(" - userInfo:", userInfo ? "存在" : "不存在");
if (token && openid) {
console.log("调试信息 - 检测到本地登录信息,恢复登录状态");
this.globalData.isLoggedIn = true;
this.globalData.userInfo = userInfo;
this.globalData.openid = openid;
this.globalData.session_key = session_key;
this.globalData.token = token;
} else {
console.log("调试信息 - 本地登录信息不完整,需要重新登录");
}
// 静默登录,无论是否已有登录信息都重新验证
console.log("调试信息 - 开始静默登录流程");
const loginSuc = await this.doGlobalLogin();
// 静默登录后跳转到首页
if (loginSuc) {
console.log("调试信息 - 登录成功,跳转到首页");
wx.switchTab({
url: "/pages/index/index",
});
} else {
console.log("调试信息 - 登录失败");
//TODO:退出小程序或者是重试逻辑
showToast("登录失败,请重试");
}
} catch (error) {
console.error("应用启动失败:", error);
this.globalData.isLoggedIn = false;
showToast("应用启动失败,请重试");
}
}
// 全局静默登录方法 - 仅保留核心登录逻辑
async doGlobalLogin(): Promise<boolean> {
console.log("=== 开始全局登录流程 ===");
try {
// 注意不再清除签退状态让onLaunch中的签退状态检查逻辑正常工作
// 只有在登录成功后才清除签退状态
// 调用userService进行登录分离请求逻辑
const loginResult = await userService.wxLogin();
if (loginResult.success) {
// 登录成功,更新全局状态
this.globalData.isLoggedIn = true;
this.globalData.userInfo = loginResult.userInfo || null;
this.globalData.openid = loginResult.openid || undefined;
this.globalData.session_key = loginResult.session_key || undefined;
this.globalData.token = loginResult.token || undefined;
// 登录成功后清除签退状态
wx.removeStorageSync("userStatus");
console.log("=== 全局登录流程完成,登录成功 ===");
return true;
} else {
console.error("=== 全局登录流程失败 ===");
this.globalData.isLoggedIn = false;
// 如果返回了openid保存openid
if (loginResult.openid) {
this.globalData.openid = loginResult.openid;
}
showToast("登录失败,请重试");
return false;
}
} catch (error) {
console.error("=== 全局登录流程异常 ===", error);
this.globalData.isLoggedIn = false;
// 清空存储的登录信息
wx.removeStorageSync("userInfo");
wx.removeStorageSync("token");
wx.removeStorageSync("openid");
wx.removeStorageSync("session_key");
wx.removeStorageSync("userStatus");
showToast("登录失败,请重试");
return false;
}
}
// 全局退出登录方法
doGlobalLogout(): void {
this.globalData.isLoggedIn = false;
this.globalData.userInfo = null;
this.globalData.openid = undefined;
this.globalData.session_key = undefined;
this.globalData.token = undefined;
// 清空存储的登录信息,但保留签退状态
wx.removeStorageSync("userInfo");
wx.removeStorageSync("token");
wx.removeStorageSync("openid");
wx.removeStorageSync("session_key");
// 注意不删除userStatus以便签退状态能够保持
console.log("用户已退出登录");
showToast("已退出登录");
// 退出登录后跳转到首页
wx.switchTab({
url: "/pages/index/index",
});
}
}
// 创建应用实例并注册
const app = new MyApp();
// 注册小程序
App({
globalData: app.globalData,
onLaunch: app.onLaunch,
doGlobalLogin: app.doGlobalLogin,
doGlobalLogout: app.doGlobalLogout,
});
// 导出应用实例,以便在其他地方使用
export default app;