first commit
This commit is contained in:
183
miniprogram/app.ts
Normal file
183
miniprogram/app.ts
Normal file
@@ -0,0 +1,183 @@
|
||||
// app.ts
|
||||
import userService from "./services/userService";
|
||||
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 {
|
||||
// 初始化日志存储
|
||||
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;
|
Reference in New Issue
Block a user