diff --git a/package.json b/package.json index 11951032c..c012f3b80 100644 --- a/package.json +++ b/package.json @@ -22,9 +22,11 @@ "dependencies": { "axios": "^0.19.0", "core-js": "^2.6.5", + "crypto-js": "^4.0.0", "echarts": "^4.2.1", "fastclick": "^1.0.6", "js-base64": "^2.5.1", + "js-md5": "^0.7.3", "nprogress": "^0.2.0", "pdfh5": "^1.2.13", "vant": "2.2.0", diff --git a/src/api/ebiz/agentEenter/agentEenter.js b/src/api/ebiz/agentEenter/agentEenter.js index 96795821f..ec80e9857 100644 --- a/src/api/ebiz/agentEenter/agentEenter.js +++ b/src/api/ebiz/agentEenter/agentEenter.js @@ -25,6 +25,15 @@ export function saveOrUpdateInfo(data) { data }) } + +export function getTokenForUserModel(data) { + return request({ + url: getUrl('/agent/enter/getTokenForAgent', 1), + method: 'get', + data + }) +} + // //查询二次分享数据 // export function getTokenForUserModel(data) { // console.log('查询二次分享', data) diff --git a/src/api/ebiz/claims/claims.js b/src/api/ebiz/claims/claims.js index 47686d971..bb5deb1e6 100644 --- a/src/api/ebiz/claims/claims.js +++ b/src/api/ebiz/claims/claims.js @@ -29,13 +29,13 @@ export function history(data) { } // //历史报案详情接口 -// export function historyDetail(data) { -// return request({ -// url: getUrl(`/claim/claimReport/historyDetail`, 1), -// method: 'post', -// data -// }) -// } +export function historyDetail(data) { + return request({ + url: getUrl(`/claim/claimReport/historyDetail`, 1), + method: 'get', + data + }) +} //理赔申请 export function apply(data) { diff --git a/src/api/ebiz/common/common.js b/src/api/ebiz/common/common.js index 95c52828d..33713e7e0 100644 --- a/src/api/ebiz/common/common.js +++ b/src/api/ebiz/common/common.js @@ -62,3 +62,31 @@ export function wxShare(data) { data }) } + +//验证代理人访问 +export function checkEnterPower(data) { + return request({ + url: getUrl('/customer/agent/checkEnterPower', 1), + method: 'post', + data + }) +} + +// 获取验证码 +export function getAuthCode(data) { + return request({ + url: getUrl('/customer/authcode/loginedSend', 1), + method: 'post', + data + }) +} + +// 获取代理人信息 +export function getCheckModelAgentInfo(data) { + return request({ + // url: getUrl('/agent/agent/info', 0), + url: getUrl('/customer/agent/info', 1), + method: 'post', + data + }) +} diff --git a/src/api/ebiz/my/my.js b/src/api/ebiz/my/my.js index a025b8cb4..7be20da6a 100644 --- a/src/api/ebiz/my/my.js +++ b/src/api/ebiz/my/my.js @@ -56,3 +56,31 @@ export function queryPrivacy(data) { data }) } + +//获取隐私政策 +export function queryPrivacyNot(data) { + return request({ + // url: getUrl('/agent/income/info', 0), + url: getUrl('/customer/privacy/queryPrivacy', 1), + method: 'post', + data + }) +} + +//注销用户 +export function logoutAgent(data) { + return request({ + url: getUrl('/customer/account/logoutAgent', 1), + method: 'post', + data + }) +} + +//登录用户 +export function loginTest(data) { + return request({ + url: getUrl('/customer/account/login', 1), + method: 'post', + data + }) +} \ No newline at end of file diff --git a/src/assets/js/business-common.js b/src/assets/js/business-common.js index 8959a7550..6dd58aaac 100644 --- a/src/assets/js/business-common.js +++ b/src/assets/js/business-common.js @@ -1,4 +1,5 @@ import utilsAge from '@/assets/js/utils/age' +import CacheUtils from '@/assets/js/utils/cacheUtils' /** * @desc 扩展对象继承 * @param {Object} out 一个或多个对象 @@ -179,7 +180,7 @@ export default { * @return {*} rs */ getStorage(name) { - return this._string2json(window.localStorage[name]) + return this._string2json(CacheUtils.getLocItem(name)) }, /** @@ -187,7 +188,7 @@ export default { * @param {String} name 名称 */ setStorage(name, value) { - window.localStorage[name] = this._json2string(value) + CacheUtils.setLocItem(name,this._json2string(value)) }, /** @@ -195,7 +196,7 @@ export default { * @param {String} name 名称 */ delStorage(name) { - window.localStorage.removeItem(name) + CacheUtils.removeLocItem(name) }, /** @@ -532,46 +533,49 @@ export default { insuredDTO = res.orderDTO.insuredDTOs[0] } let age = utilsAge.getAge(appntDTO.birthday, new Date()) - localStorage.saleInsuredInfo = JSON.stringify({ - workcompany: appntDTO.workcompany, - birthday: appntDTO.birthday, - name: appntDTO.name, - sex: appntDTO.sex, - idType: appntDTO.idType, - age, - idNo: appntDTO.idNo, - appntId: appntDTO.appntId, - healthGrade: appntDTO.healthGrade, - lifeGrade: appntDTO.lifeGrade, - mobile: appntDTO.mobile, - occupationName: appntDTO.occupationName, - occupationCode: appntDTO.occupationCode, - // marriage: appntDTO.marriage, - medical: appntDTO.medical, - certiexpiredate: appntDTO.certiexpiredate, - nativeplace: appntDTO.nativeplace - }) + CacheUtils.setLocItem('saleInsuredInfo', + JSON.stringify({ + workcompany: appntDTO.workcompany, + birthday: appntDTO.birthday, + name: appntDTO.name, + sex: appntDTO.sex, + idType: appntDTO.idType, + age, + idNo: appntDTO.idNo, + appntId: appntDTO.appntId, + healthGrade: appntDTO.healthGrade, + lifeGrade: appntDTO.lifeGrade, + mobile: appntDTO.mobile, + occupationName: appntDTO.occupationName, + occupationCode: appntDTO.occupationCode, + // marriage: appntDTO.marriage, + medical: appntDTO.medical, + certiexpiredate: appntDTO.certiexpiredate, + nativeplace: appntDTO.nativeplace + }) + ) if (insuredDTO) { let insuredPersonAge = utilsAge.getAge(insuredDTO.birthday, new Date()) - localStorage.saleInsuredPersonInfo = JSON.stringify({ - birthday: insuredDTO.birthday, - name: insuredDTO.name, - sex: insuredDTO.sex, - idType: insuredDTO.idType, - age: insuredPersonAge, - // marriage: insuredDTO.marriage, - relationToAppnt: insuredDTO.relationToAppnt, - medical: insuredDTO.medical, - occupationName: insuredDTO.occupationName, - occupationCode: insuredDTO.occupationCode, - insuredId: insuredDTO.insuredId, - idNo: insuredDTO.idNo, - healthGrade: insuredDTO.healthGrade, - lifeGrade: insuredDTO.lifeGrade, - mobile: insuredDTO.mobile - }) - + CacheUtils.setLocItem('saleInsuredPersonInfo', + JSON.stringify({ + birthday: insuredDTO.birthday, + name: insuredDTO.name, + sex: insuredDTO.sex, + idType: insuredDTO.idType, + age: insuredPersonAge, + // marriage: insuredDTO.marriage, + relationToAppnt: insuredDTO.relationToAppnt, + medical: insuredDTO.medical, + occupationName: insuredDTO.occupationName, + occupationCode: insuredDTO.occupationCode, + insuredId: insuredDTO.insuredId, + idNo: insuredDTO.idNo, + healthGrade: insuredDTO.healthGrade, + lifeGrade: insuredDTO.lifeGrade, + mobile: insuredDTO.mobile + }) + ) let [chooseProductCodes, mainRiskCodes, addRiskCodes] = [[], [], []] if (insuredDTO.riskDTOLst && insuredDTO.riskDTOLst.length > 0) { insuredDTO.riskDTOLst.forEach(item => { @@ -583,15 +587,15 @@ export default { } }) } - localStorage.mainRiskCodes = JSON.stringify(mainRiskCodes) - localStorage.oldAddRiskCodes = JSON.stringify(addRiskCodes) - localStorage.chooseProductCodes = JSON.stringify(chooseProductCodes) + CacheUtils.setLocItem('mainRiskCodes',JSON.stringify(mainRiskCodes)) + CacheUtils.setLocItem('oldAddRiskCodes',JSON.stringify(addRiskCodes)) + CacheUtils.setLocItem('chooseProductCodes',JSON.stringify(chooseProductCodes)) } else { - localStorage.mainRiskCodes = '' - localStorage.oldAddRiskCodes = '' - localStorage.chooseProductCodes = '' + CacheUtils.setLocItem('mainRiskCodes','') + CacheUtils.setLocItem('oldAddRiskCodes','') + CacheUtils.setLocItem('chooseProductCodes','') if (!isProposal) { - localStorage.saleInsuredPersonInfo = '' + CacheUtils.setLocItem('saleInsuredPersonInfo','') } } }, diff --git a/src/assets/js/common.js b/src/assets/js/common.js index 5d26561ef..b7706cf0c 100644 --- a/src/assets/js/common.js +++ b/src/assets/js/common.js @@ -1,3 +1,4 @@ +import CacheUtils from '@/assets/js/utils/cacheUtils' /** * @desc 扩展对象继承 * @param {Object} out 一个或多个对象 @@ -117,7 +118,7 @@ export default { * @return {*} rs */ getStorage(name) { - return this._string2json(window.localStorage[name]) + return this._string2json(CacheUtils.getLocItem(name)) }, /** @@ -125,7 +126,7 @@ export default { * @param {String} name 名称 */ setStorage(name, value) { - window.localStorage[name] = this._json2string(value) + CacheUtils.setLocItem(name,this._json2string(value)) }, /** @@ -133,7 +134,7 @@ export default { * @param {String} name 名称 */ delStorage(name) { - window.localStorage.removeItem(name) + CacheUtils.removeLocItem(name) }, /** diff --git a/src/assets/js/utils/cacheUtils.js b/src/assets/js/utils/cacheUtils.js new file mode 100644 index 000000000..9a6317ae2 --- /dev/null +++ b/src/assets/js/utils/cacheUtils.js @@ -0,0 +1,59 @@ +import AESTools from '@/assets/js/utils/cryptoJsUtil' +import configApp from '@/config' +import cacheKeys from './needCacheKey' +export default { + setLocItem: function(key, value) { + const exist = cacheKeys.encodeKeys.find(item => { + return item === key + }) + //设置localStorage 值 + if (cacheKeys.isAll || exist) { + window.localStorage.setItem(key, AESTools.AESCacheEncrypt(value, configApp.CACHE_ENCRYP)) + } else { + window.localStorage.setItem(key, value) + } + }, + getLocItem: function(key) { + // 获取localStorage 中值 + let value = window.localStorage.getItem(key) + if (value && value != '') { + const exist = cacheKeys.encodeKeys.find(item => { + return item === key + }) + if (cacheKeys.isAll || exist) { + return AESTools.AESCacheDecrypt(value, configApp.CACHE_ENCRYP) + } + } + return value + }, + removeLocItem: function(key) { + // 获取localStorage 中值 + window.localStorage.removeItem(key) + }, + setSessionItem: function(key, value) { + //设置sessionStorage 值 + const exist = cacheKeys.encodeKeys.find(item => { + return item === key + }) + //设置localStorage 值 + if (cacheKeys.isAll || exist) { + window.sessionStorage.setItem(key, AESTools.AESCacheEncrypt(value, configApp.CACHE_ENCRYP)) + } else { + window.sessionStorage.setItem(key, value) + } + }, + getSessionItem: function(key) { + //设置sessionStorage 值 + let value = window.sessionStorage.getItem(key) + if (value && value != '') { + const exist = cacheKeys.encodeKeys.find(item => { + return item === key + }) + //设置localStorage 值 + if (cacheKeys.isAll || exist) { + return AESTools.AESCacheDecrypt(value, configApp.CACHE_ENCRYP) + } + } + return value + } +} diff --git a/src/assets/js/utils/cryptoJsUtil.js b/src/assets/js/utils/cryptoJsUtil.js new file mode 100644 index 000000000..1c0bc34b1 --- /dev/null +++ b/src/assets/js/utils/cryptoJsUtil.js @@ -0,0 +1,47 @@ +import CryptoJS from 'crypto-js' +export default { + AESEncrypt: function (data, keys) {//加密 + var key = CryptoJS.enc.Hex.parse(keys) + var iv = CryptoJS.enc.Utf8.parse('0123456789ABCDEF');//偏移量 + var encrypted = CryptoJS.AES.encrypt(data, key, + { + iv: iv, + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7 + }); + return encrypted.toString(); + }, + AESDecrypt: function (encrypted, keys) {//解密 + var key = CryptoJS.enc.Hex.parse(keys) + var iv = CryptoJS.enc.Utf8.parse('0123456789ABCDEF'); + var decrypted = CryptoJS.AES.decrypt( encrypted, key, + { + iv: iv, + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7 + }); + return CryptoJS.enc.Utf8.stringify(decrypted) + }, + AESCacheEncrypt: function (data, keys) {//加密 緩存 + var key = CryptoJS.enc.Hex.parse(keys) + var iv = CryptoJS.enc.Utf8.parse('0123456789ABCDEF');//偏移量 + var encrypted = CryptoJS.AES.encrypt(data, key, + { + iv: iv, + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7 + }); + return encrypted.toString(); + }, + AESCacheDecrypt: function (encrypted, keys) {//解密 緩存 + var key = CryptoJS.enc.Hex.parse(keys) + var iv = CryptoJS.enc.Utf8.parse('0123456789ABCDEF'); + var decrypted = CryptoJS.AES.decrypt( encrypted, key, + { + iv: iv, + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7 + }); + return CryptoJS.enc.Utf8.stringify(decrypted) + } +} diff --git a/src/assets/js/utils/needCacheKey.js b/src/assets/js/utils/needCacheKey.js new file mode 100644 index 000000000..cfa7d3667 --- /dev/null +++ b/src/assets/js/utils/needCacheKey.js @@ -0,0 +1,9 @@ +export default { + isAll: false, + encodeKeys: [ + 'saleInsuredInfo', + 'saleInsuredPersonInfo', + 'appntDTO', + 'proposalAppnt' + ] +} diff --git a/src/assets/js/utils/orgShortName.js b/src/assets/js/utils/orgShortName.js new file mode 100644 index 000000000..91ba635f2 --- /dev/null +++ b/src/assets/js/utils/orgShortName.js @@ -0,0 +1,30 @@ +export const orgShortNames = [ + { name: '北海', code: '86450501' }, + { name: '广西八营', code: '86450168' }, + { name: '广西二营', code: '86450162' }, + { name: '广西六营', code: '86450166' }, + { name: '广西七营', code: '86450167' }, + { name: '广西三营', code: '86450163' }, + { name: '广西四营', code: '86450164' }, + { name: '广西五营', code: '86450165' }, + { name: '贵港', code: '86450801' }, + { name: '贵港一营', code: '86450861' }, + { name: '桂林二本', code: '86450302' }, + { name: '桂林一本', code: '86450301' }, + { name: '桂林一营', code: '86450361' }, + { name: '柳州一本', code: '86450201' }, + { name: '柳州二本', code: '86450202' }, + { name: '柳州四营', code: '86450264' }, + { name: '柳州一营', code: '86450261' }, + { name: '柳州鹿寨', code: '86450203' }, + { name: '南宁民族', code: '86450103' }, + { name: '精英项目', code: '86450102' }, + { name: '南宁青秀', code: '86450101' }, + { name: '南宁一营', code: '86450181' }, + { name: '梧州', code: '86450401' }, + { name: '梧州一营', code: '86450461' }, + { name: '玉林二营', code: '86450962' }, + { name: '玉林', code: '86450901' }, + { name: '玉林三营', code: '86450963' }, + { name: '玉林一营', code: '86450961' } +] diff --git a/src/assets/js/utils/permission.js b/src/assets/js/utils/permission.js index 8eb326857..10caec395 100644 --- a/src/assets/js/utils/permission.js +++ b/src/assets/js/utils/permission.js @@ -1,5 +1,6 @@ //权限控制 import router from '@/router' +import CacheUtils from '@/assets/js/utils/cacheUtils' // import NProgress from 'nprogress' // Progress 进度条 // import 'nprogress/nprogress.css' // Progress 进度条样式 export function permission() { @@ -11,9 +12,9 @@ export function permission() { document.title = title } //判断是否登录 - let token = localStorage.token + let token = CacheUtils.getLocItem('token') if (!token) { - localStorage.token = '' + CacheUtils.setLocItem('token','') //无token,判断是否需要登录 if (to.meta.auth) { if (window.WebViewJavascriptBridge) { diff --git a/src/assets/js/utils/request.js b/src/assets/js/utils/request.js index 648d3b523..0808f4fef 100644 --- a/src/assets/js/utils/request.js +++ b/src/assets/js/utils/request.js @@ -1,6 +1,11 @@ import axios from 'axios' +import AESTools from '@/assets/js/utils/cryptoJsUtil' +import configApp from '@/config' import { Dialog, Toast } from 'vant' -import BusinessCommon from '@/assets/js/business-common.js' +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', @@ -106,7 +111,7 @@ const service = axios.create({ // request拦截器 service.interceptors.request.use( async config => { - let relativePath = config.url && config.url.split('v1')[1] + let relativePath = config.url && config.url.split(configApp.API_VERSION)[1] if (whiteList.includes(relativePath)) { Toast.loading({ duration: 0, // 持续展示 toast @@ -115,27 +120,37 @@ service.interceptors.request.use( message: '加载中……' }) } - - let token = window.localStorage.getItem('token') /** - * 在HomeProduct页面获取代理人信息时, 客户端可能还未将token存储在本地 - * 此时如果token为空, 调用客户端方法获取token并放入localstorage中 + * 请求拦截处理(待添加 判断走统一网关处理) */ - console.log('localstorage token: ', token) - if (relativePath === '/customer/agent/info' && !token) { - // 设备类型 - const target = BusinessCommon.device() - // 安卓or苹果 - if (target.isAndroid || target.isIphone) { - // eslint-disable-next-line no-undef - const res = await EWebBridge.webCallAppInJs('getToken') - console.log('调用客户端获取token: ', res) - const token = JSON.parse(res).token - window.localStorage.setItem('token', token) + if (config.url && /api\/$/.test(config.url.split(configApp.API_VERSION)[0]) && configApp.API_VERSION == 'v2') { + if (!config.data || config.data == null) { + config.data = {} + } + if (!!config.data && config.data != null) { + let encrypt = AESTools.AESEncrypt(JSON.stringify(config.data), configApp.REQ_PWD) + config.data = { data: encrypt } } } - config.headers['token'] = token - // config.headers['token'] = `f0003a753d1d492083248f723ab1b6e9`//TEST测试专用 + + // token 不存在初始化处理 + let token = CacheUtils.getLocItem('token') + if (!token) { + // 设备类型 + const target = BusinessCommon.device() + // 安卓or苹果(非浏览器) + if (!target.isWeixin && !target.isChrome) { + // eslint-disable-next-line no-undef + 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 + config.headers['signature'] = MD5(timeStr + CacheUtils.getLocItem('token')) return config }, error => { @@ -147,8 +162,18 @@ service.interceptors.request.use( // respone拦截器 service.interceptors.response.use( response => { - const res = response.data - console.log(res, 'res') + let res = response.data + if ( + configApp.API_VERSION == 'v2' && + response.config.url && + response.headers['content-type'].match(/application\/json/) && + /api\/$/.test(response.config.url.split(configApp.API_VERSION)[0]) + ) { + if (res.response) { + // 正常情況返回必有response 节点 + res = JSON.parse(AESTools.AESDecrypt(res.response, configApp.REQ_PWD)) + } + } Toast.clear() if (res.code != 0) { if (res.code == 10001 || res.code == 10002) { @@ -166,7 +191,7 @@ service.interceptors.response.use( } return Promise.reject(res) } else { - return response.data.content + return res.content } }, error => { diff --git a/src/assets/js/utils/request1.js b/src/assets/js/utils/request1.js index aeb1c6b45..06c68053b 100644 --- a/src/assets/js/utils/request1.js +++ b/src/assets/js/utils/request1.js @@ -1,6 +1,9 @@ import axios from 'axios' import { Dialog, Toast } from 'vant' - +import CacheUtils from '@/assets/js/utils/cacheUtils' +import configApp from "@/config"; +import AESTools from "@/assets/js/utils/cryptoJsUtil"; +import MD5 from 'js-md5'; let sale = ['/sale/order/orderDetail'] //在线投保 // 卡单 @@ -14,57 +17,78 @@ const service = axios.create({ // request拦截器 service.interceptors.request.use( - config => { - let relativePath = config.url && config.url.split('v1')[1] - if (whiteList.includes(relativePath)) { - // Toast.loading({ - // duration: 0, // 持续展示 toast - // forbidClick: true, // 禁用背景点击 - // loadingType: 'spinner', - // message: '加载中……' - // }) + 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: '加载中……' + }) + } + /** + * 请求拦截处理(待添加 判断走统一网关处理) + */ + if(config.url && /api\/$/.test(config.url.split(configApp.API_VERSION)[0]) && configApp.API_VERSION == 'v2'){ + if(!config.data || config.data == null){ + config.data = {} + } + if(!!config.data && config.data != null){ + let encrypt = AESTools.AESEncrypt(JSON.stringify(config.data),configApp.REQ_PWD) + config.data = {"data": encrypt } + } + } + config.headers['token'] = CacheUtils.getLocItem('token') + // 添加请时间戳 + let timeStr = new Date().getTime() + ''; + config.headers['timeStr'] = timeStr; + config.headers['signature'] = MD5(timeStr + CacheUtils.getLocItem('token')); + return config + }, + error => { + // Do something with request error + Promise.reject(error) } - - config.headers['token'] = window.localStorage.getItem('token') - // config.headers['token'] = `` - return config - }, - error => { - // Do something with request error - Promise.reject(error) - } ) // respone拦截器 service.interceptors.response.use( - response => { - const res = response.data - console.log(res, 'res') - - if (res.code != 0) { - if (res.code == 10001 || res.code == 10002) { - 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 response.data.content + response => { + console.log(response) + console.log('----------------') + let res = response.data + if( configApp.API_VERSION == 'v2' && response.config.url && response.headers['content-type'].match(/application\/json/) && /api\/$/.test(response.config.url.split(configApp.API_VERSION)[0])){ + if(res.response){// 正常情況返回必有response 节点 + res = JSON.parse(AESTools.AESDecrypt(res.response,configApp.REQ_PWD)) + } + } + Toast.clear() + if (res.code != 0) { + if (res.code == 10001 || res.code == 10002) { + 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) } - }, - error => { - console.log('err' + error) // for debug - //Toast.fail(error.message) - return Promise.reject(error) - } ) export default service diff --git a/src/assets/js/utils/requestEncryot_back.js b/src/assets/js/utils/requestEncryot_back.js new file mode 100644 index 000000000..e245ed21e --- /dev/null +++ b/src/assets/js/utils/requestEncryot_back.js @@ -0,0 +1,188 @@ +import axios from 'axios' +import AESTools from '@/assets/js/utils/cryptoJsUtil' +import configApp from '@/config' +import { Dialog, Toast } from 'vant' +import CacheUtils from '@/assets/js/utils/cacheUtils' +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 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', + // '/customer/recognition', + '/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' +] //在线投保 +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 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 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 preserve = [ + '/edor/customer/customerList', //客户搜索 + '/edor/policy/policyList', //保单列表 + '/edor/edor/queryEdorList' //保全进度查询 +] + +let productStore = [ + '/customer/shop/getShopList', //获取商城列表/详情 + '/customer/shop/getShareList' //查询分享轨迹(转发记录) +] + +// 卡单 +let cardList = [] + +// 续期 +let renewalManage = [ + '/renewal/getRenewalList' //续期列表查询 +] + +let whiteList = [ + '/customer/agent/getCustomersList', + ...proposal, + ...sale, + ...agentEnter, + ...claims, + ...survey, + ...manpower, + ...productStore, + ...preserve, + ...renewalManage +] + +// 创建axios实例 +const service = axios.create({ + timeout: 66666666 // 请求超时时间 +}) + +// request拦截器 +service.interceptors.request.use( + config => { + let relativePath = config.url && config.url.split('v1')[1] + console.log(config.url.split('v1')[0]) + if (whiteList.includes(relativePath)) { + Toast.loading({ + duration: 0, // 持续展示 toast + forbidClick: true, // 禁用背景点击 + loadingType: 'spinner', + message: '加载中……' + }) + } + /** + * 请求拦截处理(待添加 判断走统一网关处理) + */ + if(config.url && config.method == 'post' && /api\/$/.test(config.url.split('v1')[0])){ + if(!config.data || config.data == null){ + config.data = {} + } + if(!!config.data && config.data != null){ + let encrypt = AESTools.AESEncrypt(JSON.stringify(config.data),configApp.REQ_PWD) + console.log("[调用请求加密服务][请求地址:"+config.url+"][加密前报文:]",JSON.stringify(config.data)) + config.data = {"data": encrypt } + console.log("[调用请求加密服务][请求地址:"+config.url+"][加密后报文:]",config.data) + } + } + config.headers['token'] = CacheUtils.getLocItem('token') + // config.headers['token'] = `f0003a753d1d492083248f723ab1b6e9`//TEST测试专用 + return config + }, + error => { + // Do something with request error + Promise.reject(error) + } +) + +// respone拦截器 +service.interceptors.response.use( + response => { + console.log(response) + let res = response.data + if(response.config.url && response.config.method == 'post' && /api\/$/.test(response.config.url.split('v1')[0])){ + if(res.response){ + console.log("[调用请求加密服务][请求地址:"+response.config.url+"][解密前报文:]",JSON.stringify(res.response)) + res = AESTools.AESDecrypt(JSON.stringify(res.response),configApp.REQ_PWD) + console.log("[调用请求加密服务][请求地址:"+response.config.url+"][解密后报文:]",JSON.stringify(res)) + } + } + Toast.clear() + if (res.code != 0) { + if (res.code == 10001 || res.code == 10002) { + 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 response.data.content + } + }, + error => { + Toast.clear() + console.log('err' + error) // for debug + //Toast.fail(error.message) + return Promise.reject(error) + } +) + +export default service diff --git a/src/components/common/CheckAgent.vue b/src/components/common/CheckAgent.vue new file mode 100644 index 000000000..5cee004b2 --- /dev/null +++ b/src/components/common/CheckAgent.vue @@ -0,0 +1,262 @@ + + + diff --git a/src/components/ebiz/manpower/UserInfoHeader.vue b/src/components/ebiz/manpower/UserInfoHeader.vue index 6e57044fc..aa88ab502 100644 --- a/src/components/ebiz/manpower/UserInfoHeader.vue +++ b/src/components/ebiz/manpower/UserInfoHeader.vue @@ -3,8 +3,8 @@
-

