GFRS-2759【前端】开发柳州需求投保风险提示书的页面--提交人:张齐

This commit is contained in:
zhangqi1
2021-10-14 14:07:19 +08:00
committed by liyuetong
parent e11132a3bb
commit ae90b576e0
4 changed files with 645 additions and 218 deletions

View File

@@ -1,6 +1,7 @@
import request from '@/assets/js/utils/request'
import request1 from '@/assets/js/utils/request1'
import getUrl from '@/assets/js/utils/get-url'
// 保费计算
export function saveOrUpdateOrderInfo(data) {
return request({
@@ -9,6 +10,7 @@ export function saveOrUpdateOrderInfo(data) {
data
})
}
//人核转线上支付判断是否可进行支付操作
export function payFlag(data) {
return request({
@@ -17,6 +19,7 @@ export function payFlag(data) {
data
})
}
// 订单列表
export function orderList(data) {
return request({
@@ -25,6 +28,7 @@ export function orderList(data) {
data
})
}
// 订单删除
export function deleteOrderInfo(data) {
return request({
@@ -60,6 +64,7 @@ export function getOrderDetail(data) {
data
})
}
export function getOrderDetail1(data) {
return request({
url: getUrl('/sale/order/orderDetail', 1),
@@ -67,6 +72,7 @@ export function getOrderDetail1(data) {
data
})
}
// 获取验证码
export function getAuthCode(data) {
return request({
@@ -75,6 +81,7 @@ export function getAuthCode(data) {
data
})
}
// 验证验证码
export function autchCodeCheck(data) {
return request({
@@ -83,6 +90,7 @@ export function autchCodeCheck(data) {
data
})
}
// 上传图片
export function uploadImg(data) {
return request1({
@@ -91,6 +99,7 @@ export function uploadImg(data) {
data
})
}
/*
// 人脸识别
export function recognition(data) {
@@ -281,6 +290,7 @@ export function saveOrderActiveType(data) {
data
})
}
// 移动端活动列表
export function getActivityList(data) {
return request({
@@ -298,4 +308,13 @@ export function IDCardOCR(data) {
method: 'post',
data
})
}
// 获取柳州分红万能投连型产品编码集合
export function getUniversalCodeLst(data) {
return request({
url: getUrl('/sale/product/getUniversalCodeLst', 1),
method: 'post',
data
})
}

View File

@@ -5,50 +5,50 @@
<div class='m20 question-option'>
<span class='question'>1.请问投保时投保单/电子投保确认单上是您和被保险人(或被保险人的监护人)的亲笔签名吗?</span>
<van-radio-group class='mt10' v-model='radio1' direction='horizontal' :disabled='isSign'>
<van-radio :name=1></van-radio>
<van-radio :name=0></van-radio>
<van-radio name='1'></van-radio>
<van-radio name='0'></van-radio>
</van-radio-group>
</div>
<div class='m20 question-option'>
<span class='question'>2.您对保险单的保险期间保多久保险金额保多少保险费交多少交费方式交多久是否了解</span>
<van-radio-group class='mt10' v-model='radio2' direction='horizontal' :disabled='isSign'>
<van-radio :name=1>了解</van-radio>
<van-radio :name=0>不清楚</van-radio>
<van-radio name='1'>了解</van-radio>
<van-radio name='0'>不清楚</van-radio>
</van-radio-group>
</div>
<div class='m20 question-option'>
<span class='question'>3.您对保险单的保险责任保什么和责任免除什么情况是不赔的是否了解</span>
<van-radio-group class='mt10' v-model='radio3' direction='horizontal' :disabled='isSign'>
<van-radio :name=1>了解</van-radio>
<van-radio :name=0>不清楚</van-radio>
<van-radio name='1'>了解</van-radio>
<van-radio name='0'>不清楚</van-radio>
</van-radio-group>
</div>
<div class='m20 question-option'>
<span class='question'>4.业务人员在销售过程中是否存在向您返还佣金或其他诱导投保的行为</span>
<van-radio-group class='mt10' v-model='radio4' direction='horizontal' :disabled='isSign'>
<van-radio :name=0></van-radio>
<van-radio :name=1></van-radio>
<van-radio name='0'></van-radio>
<van-radio name='1'></van-radio>
</van-radio-group>
</div>
<div class='m20 question-option'>
<span class='question'>5.从签收保险单次日起有10-15天的犹豫期犹豫期内申请撤销保险单可退还所交保险费您是否了解</span>
<van-radio-group class='mt10' v-model='radio5' direction='horizontal' :disabled='isSign'>
<van-radio :name=1>了解</van-radio>
<van-radio :name=0>不清楚</van-radio>
<van-radio name='1'>了解</van-radio>
<van-radio name='0'>不清楚</van-radio>
</van-radio-group>
</div>
<div class='m20 question-option'>
<span class='question'>6.犹豫期后退保可能会有一定损失保险单的现金价值就是退保金额您是否了解</span>
<van-radio-group class='mt10' v-model='radio6' direction='horizontal' :disabled='isSign'>
<van-radio :name=1></van-radio>
<van-radio :name=0></van-radio>
<van-radio name='1'></van-radio>
<van-radio name='0'></van-radio>
</van-radio-group>
</div>
<div class='m20 question-option'>
<span class='question'>7.投保时故意未履行如实告知义务将面临拒赔的风险并不退还保险费请问您是否已如实告知健康状况既往病史和投保信息等情况</span>
<van-radio-group class='mt10' v-model='radio7' direction='horizontal' :disabled='isSign'>
<van-radio :name=1></van-radio>
<van-radio :name=0></van-radio>
<van-radio name='1'></van-radio>
<van-radio name='0'></van-radio>
</van-radio-group>
</div>
@@ -61,22 +61,22 @@
请问您是否了解
</span>
<van-radio-group class='mt10' v-model='radio8' direction='horizontal' :disabled='isSign'>
<van-radio :name=1>了解</van-radio>
<van-radio :name=0>不清楚</van-radio>
<van-radio name='1'>了解</van-radio>
<van-radio name='0'>不清楚</van-radio>
</van-radio-group>
</div>
<div class='m20 question-option' v-if='flag'>
<span class='question'>9.业务人员是否向您承诺或保证过分红收益/超过最低保证利率的收益/投资回报</span>
<van-radio-group class='mt10' v-model='radio9' direction='horizontal' :disabled='isSign'>
<van-radio :name=0></van-radio>
<van-radio :name=1></van-radio>
<van-radio name='0'></van-radio>
<van-radio name='1'></van-radio>
</van-radio-group>
</div>
<div class='m20 question-option' v-if='flag'>
<span class='question'>10.您投保的是一款保险产品不能等同于银行的存款和理财产品您是否了解</span>
<van-radio-group class='mt10' v-model='radio10' direction='horizontal' :disabled='isSign'>
<van-radio :name=1>了解</van-radio>
<van-radio :name=0>不清楚</van-radio>
<van-radio name='1'>了解</van-radio>
<van-radio name='0'>不清楚</van-radio>
</van-radio-group>
</div>
@@ -106,13 +106,13 @@
<div class='bg-white bottom-btn'>
<div class='p15 pl40 flex align-items-c'>
<span class='mr10'>本人签名 :</span>
<div>
<van-button type='danger' size='small' @click="sign('0')" v-no-more-click='1000'>
<div v-if="signVal == '0' || signVal == '2'">
<van-button type='danger' size='small' @click='sign()' v-no-more-click='1000'>
{{ appntSign.documentStatus == '2' ? '签名' : '已签名' }}
</van-button>
</div>
</div>
<van-button type='danger' size='large' :disabled='!isSign' v-no-more-click='1000'>完成</van-button>
<van-button type='danger' size='large' :disabled='isDisabledComplite' v-no-more-click='1000'>完成</van-button>
</div>
</div>
</template>
@@ -120,6 +120,7 @@
<script>
import { RadioGroup, Radio } from 'vant'
import utils from '@/assets/js/utils/date-utils'
import { saveInformation, getOrderDetail, getUniversalCodeLst } from '@/api/ebiz/sale/sale'
export default {
name: 'InsuranceRiskReminder',
@@ -141,44 +142,393 @@ export default {
radio8: '', // 第8题的选中项
radio9: '', // 第9题的选中项
radio10: '', // 第10题的选中项
signVal: '', // 投保人还是被保险人信息
saleInsuredInfo: {},// 存储local带来的投保人信息对象
productCode: localStorage.productCode, // 从缓存中获取险种产品编号
flag: '', // 根据险种编号判断页面是否展示8-10题的标识因为选择投保'分红/万能/投资连结保险'页面需要展示1-10题,
appntSign: {},// 投保人签名信息
idType: '', // 证件类型
idNo: '', // 证件号码
orderNo: localStorage.lastOrderNo, // 从缓存中获取投保单号
fillDate: utils.formatDate(new Date(), 'yyyy年MM月dd日'), // 获取当前日期
isSign: false // 是否签名了
appntSign: {}, // 投保人签名信息
tipsPolicyUrl: '',
isSign: false, // 是否签名了
base64: '', // sign加密码
isDisabledComplite: true // 是否可以点击
}
},
created() {
if (!this.isWeixin) {
setTimeout(() => {
// eslint-disable-next-line no-undef
EWebBridge.webCallAppInJs('webview_left_button', {
img: this.$assetsUrl + 'images/del-close-btn@3x.png',
intercept: '1' //是否拦截原生返回事件 1是 其他否
})
}, 100)
window.appCallBack = this.appCallBack
}
// 调用初始化方法
this.init()
},
methods: {
/**
* @Description: 页面左上角原生方法
* @author:zhangqi
* @Date:2021-10-12
*/
appCallBack(data) {
if (data.trigger == 'left_button_click') {
return this.$dialog
.confirm({
className: 'dialog-delete',
title: '提示',
message: '退出流程可能会丢失部分数据,是否确认退出?',
cancelButtonColor: '#E9332E',
confirmButtonColor: '#FFFFFF'
})
.then(() => {
this.$jump({
flag: 'h5',
extra: {
title: '电子投保单列表',
forbidSwipeBack: 1, //当前页面禁止右滑返回
url: location.origin + `/#/sale/list`
},
routerInfo: {
path: `/sale/list`,
type: '1'
}
})
})
.catch(() => {
return
})
}
},
/**
* @Description: 初始化方法
* @author:zhangqi
* @Date:2021-10-12
*/
init() {
// 获取投保人的缓存数据,并赋值给变量
// 从缓存中获取数据,并赋值给变量
this.signVal = window.localStorage.getItem('sign-val')
// 从缓存中获取投保人的数据,并赋值给变量
this.saleInsuredInfo = JSON.parse(this.$CacheUtils.getLocItem('saleInsuredInfo'))
// 获取证件类型
this.idType = this.saleInsuredInfo.idType
// 获取证件号码
this.idNo = this.saleInsuredInfo.idNo
// 判断当前的险种类型编号,
// 如果选择投保'非分红/万能/投资连结保险'只需填写1-7题页面仅展示1-7题
// 如果选择投保'分红/万能/投资连结保险'需填写1-10题,页面展示1-10题
// GFRS_M0015 与 GFRS_M0017 是两款万能险的险种产品编号
if (this.productCode === 'GFRS_M0015' || this.productCode === 'GFRS_M0017') {
// 设置页面展示1-10题
this.flag = true
// 调用获取柳州分红万能投连型产品编码集合的方法
this.getUniversalCodeLstFunc()
// 调用查询详情数据的方法
this.getOrderDetail()
},
/**
* @Description: 获取柳州分红万能投连型产品编码集合的方法
* @author:zhangqi
* @Date:2021-10-14
*/
getUniversalCodeLstFunc() {
// 重置清空根据险种编号判断页面是否展示8-10题的标识的变量防止数据缓存
this.flag = ''
getUniversalCodeLst({ 'platform': 'app' }).then(res => {
if (res.result == '0') {
// 循环数据,判断数据集合中是否存在'分红/万能/投资连结保险'等产品的险种编号
// 如果选择投保'非分红/万能/投资连结保险'只需填写1-7题页面仅展示1-7题
// 如果选择投保'分红/万能/投资连结保险'需填写1-10题,页面展示1-10题
// GFRS_M0015 与 GFRS_M0017 是两款万能险的险种产品编号
this.flag = res.content.some(item => {
return item === this.productCode
})
}
})
},
/**
* @Description: 查询详情数据的方法
* @author:zhangqi
* @Date:2021-10-13
*/
getOrderDetail() {
let that = this
let data = {
orderNo: window.localStorage.getItem('orderNo')
}
return new Promise((resolve, reject) => {
getOrderDetail(data).then(res => {
if (res.result == '0') {
res.orderDTO.ebizSignDTOS.map(item => {
if (item.documentCode == '11') {
if (item.signType == '0' || item.signType == '2') {
that.appntSign = item
that.tipsPolicyUrl = item.policyUrl
}
}
})
if (that.isWeixin) {
if (res.orderDTO.ebizSignDTOS.length > 1) {
if (that.appntSign.documentStatus == '3') {
that.isDisabledComplite = false
}
}
}
resolve('success')
}
})
})
},
/**
* @Description: 点击‘签名’时,触发的方法
* @author:zhangqi
* @Date:2021-10-12
*/
sign(val) {
let that = this
this.$toast.loading({
duration: 0, // 持续展示 toast
forbidClick: true, // 禁用背景点击
loadingType: 'spinner',
message: '加载中……'
})
// 判断当有题目未作答时,要进行提示
if (this.radio1 === '') {
this.$toast('第1题未作答')
return
} else if (this.radio2 === '') {
this.$toast('第2题未作答')
return
} else if (this.radio3 === '') {
this.$toast('第3题未作答')
return
} else if (this.radio4 === '') {
this.$toast('第4题未作答')
return
} else if (this.radio5 === '') {
this.$toast('第5题未作答')
return
} else if (this.radio6 === '') {
this.$toast('第6题未作答')
return
} else if (this.radio7 === '') {
this.$toast('第7题未作答')
return
} else if (this.flag) {
// 当前的险种产品类型如果是'分红/万能/投资连结保险'则需要对8-10题进行校验
if (this.radio8 === '') {
this.$toast('第8题未作答')
return
} else if (this.radio9 === '') {
this.$toast('第9题未作答')
return
} else if (this.radio10 === '') {
this.$toast('第10题未作答')
return
}
}
// 判断已作答的题目选择的答案是否是正确选项,如果不是正确选项要进行提示
if (this.radio1 !== '1') {
this.$toast('您的第1题回答不符合投保要求请您了解相关投保风险后再进行投保')
return
} else if (this.radio2 !== '1') {
this.$toast('您的第2题回答不符合投保要求请您了解相关投保风险后再进行投保')
return
} else if (this.radio3 !== '1') {
this.$toast('您的第3题回答不符合投保要求请您了解相关投保风险后再进行投保')
return
} else if (this.radio4 !== '1') {
this.$toast('您的第4题回答不符合投保要求请您了解相关投保风险后再进行投保')
return
} else if (this.radio5 !== '1') {
this.$toast('您的第5题回答不符合投保要求请您了解相关投保风险后再进行投保')
return
} else if (this.radio6 !== '1') {
this.$toast('您的第6题回答不符合投保要求请您了解相关投保风险后再进行投保')
return
} else if (this.radio7 !== '1') {
this.$toast('您的第7题回答不符合投保要求请您了解相关投保风险后再进行投保')
return
} else if (this.flag) {
// 当前的险种产品类型如果是'分红/万能/投资连结保险'则需要对8-10题进行校验
if (this.radio8 !== '1') {
this.$toast('您的第8题回答不符合投保要求请您了解相关投保风险后再进行投保')
return
} else if (this.radio9 !== '1') {
this.$toast('您的第9题回答不符合投保要求请您了解相关投保风险后再进行投保')
return
} else if (this.radio10 !== '1') {
this.$toast('您的第10题回答不符合投保要求请您了解相关投保风险后再进行投保')
return
}
}
if (this.isWeixin) {
this.toAirSign('0', '签字日期', '-150', '2')
} else {
// 设置页面不需要展示1-10题仅展示1-7题即可
this.flag = false
EWebBridge.webCallAppInJs('ca_sign', {
number: that.saleInsuredInfo.idNo, // 身份证号码
name: that.saleInsuredInfo.name, // 姓名
type: that.saleInsuredInfo.idType, // 证件类型
keyword: '签字日期',
pageNo: '1',
index: '1',
offset: '-150',
pos: '3',
signatureWidth: this.$utils.signParams().signatureWidth,
signatureHeight: this.$utils.signParams().signatureHeight
}).then(data => {
this.$toast.clear()
if (JSON.parse(data).state == '1') {
// 将签名数据进行加密,并赋值给变量
that.base64 = decodeURI(JSON.parse(data).sign)
// 设置签名状态
that.appntSign.documentStatus = '3'
that.isSign = true
that.isDisabledComplite = false
}
})
}
},
toAirSign(status, keyword, offset, originStatus) {
localStorage.setItem(
'signInfo',
JSON.stringify({
originStatus: originStatus,
idNo: this.saleInsuredInfo.idNo,
name: this.saleInsuredInfo.name,
type: this.saleInsuredInfo.idType,
keyword: keyword,
status: status,
offset: offset,
originUrl: location.href
})
)
window.location.href = this.$mainUrl + '/sign/index.html'
},
/**
* @Description: 点击页面底部‘完成’按钮时,触发的方法
* @author:zhangqi
* @Date:2021-10-13
*/
goNext() {
if (this.isWeixin) {
console.log('````````````````````')
console.log('进入微信')
this.$toast.loading({
duration: 0, // 持续展示 toast
forbidClick: true, // 禁用背景点击ase
loadingType: 'spinner',
message: '加载中……'
})
let that = this
if (that.signVal == '0' || that.signVal == '2') {
let data = {
orderType: 'SIGN_ORDER',
orderDTO: {
orderInfoDTO: {
orderNo: window.localStorage.getItem('orderNo')
},
ebizSignDTOS: [
{
signOrRead: 'tip',
signId: that.appntSign.signId,
orderNo: window.localStorage.getItem('orderNo'),
documentCode: that.appntSign.documentCode,
documentStatus: '3',
documentType: that.appntSign.documentType,
signType: that.signVal,
baseEncryp: that.base64,
tipsPolicyUrl: that.tipsPolicyUrl
}
]
}
}
saveInformation(data).then(res => {
if (res.result == '0') {
this.$toast.clear()
window.localStorage.setItem('detailJump', '')
sessionStorage.twowxSigned = false
let doubleRecordFlag = localStorage.doubleRecordFlag
let routeUrl = '/sale/signatureOfElectronic'
if (doubleRecordFlag == '1') {
// 跳转双录签署文件
routeUrl = '/sale/avoidDutyTip'
}
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#' + routeUrl
},
routerInfo: {
path: routeUrl
}
})
} else {
that.$toast(res.resultMessage)
}
})
}
} else {
let that = this
this.$toast.loading({
duration: 0, // 持续展示 toast
forbidClick: true, // 禁用背景点击
loadingType: 'spinner',
message: '加载中……'
})
if (that.signVal == '0' || that.signVal == '2') {
let data = {
orderType: 'SIGN_ORDER',
orderDTO: {
orderInfoDTO: {
orderNo: window.localStorage.getItem('orderNo')
},
ebizSignDTOS: [
{
signOrRead: 'tip',
signId: that.appntSign.signId,
orderNo: window.localStorage.getItem('orderNo'),
documentCode: that.appntSign.documentCode,
documentStatus: '3',
documentType: that.appntSign.documentType,
signType: that.signVal,
baseEncryp: that.base64,
tipsPolicyUrl: that.tipsPolicyUrl
}
]
}
}
saveInformation(data).then(res => {
if (res.result == '0') {
this.$toast.clear()
window.localStorage.setItem('detailJump', '')
sessionStorage.twowxSigned = false
let doubleRecordFlag = localStorage.doubleRecordFlag
let routeUrl = '/sale/signatureOfElectronic'
if (doubleRecordFlag == '1') {
// 跳转双录签署文件
routeUrl = '/sale/avoidDutyTip'
}
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#' + routeUrl,
forbidSwipeBack: '1'
},
routerInfo: {
path: routeUrl
}
})
} else {
that.$toast(res.resultMessage)
}
})
}
}
}
}

View File

@@ -1,24 +1,29 @@
<template>
<div class="insuranceInformation-container pb50 redRadioCheckbox">
<van-notice-bar :scrollable="false" v-if="!Time" class="notice">{{ `提示阅读时长需在${this.Time ? this.time : this.number}秒以上` }}</van-notice-bar>
<iframe :src="src + pdfUrl" class="iframe"></iframe>
<div class='insuranceInformation-container pb50 redRadioCheckbox'>
<van-notice-bar :scrollable='false' v-if='!Time' class='notice'>
{{ `提示:阅读时长需在${this.Time ? this.time : this.number}秒以上` }}
</van-notice-bar>
<iframe :src='src + pdfUrl' class='iframe'></iframe>
<van-radio-group v-model="radio" class="pb10 pt20 pl30 fs14">
<van-radio name="1" @click="click">
<van-radio-group v-model='radio' class='pb10 pt20 pl30 fs14'>
<van-radio name='1' @click='click'>
本人确认已阅读
<span>人身保险投保提示书</span>
</van-radio>
</van-radio-group>
<div class="pt30 pl30 flex align-items-c">
<span class="mr10">投保人签名 :</span>
<div class='pt30 pl30 flex align-items-c'>
<span class='mr10'>投保人签名 :</span>
<div v-if="signVal == '0' || signVal == '2'">
<van-button type="danger" size="small" :disabled="signVal == '1' ? true : isDisable" @click="sign('0')" v-no-more-click="1000">{{
appntSign.documentStatus == '2' ? '签名' : '已签名'
}}</van-button>
<van-button type='danger' size='small' :disabled="signVal == '1' ? true : isDisable" @click="sign('0')"
v-no-more-click='1000'>{{
appntSign.documentStatus == '2' ? '签名' : '已签名'
}}
</van-button>
</div>
</div>
<div class="bg-white bottom-btn">
<van-button type="danger" size="large" :disabled="isDisabledComplite" @click="goNext" v-no-more-click="1000">下一步</van-button>
<div class='bg-white bottom-btn'>
<van-button type='danger' size='large' :disabled='isDisabledComplite' @click='goNext' v-no-more-click='1000'>下一步
</van-button>
</div>
</div>
</template>
@@ -66,7 +71,8 @@ export default {
detailJump: '',
pdfUrl: '',
src: location.origin + '/pdfjs/web/viewer.html?file=',
tipsPolicyUrl: ''
tipsPolicyUrl: '',
flagLiuZhou: '' // 当前代理人是否属于柳州代理人的标志,此变量的值为'true'或'false'
}
},
components: {
@@ -211,6 +217,14 @@ export default {
return new Promise((resolve, reject) => {
getOrderDetail(data).then(res => {
if (res.result == '0') {
// 截取代理人机构号的前六位,用于去判断是否属于柳州代理人
let str = res.orderDTO.recmdDTO.managerOrg.substr(0, 6)
// 如果属于
if (str === '864502') {
that.flagLiuZhou = true
} else {
that.flagLiuZhou = false
}
res.orderDTO.ebizSignDTOS.map(item => {
if (item.documentCode == '4') {
if (item.signType == '0' || item.signType == '2') {
@@ -449,11 +463,16 @@ export default {
// axios.get(url).then(res => {
// console.log(res)
// })
let doubleRecordFlag = localStorage.doubleRecordFlag
let routeUrl = '/sale/signatureOfElectronic'
if (doubleRecordFlag == '1') {
// 跳转双录签署文件
routeUrl = '/sale/avoidDutyTip'
let routeUrl = ''
if (this.flagLiuZhou) {
routeUrl = '/sale/InsuranceRiskReminder'
} else {
let doubleRecordFlag = localStorage.doubleRecordFlag
routeUrl = '/sale/signatureOfElectronic'
if (doubleRecordFlag == '1') {
// 跳转双录签署文件
routeUrl = '/sale/avoidDutyTip'
}
}
this.$jump({
flag: 'h5',
@@ -514,11 +533,16 @@ export default {
// axios.get(url).then(res => {
// console.log(res)
// })
let doubleRecordFlag = localStorage.doubleRecordFlag
let routeUrl = '/sale/signatureOfElectronic'
if (doubleRecordFlag == '1') {
// 跳转双录签署文件
routeUrl = '/sale/avoidDutyTip'
let routeUrl = ''
if (this.flagLiuZhou) {
routeUrl = '/sale/InsuranceRiskReminder'
} else {
let doubleRecordFlag = localStorage.doubleRecordFlag
routeUrl = '/sale/signatureOfElectronic'
if (doubleRecordFlag == '1') {
// 跳转双录签署文件
routeUrl = '/sale/avoidDutyTip'
}
}
this.$jump({
flag: 'h5',
@@ -587,17 +611,19 @@ export default {
}
}
</script>
<style lang="scss" scoped>
<style lang='scss' scoped>
img {
width: 100%;
height: 100%;
}
.notice {
width: 100%;
position: fixed;
top: 0;
z-index: 20;
}
.iframe {
width: 100vw;
height: 70vh;

View File

@@ -1,10 +1,10 @@
<template>
<div class="signature-container">
<div class="signature-content pb40">
<div v-if="!isWeixin">
<div class='signature-container'>
<div class='signature-content pb40'>
<div v-if='!isWeixin'>
<index-bar></index-bar>
</div>
<div v-if="isWeixin" class="bg-white mt10 p20 fs14 tips">
<div v-if='isWeixin' class='bg-white mt10 p20 fs14 tips'>
<p>
尊敬的
<span>{{ tipsName }}</span
@@ -12,235 +12,258 @@
</p>
<p>该保单由国富人寿保险股份有限公司进行承保具体确认信息如下</p>
</div>
<van-cell-group class="mt10">
<van-cell title="销售人员工号" :value="recmd.agentCode" />
<van-cell title="销售人员姓名" :value="recmd.name" />
<van-cell title="投保单号" :value="orderInfo.orderNo" @click="toTest"></van-cell>
<van-cell title="投保日期" :value="date" />
<van-cell title="保费合计(元)" :value="orderInfo.orderAmount == undefined ? '' : orderInfo.orderAmount | moneyFormat" />
<van-cell-group class='mt10'>
<van-cell title='销售人员工号' :value='recmd.agentCode' />
<van-cell title='销售人员姓名' :value='recmd.name' />
<van-cell title='投保单号' :value='orderInfo.orderNo' @click='toTest'></van-cell>
<van-cell title='投保日期' :value='date' />
<van-cell title='保费合计(元)'
:value="orderInfo.orderAmount == undefined ? '' : orderInfo.orderAmount | moneyFormat" />
</van-cell-group>
<div v-if="!isWeixin">
<div v-if='!isWeixin'>
<!-- 不再微信 -->
<van-collapse v-model="activeNames" class="mt10">
<van-collapse-item name="1">
<div slot="title">
<van-collapse v-model='activeNames' class='mt10'>
<van-collapse-item name='1'>
<div slot='title'>
投保人
<span class="ml20">{{ appnt.name }}</span>
<span class='ml20'>{{ appnt.name }}</span>
</div>
<p class="mb20">以下内容需要您按照顺序阅读并签字确认:</p>
<p class='mb20'>以下内容需要您按照顺序阅读并签字确认:</p>
<div v-if="changeCard">
<div v-if='changeCard'>
<p>需阅读</p>
<p class="mb20">
<span class="text">{{ appntSign.documentName }}</span>
<img :src="src" v-if="appntSign.documentStatus == '1'" />
<p class='mb20'>
<span class='text'>{{ appntSign.documentName }}</span>
<img :src='src' v-if="appntSign.documentStatus == '1'" />
</p>
</div>
<div v-else>
<div v-for="(item, index) in appntSign" :key="index">
<p>{{ item.documentCode == '1' || item.documentCode == '8' || item.documentCode == '9' ? '需阅读' : '需签署' }}</p>
<p class="mb20">
<span class="text">{{ item.documentName }}</span>
<img :src="src" v-if="(item.documentCode == '1' || item.documentCode == '8' || item.documentCode == '9') && item.documentStatus == '1'" />
<img :src="src" v-if="!(item.documentCode == '1' || item.documentCode == '8' || item.documentCode == '9') && item.documentStatus == '3'" />
<div v-for='(item, index) in appntSign' :key='index'>
<p>{{ item.documentCode == '1' || item.documentCode == '8' || item.documentCode == '9' ? '需阅读' : '需签署'
}}</p>
<p class='mb20'>
<span class='text'>{{ item.documentName }}</span>
<img :src='src'
v-if="(item.documentCode == '1' || item.documentCode == '8' || item.documentCode == '9') && item.documentStatus == '1'" />
<img :src='src'
v-if="!(item.documentCode == '1' || item.documentCode == '8' || item.documentCode == '9') && item.documentStatus == '3'" />
</p>
</div>
</div>
<p class="start" v-if="airSign != '1'">点击开始分享进行相关操作</p>
<div v-if="!isInvalid" class="flex justify-content-a mt20">
<p class='start' v-if="airSign != '1'">点击开始分享进行相关操作</p>
<div v-if='!isInvalid' class='flex justify-content-a mt20'>
<van-button
v-if="isShow"
type="danger"
size="normal"
class="w150"
v-if='isShow'
type='danger'
size='normal'
class='w150'
plain
v-no-more-click="1000"
v-no-more-click='1000'
:disabled="changeCard ? appntSign.documentStatus == '1' : appntSignStatus == '3'"
@click="share(saleInsuredPersonInfo.relationToAppnt == '1' ? '2' : '0')"
>分享</van-button
>分享
</van-button
>
<van-button
type="danger"
size="normal"
class="w150"
type='danger'
size='normal'
class='w150'
plain
:disabled="changeCard ? appntSign.documentStatus == '1' : appntSignStatus == '3'"
v-no-more-click="1000"
v-no-more-click='1000'
@click="start_ocr(saleInsuredPersonInfo.relationToAppnt == '1' ? '2' : '0')"
>开始</van-button
>开始
</van-button
>
</div>
<div class="text" v-else>操作时间已失效请联系销售人员</div>
<div class='text' v-else>操作时间已失效请联系销售人员</div>
</van-collapse-item>
</van-collapse>
<div v-if="relationToAppnt != '1' && !changeCard" class="mt10">
<van-collapse v-model="activeNames" v-for="(item, index) in insured" :key="index">
<van-collapse-item :name="index + 2">
<div slot="title">
<div v-if="relationToAppnt != '1' && !changeCard" class='mt10'>
<van-collapse v-model='activeNames' v-for='(item, index) in insured' :key='index'>
<van-collapse-item :name='index + 2'>
<div slot='title'>
被保险人
<span class="ml20">{{ item.name }}</span>
<span class='ml20'>{{ item.name }}</span>
</div>
<p class="mb20">以下内容需要您按照顺序阅读并签字确认:</p>
<div v-for="(item, index) in insuredSign" :key="index">
<p class='mb20'>以下内容需要您按照顺序阅读并签字确认:</p>
<div v-for='(item, index) in insuredSign' :key='index'>
<p>{{ item.documentCode == '1' || item.documentCode == '8' ? '需阅读' : '需签署' }}</p>
<p class="mb20">
<span class="text">{{ item.documentName }}</span>
<img :src="src" v-if="(item.documentCode == '1' || item.documentCode == '8') && item.documentStatus == '1'" />
<img :src="src" v-if="!(item.documentCode == '1' || item.documentCode == '8') && item.documentStatus == '3'" />
<p class='mb20'>
<span class='text'>{{ item.documentName }}</span>
<img :src='src'
v-if="(item.documentCode == '1' || item.documentCode == '8') && item.documentStatus == '1'" />
<img :src='src'
v-if="!(item.documentCode == '1' || item.documentCode == '8') && item.documentStatus == '3'" />
</p>
</div>
<p class="start" v-if="airSign != '1'">点击开始分享进行相关操作</p>
<div v-if="!isInvalid" class="flex justify-content-a mt20">
<p class='start' v-if="airSign != '1'">点击开始分享进行相关操作</p>
<div v-if='!isInvalid' class='flex justify-content-a mt20'>
<van-button
v-if="isShow"
type="danger"
size="normal"
class="w150"
v-if='isShow'
type='danger'
size='normal'
class='w150'
:disabled="insuredSignStatus == '3'"
@click="share('1')"
plain
v-no-more-click="1000"
>分享</van-button
v-no-more-click='1000'
>分享
</van-button
>
<van-button type="danger" size="normal" plain class="w150" :disabled="insuredSignStatus == '3'" @click="start_ocr('1')" v-no-more-click="1000"
>开始</van-button
<van-button type='danger' size='normal' plain class='w150' :disabled="insuredSignStatus == '3'"
@click="start_ocr('1')" v-no-more-click='1000'
>开始
</van-button
>
</div>
<div class="text" v-else>操作时间已失效请联系销售人员</div>
<div class='text' v-else>操作时间已失效请联系销售人员</div>
</van-collapse-item>
</van-collapse>
</div>
</div>
<div v-else>
<!-- 在微信 -->
<div v-if="shareCode != '1'" class="mt10">
<van-collapse v-model="activeNames">
<van-collapse-item name="1">
<div slot="title">
<div v-if="shareCode != '1'" class='mt10'>
<van-collapse v-model='activeNames'>
<van-collapse-item name='1'>
<div slot='title'>
投保人
<span class="ml20">{{ appnt.name }}</span>
<span class='ml20'>{{ appnt.name }}</span>
</div>
<p class="mb20">以下内容需要您按照顺序阅读并签字确认:</p>
<div v-if="changeCard">
<p class='mb20'>以下内容需要您按照顺序阅读并签字确认:</p>
<div v-if='changeCard'>
<p>需阅读</p>
<p class="mb20">
<span class="text">{{ appntSign.documentName }}</span>
<img :src="src" v-if="appntSign.documentStatus == '1'" />
<p class='mb20'>
<span class='text'>{{ appntSign.documentName }}</span>
<img :src='src' v-if="appntSign.documentStatus == '1'" />
</p>
</div>
<div v-else>
<div v-for="(item, index) in appntSign" :key="index">
<p>{{ item.documentCode == '1' || item.documentCode == '8' || item.documentCode == '9'? '需阅读' : '需签署' }}</p>
<p class="mb20">
<span class="text">{{ item.documentName }}</span>
<img :src="src" v-if="(item.documentCode == '1' || item.documentCode == '8' || item.documentCode == '9') && item.documentStatus == '1'" />
<img :src="src" v-if="!(item.documentCode == '1' || item.documentCode == '8' || item.documentCode == '9') && item.documentStatus == '3'" />
<div v-for='(item, index) in appntSign' :key='index'>
<p>{{ item.documentCode == '1' || item.documentCode == '8' || item.documentCode == '9' ? '需阅读' : '需签署'
}}</p>
<p class='mb20'>
<span class='text'>{{ item.documentName }}</span>
<img :src='src'
v-if="(item.documentCode == '1' || item.documentCode == '8' || item.documentCode == '9') && item.documentStatus == '1'" />
<img :src='src'
v-if="!(item.documentCode == '1' || item.documentCode == '8' || item.documentCode == '9') && item.documentStatus == '3'" />
</p>
</div>
</div>
<p class="start" v-if="airSign != '1'">点击开始分享进行相关操作</p>
<div v-if="!isInvalid" class="flex justify-content-a mt20">
<p class='start' v-if="airSign != '1'">点击开始分享进行相关操作</p>
<div v-if='!isInvalid' class='flex justify-content-a mt20'>
<van-button
type="danger"
size="normal"
style="width: 157px"
type='danger'
size='normal'
style='width: 157px'
plain
:disabled="changeCard ? appntSign.documentStatus == '1' : appntSignStatus == '3'"
v-no-more-click="1000"
v-no-more-click='1000'
@click="start_ocr(saleInsuredPersonInfo.relationToAppnt == '1' ? '2' : '0')"
>开始</van-button
>开始
</van-button
>
</div>
<div class="text" v-else>操作时间已失效请联系销售人员</div>
<div class='text' v-else>操作时间已失效请联系销售人员</div>
</van-collapse-item>
</van-collapse>
</div>
<div v-else class="mt10">
<van-collapse v-model="activeNames" v-for="(item, index) in insured" :key="index">
<van-collapse-item :name="index + 2">
<div slot="title">
<div v-else class='mt10'>
<van-collapse v-model='activeNames' v-for='(item, index) in insured' :key='index'>
<van-collapse-item :name='index + 2'>
<div slot='title'>
被保险人
<span class="ml20">{{ item.name }}</span>
<span class='ml20'>{{ item.name }}</span>
</div>
<p class="mb20">以下内容需要您按照顺序阅读并签字确认:</p>
<div v-for="(item, index) in insuredSign" :key="index">
<p class='mb20'>以下内容需要您按照顺序阅读并签字确认:</p>
<div v-for='(item, index) in insuredSign' :key='index'>
<p>{{ item.documentCode == '1' || item.documentCode == '8' ? '需阅读' : '需签署' }}</p>
<p class="mb20">
<span class="text">{{ item.documentName }}</span>
<img :src="src" v-if="(item.documentCode == '1' || item.documentCode == '8') && item.documentStatus == '1'" />
<img :src="src" v-if="!(item.documentCode == '1' || item.documentCode == '8') && item.documentStatus == '3'" />
<p class='mb20'>
<span class='text'>{{ item.documentName }}</span>
<img :src='src'
v-if="(item.documentCode == '1' || item.documentCode == '8') && item.documentStatus == '1'" />
<img :src='src'
v-if="!(item.documentCode == '1' || item.documentCode == '8') && item.documentStatus == '3'" />
</p>
</div>
<p class="start" v-if="airSign != '1'">点击开始分享进行相关操作</p>
<div v-if="!isInvalid" class="flex justify-content-a mt20">
<p class='start' v-if="airSign != '1'">点击开始分享进行相关操作</p>
<div v-if='!isInvalid' class='flex justify-content-a mt20'>
<van-button
type="danger"
size="normal"
type='danger'
size='normal'
plain
style="width: 157px"
style='width: 157px'
:disabled="insuredSignStatus == '3'"
@click="start_ocr('1')"
v-no-more-click="1000"
>开始</van-button
v-no-more-click='1000'
>开始
</van-button
>
</div>
<div class="text" v-else>操作时间已失效请联系销售人员</div>
<div class='text' v-else>操作时间已失效请联系销售人员</div>
</van-collapse-item>
</van-collapse>
</div>
</div>
</div>
<div v-if="!isWeixin">
<div v-if="changeCard">
<div class="bottom-btn bg-white" v-if="appntSign.documentStatus == '1'">
<div v-if='!isWeixin'>
<div v-if='changeCard'>
<div class='bottom-btn bg-white' v-if="appntSign.documentStatus == '1'">
<van-button
type="danger"
type='danger'
v-if="relationToAppnt == '1' ? true : appntSign.documentStatus == '1' ? true : false"
size="large"
@click="rePayMent"
v-no-more-click="1000"
>支付</van-button
size='large'
@click='rePayMent'
v-no-more-click='1000'
>支付
</van-button
>
</div>
</div>
<div v-else>
<div class="bottom-btn bg-white" v-if="appntSignStatus == '3'">
<div class='bottom-btn bg-white' v-if="appntSignStatus == '3'">
<van-button
type="danger"
type='danger'
v-if="relationToAppnt == '1' ? true : insuredSignStatus == '3' ? true : false"
size="large"
@click="next"
v-no-more-click="1000"
>提交</van-button
size='large'
@click='next'
v-no-more-click='1000'
>提交
</van-button
>
</div>
</div>
</div>
<van-popup v-model="videoShow" position="bottom" style="height: 100vh; background: #666">
<van-popup v-model='videoShow' position='bottom' style='height: 100vh; background: #666'>
<!-- <video controls style="width: 100%; max-height: calc(100vh - 60px)" src="/app/video/rlsb.mp4"></video> -->
<div class="" v-if="videoShow" style="height: calc(100vh - 60px); display: flex; align-items: center; flex-flow: column; justify-content: center">
<div class='' v-if='videoShow'
style='height: calc(100vh - 60px); display: flex; align-items: center; flex-flow: column; justify-content: center'>
<!-- <van-notice-bar :scrollable="false" class="notice" style="width: 100%">为维护您的合法权益请您务必观看防范销售误导视频</van-notice-bar> -->
<video
controls
style="width: 100%; max-height: calc(100vh - 60px)"
style='width: 100%; max-height: calc(100vh - 60px)'
:src="'https://gf-dev-202005-1254138932.cos.ap-shanghai-fsi.myqcloud.com/gfapp/pub01/2021/04/28/guofulive.MP4'"
ref="vid"
@timeupdate="timeupdate"
ref='vid'
@timeupdate='timeupdate'
></video>
</div>
<div class="bottom-btn bg-white">
<van-button type="danger" size="large" @click="isVideoUrlClick()" v-no-more-click="1000">下一步</van-button>
<div class='bottom-btn bg-white'>
<van-button type='danger' size='large' @click='isVideoUrlClick()' v-no-more-click='1000'>下一步</van-button>
</div>
</van-popup>
<!-- 短信验证 -->
<van-dialog v-model="show" title="提示" show-cancel-button @confirm="authConfirm(authCode)" @cancel="clearTimer">
<p class="p10 fs14">为确保是您本人操作短信验证码已发送至您手机号{{ encyCustomerMobile }}请您输入验证码以完成后续投保操作</p>
<van-cell-group class="flex align-items-c pr5 mb15">
<van-field maxlength="6" placeholder="请输入短信验证码" v-model="authCode" clearable label-width="0" />
<van-button type="danger" plain size="small" class="w160 p0" @click="getAuthCode" :disabled="codeDisabled" v-no-more-click="2000">{{
codeDisabled ? `${countDown}s后重新获取` : '获取验证码'
}}</van-button>
<van-dialog v-model='show' title='提示' show-cancel-button @confirm='authConfirm(authCode)' @cancel='clearTimer'>
<p class='p10 fs14'>为确保是您本人操作短信验证码已发送至您手机号{{ encyCustomerMobile }}请您输入验证码以完成后续投保操作</p>
<van-cell-group class='flex align-items-c pr5 mb15'>
<van-field maxlength='6' placeholder='请输入短信验证码' v-model='authCode' clearable label-width='0' />
<van-button type='danger' plain size='small' class='w160 p0' @click='getAuthCode' :disabled='codeDisabled'
v-no-more-click='2000'>{{
codeDisabled ? `${countDown}s后重新获取` : '获取验证码'
}}
</van-button>
</van-cell-group>
</van-dialog>
<!-- <UploadImageFile
@@ -373,7 +396,7 @@ export default {
},
fakeFaceAuth(expect) {
console.log('模拟调用人脸识别')
return new Promise(function (resolve, reject) {
return new Promise(function(resolve, reject) {
setTimeout(() => {
console.log('模拟人脸识别完成')
if (expect) {
@@ -434,7 +457,8 @@ export default {
confirmButtonColor: '#ee0a24',
confirmButtonText: '确认'
})
.then(() => {})
.then(() => {
})
} else {
this.isVideoNext = !this.isVideoNext
this.isVideoUrl == 'goUrl' ? this.goUrl() : this.insuredUrl()
@@ -1130,7 +1154,8 @@ export default {
// })
// }
},
toTest() {},
toTest() {
},
// 微信分享
share(code) {
let shareName = ''
@@ -1142,22 +1167,22 @@ export default {
console.log('`````````````测试安卓url`````````````````')
console.log(
location.origin +
'/#/sale/signatureConfirmation?orderNo=' +
localStorage.orderNo +
'&token=' +
localStorage.token +
'&saleInsuredInfo=' +
this.$CacheUtils.getLocItem('saleInsuredInfo') +
'&saleInsuredPersonInfo=' +
this.$CacheUtils.getLocItem('saleInsuredPersonInfo') +
'&relationToAppnt=' +
JSON.parse(this.$CacheUtils.getLocItem('saleInsuredPersonInfo')).relationToAppnt +
'&shareCode=' +
code +
'&signInvalid=' +
this.signInvalid +
'&productCode=' +
localStorage.productCode
'/#/sale/signatureConfirmation?orderNo=' +
localStorage.orderNo +
'&token=' +
localStorage.token +
'&saleInsuredInfo=' +
this.$CacheUtils.getLocItem('saleInsuredInfo') +
'&saleInsuredPersonInfo=' +
this.$CacheUtils.getLocItem('saleInsuredPersonInfo') +
'&relationToAppnt=' +
JSON.parse(this.$CacheUtils.getLocItem('saleInsuredPersonInfo')).relationToAppnt +
'&shareCode=' +
code +
'&signInvalid=' +
this.signInvalid +
'&productCode=' +
localStorage.productCode
)
if (this.changeCard) {
// eslint-disable-next-line no-undef
@@ -1345,7 +1370,7 @@ export default {
if (res.orderDTO && res.orderDTO.prtType) {
localStorage.setItem('readingProtocolType', res.orderDTO.prtType)
}
let riskDTOLst = res.orderDTO.insuredDTOs[0].riskDTOLst[0];
let riskDTOLst = res.orderDTO.insuredDTOs[0].riskDTOLst[0]
// 判断是否为长期险
if ((riskDTOLst.insuYearFlag == 'Y' && riskDTOLst.insuYear > 1) || riskDTOLst.insuYearFlag == 'A') {
this.isInsuYearFlag = true
@@ -1448,7 +1473,7 @@ export default {
riskName = res.orderDTO.insuredDTOs[0].riskDTOLst[0].riskName
}
if (that.orderInfo && that.orderInfo.activeType) {
that.$CacheUtils.setLocItem('activeType',that.orderInfo.activeType)
that.$CacheUtils.setLocItem('activeType', that.orderInfo.activeType)
}
localStorage.setItem('productCode', productCode)
this.riskName = riskName
@@ -1480,7 +1505,7 @@ export default {
})
if (!that.changeCard) {
//将投保人数组排序
that.appntSign.sort(function (a, b) {
that.appntSign.sort(function(a, b) {
return a.key - b.key
})
//获取投保和被保险人电子投保单签字状态
@@ -1511,7 +1536,7 @@ export default {
item.key = 2
item.routePath = 'insuranceInformation'
} else if (item.documentCode == '2') {
item.key = 8
item.key = 9
item.routePath = 'SignatureOfElectronic'
} else if (item.documentCode == '3') {
item.key = 4
@@ -1520,10 +1545,10 @@ export default {
item.key = 5
item.routePath = 'InsuranceTip'
} else if (item.documentCode == '6') {
item.key = 6
item.key = 7
item.routePath = 'avoidDutyTip'
} else if (item.documentCode == '7') {
item.key = 7
item.key = 8
item.routePath = 'doubleRecordTip'
} else if (item.documentCode == '8') {
item.key = 1
@@ -1531,6 +1556,9 @@ export default {
} else if (item.documentCode == '9') {
item.key = 3
item.routePath = 'shortPeriodProduct'
} else if (item.documentCode == '11') {
item.key = 6
item.routePath = 'InsuranceRiskReminder'
}
},
getSignInvalid() {
@@ -1749,17 +1777,21 @@ export default {
}
</script>
<style lang="scss" scoped>
<style lang='scss' scoped>
@import '@/assets/sass/variables.scss';
.text {
color: #4a90e2;
}
.start {
color: #4fc6b3;
}
.tips {
line-height: 30px;
}
.tips {
line-height: 30px;
}