diff --git a/App.vue b/App.vue index a7c5b69..c50142d 100644 --- a/App.vue +++ b/App.vue @@ -13,12 +13,39 @@ console.log('已设置测试 token:', testToken) } // #endif + + // 检测初始网络状态 + this.checkNetworkStatus() + + // 监听网络状态变化 + uni.onNetworkStatusChange((res) => { + if (res.isConnected === false || res.networkType === 'none') { + uni.$uv.toast('网络连接不可用,请检查网络设置') + } + }) }, onShow: function() { console.log('App Show') + // 每次显示时检测网络状态 + this.checkNetworkStatus() }, onHide: function() { console.log('App Hide') + }, + methods: { + checkNetworkStatus() { + uni.getNetworkType({ + success: (res) => { + if (res.networkType === 'none') { + uni.$uv.toast('网络连接不可用,请检查网络设置') + } + }, + fail: (err) => { + console.error('获取网络状态失败:', err) + uni.$uv.toast('无法检测网络状态,请检查网络连接') + } + }) + } } } diff --git a/components/MyProfile.vue b/components/MyProfile.vue index d8f4620..a0e03db 100644 --- a/components/MyProfile.vue +++ b/components/MyProfile.vue @@ -59,3 +59,4 @@ const onLogout = async () => { + diff --git a/utils/request/index.js b/utils/request/index.js index 1cade8d..1a9501b 100644 --- a/utils/request/index.js +++ b/utils/request/index.js @@ -10,13 +10,40 @@ export const Request = () => { // 初始化请求配置 uni.$uv.http.setConfig((config) => { /* config 为默认全局配置*/ - // config.baseURL = 'http://192.168.1.5:4001'; /* 根域名 */ - config.baseURL = 'https://pm.ccttiot.com/prod-api'; /* 根域名 */ + config.baseURL = 'http://192.168.1.5:4001'; /* 根域名 */ + // config.baseURL = 'https://pm.ccttiot.com/prod-api'; /* 根域名 */ return config }) // 请求拦截 - uni.$uv.http.interceptors.request.use((config) => { // 可使用async await 做异步操作 + uni.$uv.http.interceptors.request.use(async (config) => { // 可使用async await 做异步操作 + // 检测网络状态 + try { + const networkInfo = await new Promise((resolve, reject) => { + uni.getNetworkType({ + success: resolve, + fail: reject + }) + }) + + // 如果没有网络连接,阻止请求并提示 + if (networkInfo.networkType === 'none') { + uni.$uv.toast('网络连接不可用,请检查网络设置') + return Promise.reject({ + errMsg: '网络连接不可用', + networkType: 'none' + }) + } + } catch (error) { + console.error('获取网络状态失败:', error) + // 如果获取网络状态失败,也提示用户 + uni.$uv.toast('无法检测网络状态,请检查网络连接') + return Promise.reject({ + errMsg: '无法检测网络状态', + error + }) + } + // 初始化请求拦截器时,会执行此方法,此时data为undefined,赋予默认{} config.data = config.data || {} @@ -61,6 +88,8 @@ export const Request = () => { }, 200) } } + + if (data.code !== 200) { // 如果没有显式定义custom的toast参数为false的话,默认对报错进行toast弹出提示 @@ -86,9 +115,35 @@ export const Request = () => { const { code, msg, message, ...rest } = data return Object.keys(rest).length > 0 ? rest : data } - }, (response) => { + }, async (response) => { // 对响应错误做点什么 (statusCode !== 200) // 网络错误或服务器错误处理 + + // 检测是否是网络错误 + if (!response.statusCode || response.statusCode === 0) { + // 可能是网络连接问题,再次检测网络状态 + try { + const networkInfo = await new Promise((resolve, reject) => { + uni.getNetworkType({ + success: resolve, + fail: reject + }) + }) + + if (networkInfo.networkType === 'none') { + uni.$uv.toast('网络连接不可用,请检查网络设置') + return Promise.reject({ + errMsg: '网络连接不可用', + networkType: 'none' + }) + } + } catch (error) { + uni.$uv.toast('网络连接异常,请检查网络设置') + } + uni.$uv.toast('网络连接异常,请稍后重试') + return Promise.reject(response) + } + if (response.statusCode === 401 || response.statusCode === 403) { const userStore = useUserStore() userStore.logout()