{{ userInfo.name }}

-
工号 | {{ userInfo.jobNo }}
+

{{ userInfo.encryptionName }}

+
工号 | {{ userInfo.encryptionJobNo }}
diff --git a/src/config/index.js b/src/config/index.js index 04608af99..8c11ed74b 100644 --- a/src/config/index.js +++ b/src/config/index.js @@ -5,19 +5,22 @@ * */ -let apiDomain, imgDomain, assetsUrl, mainUrl, payUrl, zssqUrl // 保融支付的收银台服务地址 +let apiDomain, imgDomain, assetsUrl, mainUrl, payUrl, zssqUrl ,REQ_PWD, CACHE_ENCRYP, API_VERSION// 保融支付的收银台服务地址 // 可以多个接口域名,按需添加 console.log('环境:', process.env.VUE_APP_FLAG) switch (process.env.VUE_APP_FLAG) { case 'dev': - apiDomain = 'http://139.199.50.151:7000/api/v1' // 国富api ///api/v1 + apiDomain = 'http://139.199.50.151:7000/api/v2' // 国富api ///api/v1 imgDomain = 'http://211.159.248.123:7012/updown' // dev // 静态服务资源 assetsUrl = 'http://139.199.50.151:8000/app/' mainUrl = 'http://139.199.50.151' payUrl = 'https://funduat.e-guofu.com/s3-modules-gateway/embed/gateway.action' zssqUrl = 'http://139.199.50.151/html/test/index.html#/' + REQ_PWD = '41424344454631323334353637383930' + CACHE_ENCRYP = '41424344454631323334353637383930' + API_VERSION = 'v2' break case 'uat': apiDomain = 'http://115.159.235.59:7000/api/v1' // 国富api @@ -27,14 +30,20 @@ switch (process.env.VUE_APP_FLAG) { mainUrl = 'http://115.159.235.59' payUrl = 'https://funduat.e-guofu.com/s3-modules-gateway/embed/gateway.action' zssqUrl = '' + REQ_PWD = '41424344454631323334353637383930' + CACHE_ENCRYP = '41424344454631323334353637383930' + API_VERSION = 'v2' break case 'prd': - apiDomain = 'https://iagentsales.e-guofu.com/api/v1' + apiDomain = 'https://iagentsales.e-guofu.com/api/v2' imgDomain = 'https://iagentsales-ud.e-guofu.com:8553/updown' assetsUrl = 'https://iagentsales-sr.e-guofu.com:8443/' mainUrl = 'https://iagentsales.e-guofu.com' payUrl = 'https://uns3.e-guofu.com/s3-modules-gateway/embed/gateway.action' zssqUrl = '' + REQ_PWD = '41424344454631323334353637383930' + CACHE_ENCRYP = '41424344454631323334353637383930' + API_VERSION = 'v2' break case 'dat': apiDomain = '' @@ -44,6 +53,9 @@ switch (process.env.VUE_APP_FLAG) { mainUrl = '' payUrl = '' zssqUrl = '' + REQ_PWD = '41424344454631323334353637383930' + CACHE_ENCRYP = '41424344454631323334353637383930' + API_VERSION = 'v2' break } /** @@ -61,5 +73,8 @@ export default { assetsUrl, mainUrl, payUrl, - zssqUrl //知识社区地址 + zssqUrl, //知识社区地址 + REQ_PWD, //报文加密密码 + CACHE_ENCRYP, //缓存加密密码 + API_VERSION //渠道版本 } diff --git a/src/filters/index.js b/src/filters/index.js index 3e3a4382b..00a3f72e5 100644 --- a/src/filters/index.js +++ b/src/filters/index.js @@ -184,5 +184,15 @@ export default { let str = '' str = (moneyStr + '').replace(/\d{1,3}(?=(\d{3})+$)/g, '$&,') + '元' return str + }, + // 手机号码脱敏 + dataMaskingMobile(mobile) { + let str = '' + if (mobile && mobile.trim().length == 11) { + str = mobile.trim().replace(/^(\S{3})(\S*)(\S{4})$/, function(all, u1, u2, u3) { + return u1 + new Array(u2.length + 1).join('*') + u3 + }) + } + return str } } diff --git a/src/main.js b/src/main.js index 98ab6203e..9735e6b74 100644 --- a/src/main.js +++ b/src/main.js @@ -11,6 +11,10 @@ import config from '@/config' import noMoreClick from '@/directive/noMoreClick' import vueHashCalendar from 'vue-hash-calendar' import 'vue-hash-calendar/lib/vue-hash-calendar.css' +import md5 from 'js-md5'; +import cryptoJs from 'crypto-js' +import cacheUtils from '@/assets/js/utils/cacheUtils' + import { Cell, CellGroup, DatetimePicker, Popup, Picker, Col, Row, Tab, Tabs, NavBar, Toast, Button, Dialog, Icon, Lazyload } from 'vant' Vue.use(Cell) @@ -35,6 +39,9 @@ Vue.use(Lazyload, { Vue.prototype.$assetsUrl = config.assetsUrl Vue.prototype.$mainUrl = config.mainUrl Vue.prototype.$zssqUrl = config.zssqUrl +Vue.prototype.$MD5 = md5 +Vue.prototype.$CryptoJs = cryptoJs +Vue.prototype.$CacheUtils = cacheUtils // 全局 防重复点击 Vue.directive('no-more-click', noMoreClick) diff --git a/src/router/app/index.js b/src/router/app/index.js index 1481fffff..c12acb366 100644 --- a/src/router/app/index.js +++ b/src/router/app/index.js @@ -1,6 +1,6 @@ //定义相关组件 const home = () => import('@/views/app/Home') -const login = () => import('@/views/app/Login') +const loginss = () => import('@/views/app/Login') const notFound = () => import('@/views/app/404') const functionList = () => import('@/views/app/FunctionList') @@ -15,9 +15,9 @@ let arr = [ } }, { - path: '/login', - name: 'login', - component: login, + path: '/loginss', + name: 'loginss', + component: loginss, meta: { title: '登录页' } diff --git a/src/router/ebiz/my.js b/src/router/ebiz/my.js index 769bea357..be21eb98c 100644 --- a/src/router/ebiz/my.js +++ b/src/router/ebiz/my.js @@ -4,6 +4,7 @@ const userSetting = () => import('@/views/ebiz/my/UserSetting') const userInfo = () => import('@/views/ebiz/my/UserInfo') const userIncome = () => import('@/views/ebiz/my/UserIncome') const PrivacyPolicy = () => import('@/views/ebiz/my/PrivacyPolicy') +const LogoutAgent = () => import('@/views/ebiz/my/LogoutAgent') export default [ { @@ -51,5 +52,15 @@ export default [ title: '金掌桂隐私政策', index: 1 } + }, + { + //隐私政策 + path: '/my/logoutAgent', + name: 'LogoutAgent', + component: LogoutAgent, + meta: { + title: '注销账户', + index: 1 + } } ] diff --git a/src/views/app/Login.vue b/src/views/app/Login.vue index fc4b6a887..b3e821aac 100644 --- a/src/views/app/Login.vue +++ b/src/views/app/Login.vue @@ -2,16 +2,18 @@

