diff --git a/package.json b/package.json index 11951032c..dcade524b 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,8 @@ "echarts": "^4.2.1", "fastclick": "^1.0.6", "js-base64": "^2.5.1", + "crypto-js": "^4.0.0", + "js-md5": "^0.7.3", "nprogress": "^0.2.0", "pdfh5": "^1.2.13", "vant": "2.2.0", diff --git a/src/assets/js/utils/cacheUtils.js b/src/assets/js/utils/cacheUtils.js new file mode 100644 index 000000000..ae186769a --- /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 '@/assets/js/utils/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..1282179f0 --- /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..d66594a20 --- /dev/null +++ b/src/assets/js/utils/needCacheKey.js @@ -0,0 +1,4 @@ +export default { + isAll: false, + encodeKeys: ['saleInsuredInfo', 'saleInsuredPersonInfo', 'appntDTO', 'proposalAppnt'] +} diff --git a/src/config/index.js b/src/config/index.js index 04608af99..19983104c 100644 --- a/src/config/index.js +++ b/src/config/index.js @@ -5,7 +5,7 @@ * */ -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) @@ -18,6 +18,9 @@ switch (process.env.VUE_APP_FLAG) { 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,6 +30,9 @@ 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' @@ -35,6 +41,9 @@ switch (process.env.VUE_APP_FLAG) { 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/main.js b/src/main.js index 98ab6203e..4c93bea39 100644 --- a/src/main.js +++ b/src/main.js @@ -11,6 +11,9 @@ 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 +38,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)