From b913e73c4785c2acfd25f66f0afa28d7e62a2ba6 Mon Sep 17 00:00:00 2001 From: "yang.huaxiang" Date: Tue, 27 Oct 2020 10:50:12 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=89=E5=85=A8=E6=80=A7=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E5=A4=84=E7=90=86=EF=BC=9A=E4=BB=A3=E7=A0=81=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E6=95=B4=E7=90=86=20=E5=88=9D=E5=A7=8B=E7=89=88=E6=9C=AC1=20--?= =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BA=BA=EF=BC=9A=E9=98=B3=E5=8D=8E=E7=A5=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 + src/api/ebiz/my/my.js | 19 ++ src/assets/js/business-common.js | 98 ++++---- src/assets/js/common.js | 7 +- src/assets/js/utils/cacheUtils.js | 59 +++++ src/assets/js/utils/cryptoJsUtil.js | 47 ++++ src/assets/js/utils/needCacheKey.js | 4 + src/assets/js/utils/permission.js | 5 +- src/assets/js/utils/request.js | 122 +++++---- src/assets/js/utils/request1.js | 4 +- src/assets/js/utils/requestEncryot_back.js | 188 ++++++++++++++ src/config/index.js | 19 +- src/main.js | 7 + src/router/app/index.js | 8 +- src/router/ebiz/my.js | 11 + src/views/app/Login.vue | 3 +- src/views/ebiz/agentEenter/js/methods.js | 23 +- src/views/ebiz/common/risk-rules.js | 5 +- src/views/ebiz/my/LogoutAgent.vue | 231 ++++++++++++++++++ src/views/ebiz/my/UserInfo.vue | 4 +- src/views/ebiz/preserve/js/business-common.js | 8 +- src/views/example/EncryotBack.vue | 175 +++++++++++++ yarn.lock | 141 +++-------- 23 files changed, 953 insertions(+), 237 deletions(-) create mode 100644 src/assets/js/utils/cacheUtils.js create mode 100644 src/assets/js/utils/cryptoJsUtil.js create mode 100644 src/assets/js/utils/needCacheKey.js create mode 100644 src/assets/js/utils/requestEncryot_back.js create mode 100644 src/views/ebiz/my/LogoutAgent.vue create mode 100644 src/views/example/EncryotBack.vue 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/my/my.js b/src/api/ebiz/my/my.js index a025b8cb4..f0e38a73a 100644 --- a/src/api/ebiz/my/my.js +++ b/src/api/ebiz/my/my.js @@ -56,3 +56,22 @@ export function queryPrivacy(data) { 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..ab031d882 --- /dev/null +++ b/src/assets/js/utils/needCacheKey.js @@ -0,0 +1,4 @@ +export default { + isAll: false, + encodeKeys: [''] +} 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 5949232a7..33aea06df 100644 --- a/src/assets/js/utils/request.js +++ b/src/assets/js/utils/request.js @@ -1,5 +1,11 @@ import axios from 'axios' +import AESTools from '@/assets/js/utils/cryptoJsUtil' +import configApp from '@/config' import { Dialog, Toast } from 'vant' +import dateUtil from "@/assets/js/utils/date-utils"; +import MD5 from 'js-md5'; +import CacheUtils from '@/assets/js/utils/cacheUtils' + let proposal = [ '/proposal/proposal/list', '/proposal/proposal/toInsurance', @@ -107,58 +113,84 @@ 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] + console.log(config.url.split(configApp.API_VERSION)[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(configApp.API_VERSION)[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') + // 添加请时间戳 + let timeStr = new Date().getTime() + ''; + config.headers['timeStr'] = timeStr; + config.headers['signature'] = MD5(timeStr + CacheUtils.getLocItem('token')); + // config.headers['token'] = `f0003a753d1d492083248f723ab1b6e9`//TEST测试专用 + return config + }, + error => { + // Do something with request error + Promise.reject(error) } - - config.headers['token'] = window.localStorage.getItem('token') - // config.headers['token'] = `f0003a753d1d492083248f723ab1b6e9`//TEST测试专用 - 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') - 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) + response => { + console.log(response) + console.log('----------------') + let res = response.data + if(response.config.url && response.config.method == 'post' && /api\/$/.test(response.config.url.split(configApp.API_VERSION)[0])){ + if(res.response){// 正常情況返回必有response 节点 + console.log("[调用请求解密服务][请求地址:"+response.config.url+"][解密前报文:]",JSON.stringify(res.response)) + res = JSON.parse(AESTools.AESDecrypt(res.response,configApp.REQ_PWD)) + console.log("[调用请求解密服务][请求地址:"+response.config.url+"][解密后报文:]",res) + } } - return Promise.reject(res) - } else { - return response.data.content + 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 => { - Toast.clear() - console.log('err' + error) // for debug - //Toast.fail(error.message) - return Promise.reject(error) - } ) export default service diff --git a/src/assets/js/utils/request1.js b/src/assets/js/utils/request1.js index aeb1c6b45..d2127c980 100644 --- a/src/assets/js/utils/request1.js +++ b/src/assets/js/utils/request1.js @@ -1,6 +1,6 @@ import axios from 'axios' import { Dialog, Toast } from 'vant' - +import CacheUtils from '@/assets/js/utils/cacheUtils' let sale = ['/sale/order/orderDetail'] //在线投保 // 卡单 @@ -25,7 +25,7 @@ service.interceptors.request.use( // }) } - config.headers['token'] = window.localStorage.getItem('token') + config.headers['token'] = CacheUtils.getLocItem('token') // config.headers['token'] = `` return config }, 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/config/index.js b/src/config/index.js index 04608af99..34157712d 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..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..09f6ba751 100644 --- a/src/views/app/Login.vue +++ b/src/views/app/Login.vue @@ -36,7 +36,8 @@ export default { //登录 login() .then(res => { - localStorage.token = res.token + //localStorage.token = res.token + this.$CacheUtils.setLocItem("token",res.token) this.$router.push({ path: this.redirect || '/' }) }) .catch(err => { diff --git a/src/views/ebiz/agentEenter/js/methods.js b/src/views/ebiz/agentEenter/js/methods.js index b6cc32b61..729fa56f8 100644 --- a/src/views/ebiz/agentEenter/js/methods.js +++ b/src/views/ebiz/agentEenter/js/methods.js @@ -7,6 +7,7 @@ import { saveOrUpdateOrderInfo, getAuthCode, getOrderDetail } from '@/api/ebiz/s import getAreaName from '@/assets/js/utils/get-area-name' // import idNoCheck from '@/assets/js/utils/idNoCheck' import { idToData } from './verification' +import CacheUtils from '@/assets/js/utils/cacheUtils' let relationToInsured = [ { id: 2, @@ -37,14 +38,14 @@ export function selectComp(that, index, type = '') { } else if (index == 3) { if (type == '1') { //投保人 - localStorage.scanFromInsured = 'true' + CacheUtils.setLocItem('scanFromInsured','true') } else if (type == '2') { //被保险人 - localStorage.scanFromInsured = 'false' + CacheUtils.setLocItem('scanFromInsured','false') } ;[that.isScan, title] = [true, '身份证扫描'] } else if (index == 4) { - localStorage.scanFromInsured = 0 + CacheUtils.setLocItem('scanFromInsured','0') ;[that.bankisScan, title] = [true, '银行卡扫描'] } @@ -248,7 +249,7 @@ export function onConfirm(that, value, type) { if (value.id == 1) { //获取订单详情 getOrderDetail({ - orderNo: localStorage.orderNo + orderNo: CacheUtils.getLocItem('orderNo') }).then(res => { if (res.result == 0) { that.isAppnt = true @@ -349,7 +350,7 @@ export function onConfirm(that, value, type) { if (value.id == 1) { //获取投保人数据 getOrderDetail({ - orderNo: localStorage.orderNo + orderNo: CacheUtils.getLocItem('orderNo') }).then(res => { if (res.result == 0) { that.isInsured = true @@ -690,14 +691,14 @@ export function nextStep(that, type) { //信息变更 export function infoUpdate(that, type) { //local 里面是否存有险种信息 - let chooseProductCodes = localStorage.chooseProductCodes && JSON.parse(localStorage.chooseProductCodes) + let chooseProductCodes = CacheUtils.getLocItem('chooseProductCodes') && JSON.parse(CacheUtils.getLocItem('chooseProductCodes')) if (chooseProductCodes && chooseProductCodes.length) { let flag switch (type) { case '1': { //取出local中的投被保险人信息 - let saleInsuredInfo = JSON.parse(localStorage.saleInsuredInfo) + let saleInsuredInfo = JSON.parse(CacheUtils.getLocItem('saleInsuredInfo')) //如果 性别, 出生日期, 有无社保, 职业 发生变化 if (that.userInfo.sex != saleInsuredInfo.sex || that.userInfo.birthday != saleInsuredInfo.birthday) { flag = true @@ -707,7 +708,7 @@ export function infoUpdate(that, type) { case '2': { //取出local中的被保险人信息 - let saleInsuredPersonInfo = JSON.parse(localStorage.saleInsuredPersonInfo) + let saleInsuredPersonInfo = JSON.parse(CacheUtils.getLocItem('saleInsuredPersonInfo')) //如果 性别, 出生日期, 有无社保, 职业 发生变化 if ( that.userInfo.sex != saleInsuredPersonInfo.sex || @@ -732,7 +733,7 @@ export function infoUpdate(that, type) { confirmButtonColor: '#FFFFFF' }) .then(() => { - localStorage.from = 'anotherChanged' + CacheUtils.setLocItem('from','anotherChanged') type == '1' ? that.save('isShow=1') : that.save() }) .catch(() => { @@ -755,7 +756,7 @@ export function save(that, type, str) { orderType: type == '1' ? 'APPNT_ORDER' : 'INSURED_ORDER', orderDTO: { orderInfoDTO: { - orderNo: localStorage.orderNo + orderNo: CacheUtils.getLocItem('orderNo') }, smsCodeDTO: { smsId: that.sessionId, @@ -771,7 +772,7 @@ export function save(that, type, str) { type == '1' ? (params.orderDTO.appntDTO = that.userInfo) : (params.orderDTO.insuredDTOs = [that.userInfo]) saveOrUpdateOrderInfo(params).then(res => { if (res.result == 0) { - type == '1' ? (localStorage.orderNo = res.orderNo) : (localStorage.isFrom = 'sale') + type == '1' ? (CacheUtils.setLocItem('orderNo', res.orderNo)) : (CacheUtils.setLocItem('isFrom', 'sale')) //清理计时器 window.clearInterval(that.timeId) that.timeId = null diff --git a/src/views/ebiz/common/risk-rules.js b/src/views/ebiz/common/risk-rules.js index d5be05b12..088555024 100644 --- a/src/views/ebiz/common/risk-rules.js +++ b/src/views/ebiz/common/risk-rules.js @@ -1,5 +1,6 @@ import { productCheck } from '@/api/ebiz/common/common' import { getCompany } from '@/api/ebiz/sale/sale' +import CacheUtils from '@/assets/js/utils/cacheUtils' export default { //投、被保险人年龄对险种的限制 @@ -70,11 +71,11 @@ export default { }, //获取被保险人信息 getSaleInsuredPersonInfo() { - return localStorage.saleInsuredPersonInfo && JSON.parse(localStorage.saleInsuredPersonInfo) + return CacheUtils.getLocItem('saleInsuredPersonInfo') && JSON.parse(CacheUtils.getLocItem('saleInsuredPersonInfo')) }, //获取投保人信息 getSaleInsuredInfo() { - return localStorage.saleInsuredInfo && JSON.parse(localStorage.saleInsuredInfo) + return CacheUtils.getLocItem('saleInsuredInfo') && JSON.parse(CacheUtils.getLocItem('saleInsuredInfo')) }, //获取产品售卖权限列表 diff --git a/src/views/ebiz/my/LogoutAgent.vue b/src/views/ebiz/my/LogoutAgent.vue new file mode 100644 index 000000000..330602aaa --- /dev/null +++ b/src/views/ebiz/my/LogoutAgent.vue @@ -0,0 +1,231 @@ + + + + diff --git a/src/views/ebiz/my/UserInfo.vue b/src/views/ebiz/my/UserInfo.vue index 7719e9cc0..633d36ec1 100644 --- a/src/views/ebiz/my/UserInfo.vue +++ b/src/views/ebiz/my/UserInfo.vue @@ -3,8 +3,8 @@ - - + + diff --git a/src/views/ebiz/preserve/js/business-common.js b/src/views/ebiz/preserve/js/business-common.js index 9d40c2493..c09b2594e 100644 --- a/src/views/ebiz/preserve/js/business-common.js +++ b/src/views/ebiz/preserve/js/business-common.js @@ -1,4 +1,6 @@ // import utilsAge from '@/assets/js/utils/age' +import CacheUtils from '@/assets/js/utils/cacheUtils' + /** * @desc 扩展对象继承 * @param {Object} out 一个或多个对象 @@ -179,7 +181,7 @@ export default { * @return {*} rs */ getStorage(name) { - return this._string2json(window.localStorage[name]) + return this._string2json(CacheUtils.getLocItem(name)) }, /** @@ -187,7 +189,7 @@ export default { * @param {String} name 名称 */ setStorage(name, value) { - window.localStorage[name] = this._json2string(value) + CacheUtils.setLocItem(name,this._json2string(value)) }, /** @@ -195,7 +197,7 @@ export default { * @param {String} name 名称 */ delStorage(name) { - window.localStorage.removeItem(name) + CacheUtils.removeLocItem(name) }, /** diff --git a/src/views/example/EncryotBack.vue b/src/views/example/EncryotBack.vue new file mode 100644 index 000000000..11c36d88d --- /dev/null +++ b/src/views/example/EncryotBack.vue @@ -0,0 +1,175 @@ + + + + diff --git a/yarn.lock b/yarn.lock index e6d4a7f9f..0ba6cbf64 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2813,6 +2813,11 @@ crypto-browserify@^3.11.0: randombytes "^2.0.0" randomfill "^1.0.3" +crypto-js@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/crypto-js/download/crypto-js-4.0.0.tgz#2904ab2677a9d042856a2ea2ef80de92e4a36dcc" + integrity sha1-KQSrJnep0EKFai6i74DekuSjbcw= + css-color-names@0.0.4, css-color-names@^0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" @@ -3060,7 +3065,7 @@ debug@=3.1.0: dependencies: ms "2.0.0" -debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5, debug@^3.2.6: +debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== @@ -3096,11 +3101,6 @@ deep-equal@^1.0.1: object-keys "^1.1.1" regexp.prototype.flags "^1.2.0" -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" @@ -3217,11 +3217,6 @@ detect-indent@^4.0.0: dependencies: repeating "^2.0.0" -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= - detect-newline@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" @@ -4346,13 +4341,6 @@ fs-extra@^7.0.1: jsonfile "^4.0.0" universalify "^0.1.0" -fs-minipass@^1.2.5: - version "1.2.7" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" - integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== - dependencies: - minipass "^2.6.0" - fs-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" @@ -4906,7 +4894,7 @@ human-signals@^1.1.1: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== -iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24, iconv-lite@^0.4.4: +iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -4935,13 +4923,6 @@ iferr@^0.1.5: resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= -ignore-walk@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" - integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== - dependencies: - minimatch "^3.0.4" - ignore@^3.3.3, ignore@^3.3.5: version "3.3.10" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" @@ -5048,7 +5029,7 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@^1.3.4, ini@~1.3.0: +ini@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== @@ -5938,6 +5919,11 @@ js-levenshtein@^1.1.3: resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== +js-md5@^0.7.3: + version "0.7.3" + resolved "https://registry.npm.taobao.org/js-md5/download/js-md5-0.7.3.tgz#b4f2fbb0b327455f598d6727e38ec272cd09c3f2" + integrity sha1-tPL7sLMnRV9ZjWcn447Ccs0Jw/I= + js-message@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/js-message/-/js-message-1.0.5.tgz#2300d24b1af08e89dd095bc1a4c9c9cfcb892d15" @@ -6605,21 +6591,6 @@ minimist@~0.0.1: resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= -minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" - integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minizlib@^1.2.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" - integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== - dependencies: - minipass "^2.9.0" - mississippi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-2.0.0.tgz#3442a508fafc28500486feea99409676e4ee5a6f" @@ -6748,15 +6719,6 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= -needle@^2.2.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" - integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== - dependencies: - debug "^3.2.6" - iconv-lite "^0.4.4" - sax "^1.2.4" - negotiator@0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" @@ -6869,22 +6831,6 @@ node-notifier@^5.2.1: shellwords "^0.1.1" which "^1.3.0" -node-pre-gyp@*: - version "0.14.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83" - integrity sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA== - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4.4.2" - node-releases@^1.1.44: version "1.1.44" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.44.tgz#cd66438a6eb875e3eb012b6a12e48d9f4326ffd7" @@ -6922,7 +6868,7 @@ node-sass@^4.9.0: dependencies: abbrev "1" -nopt@^4.0.1, nopt@~4.0.1: +nopt@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= @@ -6977,26 +6923,6 @@ normalize-url@^3.0.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== -npm-bundled@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" - integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== - dependencies: - npm-normalize-package-bin "^1.0.1" - -npm-normalize-package-bin@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" - integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== - -npm-packlist@^1.1.6: - version "1.4.7" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.7.tgz#9e954365a06b80b18111ea900945af4f88ed4848" - integrity sha512-vAj7dIkp5NhieaGZxBJB8fF4R0078rqsmhJcAfXZ6O7JJhjhPK96n5Ry1oZcfLXgfun0GWTZPOxaEyqv8GBykQ== - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -7011,7 +6937,7 @@ npm-run-path@^4.0.0: dependencies: path-key "^3.0.0" -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== @@ -8230,16 +8156,6 @@ raw-loader@^0.5.1: resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa" integrity sha1-DD0L6u2KAclm2Xh793goElKpeao= -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -9495,19 +9411,6 @@ tar@^2.0.0: fstream "^1.0.12" inherits "2" -tar@^4.4.2: - version "4.4.13" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" - integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== - dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.8.6" - minizlib "^1.2.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.3" - terser-webpack-plugin@^1.2.3, terser-webpack-plugin@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c" @@ -10031,6 +9934,13 @@ vue-eslint-parser@^5.0.0: esquery "^1.0.1" lodash "^4.17.11" +vue-hash-calendar@^1.2.12: + version "1.2.17" + resolved "https://registry.npm.taobao.org/vue-hash-calendar/download/vue-hash-calendar-1.2.17.tgz#da92148f02e5658a69316c05231ac0ef940bf176" + integrity sha1-2pIUjwLlZYppMWwFIxrA75QL8XY= + dependencies: + vue "^2.5.17" + vue-hot-reload-api@^2.3.0: version "2.3.4" resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2" @@ -10110,6 +10020,11 @@ vue-template-es2015-compiler@^1.6.0, vue-template-es2015-compiler@^1.9.0: resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825" integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw== +vue@^2.5.17: + version "2.6.12" + resolved "https://registry.npm.taobao.org/vue/download/vue-2.6.12.tgz?cache=0&sync_timestamp=1603224263683&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue%2Fdownload%2Fvue-2.6.12.tgz#f5ebd4fa6bd2869403e29a896aed4904456c9123" + integrity sha1-9evU+mvShpQD4pqJau1JBEVskSM= + vue@^2.6.10: version "2.6.11" resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.11.tgz#76594d877d4b12234406e84e35275c6d514125c5" @@ -10497,7 +10412,7 @@ yallist@^2.1.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: +yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==