欢迎登录

- - + + - 登录 + 登录 +
diff --git a/src/views/ebiz/manpower/Training.vue b/src/views/ebiz/manpower/Training.vue index cb695eae8..c9102c547 100644 --- a/src/views/ebiz/manpower/Training.vue +++ b/src/views/ebiz/manpower/Training.vue @@ -4,6 +4,7 @@ + @@ -11,16 +12,21 @@ import UserInfoHeader from '@/components/ebiz/manpower/UserInfoHeader' import NavItem from '@/components/ebiz/manpower/NavItem' import record from '@/assets/images/u73803.png' -import { CellGroup } from 'vant' - +import { CellGroup, Cell, Button, Dialog, Field } from 'vant' import { getTokenForUserModel } from '@/api/ebiz/manpower/manpower' +import CheckAgent from '@/components/common/CheckAgent' export default { name: 'Navigation', components: { + [CheckAgent.name]: CheckAgent, [UserInfoHeader.name]: UserInfoHeader, [NavItem.name]: NavItem, - [CellGroup.name]: CellGroup + [CellGroup.name]: CellGroup, + [Cell.name]: Cell, + [Button.name]: Button, + [Field.name]: Field, + [Dialog.name]: Dialog }, data() { return { @@ -47,8 +53,6 @@ export default { } }, created() { - this.getInfo() - // 拦截原生按钮 setTimeout(() => { // eslint-disable-next-line no-undef @@ -60,6 +64,10 @@ export default { window.appCallBack = this.appCallBack }, methods: { + initThisPage(showFlag) { + console.log(showFlag) + this.getInfo() + }, appCallBack(data) { if (data.trigger == 'left_button_click') { this.$jump({ diff --git a/src/views/ebiz/my/LogoutAgent.vue b/src/views/ebiz/my/LogoutAgent.vue new file mode 100644 index 000000000..6660cff3b --- /dev/null +++ b/src/views/ebiz/my/LogoutAgent.vue @@ -0,0 +1,241 @@ + + + + diff --git a/src/views/ebiz/my/PrivacyPolicy.vue b/src/views/ebiz/my/PrivacyPolicy.vue index d984165ee..8b8e62d68 100644 --- a/src/views/ebiz/my/PrivacyPolicy.vue +++ b/src/views/ebiz/my/PrivacyPolicy.vue @@ -5,7 +5,7 @@ + +