154 lines
3.9 KiB
JavaScript
154 lines
3.9 KiB
JavaScript
import {
|
|
getToken
|
|
} from '@/common/common.js'
|
|
import common from '@/common/common.js'
|
|
|
|
const ENV = import.meta.env
|
|
// function getBrowserInfo() {
|
|
// const userAgent = navigator.userAgent;
|
|
// let browserName = '未知浏览器';
|
|
// let version = '未知版本';
|
|
|
|
// // 检测 Chrome
|
|
// if (userAgent.indexOf('Chrome') > -1 && userAgent.indexOf('Edg') === -1) {
|
|
// browserName = 'Chrome';
|
|
// version = userAgent.match(/Chrome\/(\d+\.\d+)/)[1];
|
|
// }
|
|
|
|
// return {
|
|
// browser: browserName,
|
|
// version: version,
|
|
// userAgent: userAgent
|
|
// };
|
|
// }
|
|
|
|
|
|
export const get_base_url = (url = '') => {
|
|
if (['development', 'development.rd', 'development.yh', 'development.ty'].includes(ENV.MODE)) { // 开发环境
|
|
// #ifdef H5
|
|
if (url) {
|
|
let _str = (url.split('/')[0] || url.split('/')[1])?.toUpperCase()
|
|
return ENV[`VITE_APP_BASE_H5_API_Url_${_str}`] || ENV.VITE_APP_BASE_H5_API_Url || ENV
|
|
.VITE_APP_BASE_API_Url
|
|
} else {
|
|
return ENV.VITE_APP_BASE_H5_API_Url || ENV.VITE_APP_BASE_API_Url
|
|
}
|
|
// #endif
|
|
// #ifdef APP-PLUS
|
|
return ENV.VITE_APP_BASE_API_Url
|
|
// #endif
|
|
} else { // 其他环境,包括生产环境,sit环境,uat环境
|
|
|
|
return ENV.VITE_APP_BASE_API_Url
|
|
// return ENV.VITE_APP_BASE_API_Url
|
|
|
|
}
|
|
}
|
|
|
|
// 请求错误码
|
|
export const REQUES_ERROR_CODES = {
|
|
NO_LOGIN: ['QQ0005', '0005'] //登录
|
|
};
|
|
|
|
// 去登录弹窗状态
|
|
let no_login_show_modal_state = false
|
|
// 去登录方法
|
|
export const goto_login_fun = (from = 'http') => {
|
|
if (no_login_show_modal_state) return;
|
|
no_login_show_modal_state = true
|
|
let page_route = ''
|
|
const pages = getCurrentPages();
|
|
if (pages.length >= 1) {
|
|
const page = pages[pages.length - 1];
|
|
page_route = page.route
|
|
}
|
|
console.log('当前页路由', page_route);
|
|
if (page_route === 'pages/login/login') return;
|
|
common.hideLoading()
|
|
common.show('未登录', '现在去登录', false).then(() => {
|
|
// common.navigateTo('/pages/login/login')
|
|
if (from === 'socket' && page_route !== '') {
|
|
common.redirectTo('/pages/login/login?path=' + page_route)
|
|
} else {
|
|
common.redirectTo('/pages/login/login')
|
|
// common.navigateTo('/pages/login/login')
|
|
}
|
|
|
|
}).finally(() => {
|
|
no_login_show_modal_state = false
|
|
})
|
|
}
|
|
|
|
export default function request({
|
|
url,
|
|
method,
|
|
data,
|
|
meta,
|
|
isStream,
|
|
suppressErrors = false,
|
|
toastErrors = true,
|
|
header = {},
|
|
timeout = 6000,
|
|
baseUrl = ''
|
|
}) {
|
|
const base_url = get_base_url(url);
|
|
|
|
const headers_base = {
|
|
'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
|
|
...(header || {})
|
|
}
|
|
|
|
let token = getToken()
|
|
if (token) {
|
|
headers_base['summary'] = token // 让每个请求携带令牌
|
|
}
|
|
let that = this
|
|
|
|
return new Promise((resolve, reject) => {
|
|
uni.request({
|
|
url: `${baseUrl || base_url}${url}`,
|
|
data: data,
|
|
method: method,
|
|
header: headers_base,
|
|
timeout: timeout,
|
|
success: (response) => {
|
|
if (isStream) { // 流式传输,直接返回
|
|
return resolve(response);
|
|
}
|
|
// suppressErrors
|
|
// 模拟拦截器功能
|
|
const res = response.data
|
|
if (res?.rtnCode === '0000') {
|
|
return resolve(res)
|
|
} else if (res?.rtnCode === '1001') { // 为前后端约定不公共拦截的码值(小树20250903定)
|
|
return reject(res)
|
|
} else if (res?.rtnCode === '0002' && res?.message) {
|
|
if (toastErrors) {
|
|
common.msg(res.message)
|
|
}
|
|
return reject(response)
|
|
}
|
|
//到这里下面全是异常的处理
|
|
if (suppressErrors) { // 静默的接口,报错也不处理,因为下面有公共处理
|
|
return reject(response)
|
|
}
|
|
if (!res) {
|
|
common.msg("系统异常.")
|
|
return reject()
|
|
}
|
|
// 0005 QQ0005 登录已过期
|
|
if (REQUES_ERROR_CODES['NO_LOGIN'].includes(res.rtnCode)) {
|
|
goto_login_fun()
|
|
}
|
|
if (res?.rtnCode === '9999') {
|
|
common.msg("系统异常.")
|
|
}
|
|
return reject(res)
|
|
},
|
|
fail(res) {
|
|
console.log('请求错误', res, url, base_url);
|
|
return reject(res)
|
|
}
|
|
});
|
|
})
|
|
}; |