feat: 首次安装时的网络状态的监听
This commit is contained in:
94
src/App.vue
94
src/App.vue
@@ -2,18 +2,98 @@
|
||||
import { onLaunch, onShow, onHide } from "@dcloudio/uni-app";
|
||||
import { getEvnUrl } from "@/request/base/config";
|
||||
import { refreshToken } from "@/hooks/useGoLogin";
|
||||
import { getAccessToken } from "@/constant/token";
|
||||
|
||||
onLaunch(async () => {
|
||||
/// 获取环境配置
|
||||
await getEvnUrl();
|
||||
|
||||
/// 刷新token
|
||||
await refreshToken();
|
||||
let wasOffline = false;
|
||||
let isRecoveringNetwork = false;
|
||||
|
||||
const initAppNetworkData = async () => {
|
||||
try {
|
||||
/// 获取环境配置
|
||||
await getEvnUrl();
|
||||
|
||||
/// 刷新token
|
||||
await refreshToken();
|
||||
return true;
|
||||
} catch (error) {
|
||||
wasOffline = true;
|
||||
console.warn("初始化网络数据失败,等待网络恢复后重试:", error);
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
const getCurrentPageUrl = () => {
|
||||
const pages = getCurrentPages();
|
||||
const currentPage = pages[pages.length - 1];
|
||||
|
||||
if (!currentPage) return "/pages/index/index";
|
||||
|
||||
const route = currentPage.route || "pages/index/index";
|
||||
const options = currentPage.options || {};
|
||||
const query = Object.keys(options)
|
||||
.map((key) => `${encodeURIComponent(key)}=${encodeURIComponent(options[key])}`)
|
||||
.join("&");
|
||||
|
||||
return `/${route}${query ? `?${query}` : ""}`;
|
||||
};
|
||||
|
||||
const reloadCurrentPage = () => {
|
||||
const url = getCurrentPageUrl();
|
||||
uni.reLaunch({
|
||||
url,
|
||||
fail: (error) => {
|
||||
console.warn("网络恢复后重载当前页面失败:", error);
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
const recoverAfterNetworkReady = async () => {
|
||||
if (!wasOffline || isRecoveringNetwork) return;
|
||||
|
||||
isRecoveringNetwork = true;
|
||||
let recovered = false;
|
||||
try {
|
||||
recovered = await initAppNetworkData();
|
||||
if (recovered) {
|
||||
reloadCurrentPage();
|
||||
}
|
||||
} finally {
|
||||
if (recovered) {
|
||||
wasOffline = false;
|
||||
}
|
||||
isRecoveringNetwork = false;
|
||||
}
|
||||
};
|
||||
|
||||
const checkNetworkStatus = () => {
|
||||
uni.getNetworkType({
|
||||
success: (res) => {
|
||||
if (res.networkType === "none") {
|
||||
wasOffline = true;
|
||||
return;
|
||||
}
|
||||
|
||||
recoverAfterNetworkReady();
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
onLaunch(() => {
|
||||
uni.onNetworkStatusChange((res) => {
|
||||
if (!res.isConnected || res.networkType === "none") {
|
||||
wasOffline = true;
|
||||
return;
|
||||
}
|
||||
|
||||
recoverAfterNetworkReady();
|
||||
});
|
||||
|
||||
checkNetworkStatus();
|
||||
initAppNetworkData();
|
||||
});
|
||||
|
||||
onShow(() => {
|
||||
console.log("App Show");
|
||||
checkNetworkStatus();
|
||||
});
|
||||
|
||||
onHide(() => {
|
||||
|
||||
Reference in New Issue
Block a user