Files
ks-app-employment-service/utils/request.js
hanguangpu01 6006f5cd28 feat(auth): 实现第三方登录集成
- 在 careerfair.vue 中新增 thirdLogin 方法处理单点登录逻辑
- 修改 goDetail 方法,在跳转前执行第三方登录验证
- 在 packageB/train/index.vue 中增加 onLoad 钩子调用 thirdLogin
- 修改 jumps 方法,确保页面跳转前完成登录验证
- 在 request.js 中注释掉全局错误提示,避免重复提示
- 优化 videoDetail.vue 中的 getHeart 方法,移除冗余跳转逻辑
- 在 videoList.vue 中新增 playVideo 前的登录校验
- 统一多个页面中的 thirdLogin 实现,确保登录态一致性
2025-12-08 21:17:05 +08:00

275 lines
6.3 KiB
JavaScript
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 config from "@/config.js"
import useUserStore from '@/stores/useUserStore';
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 Objectheaders默认{}
* @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(resData.data?.code == undefined){
resolve(resData.data)
return
}
if (code === 200) {
resolve(resData.data)
return
}
// 处理业务错误
if (resData.data?.code === 401 || resData.data?.code === 402) {
const pages = getCurrentPages();
if (pages.length >= 10) {
// 页面栈已满使用redirectTo替代
uni.redirectTo({
url:'/packageB/login?flag=nw',
fail: (err) => {
console.error('页面跳转失败:', err);
}
});
} else {
uni.navigateTo({
url:'/packageB/login?flag=nw',
fail: (err) => {
console.error('页面跳转失败:', err);
// 失败后尝试redirectTo
uni.redirectTo({
url:'/packageB/login?flag=nw',
fail: (err2) => {
console.error('redirectTo也失败:', err2);
}
});
}
});
}
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();
}
}
})
})
}