个人分支
This commit is contained in:
+73
-59
@@ -1,36 +1,55 @@
|
||||
// app.ts
|
||||
import { startSSE, stopSSE } from './utils/server-sent-events'
|
||||
import { checkUpdate } from './utils/updateManager'
|
||||
import { BASE_URL } from './env'
|
||||
// @ts-ignore
|
||||
const systemInfo = wx.getWindowInfo();
|
||||
|
||||
// 域名包含 .test. 则为测试环境,不拦截登录
|
||||
const isTestDomain = (): boolean => BASE_URL.includes('.test.');
|
||||
|
||||
// 判断是否在 PC/Windows 环境运行
|
||||
// 判断是否在 PC/Mac 环境运行
|
||||
const isPCEnvironment = (): boolean => {
|
||||
const sysInfo = wx.getSystemInfoSync();
|
||||
return ['windows', 'mac'].includes(sysInfo.platform);
|
||||
};
|
||||
|
||||
// 需要随登录态一起清理的 storage key
|
||||
const LOGIN_STORAGE_KEYS = [
|
||||
'mbuId', 'userName', 'openId', 'unionId', 'addressId', 'defualtAddress'
|
||||
] as const;
|
||||
|
||||
// 获取安全区域信息(延迟初始化,避免模块加载时调用 wx API)
|
||||
function getSafeArea() {
|
||||
// @ts-ignore
|
||||
const info = wx.getWindowInfo();
|
||||
return {
|
||||
safeBottom: info.safeArea.bottom - info.safeArea.height,
|
||||
safeTop: info.safeArea.top * 2,
|
||||
};
|
||||
}
|
||||
|
||||
export { };
|
||||
|
||||
App<IAppOption>({
|
||||
globalData: {
|
||||
isLogin: false, //
|
||||
wasLogin: false, // 之前是否登录过,用来判断是不是 登录状态失效
|
||||
safeBottom: systemInfo.safeArea.bottom - systemInfo.safeArea.height,
|
||||
safeTop: systemInfo.safeArea.top * 2,
|
||||
isLogin: false,
|
||||
wasLogin: false,
|
||||
safeBottom: 0,
|
||||
safeTop: 0,
|
||||
store: {},
|
||||
joinedArray: [], //加入的频道,加入了就不会重复加入
|
||||
joinedArray: [],
|
||||
sseStore: {
|
||||
chat: [],
|
||||
system: [],
|
||||
product: []
|
||||
},
|
||||
isModalShowing: false, //防止有多个登录弹窗打开
|
||||
isModalShowing: false,
|
||||
},
|
||||
async onLaunch(props: any) {
|
||||
// 非测试环境在 PC 端打开时提示无法使用
|
||||
// 初始化安全区域
|
||||
const { safeBottom, safeTop } = getSafeArea();
|
||||
this.globalData.safeBottom = safeBottom;
|
||||
this.globalData.safeTop = safeTop;
|
||||
|
||||
// PC/Mac 环境拦截(测试域名不拦截)
|
||||
if (!isTestDomain() && isPCEnvironment()) {
|
||||
wx.showModal({
|
||||
title: "提示",
|
||||
@@ -41,43 +60,38 @@ App<IAppOption>({
|
||||
return;
|
||||
}
|
||||
|
||||
wx.removeStorageSync("state");
|
||||
if (props.query.state) {
|
||||
wx.setStorageSync("state", props.query.state)
|
||||
// 处理 OAuth state
|
||||
const state = props.query?.state;
|
||||
if (state) {
|
||||
wx.setStorageSync('state', state);
|
||||
} else {
|
||||
wx.removeStorageSync("state")
|
||||
wx.removeStorageSync('state');
|
||||
}
|
||||
|
||||
// 检查小程序版本更新
|
||||
checkUpdate();
|
||||
|
||||
this.checkLoginState();
|
||||
startSSE();
|
||||
},
|
||||
onHide() {
|
||||
stopSSE();
|
||||
},
|
||||
checkLoginState() {
|
||||
const openId = wx.getStorageSync("openId");
|
||||
const unionId = wx.getStorageSync("unionId");
|
||||
const userId = wx.getStorageSync("userId");
|
||||
const openId = wx.getStorageSync('openId');
|
||||
const unionId = wx.getStorageSync('unionId');
|
||||
const userId = wx.getStorageSync('userId');
|
||||
|
||||
const ok = openId && unionId && userId;
|
||||
const isLoggedIn = !!(openId && unionId && userId);
|
||||
|
||||
if (!ok) {
|
||||
// 清理
|
||||
wx.removeStorageSync("mbuId");
|
||||
wx.removeStorageSync("userName");
|
||||
wx.removeStorageSync("openId");
|
||||
wx.removeStorageSync("unionId");
|
||||
wx.removeStorageSync("addressId");
|
||||
wx.removeStorageSync("defualtAddress");
|
||||
if (!isLoggedIn) {
|
||||
// 清理登录相关缓存
|
||||
LOGIN_STORAGE_KEYS.forEach(key => wx.removeStorageSync(key));
|
||||
}
|
||||
|
||||
// 保存上一次的登录状态,用来判断是否从 已登录 变成 未登录
|
||||
// 记录上一次登录状态,用于判断是否从已登录变为未登录
|
||||
const prev = this.globalData.isLogin;
|
||||
this.globalData.isLogin = !!ok;
|
||||
this.globalData.isLogin = isLoggedIn;
|
||||
this.globalData.wasLogin = prev;
|
||||
return this.globalData.isLogin;
|
||||
|
||||
return isLoggedIn;
|
||||
},
|
||||
login(value: string) {
|
||||
if (!this.checkLoginState()) {
|
||||
@@ -87,35 +101,35 @@ App<IAppOption>({
|
||||
return true;
|
||||
},
|
||||
redirectLogin() {
|
||||
if (!this.checkLoginState()) {
|
||||
//已有modal在展示,就不展示了
|
||||
if (this.globalData.isModalShowing) {
|
||||
return false;
|
||||
}
|
||||
|
||||
this.globalData.isModalShowing = true;
|
||||
|
||||
const content = this.globalData.wasLogin
|
||||
? "登录状态失效,请重新登录!"
|
||||
: "请登录获取完整服务!";
|
||||
|
||||
wx.showModal({
|
||||
title: "登录提示",
|
||||
content,
|
||||
confirmText: "去登录",
|
||||
success: (options) => {
|
||||
if (options.confirm) {
|
||||
wx.navigateTo({ url: "/pages/login/login" });
|
||||
}
|
||||
},
|
||||
complete: () => {
|
||||
this.globalData.isModalShowing = false;
|
||||
}
|
||||
});
|
||||
if (this.checkLoginState()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// 已有 modal 在展示,避免重复弹窗
|
||||
if (this.globalData.isModalShowing) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
this.globalData.isModalShowing = true;
|
||||
|
||||
const content = this.globalData.wasLogin
|
||||
? '登录状态失效,请重新登录!'
|
||||
: '请登录获取完整服务!';
|
||||
|
||||
wx.showModal({
|
||||
title: '登录提示',
|
||||
content,
|
||||
confirmText: '去登录',
|
||||
success: (options) => {
|
||||
if (options.confirm) {
|
||||
wx.navigateTo({ url: '/pages/login/login' });
|
||||
}
|
||||
},
|
||||
complete: () => {
|
||||
this.globalData.isModalShowing = false;
|
||||
}
|
||||
});
|
||||
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user