电子合同流程梳理&附件拼接URL

trade-history
在当tradeInfo.operate_type是A3时根据电子合同的状态tradeInfo.contract_status是否为1决定进入contract-confirm确认合同,否则进入contract-apply补充信息。

contract-apply
查询queryCustInfo并将身份信息填充,查询queryTrustBankCardInfo并将合同信息填充。
银行卡部分只显示鉴权银行卡,并且当只有1张时默认选择第一张,手机号用了CryptoJS将mobileno_internet_en解密成正常手机号。
非银行卡补充信息用的pop-picker,点击时触发onPicker(name),根据name匹配不同的字典(字典queryDict时查询了性别,职业,国籍生成dictMap),onPicker在pick里(pop-picker里)会根据value计算selectedValue(value不存在即首次打开未选择时默认为0,否则为选择值)并以此setSelectedIndex(picker里),然后设置finsihCb,再完成后finishSelectCycle中触发回调。回调中将选择的index设置到pickerIndexMap[name]里并更新contractInfo。
银行卡用的pop-view。pop-view里为bank-info组件的数组和添加银行卡按钮,添加银行卡在完成后hsback三级回到contract-apply页面,选择银行卡onSelectedCard会将银行卡信息存在selectedCard里
下一步时会校验contractInfo和selectedCard并跳转到contract-confirm

contract-confirm
查询个人信息queryCustInfo、查询交易流水queryTradeFlow、获取上一步补充信息:
contract_status为1(有合同查询交易申请):getApplyInfo->querySavedContract-> queryPurchaseApply
否则getApplyInfo-> getApplyContract-> queryContractForm查询合同交易表单)
然后将个人信息,交易流水和申请信息填充
同意签署onSubmit -> jumpNext:
如果身份证且开启人脸识别,contract-liveface
否则以PDF签署,打开PDF预览回调后会打开contract-sign。addContractOrConfirmPdf->confirmPdf-> openPdf-> previewFileWithConfirm->goSignCA()

Contract-sign
通过短信验证码确认签署
发送短信验证码getCode-> contractService.sendcode,countdown-button用的button组件,如果isCountDowning屏蔽onclick的sendSmsCode(直接return)并颜色为灰色。
填写验证码verify-code组件 oncomplete时触发validateCode->contractService.sign,30秒后跳转contract-result

Contract-result
queryCapitalStatus->historyService.queryTradeInfoList获取交款信息,capital_status状态为3已交款就隐藏缴款引导

Contract-liveface(底下的loading时不显示的)
liveface-guide,onclick时startLiveface,会检测buss_flag为2是签署电子合同,调用getLiveToken->livefaceService.verifyFac->account/account/verifyFaceId获取biz_token,传参biz_token回调进行人脸识别this.liveface->livefaceService.liveDetection->LightSDK.native.callNative("livestill.startLiveStill"),成功后emit(“livefaceNext”)。然后contract-liveface在onLivefaceNext时会addContractOrConfirmPdf进行同contract-confirm的电子合同签署

附件拼接URL

预览附件时拼接并传给SDK的URL是appbaseurl + path(getfiletoken返回来的)
真实环境appbaseurl是带齐活服务器地址的,但是咱们开发时appbaseurl只有后缀没有IP,及"/trustgateway/"。
所以自己开发的时候,route.js的previewFile里需要拼接一下方便自测。
电子合同需要'http://192.168.137.1:3000' + config.appBaseUrl。
合同查询和份额确认书在调用previewFile前会先加上/trustgateway/。
所以拼接'http://192.168.137.1:3000/' + url.substr(1)

    // !以下仅为自测方便,不能提交
    if (/^\/downloadFile/.test(url) || /^\/account\/download\/downloadFile/.test(url)) {
      url = ('http://192.168.137.1:3000' + config.appBaseUrl + url.substr(1));  // TODO 如果APP jsnative配的是在线文件,这里的appBaseUrl实际上比APP部署时少了地址,需要加上http://192.168.137.1:3000
    }
    // TODO 合同查询和份额确认书会把appbaseurl先拼上去 ,但是咱们拼的是/trustgateway/,还需要加 'http://192.168.137.1:3000
    if (/^\/trustgateway\/account\/download\/downloadFile/.test(url)) {
      url = ('http://192.168.137.1:3000/' + url.substr(1));  // TODO 如果APP jsnative配的是在线文件,这里的appBaseUrl实际上比APP部署时少了地址,需要加上http://192.168.137.1:3000
    }