Files
ebiz-h5/src/assets/js/utils/request.js
2025-09-22 14:58:20 +08:00

332 lines
10 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 axios from 'axios'
import {
MD5,
RSAEncrypt,
AESEncryptV2,
AESDecryptV2,
AESEncrypt,
AESDecrypt,
randomString,
publicKey,
SHA256
} from '@/assets/js/utils/cryptoJsUtil'
import configApp from '@/config'
import { Dialog, Toast } from 'vant'
// import MD5 from 'js-md5'
import CacheUtils from '@/assets/js/utils/cacheUtils'
import BusinessCommon from '@/assets/js/business-common'
let proposal = [
'/proposal/proposal/list',
'/proposal/proposal/toInsurance',
'/proposal/proposal/info',
'/proposal/proposal/demo',
'/proposal/proposal/saveOrUpdateProposal',
'/proposal/proposal/updateInsured',
'/proposal/file/getFile',
'/proposal/proposal/deleteProposal'
] //建议书
//理赔
let claims = [
`/claim/claimApply/progress`,
`/claim/claimApply/progressDetail`,
`/claim/claimReport/history`,
`/claim/claimApply/apply`,
`/edor/customer/customerList`,
`/edor/customer/customerInfo`,
`/claim/claimApply/query`,
`/claim/claimApply/delete`
]
//在线投保
let sale = [
'/sale/order/orderList',
'/sale/order/saveOrUpdateOrderInfo',
'/sale/order/orderList',
'/sale/order/deleteOrderInfo',
'/sale/product/getDetail',
'/sale/order/saveOrUpdateOrderInfo',
'/sale/order/orderDetail',
'/customer/authcode/loginedSend',
'/uploadImage',
'/sale/insure/underWrite',
'/sale/insure/acceptInsurance',
'/app/code/getCodeValue',
'/customer/token',
'/media/ebizSignInfo/sign',
'/sale/receiptSign/submit',
'/sale/order/orderDetail',
'/sale/record/check',
'/ppf/sign',
'/ppf/check',
'/sale/insure/selfToHuman',
'/sale/insure/orderPayStatusQuery',
'/sale/order/revokeOrder',
'/sale/product/getcompany',
'/sale/product/occupationCodeCheck'
] //在线投保
let agentEnter = [
'/agent/enter/share',
'/agent/enter/query',
'/agent/enter/saveOrUpdateInfo',
'/agent/enter/queryAll',
'/agent/enter/getImpart',
'/agent/agreement/query',
'/agent/agreement/signAgreement',
'/agent/enter/query',
'/agent/examineApprove/dispose' //入司增员审批
]
let survey = [
//'/customer/question/getQuestionnaire', // 代理人下问卷查询 --ok
'/customer/question/getQuestion', // 问卷题库查询
'/customer/question/submit', // 问卷提交
//'/customer/question/shareSubmit', //问卷分享 --ok
//'/customer/question/getTableId', // id 查询 -- ok
'/customer/question/getAgentInfo' // 代理人详情
]
let manpower = [
'/customer/answer/queryList' //DISC性格分析
]
let productStore = [
'/customer/shop/getShopList', //获取商城列表/详情
'/customer/shop/getShareList' //查询分享轨迹(转发记录)
]
//续期管理
let renewalManage = [
'/renewal/getRenewalList' //续期列表查询
]
//保全
let preserve = [
'/edor/customer/customerList', //客户搜索
'/edor/policy/policyList', //保单列表
'/edor/edor/queryEdorList' //保全进度查询
]
// 个险业绩排行优化
let performanceRanking = ['/data/performance/getComList', '/data/performance/getComPerformance']
// 惠桂保
let hgb = ['/sale/order/selectHgb', '/sale/order/getHgbDetail']
let whitelist = ['/agent/white/getWhiteInfo']
// 开门红
let goodStart = ['/data/performance/getComPerformance']
let eqiVisit = [
'/agent/accompany/getAccompanyComCode',
'/agent/accompany/getAccompanyPerson',
'/agent/accompany/getAgentAccompanyRecordPage',
'/agent/accompany/saveAccompanyRecord',
'/agent/accompany/getAccompanyDetail',
'/agent/reward/getRewardRecord',
'/agent/reward/getAccompanyRank'
]
let whiteList = [
'/customer/agent/getCustomersList',
...proposal,
...sale,
...agentEnter,
...claims,
...survey,
...manpower,
...preserve,
...productStore,
...renewalManage,
...performanceRanking,
...hgb,
...whitelist,
...goodStart,
...eqiVisit
]
// 创建axios实例
const service = axios.create({
timeout: 66666666 // 请求超时时间
})
// request拦截器
service.interceptors.request.use(
async config => {
let relativePath = config.url && config.url.split(configApp.API_VERSION)[1]
if (whiteList.includes(relativePath)) {
Toast.loading({
duration: 0, // 持续展示 toast
forbidClick: true, // 禁用背景点击
loadingType: 'spinner',
message: '加载中……'
})
}
let masterKey
if (configApp.API_VERSION == 'v3') {
// 生成本次请求随机密钥
if (!window.localStorage.getItem('masterKey')) {
masterKey = randomString();
window.localStorage.setItem('masterKey', masterKey)
} else {
masterKey = window.localStorage.getItem('masterKey')
}
}
// token 不存在初始化处理
let token = CacheUtils.getLocItem('token')
/**
* 请求拦截处理(待添加 判断走统一网关处理)
*/
// console.log(config)
if (config.url && /api\/$/.test(config.url.split(configApp.API_VERSION)[0]) && (configApp.API_VERSION == 'v2' || configApp.API_VERSION == 'v3')) {
if (!config.data || config.data == null) {
config.data = {}
}
if (!!config.data && config.data != null) {
if (configApp.API_VERSION == 'v3') {
// console.log('随机密钥:' + masterKey);
// RSA加密随机密钥
let ak = RSAEncrypt(masterKey, publicKey);
// console.log('加密后的masterKey' + ak);
// 随机密钥加密data
let data = AESEncrypt(JSON.stringify(config.data), masterKey);
// console.log('MD5值' + MD5(AESEncrypt(data, masterKey)).toString());
// 验证数据完整性MD5
// 数据完整性MD5需要进行二次AES加密
config.headers['signature'] = SHA256(AESEncrypt(data, masterKey)).toString();
if (config.method == 'get') {
config.headers['ak'] = ak
config.headers['data'] = data
}
config.data = { ak, data };
// console.log(config.data);
if (AESDecrypt(config.data.data, masterKey)) {
// console.log(JSON.parse(AESDecrypt(config.data.data, masterKey)));
} else {
// console.log(AESDecrypt(config.data.data, masterKey));
}
} else if (configApp.API_VERSION == 'v2') {
config.headers['signature'] = MD5(timeStr + CacheUtils.getLocItem('token'))
let encrypt = AESEncryptV2(JSON.stringify(config.data), configApp.REQ_PWD)
config.data = { data: encrypt }
}
}
}
if (!token) {
console.log('token====>>', token)
// 设备类型
const target = BusinessCommon.device()
// 安卓or苹果(非浏览器)
if (!target.isWeixin && target.mobile) {
// console.log(to.meta.name, 'to.meta.name');
// eslint-disable-next-line no-undef
let u = navigator.userAgent;
let isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //判断是否是 android终端
if (isAndroid) {
// setTimeout(() => {
if (window.location.hash !== '#/my/privacyPolicy' && window.location.hash !== '#/YB_agentSign/step1' && window.location.hash !== '#/YB_agentSign/step2') {
console.log(window.Android.getToken(), 'Android获取token')
CacheUtils.setLocItem('token', window.Android.getToken())
}
// }, 1000)
} else {
// const res = await EWebBridge.webCallAppInJs('getToken')
// CacheUtils.setLocItem('token', JSON.parse(res).token)
if (window.location.hash !== '#/my/privacyPolicy') {
const res = await EWebBridge.webCallAppInJs('getToken')
CacheUtils.setLocItem('token', JSON.parse(res).token)
}
}
}
}
config.headers['token'] = CacheUtils.getLocItem('token')
// 添加请时间戳
let timeStr = new Date().getTime() + ''
config.headers['timeStr'] = timeStr
return config
},
error => {
// Do something with request error
Promise.reject(error)
}
)
// respone拦截器
service.interceptors.response.use(
response => {
if (response.config.responseType) {
return response.data
}
let res = response.data
if (
(configApp.API_VERSION == 'v2' || configApp.API_VERSION == 'v3') &&
response.config.url &&
response.headers['content-type'].match(/application\/json/) &&
/api\/$/.test(response.config.url.split(configApp.API_VERSION)[0])
) {
if (res.response) {
if (configApp.API_VERSION == 'v3') {
// 正常情況返回必有response 节点
// 返回结果的随机密钥
let masterKey;
if (!window.localStorage.getItem('masterKey')) {
return Promise.reject('密钥失效')
} else {
masterKey = window.localStorage.getItem('masterKey');
}
// console.log('请求结果response' + response)
// console.log('请求结果masterKey' + masterKey)
// console.log(JSON.parse(AESDecrypt(response.data.response, masterKey)))
// 使用随机密钥解密返回结果data
res = JSON.parse(AESDecrypt(res.response, masterKey))
} else if (configApp.API_VERSION == 'v2') {
// 使用固定密钥解密返回结果data
res = JSON.parse(AESDecryptV2(res.response, configApp.REQ_PWD))
// console.log(res,'JSON.parse(AESDecrypt(res.response, configApp.REQ_PWD))')
}
}
}
Toast.clear()
if (res.code != 0) {
//10001 token不能为空 10002 token错误或已失效
if (res.code == 10001 || res.code == 10002) {
var ua = window.navigator.userAgent.toLowerCase();
//通过正则表达式匹配ua中是否含有MicroMessenger字符串, 在微信
if (ua.match(/MicroMessenger/i) == 'micromessenger') {
Dialog.alert({
title: '提示',
confirmButtonText: '退出',
message: '当前链接已失效,请您联系业务员获取(重新分享)。',
}).then(() => {
window.close();
WeixinJSBridge.call('closeWindow');
});
} else {
//在app
Dialog.confirm({
confirmButtonText: '重新登录',
message: '你已被登出,可以取消继续留在该页面,或者重新登录'
}).then(() => {
//eslint-disable-next-line
EWebBridge.webCallAppInJs('bridge', {
flag: 'login'
})
})
}
} else {
//Toast.fail(res.msg)
}
return Promise.reject(res)
} else {
return res.content
}
},
error => {
Toast.clear()
console.log('err' + error) // for debug
//Toast.fail(error.message)
return Promise.reject(error)
}
)
export default service