Files
websopy-taro/src/utils/networkCheck.ts
赵忠林 07f5c92f4b feat(add): 新增多页面新增和编辑表单功能
- 添加编辑和新增收货地址页面,支持表单数据加载和提交
- 新增应用密钥凭证、新增应用操作动态、新增应用成员、新增应用版本页面配置
- 实现文章新增及编辑页面,包含图片上传及多种文章属性配置
- 增加注册会员页面,支持头像上传、手机号获取和邀请人关系处理
- 引入统一表单提交成功和失败处理,支持编辑模式数据回显
- 配置统一eslint和editorconfig规则,增强代码规范和编辑体验
- 新增.gitignore规则,屏蔽无关文件和目录,优化版本管理
2026-04-11 12:22:29 +08:00

156 lines
4.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import Taro from '@tarojs/taro';
/**
* 网络连接检测工具
*/
export class NetworkChecker {
/**
* 检查网络连接状态
*/
static async checkNetworkStatus(): Promise<{
isConnected: boolean;
networkType: string;
message: string;
}> {
try {
const networkInfo = await Taro.getNetworkType();
const isConnected = networkInfo.networkType !== 'none';
return {
isConnected,
networkType: networkInfo.networkType,
message: isConnected
? `网络连接正常 (${networkInfo.networkType})`
: '网络连接异常'
};
} catch (error) {
console.error('检查网络状态失败:', error);
return {
isConnected: false,
networkType: 'unknown',
message: '无法检测网络状态'
};
}
}
/**
* 测试API连接
*/
static async testAPIConnection(baseUrl: string): Promise<{
success: boolean;
responseTime: number;
message: string;
}> {
const startTime = Date.now();
try {
const response = await Taro.request({
url: `${baseUrl}/health`,
method: 'GET',
timeout: 5000
});
const responseTime = Date.now() - startTime;
return {
success: response.statusCode === 200,
responseTime,
message: `API连接${response.statusCode === 200 ? '正常' : '异常'} (${responseTime}ms)`
};
} catch (error) {
const responseTime = Date.now() - startTime;
console.error('API连接测试失败:', error);
return {
success: false,
responseTime,
message: `API连接失败 (${responseTime}ms): ${error}`
};
}
}
/**
* 综合网络诊断
*/
static async diagnoseNetwork(baseUrl: string): Promise<{
network: any;
api: any;
suggestions: string[];
}> {
console.log('🔍 开始网络诊断...');
const network = await this.checkNetworkStatus();
const api = await this.testAPIConnection(baseUrl);
const suggestions: string[] = [];
if (!network.isConnected) {
suggestions.push('请检查网络连接');
suggestions.push('尝试切换网络环境WiFi/移动数据)');
}
if (!api.success) {
suggestions.push('服务器可能暂时不可用');
suggestions.push('请稍后重试');
if (api.responseTime > 10000) {
suggestions.push('网络响应较慢,建议检查网络质量');
}
}
if (network.networkType === 'wifi') {
suggestions.push('WiFi连接正常如仍有问题请检查路由器');
} else if (network.networkType === '4g' || network.networkType === '5g') {
suggestions.push('移动网络连接,请确保有足够的流量');
}
console.log('📊 网络诊断结果:', { network, api, suggestions });
return { network, api, suggestions };
}
/**
* 显示网络诊断结果
*/
static async showNetworkDiagnosis(baseUrl: string) {
Taro.showLoading({ title: '诊断网络中...', mask: true });
try {
const diagnosis = await this.diagnoseNetwork(baseUrl);
Taro.hideLoading();
const content = [
`网络状态: ${diagnosis.network.message}`,
`API连接: ${diagnosis.api.message}`,
'',
'建议:',
...diagnosis.suggestions.map(s => `${s}`)
].join('\n');
Taro.showModal({
title: '网络诊断结果',
content,
showCancel: false,
confirmText: '知道了'
});
} catch (error) {
Taro.hideLoading();
console.error('网络诊断失败:', error);
Taro.showModal({
title: '诊断失败',
content: '无法完成网络诊断,请检查网络连接后重试',
showCancel: false,
confirmText: '知道了'
});
}
}
}
/**
* 便捷方法
*/
export const checkNetwork = () => NetworkChecker.checkNetworkStatus();
export const testAPI = (baseUrl: string) => NetworkChecker.testAPIConnection(baseUrl);
export const diagnoseNetwork = (baseUrl: string) => NetworkChecker.diagnoseNetwork(baseUrl);
export const showNetworkDiagnosis = (baseUrl: string) => NetworkChecker.showNetworkDiagnosis(baseUrl);