411 lines
11 KiB
JavaScript
411 lines
11 KiB
JavaScript
import config from "@/config.js"
|
||
import useUserStore from '@/stores/useUserStore';
|
||
|
||
// 是否显示重新登录
|
||
export let isRelogin = { show: false };
|
||
|
||
// ======================================
|
||
// 以下是分包(packageRc)专用请求函数区域
|
||
// 这些函数使用固定的baseURL和token,适用于分包页面
|
||
// ======================================
|
||
|
||
// 为分包添加的固定配置请求函数
|
||
export function packageRcRequest({
|
||
url,
|
||
method = 'GET',
|
||
data = {},
|
||
load = false,
|
||
header = {}
|
||
} = {}) {
|
||
// 分包使用的固定baseURL和token
|
||
const fixedBaseURL = 'http://10.160.0.5:8907/';
|
||
const fixedToken = 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOiJzeXNfdXNlcjoxIiwicm5TdHIiOiJsNDRvNmhxckdOOW1XcG1pWlpJcXZ0UXJMdGsyTlFhQSIsInVzZXJJZCI6MX0.K5H-Rpof9oI1CCIEtheEQ96XGAxPWS7tzyjPbXwAXrQ';
|
||
|
||
return new Promise((resolve, reject) => {
|
||
// 显示加载状态
|
||
if (load) {
|
||
uni.showLoading({
|
||
title: '请稍候',
|
||
mask: true
|
||
})
|
||
}
|
||
|
||
// 是否需要设置token
|
||
const isToken = header && header.isToken === false
|
||
|
||
// 添加固定的Authorization token
|
||
if (!isToken) {
|
||
header = header || {}
|
||
header['Authorization'] = fixedToken
|
||
}
|
||
|
||
// 确保URL是字符串类型
|
||
if (typeof url !== 'string') {
|
||
console.error('URL must be a string:', url);
|
||
url = String(url);
|
||
}
|
||
|
||
// 发起请求,使用固定的baseURL
|
||
uni.request({
|
||
url: fixedBaseURL + url,
|
||
method,
|
||
data: data,
|
||
header: {
|
||
'Content-Type': 'application/json;charset=utf-8',
|
||
...header
|
||
},
|
||
timeout: 60000,
|
||
success: (res) => {
|
||
// 二进制数据直接返回
|
||
if (res.header['content-type'] && res.header['content-type'].includes('application/octet-stream')) {
|
||
resolve(res.data)
|
||
return
|
||
}
|
||
|
||
// 处理状态码
|
||
const code = res.data.code || 200
|
||
|
||
// 401错误处理
|
||
if (code === 401) {
|
||
if (!isRelogin.show) {
|
||
isRelogin.show = true
|
||
uni.showModal({
|
||
title: '登录过期',
|
||
content: '登录状态已过期,是否重新登录?',
|
||
success: (res) => {
|
||
isRelogin.show = false
|
||
if (res.confirm) {
|
||
// 跳转到登录页面
|
||
uni.navigateTo({
|
||
url: '/packageRc/pages/login/login'
|
||
})
|
||
}
|
||
}
|
||
})
|
||
}
|
||
reject(new Error('登录过期,请重新登录'))
|
||
return
|
||
}
|
||
|
||
// 其他错误处理
|
||
if (code !== 200) {
|
||
uni.showToast({
|
||
title: res.data.msg || '请求失败',
|
||
icon: 'none'
|
||
})
|
||
reject(res.data)
|
||
return
|
||
}
|
||
|
||
resolve(res.data)
|
||
},
|
||
fail: (error) => {
|
||
uni.showToast({
|
||
title: '网络错误,请稍后重试',
|
||
icon: 'none'
|
||
})
|
||
reject(error)
|
||
},
|
||
complete: () => {
|
||
// 隐藏加载状态
|
||
if (load) {
|
||
uni.hideLoading()
|
||
}
|
||
}
|
||
})
|
||
})
|
||
}
|
||
|
||
// 为分包添加的GET请求函数
|
||
export function packageRcGet(config) {
|
||
if (typeof config === 'string') {
|
||
// 兼容旧的调用方式: get(url, params, options)
|
||
const params = arguments[1] || {};
|
||
const options = arguments[2] || {};
|
||
return packageRcRequest({
|
||
url: config,
|
||
method: 'GET',
|
||
data: params,
|
||
...options
|
||
})
|
||
}
|
||
// 支持配置对象的调用方式: get({url, data, ...})
|
||
return packageRcRequest({
|
||
method: 'GET',
|
||
...config
|
||
})
|
||
}
|
||
|
||
// 为分包添加的POST请求函数
|
||
export function packageRcPost(config) {
|
||
if (typeof config === 'string') {
|
||
// 兼容旧的调用方式: post(url, data, options)
|
||
const data = arguments[1] || {};
|
||
const options = arguments[2] || {};
|
||
return packageRcRequest({
|
||
url: config,
|
||
method: 'POST',
|
||
data,
|
||
...options
|
||
})
|
||
}
|
||
// 支持配置对象的调用方式: post({url, data, ...})
|
||
return packageRcRequest({
|
||
method: 'POST',
|
||
...config
|
||
})
|
||
}
|
||
|
||
// ======================================
|
||
// 以上是分包(packageRc)专用请求函数区域
|
||
// ======================================
|
||
|
||
// ======================================
|
||
// 以下是主包专用请求函数区域
|
||
// 这些是主包原有的请求函数,使用动态token和配置的baseURL
|
||
// ======================================
|
||
|
||
export function request({
|
||
url,
|
||
method = 'GET',
|
||
data = {},
|
||
load = false,
|
||
header = {}
|
||
} = {}) {
|
||
|
||
return new Promise((resolve, reject) => {
|
||
if (load) {
|
||
uni.showLoading({
|
||
title: '请稍候',
|
||
mask: true
|
||
});
|
||
}
|
||
let Authorization = ''
|
||
if (useUserStore().token) {
|
||
Authorization = `${useUserStore().userInfo.token}${useUserStore().token}`
|
||
}
|
||
uni.request({
|
||
url: config.baseUrl + url,
|
||
method,
|
||
data: data,
|
||
header: {
|
||
'Authorization': Authorization || '',
|
||
},
|
||
success: resData => {
|
||
// 响应拦截
|
||
if (resData.statusCode === 200) {
|
||
const {
|
||
code,
|
||
msg
|
||
} = resData.data
|
||
if (code === 200) {
|
||
resolve(resData.data)
|
||
return
|
||
}
|
||
uni.showToast({
|
||
title: msg,
|
||
icon: 'none'
|
||
})
|
||
}
|
||
if (resData.data?.code === 401 || resData.data?.code === 402) {
|
||
useUserStore().logOut()
|
||
uni.showToast({
|
||
title: '登录过期,请重新登录',
|
||
icon: 'none'
|
||
})
|
||
return
|
||
}
|
||
const err = new Error('请求出现异常,请联系工作人员')
|
||
err.error = resData
|
||
reject(err)
|
||
},
|
||
fail: err => reject(err),
|
||
complete() {
|
||
if (load) {
|
||
uni.hideLoading();
|
||
}
|
||
}
|
||
})
|
||
})
|
||
}
|
||
|
||
|
||
/**
|
||
* @param url String,请求的地址,默认:none
|
||
* @param data Object,请求的参数,默认:{}
|
||
* @param method String,请求的方式,默认:GET
|
||
* @param loading Boolean,是否需要loading ,默认:false
|
||
* @param header Object,headers,默认:{}
|
||
* @returns promise
|
||
**/
|
||
export function createRequest(url, data = {}, method = 'GET', loading = false, headers = {}) {
|
||
if (loading) {
|
||
uni.showLoading({
|
||
title: '请稍后',
|
||
mask: true
|
||
})
|
||
}
|
||
let Authorization = ''
|
||
if (useUserStore().token) {
|
||
Authorization = `${useUserStore().token}`
|
||
}
|
||
|
||
const header = headers || {};
|
||
header["Authorization"] = encodeURIComponent(Authorization);
|
||
return new Promise((resolve, reject) => {
|
||
uni.request({
|
||
url: config.baseUrl + url,
|
||
method: method,
|
||
data: data,
|
||
header,
|
||
success: resData => {
|
||
// 响应拦截
|
||
if (resData.statusCode === 200) {
|
||
const {
|
||
code,
|
||
msg
|
||
} = resData.data
|
||
if (code === 200) {
|
||
resolve(resData.data)
|
||
return
|
||
}
|
||
// 处理业务错误
|
||
if (resData.data?.code === 401 || resData.data?.code === 402) {
|
||
useUserStore().logOut()
|
||
}
|
||
// 显示具体的错误信息
|
||
const errorMsg = msg || '请求出现异常,请联系工作人员'
|
||
uni.showToast({
|
||
title: errorMsg,
|
||
icon: 'none'
|
||
})
|
||
const err = new Error(errorMsg)
|
||
err.error = resData
|
||
reject(err)
|
||
return
|
||
}
|
||
// HTTP状态码不是200的情况
|
||
const err = new Error('网络请求失败,请检查网络连接')
|
||
err.error = resData
|
||
reject(err)
|
||
},
|
||
fail: (err) => {
|
||
reject(err)
|
||
},
|
||
complete: () => {
|
||
if (loading) {
|
||
uni.hideLoading();
|
||
}
|
||
}
|
||
});
|
||
})
|
||
}
|
||
|
||
|
||
export function uploadFile(tempFilePaths, loading = false) {
|
||
if (loading) {
|
||
uni.showLoading({
|
||
title: '请稍后',
|
||
mask: true
|
||
})
|
||
}
|
||
let Authorization = ''
|
||
if (useUserStore().token) {
|
||
Authorization = `${useUserStore().token}`
|
||
}
|
||
|
||
const header = {};
|
||
header["Authorization"] = encodeURIComponent(Authorization);
|
||
return new Promise((resolve, reject) => {
|
||
uni.uploadFile({
|
||
url: config.baseUrl + '/app/file/upload',
|
||
filePath: tempFilePaths,
|
||
name: 'file',
|
||
header,
|
||
success: (uploadFileRes) => {
|
||
if (uploadFileRes.statusCode === 200) {
|
||
return resolve(uploadFileRes.data)
|
||
}
|
||
},
|
||
fail: (err) => {
|
||
reject(err)
|
||
},
|
||
complete: () => {
|
||
if (loading) {
|
||
uni.hideLoading();
|
||
}
|
||
}
|
||
})
|
||
})
|
||
}
|
||
|
||
export function myRequest(url, data = {}, method = 'GET', port = 9100, headers = {}, loading = false) {
|
||
let LCBaseUrl = config.LCBaseUrl
|
||
if (port != 9100) {
|
||
LCBaseUrl = config.LCBaseUrlInner
|
||
}
|
||
const header = headers || {};
|
||
// 上下文
|
||
// /jobfair-api/jobfair/public 招聘会
|
||
// /dashboard-api/dashboard 用户登录相关
|
||
// /dashboard-api 获取验证码、登录
|
||
if (loading) {
|
||
uni.showLoading({
|
||
title: '请稍后',
|
||
mask: true
|
||
})
|
||
}
|
||
return new Promise((resolve, reject) => {
|
||
uni.request({
|
||
url: LCBaseUrl + url,
|
||
method: method,
|
||
data: data,
|
||
header,
|
||
success: resData => {
|
||
if(url=='/dashboard/auth/heart'){
|
||
resolve(resData.data)
|
||
return
|
||
}else{
|
||
// 响应拦截
|
||
if (resData.statusCode === 200) {
|
||
const {
|
||
code,
|
||
msg
|
||
} = resData.data
|
||
if (code === 200) {
|
||
resolve(resData.data)
|
||
return
|
||
}
|
||
// 处理业务错误
|
||
if (resData.data?.code === 401 || resData.data?.code === 402) {
|
||
useUserStore().logOut()
|
||
}
|
||
// 显示具体的错误信息
|
||
const errorMsg = msg || '请求出现异常,请联系工作人员'
|
||
uni.showToast({
|
||
title: errorMsg,
|
||
icon: 'none'
|
||
})
|
||
const err = new Error(errorMsg)
|
||
err.error = resData
|
||
reject(err)
|
||
return
|
||
}
|
||
// HTTP状态码不是200的情况
|
||
const err = new Error('网络请求失败,请检查网络连接')
|
||
err.error = resData
|
||
reject(err)
|
||
}
|
||
},
|
||
fail: (err) => {
|
||
reject(err)
|
||
},
|
||
complete: () => {
|
||
if (loading) {
|
||
uni.hideLoading();
|
||
}
|
||
}
|
||
})
|
||
})
|
||
}
|