request.js 4.07 KB
import base from "@/config/baseUrl";
import store from "@/store";
import {
	judgeLogin
} from "@/config/login";

// 初始化请求配置
uni.$u.http.setConfig((config) => {
	const token =
		store.state.userInfo.isToken ||
		uni.getStorageSync("userInfo").isToken ||
		undefined;
	// #ifdef H5
	window.sessionStorage.getItem("userInfo").isToken;
	// #endif
	/* config 为默认全局配置*/
	// const getConfiguration = uni.getStorageSync('getConfiguration').isConfiguration
	// console.log('getConfiguration', getConfiguration);
	// config.baseURL = getConfiguration == true ? base.baseDrawioUrl : base.baseUrl /* 根域名 */
	config.baseURL = base.baseUrl; /* 根域名 */
	config.header = {
		"Content-Type": "application/json",
		"X-Authorization": "Bearer " + token,
	};
	config.custom = {
		load: true, //是否显示加载动画
		isFactory: true, //true:返回的数据成功只返回data  false:返回response
		catch: true, //默认数据返回不成功进入catch返回
		auth: true, //token
	};
	return config;
});

// 请求拦截
uni.$u.http.interceptors.request.use(
	(config) => {
		if (store.state.userInfo.isThirdLogin) {
			uni.switchTab({
				url: "../pages/personal/personal",
			});
		}
		// 初始化请求拦截器时,会执行此方法,此时data为undefined,赋予默认{}
		config.data = config.data || {};
		// 根据custom参数中配置的是否需要token,添加对应的请求头
		const getConfiguration =
			uni.getStorageSync("getConfiguration").isConfiguration;
		if (config?.custom?.auth) {
			config.header["X-Authorization"] =
				"Bearer " + store.state.userInfo.isToken ||
				uni.getStorageSync("userInfo").isToken ||
				undefined;
			config.baseURL =
				getConfiguration == true ? base.baseDrawioUrl : base.baseUrl;
		}
		if (config?.custom?.load) {
			//打开加载动画
			store.commit("setLoadingShow", true);
		}
		if (getConfiguration) {
			uni.setStorageSync("config", config);
		} else {
			uni.removeStorageSync("config");
		}
		return config;
	},
	(config) => {
		return Promise.reject(config);
	}
);

// 响应拦截
uni.$u.http.interceptors.response.use(
	(response) => {
		// 关闭加载动画
		store.commit("setLoadingShow", false);
		const data = response.data;
		const custom = response.config?.custom;
		// code:  200、请求成功 其他,没有更多参数 401、被迫下线重新登录、
		if (response.statusCode == 200) {
			return Promise.resolve(data);
		} else if (response.statusCode == 401) {
			// 清空登录信息
			store.commit("emptyUserInfo");
			// 20秒节流,弹窗登录
			uni.$u.throttle(judgeLogin(), 20000);
			return new Promise(() => {});
		} else {}
	},
	(response) => {
		// 关闭加载动画
		store.commit("setLoadingShow", false);
		let show = true;
		let errorData = "请检查网络或服务器";
		let message =
			response.data?.message || response.data?.msg || response?.errMsg;
		if (message == "request:fail url not in domain list") {
			errorData = "检查请求域名是否添加了域名白名单";
		} else if (message == "request:fail timeout") {
			errorData = "请求超时:请检查网络";
		} else if (response.data.status == 401) {
			const isLoginFlag = uni.getStorageSync("userInfo");
			if (!store.state.userInfo.isThirdLogin) {
				const routers = getCurrentPages();
				const currentRoute = routers[routers.length - 1].route;
				const isLoginPage = currentRoute.includes(
					"login-subpackage/public/login"
				);
				!isLoginPage &&
					uni.reLaunch({
						url: "/login-subpackage/public/login",
					});
				// 清空登录信息
				store.commit("emptyUserInfo");
				show = false;
			} else {
				uni.switchTab({
					url: "../pages/personal/personal",
				});
				show = false;
			}
		} else if (message == "request:ok") {
			show = false;
			errorData = "";
		} else {
			errorData = message || "";
		}
		// console.log('errorData', errorData);
		if(message != "request:ok"){
			uni.$u.toast(message);
		}
		// if (show) uni.$u.toast(errorData);
		return Promise.reject(response);
	}
);