|
@@ -8,27 +8,9 @@ import { refreshToken } from '@/api/common';
|
|
import { userStore } from '@/store/user'
|
|
import { userStore } from '@/store/user'
|
|
import { baseUrl, tenantId } from './config'
|
|
import { baseUrl, tenantId } from './config'
|
|
import { showAuthModal } from '@/hooks/useModal'
|
|
import { showAuthModal } from '@/hooks/useModal'
|
|
-import { rewardEventTrackClick } from '@/api/integral'
|
|
|
|
-import { getSuffixAfterPrefix } from '@/utils/prefixUrl'
|
|
|
|
-import { encryptionFun } from '@/utils/openEncryption'
|
|
|
|
-import { useSystem } from '@/store/system'
|
|
|
|
-import { sendError } from '@/api/system'
|
|
|
|
|
|
|
|
import qs from 'qs'
|
|
import qs from 'qs'
|
|
|
|
|
|
-// 规则配置跟踪列表
|
|
|
|
-const RETURNED_API = '/admin-api/menduner/reward/event-track/click'
|
|
|
|
-let requestCompletionTrigger = []
|
|
|
|
-let clickTrigger = []
|
|
|
|
-const getEventList = () => {
|
|
|
|
- const eventRules = uni.getStorageSync('eventList')?.length ? JSON.parse(uni.getStorageSync('eventList')) : []
|
|
|
|
- requestCompletionTrigger = eventRules ? eventRules.filter(_e => _e.triggerType === '0') : []
|
|
|
|
- clickTrigger = eventRules ? eventRules.filter(_e => _e.triggerType === '1') : []
|
|
|
|
-}
|
|
|
|
-getEventList()
|
|
|
|
-
|
|
|
|
-const errorData = []
|
|
|
|
-
|
|
|
|
const options = {
|
|
const options = {
|
|
// 显示操作成功消息 默认不显示
|
|
// 显示操作成功消息 默认不显示
|
|
showSuccess: false,
|
|
showSuccess: false,
|
|
@@ -134,55 +116,6 @@ http.interceptors.request.use(
|
|
config.url = config.url + '?' + paramsStr
|
|
config.url = config.url + '?' + paramsStr
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
- // 开启参数加密
|
|
|
|
- if (config.custom?.openEncryption) {
|
|
|
|
- const { getTimeDifference, setTimeDifference, systemInfo } = useSystem()
|
|
|
|
- const raw = config.url.split('?')[1]
|
|
|
|
- const body = {
|
|
|
|
- ...typeof config.data === 'string' ? JSON.parse(config.data) : config.data,
|
|
|
|
- ...typeof config.params === 'string' ? JSON.parse(config.params) : config.params
|
|
|
|
- }
|
|
|
|
- if (!systemInfo?.timeDifference) {
|
|
|
|
- const _difference = await getTimeDifference()
|
|
|
|
- setTimeDifference(_difference)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- const header = encryptionFun({
|
|
|
|
- raw,
|
|
|
|
- body,
|
|
|
|
- appId: 'web_client',
|
|
|
|
- AppSecret: 'fa0fc0b5098b974b',
|
|
|
|
- timestamp: new Date().getTime() + (Number(systemInfo?.timeDifference) || 0),
|
|
|
|
- })
|
|
|
|
- const content = {
|
|
|
|
- data: config.data,
|
|
|
|
- params: config.params,
|
|
|
|
- body,
|
|
|
|
- raw,
|
|
|
|
- config
|
|
|
|
- }
|
|
|
|
- // 记录请求备用-签名错误后重试
|
|
|
|
-
|
|
|
|
- errorData.push({
|
|
|
|
- time: header.timestamp,
|
|
|
|
- url: config.url,
|
|
|
|
- content
|
|
|
|
- })
|
|
|
|
- Object.assign(config.header, header)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (uni.getStorageSync('token')) {
|
|
|
|
- // 截取request url
|
|
|
|
- const url = getSuffixAfterPrefix(config.url)
|
|
|
|
- if (url) getEventList()
|
|
|
|
- if (!url || !clickTrigger.length) return config
|
|
|
|
- const _obj = clickTrigger.find(e => e.url === url)
|
|
|
|
- if (_obj) {
|
|
|
|
- getIntegral(_obj.url)
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
return config;
|
|
return config;
|
|
},
|
|
},
|
|
(error) => {
|
|
(error) => {
|
|
@@ -200,66 +133,26 @@ http.interceptors.response.use(
|
|
const useUserStore = userStore()
|
|
const useUserStore = userStore()
|
|
useUserStore.setToken(response.data.data.accessToken, response.data.data.refreshToken);
|
|
useUserStore.setToken(response.data.data.accessToken, response.data.data.refreshToken);
|
|
}
|
|
}
|
|
- if (response.config.url.includes(RETURNED_API)) {
|
|
|
|
- if (!response.data.data || !response.data.data.length) return
|
|
|
|
-
|
|
|
|
- // 目前先默认展示返回的第一个,后续需改为展示多个内容
|
|
|
|
- const item = response.data.data && response.data.data.length ? response.data.data[0] : {}
|
|
|
|
- if (item.match) {
|
|
|
|
- uni.showModal({
|
|
|
|
- title: '系统提示',
|
|
|
|
- content: `恭喜您 【${item.title}】获得${item.point}积分`,
|
|
|
|
- showCancel: false,
|
|
|
|
- confirmText: '关闭',
|
|
|
|
- confirmColor: '#00B760'
|
|
|
|
- })
|
|
|
|
- }
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- const config = response.config
|
|
|
|
|
|
|
|
// 自定处理【loading 加载中】:如果需要显示 loading,则关闭 loading
|
|
// 自定处理【loading 加载中】:如果需要显示 loading,则关闭 loading
|
|
response.config.custom.showLoading && closeLoading();
|
|
response.config.custom.showLoading && closeLoading();
|
|
|
|
|
|
// 自定义处理【error 错误提示】:如果需要显示错误提示,则显示错误提示
|
|
// 自定义处理【error 错误提示】:如果需要显示错误提示,则显示错误提示
|
|
- if (response.data.code !== 0) {
|
|
|
|
|
|
+ // if (response.data.code !== 0) {
|
|
// 特殊:如果 401 错误码,则跳转到登录页 or 刷新令牌
|
|
// 特殊:如果 401 错误码,则跳转到登录页 or 刷新令牌
|
|
- if (response.data.code === 401) {
|
|
|
|
- return handleRefreshToken(response.config);
|
|
|
|
- }
|
|
|
|
|
|
+ // if (response.data.code === 401) {
|
|
|
|
+ // return handleRefreshToken(response.config);
|
|
|
|
+ // }
|
|
|
|
|
|
- // 签名错误
|
|
|
|
- if (response.data.code === 440) {
|
|
|
|
- // 更新服务器与用户时间差的值
|
|
|
|
- const { setTimeDifference } = useSystem()
|
|
|
|
- if (Number(response?.data?.msg)) setTimeDifference(response.data.msg - new Date().getTime())
|
|
|
|
- // 请求重试
|
|
|
|
- signErrRetry(response.config)
|
|
|
|
- // 保存错误信息
|
|
|
|
- const _index = errorData.findIndex(e => e.url === config.url && e.time === +config.header.timestamp)
|
|
|
|
- if (_index > -1) {
|
|
|
|
- const _d = errorData.splice(_index, 1)
|
|
|
|
- const _item = _d[0]
|
|
|
|
- sendError({ content: JSON.stringify(_item.content), mark: _item.time + '' })
|
|
|
|
- }
|
|
|
|
- response.config.custom.showError = false // 不弹错误弹窗
|
|
|
|
- }
|
|
|
|
|
|
+ // uni.showToast({
|
|
|
|
+ // title: response.data.msg || '服务器开小差啦,请稍后再试~',
|
|
|
|
+ // icon: 'none',
|
|
|
|
+ // duration: 2000,
|
|
|
|
+ // mask: true,
|
|
|
|
+ // });
|
|
|
|
|
|
- // 错误提示
|
|
|
|
- if (response.config.custom.showError) {
|
|
|
|
- if (response.data?.msg === '重复请求,请稍后重试') console.error('前台打印: 重复请求,请稍后重试')
|
|
|
|
- else {
|
|
|
|
- uni.showToast({
|
|
|
|
- title: response.data.msg || '服务器开小差啦,请稍后再试~',
|
|
|
|
- icon: 'none',
|
|
|
|
- duration: 2000,
|
|
|
|
- mask: true,
|
|
|
|
- });
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- return Promise.reject(response.data);
|
|
|
|
- }
|
|
|
|
|
|
+ // return Promise.reject(response.data);
|
|
|
|
+ // }
|
|
|
|
|
|
// 自定义处理【showSuccess 成功提示】:如果需要显示成功提示,则显示成功提示
|
|
// 自定义处理【showSuccess 成功提示】:如果需要显示成功提示,则显示成功提示
|
|
if (response.config.custom.showSuccess && response.config.custom.successMsg !== '' && response.data.code === 0) {
|
|
if (response.config.custom.showSuccess && response.config.custom.successMsg !== '' && response.data.code === 0) {
|
|
@@ -270,17 +163,6 @@ http.interceptors.response.use(
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
- // 请求成功后触发获取积分
|
|
|
|
- if (uni.getStorageSync('token')) {
|
|
|
|
- const url = getSuffixAfterPrefix(response.config.url)
|
|
|
|
- if (url) getEventList()
|
|
|
|
- if (!url || !requestCompletionTrigger.length) return response.data
|
|
|
|
- const _obj = requestCompletionTrigger.find(e => e.url === url)
|
|
|
|
- if (_obj) {
|
|
|
|
- getIntegral(_obj.url)
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
// 返回结果:包括 code + data + msg
|
|
// 返回结果:包括 code + data + msg
|
|
return Promise.resolve(response.data);
|
|
return Promise.resolve(response.data);
|
|
},
|
|
},
|
|
@@ -430,44 +312,6 @@ const handleAuthorized = () => {
|
|
})
|
|
})
|
|
}
|
|
}
|
|
|
|
|
|
-/**
|
|
|
|
- * 处理440签名错误
|
|
|
|
-*/
|
|
|
|
-const maxRetries = 2 // 设置签名错误重试请求次数,超出次数弹出错误
|
|
|
|
-const retryDelay = 1000 // 请求延迟
|
|
|
|
-const signErrRetry = (config) => {
|
|
|
|
- if (config) {
|
|
|
|
- if (!config?.custom?.retryCount) {
|
|
|
|
- config.custom.retryCount = 0
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // 超过重试次数
|
|
|
|
- if (config.custom.retryCount >= maxRetries) {
|
|
|
|
- uni.showToast({
|
|
|
|
- title: '网络请求错误!',
|
|
|
|
- icon: 'none',
|
|
|
|
- mask: false,
|
|
|
|
- });
|
|
|
|
- return Promise.reject({ statusCode: 440 })
|
|
|
|
- }
|
|
|
|
- // 重试
|
|
|
|
- config.custom.retryCount++
|
|
|
|
- setTimeout(() => {
|
|
|
|
- return request(config)
|
|
|
|
- }, retryDelay)
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-// 触发获取积分
|
|
|
|
-const getIntegral = (url) => {
|
|
|
|
- rewardEventTrackClick(url).then(() => {})
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/** 获得必填人才信息情况 */
|
|
|
|
-export const showNecessaryInfoPopup = () => {
|
|
|
|
- return uni.getStorageSync('necessaryInfoReady') === 'student';
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
/** 获得访问令牌 */
|
|
/** 获得访问令牌 */
|
|
export const getAccessToken = () => {
|
|
export const getAccessToken = () => {
|
|
return uni.getStorageSync('token');
|
|
return uni.getStorageSync('token');
|