Merge branch 'feature/【保全】' into dev

# Conflicts:
#	src/api/ebiz/sale/sale.js
#	src/assets/js/utils/request.js
#	src/config/urlMap.js
#	src/router/ebiz/index.js
#	src/store/index.js
#	src/views/app/Home.vue
This commit is contained in:
yuweiqi
2020-06-09 10:38:19 +08:00
49 changed files with 5423 additions and 398 deletions

View File

@@ -1,52 +1,68 @@
import request from '@/assets/js/utils/request'
import getUrl from '@/assets/js/utils/get-url'
export function edorChange(data) {
return request({
url: getUrl('/edor/item/change', 0),
method: 'post',
data
})
}
//搜索客户
export function customerList(data) {
return request({
url: getUrl('/edor/customer/customerList', 0),
url: getUrl('/edor/customer/customerList', 1),
method: 'post',
data
})
}
export function edorSignSave(data) {
return request({
url: getUrl('/edor/sign/save', 0),
method: 'post',
data
})
}
//客户详情
export function customerInfo(data) {
return request({
url: getUrl('/edor/customer/customerInfo', 0),
method: 'post',
data
})
}
//客户详情
// export function customerInfo(data) {
// return request({
// url: getUrl('/edor/customer/customerInfo', 0),
// method: 'post',
// data
// })
// }
//保单列表
export function policyList(data) {
return request({
url: getUrl('/edor/customer/policyList', 0),
url: getUrl('/edor/policy/policyList', 1),
method: 'post',
data
})
}
//保全初始页信息查询(除续期账号变更外)
export function policyInfo(data) {
return request({
url: getUrl('/edor/policy/policyInfo', 1),
method: 'post',
data
})
}
//保全初始页信息查询-续期账号变更
export function pcPolicyInfo(data) {
return request({
url: getUrl('/edor/policy/pcPolicyInfo', 1),
method: 'post',
data
})
}
//变更提交/保全确认
export function changeEdor(data) {
return request({
url: getUrl('/edor/edor/changeEdor', 1),
method: 'post',
data
})
}
//保全进度查询列表
export function queryEdorList(data) {
return request({
url: getUrl('/edor/edor/queryEdorList', 1),
method: 'post',
data
})
}
//保全试算
export function trial(data) {
return request({
url: getUrl('/edor/edor/trial', 1),
method: 'post',
data
})
}
//保全详情查询
export function queryConfirmDetail(data) {
return request({
url: getUrl('/edor/edor/queryConfirmDetail', 1),
method: 'post',
data
})

View File

@@ -76,7 +76,15 @@ let cardList = []
let renewalManage = [
'/renewal/getRenewalList' //续期列表查询
]
let whiteList = ['/customer/agent/getCustomersList', ...proposal, ...sale, ...agentEnter, ...claims, ...survey, ...manpower, ...renewalManage]
//保全
let preserve = [
'/edor/customer/customerList', //客户搜索
'/edor/policy/policyList', //保单列表
'/edor/edor/queryEdorList' //保全进度查询
]
let whiteList = ['/customer/agent/getCustomersList', ...proposal, ...sale, ...agentEnter, ...claims, ...survey, ...manpower, ...renewalManage, ...preserve]
// let whiteList = ['/customer/agent/getCustomersList', ...proposal, ...sale]

View File

@@ -79,28 +79,3 @@
border: none;
}
}
.dialog-alert {
// width: 255px;
.van-dialog__header {
padding-top: 20px;
margin-bottom: 8px;
color: #E9332E;
}
.van-dialog__message {
font-size: 14px;
color: #333;
padding-bottom: 30px;
}
.van-dialog__confirm {
background: #E9332E;
}
.van-hairline--top::after {
border: none;
}
}

View File

@@ -1,10 +1,9 @@
// 保全
let mockBaseUrl = 'http://rap2.taobao.org:38080/app/mock/250585/'
export default {
'/edor/customer/customerList': mockBaseUrl + '/edor/customer/customerList', //客户搜索
'/edor/customer/policyList': mockBaseUrl + '/edor/customer/policyList',
'/edor/customer/customerInfo': mockBaseUrl + '/edor/customer/customerInfo',
'/edor/customer/customerList': mockBaseUrl + '/edor/customer/customerList',
'/edor/item/change': mockBaseUrl + '/edor/item/change',
'/edor/sign/save': mockBaseUrl + '/edor/sign/save',
'/edor/query/queryDetails': mockBaseUrl + '/edor/query/queryDetails'
}

View File

@@ -26,6 +26,7 @@ export default [
...serve,
...common,
...product,
...cardList,
...agentEenter,
...milestone,
...poster,
@@ -37,5 +38,6 @@ export default [
...cardList,
...renewalManage,
...preserve,
...exercising
...exercising,
...manpower
] //根据需要进行删减

View File

@@ -1,43 +1,56 @@
//保全 定义相关组件
const search = () => import('@/views/ebiz/preserve/Search')
const imageUpload = () => import('@/views/ebiz/preserve/ImageUpload')
const handleResult = () => import('@/views/ebiz/preserve/HandleResult')
const submitResult = () => import('@/views/ebiz/preserve/SubmitResult')
const policyList = () => import('@/views/ebiz/preserve/PolicyList')
const renewalInfo = () => import('@/views/ebiz/preserve/RenewalInfo')
const renewalConfirmation = () => import('@/views/ebiz/preserve/RenewalConfirmation')
const contactInfo = () => import('@/views/ebiz/preserve/ContactInfo')
const contacAgreement = () => import('@/views/ebiz/preserve/ContacAgreement')
const contactConfirmation = () => import('@/views/ebiz/preserve/ContactConfirmation')
const beneficiaryInfo = () => import('@/views/ebiz/preserve/BeneficiaryInfo')
const beneficiaryInfoAdd = () => import('@/views/ebiz/preserve/BeneficiaryInfoAdd')
const beneficiaryInfoDetail = () => import('@/views/ebiz/preserve/BeneficiaryInfoDetail')
const beneficiaryConfirmation = () => import('@/views/ebiz/preserve/BeneficiaryConfirmation')
const surrenderInfo = () => import('@/views/ebiz/preserve/SurrenderInfo')
const surrenderConfirmation = () => import('@/views/ebiz/preserve/SurrenderConfirmation')
const autopayAuthorization = () => import('@/views/ebiz/preserve/AutopayAuthorization')
const Search = () => import('@/views/ebiz/preserve/common/Search')
const HandleResult = () => import('@/views/ebiz/preserve/common/HandleResult')
const SubmitResult = () => import('@/views/ebiz/preserve/common/SubmitResult')
const PolicyList = () => import('@/views/ebiz/preserve/common/PolicyList')
const RenewalInfo = () => import('@/views/ebiz/preserve/pc/RenewalInfo')
const pcImageUpload = () => import('@/views/ebiz/preserve/pc/ImageUpload')
const renewalConfirmation = () => import('@/views/ebiz/preserve/pc/RenewalConfirmation')
const autopayAuthorization = () => import('@/views/ebiz/preserve/pc/AutopayAuthorization')
const contactInfo = () => import('@/views/ebiz/preserve/bb/ContactInfo')
const contacAgreement = () => import('@/views/ebiz/preserve/bb/ContacAgreement')
const contactConfirmation = () => import('@/views/ebiz/preserve/bb/ContactConfirmation')
const BeneficiaryInfo = () => import('@/views/ebiz/preserve/bc/BeneficiaryInfo')
const bcImageUpload = () => import('@/views/ebiz/preserve/bc/ImageUpload')
const beneficiaryInfoAdd = () => import('@/views/ebiz/preserve/bc/BeneficiaryInfoAdd')
const beneficiaryInfoDetail = () => import('@/views/ebiz/preserve/bc/BeneficiaryInfoDetail')
const beneficiaryConfirmation = () => import('@/views/ebiz/preserve/bc/BeneficiaryConfirmation')
const SurrenderInfo = () => import('@/views/ebiz/preserve/ct/SurrenderInfo')
const SurrenderConfirmation = () => import('@/views/ebiz/preserve/ct/SurrenderConfirmation')
const SurrenderTip = () => import('@/views/ebiz/preserve/ct/SurrenderTip')
const CtImageUpload = () => import('@/views/ebiz/preserve/ct/ImageUpload')
const Progress = () => import('@/views/ebiz/preserve/Progress')
const Contact = () => import('@/views/ebiz/preserve/detail/Contact')
const Beneficiary = () => import('@/views/ebiz/preserve/detail/Beneficiary')
const BeneficiaryInfoD = () => import('@/views/ebiz/preserve/detail/BeneficiaryInfo')
const Renewal = () => import('@/views/ebiz/preserve/detail/Renewal')
const CoolingOffperiodSurrender = () => import('@/views/ebiz/preserve/detail/CoolingOffperiodSurrender')
const Surrender = () => import('@/views/ebiz/preserve/detail/Surrender')
export default [
{
path: '/preserve/search',
name: 'search',
component: search,
path: '/preserve/common/search',
name: 'Search',
component: Search,
meta: {
title: '搜索客户',
index: 1
}
},
{
path: '/preserve/policyList',
name: 'policyList',
component: policyList,
path: '/preserve/common/policyList',
name: 'PolicyList',
component: PolicyList,
meta: {
title: '选择保单',
index: 2
}
},
{
path: '/preserve/contactInfo',
path: '/preserve/bb/contactInfo',
name: 'contactInfo',
component: contactInfo,
meta: {
@@ -46,7 +59,7 @@ export default [
}
},
{
path: '/preserve/contacAgreement',
path: '/preserve/bb/contacAgreement',
name: 'contacAgreement',
component: contacAgreement,
meta: {
@@ -55,25 +68,34 @@ export default [
}
},
{
path: '/preserve/renewalInfo',
name: 'renewalInfo',
component: renewalInfo,
path: '/preserve/pc/renewalInfo',
name: 'RenewalInfo',
component: RenewalInfo,
meta: {
title: '续期账号变更',
index: 4
}
},
{
path: '/preserve/beneficiaryInfo',
name: 'beneficiaryInfo',
component: beneficiaryInfo,
path: '/preserve/pc/imageUpload',
name: 'pcImageUpload',
component: pcImageUpload,
meta: {
title: '续期账号图片上传',
index: 41
}
},
{
path: '/preserve/bc/beneficiaryInfo',
name: 'BeneficiaryInfo',
component: BeneficiaryInfo,
meta: {
title: '受益人变更',
index: 5
}
},
{
path: '/preserve/beneficiaryInfoAdd',
path: '/preserve/bc/beneficiaryInfoAdd',
name: 'beneficiaryInfoAdd',
component: beneficiaryInfoAdd,
meta: {
@@ -82,7 +104,7 @@ export default [
}
},
{
path: '/preserve/beneficiaryInfoDetail',
path: '/preserve/bc/beneficiaryInfoDetail',
name: 'beneficiaryInfoDetail',
component: beneficiaryInfoDetail,
meta: {
@@ -91,34 +113,43 @@ export default [
}
},
{
path: '/preserve/surrenderInfo',
name: 'surrenderInfo',
component: surrenderInfo,
path: '/preserve/ct/surrenderInfo',
name: 'SurrenderInfo',
component: SurrenderInfo,
meta: {
title: '退保',
index: 6
}
},
{
path: '/preserve/imageUpload',
name: 'imageUpload',
component: imageUpload,
path: '/preserve/bc/imageUpload',
name: 'bcImageUpload',
component: bcImageUpload,
meta: {
title: '影像上传',
title: '上传影像资料',
index: 7
}
},
{
path: '/preserve/handleResult',
name: 'handleResult',
component: handleResult,
path: '/preserve/ct/imageUpload',
name: 'CtImageUpload',
component: CtImageUpload,
meta: {
title: '上传影像资料',
index: 7
}
},
{
path: '/preserve/common/handleResult',
name: 'HandleResult',
component: HandleResult,
meta: {
title: '操作结果',
index: 8
}
},
{
path: '/preserve/beneficiaryConfirmation',
path: '/preserve/bc/beneficiaryConfirmation',
name: 'beneficiaryConfirmation',
component: beneficiaryConfirmation,
meta: {
@@ -127,7 +158,7 @@ export default [
}
},
{
path: '/preserve/renewalConfirmation',
path: '/preserve/pc/renewalConfirmation',
name: 'renewalConfirmation',
component: renewalConfirmation,
meta: {
@@ -136,7 +167,7 @@ export default [
}
},
{
path: '/preserve/contactConfirmation',
path: '/preserve/bb/contactConfirmation',
name: 'contactConfirmation',
component: contactConfirmation,
meta: {
@@ -145,16 +176,16 @@ export default [
}
},
{
path: '/preserve/surrenderConfirmation',
name: 'surrenderConfirmation',
component: surrenderConfirmation,
path: '/preserve/ct/surrenderConfirmation',
name: 'SurrenderConfirmation',
component: SurrenderConfirmation,
meta: {
title: '保全代办确认',
index: 12
}
},
{
path: '/preserve/autopayAuthorization',
path: '/preserve/pc/autopayAuthorization',
name: 'autopayAuthorization',
component: autopayAuthorization,
meta: {
@@ -163,12 +194,84 @@ export default [
}
},
{
path: '/preserve/submitResult',
name: 'submitResult',
component: submitResult,
path: '/preserve/ct/surrenderTip',
name: 'SurrenderTip',
component: SurrenderTip,
meta: {
title: '退保协议',
index: 12
}
},
{
path: '/preserve/common/submitResult',
name: 'SubmitResult',
component: SubmitResult,
meta: {
title: '提交结果',
index: 13
}
},
{
path: '/preserve/Progress',
name: 'Progress',
component: Progress,
meta: {
title: '保全进度查询',
index: 14
}
},
{
path: '/preserve/detail/Contact/:surrenderId',
name: 'Contact',
component: Contact,
meta: {
title: '联系方式变更',
index: 15
}
},
{
path: '/preserve/detail/Beneficiary/:surrenderId',
name: 'Beneficiary',
component: Beneficiary,
meta: {
title: '受益人',
index: 16
}
},
{
path: '/preserve/detail/BeneficiaryInfo/:surrenderId',
name: 'BeneficiaryInfoD',
component: BeneficiaryInfoD,
meta: {
title: '指定受益人信息',
index: 17
}
},
{
path: '/preserve/detail/CoolingOffperiodSurrender/:surrenderId',
name: 'CoolingOffperiodSurrender',
component: CoolingOffperiodSurrender,
meta: {
title: '犹豫期退保',
index: 18
}
},
{
path: '/preserve/detail/Surrender/:surrenderId',
name: 'Surrender',
component: Surrender,
meta: {
title: '退保',
index: 19
}
},
{
path: '/preserve/detail/Renewal/:surrenderId',
name: 'Renewal',
component: Renewal,
meta: {
title: '续期账号变更',
index: 20
}
}
]

View File

@@ -14,7 +14,9 @@ export default new Vuex.Store({
agentEnterApplyMobil: '', //自助入司-新的被增员人填好的基础信息里的电话号码
agentEnterApplyIdNo: '', //自助入司-新的被增员人填好的基础信息里的证件号码
refusalCause: '', //自助入司-查看审批流程-审批拒绝的原因
renewalMsgParam: {} //续期管理-发送短信,请求参数
renewalMsgParam: {}, //续期管理-发送短信,请求参数
surrenderId: '', //保全-保全主表id
eodrApplyNo: '' //保全-保全受理号
},
mutations: {
//更新 理赔申请-区分被保险人/申请人页面flag
@@ -33,6 +35,14 @@ export default new Vuex.Store({
//更新 续期管理-发送短信,请求参数
updateRenewalMsgParam(state, val) {
state.renewalMsgParam = val
},
//更新 保全-保全主表id
updatePreserveSurrendId(state, val) {
state.surrenderId = val
},
//更新 保全-保全受理号
updatePreserveEodrApplyNo(state, val) {
state.eodrApplyNo = val
}
},
getters: {
@@ -47,6 +57,12 @@ export default new Vuex.Store({
},
getRenewalMsgParam(state) {
return state.renewalMsgParam
},
getPreserveSurrendId(state) {
return state.surrenderId
},
getPreserveEodrApplyNo(state) {
return state.eodrApplyNo
}
}
})

View File

@@ -30,6 +30,13 @@
<li><router-link to="/agentEenter/approve/ApproveList">入司审批列表</router-link></li>
<li><router-link to="/survey/surveyList">问卷调查</router-link></li>
<li><router-link to="/renewalManage/list">续期管理列表</router-link></li>
<li><router-link to="/nbs/list">nbs列表</router-link></li>
<li><router-link to="/manpower/DiscAnalysis/List">DISC性格分析</router-link></li>
<li><router-link to="/preserve/common/search?entry=BB">保全-搜索-联系方式变更</router-link></li>
<li><router-link to="/preserve/common/search?entry=BC">保全-搜索-受益人变更</router-link></li>
<li><router-link to="/preserve/common/search?entry=PC">保全-搜索-续期账户变更</router-link></li>
<li><router-link to="/preserve/common/search?entry=CT">保全-搜索-退保</router-link></li>
<!-- <li><router-link to="/preserve/common/search?entry=WT">保全-搜索-犹退</router-link></li> -->
<li><router-link to="/manpower/DiscAnalysis/List">DISC性格分析</router-link></li>
</ul>
</li>
@@ -67,7 +74,6 @@
</li>
</ul>
</li>
</ul>
<van-tabbar v-model="active">
<van-tabbar-item icon="home-o">首页</van-tabbar-item>

View File

@@ -1,4 +0,0 @@
<!--自动转账授权书-续期账号变更-->
<template>
<div class="auto-pay"></div>
</template>

View File

@@ -1 +0,0 @@
<!--影像信息上传页面-->

View File

@@ -0,0 +1,135 @@
<!-- 保全进度查询 -->
<template>
<div class="progress-container">
<!-- <van-list
v-model="loading"
:immediate-check="false"
:finished="finished"
:finished-text="finishedText"
error-text="请求失败点击重新加载"
:error.sync="error"
@load="getList"
class="pb45"
> -->
<div v-if="isSuccess">
<div class="fs12" v-for="(item, index) in list" :key="index">
<div class="flex align-items-c justify-content-c h40 gray">
<div>{{ item.edorAppDate | date }}</div>
</div>
<div class="bg-white pv15 pr15 pl10 ml15 mr15">
<div class="flex justify-content-s align-items-c">
<div>
<div class="w80 inline-b"><van-tag plain color="#DD9C56">客户</van-tag></div>
<span class="fs14 c-gray-dark">{{ item.appntName }}</span>
</div>
</div>
<div class="flex justify-content-s align-items-c pt15 pb15">
<div>
<div class="w80 inline-b"><van-tag plain color="#5ca7de">状态</van-tag></div>
<span class="fs14 c-gray-dark">{{ item.edorState | idToText('preserveState') }}</span>
</div>
</div>
<div class="pt15" style="border-top:1px solid #dadada">
<div>
<div class="w80 inline-b"><van-tag plain color="#999">保全项</van-tag></div>
<span class="fs14 c-gray-dark">{{ item.edorType }}</span>
</div>
</div>
<!-- <div class="mt10 flex justify-content-fe">
<van-button round @click="detail(item)" size="small" class="mr5" type="danger" plain v-no-more-click="2000">查看详情</van-button>
</div> -->
</div>
</div>
</div>
<div v-else class="text-center">
<img class="mt40 w250" src="@/assets/images/pic_page-non.png" />
<div class="fs17 c-gray-dark mt40">暂无数据</div>
</div>
<!-- </van-list> -->
</div>
</template>
<script>
import { Divider, Tag, Row, Col, Checkbox, CheckboxGroup, List } from 'vant'
import { queryEdorList } from '@/api/ebiz/preserve/preserve'
import dataDic from './js/data-dictionary.js'
import dateUtils from '@/assets/js/utils/date-utils'
export default {
name: 'ProgressInfo',
data() {
return {
list: [], //保全进度列表
isSuccess: false,
dataDic: dataDic
}
},
filters: {
// 数据字典 id 转 text
idToText: function(id, type) {
let text = ''
dataDic[type].some(item => {
if (item.id == id) {
text = item.text
}
})
return text
},
date: function(value) {
let date = new Date(value)
if (date.toString() != 'Invalid Date') {
return dateUtils.formatDate(date)
} else {
return '时间格式错误'
}
}
},
components: {
[Divider.name]: Divider,
[Tag.name]: Tag,
[Row.name]: Row,
[Col.name]: Col,
[Checkbox.name]: Checkbox,
[List.name]: List,
[CheckboxGroup.name]: CheckboxGroup
},
created() {
//获取保全进度列表
this.getList()
},
methods: {
// 查看详情
detail(item) {
let { surrenderType, surrenderId } = item
surrenderType = dataDic.route[surrenderType]
this.$jump({
flag: 'h5',
extra: {
url: location.origin + `/#/preserve/detail/${surrenderType}/${surrenderId}`
},
routerInfo: {
path: `/preserve/detail/${surrenderType}/${surrenderId}`
}
})
},
getList() {
queryEdorList({}).then(res => {
this.$toast.clear()
if (res.result == 0) {
console.log(res)
this.isSuccess = true
this.list = res.content.content.edorResDTOList
} else {
this.finished = true
this.loading = false
this.finishedText = ''
}
})
}
},
computed: {}
}
</script>
<style lang="scss" scoped></style>

View File

@@ -0,0 +1,96 @@
# ebiz-h5-preserve
## 介绍
## 保全项枚举(各个保全项文件夹也以此枚举命名)
detail (保全进度查询,前端文件夹名称)
AA("AA","增加保险金额","AA","G"),
AC("AC","投保人资料变更","AC","U"),
AM("AM","投保人变更","AM","U"),
AP("AP","宽末处理方式变更","AP","U"),
AR("AR","保单账户部分领取","AR","P"),
AT("AT","年金险解除合同","AT","P"),
AX("AX","年金险协议减人","AX","U"),
AZ("AZ","年金险减人","AZ","U"),
BB("BB","客户基本资料变更","BB","U"),
BC("BC","受益人变更","BC","U"),
BE("BE","被保险人复效","BE","Q"),
BI("BI","银行信息变更","BI","U"),
BM("BM","红利领取方式变更","BM","U"),
BR("BR","保险期间恢复","BR","U"),
BS("BS","保险期间中断","BS","U"),
BZ("BZ","建工险保单中止","BZ","U"),
CA("CA","帐户金额转移","CA","P"),
CB("CB","退保回退","CB","G"),
CC("CC","建工险工程面积造价变更","CC","U"),
CD("CD","客户地址信息变更","CD","U"),
CM("CM","客户重要资料变更","CM","U"),
CS("CS","签名变更","CS","U"),
CT("CT","退保","CT","P"),
DA("DA","增加附加特约责任","DA","U"),
DB("DB","红利领取","DB","P"),
DT("DT","附加特约责任终止","DT","U"),
EB("EB","差错回退","EB","U"),
EF("EF","终止附加险","EF","P"),
EI("EI","延长保险期间","EI","G"),
EN("EN","续保方式变更","EN","U"),
ER("ER","满期降低保额续保","ER","G"),
ES("ES","终止险种","ES","P"),
FM("FM","交费期间变更","FM","U"),
GA("GA","年金转换","GA","U"),
GB("GB","领取年龄变更","GB","U"),
GC("GC","生存给付转账授权","GC","U"),
GM("GM","领取方式变更","GM","U"),
HI("HI","补充告知","HI","U"),
HJ("HJ","万能缓缴期","HJ","U"),
IC("IC","客户重要资料变更(保单层","IC","U"),
IG("IG","投连险提前通知领取","IG","P"),
IO("IO","职业变更","IO","U"),
IP("IP","追加保费","IP","G"),
IR("IR","更换被保险人","IR","U"),
IT("IT","投连险退保","IT","P"),
JB("JB","减保选择权","JB","U"),
LG("LG","生存给付柜面领取","LG","P"),
LN("LN","保单质押贷款","LN","P"),
LR("LR","保单遗失补发","LR","G"),
MF("MF","长险费用变更","MF","U"),
MR("MR","主险续保","MR","G"),
NC("NC","新增保险方案","NC","G"),
NI("NI","新增被保险人","NI","G"),
NP("NP","保单新增险种","NP","G"),
NR("NR","被保人增加险种","NR","G"),
NS("NS","新增附加险","NS","G"),
OP("OP","万能险部分领取","OP","G"),
PA("PA","投资计划变更","PA","U"),
PC("PC","续期交费信息变更","PC","U"),
PF("PF","保单冻结及解冻","PF","U"),
PG("PG","投连险随时领取","PG","G"),
PL("PL","保单挂失、解挂","PL","U"),
PM("PM","缴费频率变更","PM","U"),
PR("PR","保单迁移","PR","U"),
PT("PT","减少保险金额","PT","P"),
PU("PU","减额缴清","PU","G"),
RB("RB","保全回退","RB","G"),
RC("RC","交费提醒方式变更","RC","U"),
RD("RD","部分领取","RD","P"),
RE("RE","保单复效","RE","Q"),
RF("RF","贷款清偿","RF","G"),
RG("RG","满期领取","RG","P"),
RN("RN","不定期缴费","RN","P"),
RR("RR","无名单实名化","RR","U"),
SA("SA","建工险保单延期","SA","U"),
SC("SC","特约变更","SC","U"),
SF("SF","公共保额收付费","SF","G"),
SM("SM","服务类维护","SM","U"),
TA("TA","转养老金","TA","U"),
TI("TI","投连账户转换","TI","U"),
TR("TR","保费自垫清偿","TR","G"),
TS("TS","投连复缴","TS","G"),
VC("VC","保单归属规则维护","VC","U"),
VR("VR","被保险人归属规则变更","VR","U"),
WP("WP","万能追加保费","WP","G"),
WT("WT","犹豫期退保","WT","P"),
XS("XS","协议减保","XS","U"),
XT("XT","协议退保","XT","P"),
ZT("ZT","减少被保险人","ZT","P");

View File

@@ -1 +0,0 @@
<!--续期账号变更-保全代办确认页-->

View File

@@ -1 +0,0 @@
<!--续期账号变更页面-->

View File

@@ -1,37 +0,0 @@
<!--提交结果页面-->
<template>
<div class="submit-result-container">
<div class="payResult-header flex justify-content-c align-items-c p20 pt80">
<img class="w60 h60 mt100" :src="srcSuccess" alt="" />
</div>
<p class="mt20 text-center">提交成功</p>
<p class="mt20 fs12 gray text-center">如有疑问请拨打客服电话: 4008-008-008</p>
<div class="bg-white bottom-btn"><van-button type="danger" size="large" @click="nextStep" v-no-more-click="1000">返回</van-button></div>
</div>
</template>
<script>
export default {
name: 'submitResult',
data() {
return {
srcSuccess: this.$assetsUrl + 'images/success.png'
}
},
mounted() {
// localStorage.removeItem('customerSign')
document.body.style.backgroundColor = '#fff'
},
methods: {
nextStep() {
// service
this.$jump({
flag: 'service'
})
}
}
}
</script>
<style lang="scss" scoped></style>

View File

@@ -1 +0,0 @@
<!--退保-保全代办确认页-->

View File

@@ -1 +0,0 @@
<!--退保页-->

View File

@@ -6,7 +6,7 @@
<van-radio-group v-model="radio" class="pb10 pt20 pl30 pr30 fs14">
<van-radio name="1" @click="click">
本人确认已阅读
<span>国富人寿人身保险联系方式变更协议</span>
<span class="red">国富人寿人身保险联系方式变更协议</span>
</van-radio>
</van-radio-group>
<div class="bg-white bottom-btn">

View File

@@ -33,7 +33,7 @@
<div slot="input" :class="{ red: changeInfo.address }">{{ customerInfo.address }}</div>
</van-field>
<van-field label="邮编" required readonly>
<div slot="input" :class="{ red: changeInfo.zipCode }">{{ customerInfo.zipCode }}</div>
<div slot="input" :class="{ red: changeInfo.homeZip }">{{ customerInfo.homeZip }}</div>
</van-field>
<van-field label="电子邮箱" name="电子邮箱" readonly>
<div slot="input" :class="{ red: changeInfo.customerEmail }">{{ customerInfo.customerEmail }}</div>
@@ -82,6 +82,7 @@
import { Field, CellGroup, Checkbox, Popup, Picker, Area, RadioGroup, Radio, Dialog } from 'vant'
import getAreaName from '@/assets/js/utils/get-area-name'
import { getAuthCode, autchCodeCheck } from '@/api/ebiz/sale/sale'
import { queryDetails } from '@/api/ebiz/preserve/preserve'
export default {
name: 'basicConfirmation',
@@ -121,32 +122,72 @@ export default {
signInvalid: '',
customerMobile: '',
submitForbidden: false,
read: false
read: false,
province: '',
city: '',
area: ''
}
},
async created() {
this.read = this.$route.query.read
await this.queryDetails()
await this.init()
},
methods: {
//
init() {
//
this.customerInfo = JSON.parse(localStorage['preserve-customerInfo'])
this.customerInfoOld = JSON.parse(localStorage['preserve-customerInfo-old'])
//
let keys = Object.keys(this.customerInfo)
for (let item of keys) {
this.changeInfo[item] = this.customerInfo[item] != this.customerInfoOld[item]
}
//
if (this.customerInfo.province && this.customerInfo.city && this.customerInfo.area) {
let tempHomeAdress = getAreaName([{ code: this.customerInfo.province }, { code: this.customerInfo.city }, { code: this.customerInfo.area }]).split('-')
this.province = tempHomeAdress[0]
this.city = tempHomeAdress[1]
this.area = tempHomeAdress[2]
}
return new Promise((resolve, reject) => {
//
// this.customerInfo = JSON.parse(localStorage['preserve-customerInfo'])
// this.customerInfoOld = JSON.parse(localStorage['preserve-customerInfo-old'])
//
let keys = Object.keys(this.customerInfo)
for (let item of keys) {
this.changeInfo[item] = this.customerInfo[item] != this.customerInfoOld[item]
}
//
if (this.customerInfo.province && this.customerInfo.city && this.customerInfo.area) {
let tempHomeAdress = getAreaName([{ code: this.customerInfo.province }, { code: this.customerInfo.city }, { code: this.customerInfo.area }]).split(
'-'
)
this.province = tempHomeAdress[0]
this.city = tempHomeAdress[1]
this.area = tempHomeAdress[2]
}
resolve()
})
},
//
queryDetails() {
return new Promise((resolve, reject) => {
let { surrenderId, eodrApplyNo } = this.getInfo()
queryDetails({ surrenderId, eodrApplyNo }).then(res => {
if (res.result == 0) {
let resData = res.content.content
console.log('11', resData)
resData.map(v => {
//isNewInfo- 0- 1-
if (v.isNewInfo == '0') {
this.customerInfo = v
} else {
this.customerInfoOld = v
}
})
resolve()
} else {
this.$toast(res.resultMessage)
reject()
}
})
})
},
//id
getInfo() {
return { surrenderId: this.$store.getters.getPreserveSurrendId, eodrApplyNo: this.$store.getters.getPreserveEodrApplyNo }
},
// van-dialog
showAuth() {
this.show = true

View File

@@ -90,7 +90,7 @@ export default {
homePhone: '',
isNewInfo: ''
}
feachData.surrenderDTOList[0].customerInfoDTOList.push(customerInfo)
// feachData.surrenderDTOList[0].customerInfoDTOList.push(customerInfo)
return {
homeName: '',
homeShow: false,
@@ -130,11 +130,14 @@ export default {
//
this.$validator.validate().then(valid => {
if (true == valid) {
this.feachData.surrenderDTOList[0].customerInfoDTOList.push(this.customerInfo)
edorChange(this.feachData)
.then(res => {
if (res.result == 0) {
localStorage['preserve-customerInfo-old'] = localStorage['preserve-customerInfo']
localStorage['preserve-customerInfo'] = JSON.stringify(this.customerInfo)
this.$store.commit('updatePreserveSurrendId', res.content.surrenderId)
this.$store.commit('updatePreserveEodrApplyNo', res.content.eodrApplyNo)
this.$jump({
flag: 'h5',
extra: {

View File

@@ -18,8 +18,8 @@
<!-- 受益人列表 -->
<div class="fs14 beneficiary-list" v-if="type == 2">
<ul>
<li class="pv20 ph15 item" v-for="(item, index) in beneficiaries" :key="index">
<div class="bg-white p15">
<li class="ph15 item" v-for="(item, index) in beneficiaries" :key="index">
<div class="bg-white p15" v-if="item.name">
<div class="flex justify-content-s c-gray-darker">
<div>
<img src="@/assets/images/bnf_avatar.png" width="40" height="40" class="radius50 v-middle" />
@@ -49,7 +49,7 @@
<script>
import { RadioGroup, Radio, Icon, Dialog } from 'vant'
import { edorChange } from '@/api/ebiz/preserve/preserve'
import { changeEdor, policyInfo } from '@/api/ebiz/preserve/preserve'
export default {
name: 'BeneficiaryInfo',
@@ -60,58 +60,108 @@ export default {
[Dialog.name]: Dialog
},
data() {
let feachData = {
surrenderDTOList: [
{
surrenderId: '',
edorapplyNo: '',
surrenderType: '2',
bnfDTOs: []
}
]
}
return {
feachData: feachData,
type: '',
isDisType: false,
policy: null,
customerInfo: {}, //
insuredName: '', //
beneficiaries: [] //
}
},
created() {
async created() {
//
this.customerInfo = JSON.parse(localStorage['preserve-customerInfo']) //
this.policy = JSON.parse(localStorage['preserve-policy'])
console.log(this.policy)
if (localStorage.fromAddBC) {
this.beneficiaries = this.policy.bnfDTOs
this.type = this.beneficiaries.some(i => {
//isLegal: 1- 0-
return i.isNewInfo == '0' && i.isLegal == '0' //
})
? '2'
: '1'
} else {
await this.getPolicyInfo()
this.type = this.beneficiaries.some(i => {
return i.isNewInfo == '1' && i.isLegal == '0' //
})
? '2'
: '1'
}
this.insuredName = this.policy.insuredName
this.type = this.policy.bnfDTOs[0].bnfType
if (this.type == 2) {
this.isDisType = true
}
this.beneficiaries = this.policy.bnfDTOs
},
mounted() {},
methods: {
//
//
getPolicyInfo() {
let data = {
contNo: this.policy.contNo,
edorType: 'BC',
customerNo: this.customerInfo.customerNo,
idno: this.customerInfo.idNo,
mobile: this.customerInfo.mobile
}
return new Promise((resolve, reject) => {
policyInfo(data).then(
res => {
if (res.result == '0') {
this.beneficiaries = res.content.cont.bcBnfList
//isNewInfo 0- 1-
this.beneficiaries.forEach(item => {
item.isNewInfo = '1'
})
resolve()
} else {
reject(this.$toast(res.content))
}
},
error => {
reject(console.log(error))
}
)
})
},
//
nextStep() {
if (this.type == 2 && this.beneficiaries.length == 0) {
this.$toast('受益人列表不能为空')
return
}
this.feachData.surrenderDTOList[0].bnfDTOs = this.beneficiaries
edorChange(this.feachData)
let beneRatio = 0
this.beneficiaries.forEach(item => {
beneRatio += Number(item.bnfLot)
})
if (beneRatio != 100 && !(this.beneficiaries.length == 1 && this.beneficiaries[0].isLegal == '1')) {
return this.$toast('受益人受益比例不合法')
}
let feachData = {
platformType: 'APP',
edorType: 'BC',
operateType: '01',
bcBnfDTOList: this.beneficiaries
}
changeEdor(feachData)
.then(res => {
if (res.result == 0) {
this.policy.bnfDTOs = this.beneficiaries
localStorage['preserve-policy'] = JSON.stringify(this.policy)
localStorage.removeItem('fromAddBC')
let path = ''
if (this.type != 2) {
path = '/preserve/common/HandleResult?entry=BC'
} else {
path = '/preserve/bc/imageUpload?entry=BC'
}
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/preserve/HandleResult?entry=beneficiary'
url: location.origin + `/#${path}`
},
routerInfo: '/preserve/HandleResult?entry=beneficiary'
routerInfo: path
})
} else {
this.$toast(res.resultMessage)
@@ -134,10 +184,10 @@ export default {
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/preserve/BeneficiaryInfoAdd'
url: location.origin + '/#/preserve/bc/BeneficiaryInfoAdd'
},
routerInfo: {
path: '/preserve/BeneficiaryInfoAdd'
path: '/preserve/bc/BeneficiaryInfoAdd'
}
})
},
@@ -164,7 +214,7 @@ export default {
editBeneficiary(index) {
this.policy.bnfDTOs = this.beneficiaries
localStorage['preserve-policy'] = JSON.stringify(this.policy)
let path = '/preserve/BeneficiaryInfoAdd?edit=' + index
let path = '/preserve/bc/BeneficiaryInfoAdd?edit=' + index
this.$jump({
flag: 'h5',
extra: {

View File

@@ -66,7 +66,7 @@
name="证件截止日期"
:required="isRequired"
:defaultDate="new Date()"
:value.sync="userInfo.effectiveDate"
:value.sync="userInfo.idExpDate"
type="date"
@confirm="onDateConfirm($event, '1')"
ref="effectiveDate"
@@ -104,7 +104,7 @@
name="受益比例"
placeholder="请输入"
required
v-validate="'required|onlyNumber'"
v-validate="'required|onlyInteger'"
maxlength="3"
clearable
/>
@@ -173,8 +173,8 @@ import utilsAge from '@/assets/js/utils/age'
import IdentityCardScan from '@/components/ebiz/sale/IdentityCardScan'
import CustomerPicker from '@/components/ebiz/customer/CustomerPicker'
import idNoCheck from '@/assets/js/utils/idNoCheck'
import { idToData } from './js/verification'
import { selectComp } from './js/methods'
import { idToData } from '../js/verification'
import { selectComp } from '../js/methods'
let relationToInsured = DataDictionary.relationToAppnt
export default {
@@ -225,29 +225,33 @@ export default {
marriage: '',
isRequired: '', //*
userInfo: {
bnfId: '',
bnfType: '2',
bnfType: '1', // 0- 1-
isLegal: '0', //1- 0-
bnfNo: '1',
relationToInsured: '', //
bnfOrder: 1,
bnfGrade: '',
name: '',
sex: '0',
nationality: '1',
birthday: '',
isNewInfo: '0', // 0- 1-
idType: '1',
idNo: '',
certificateValidate: '',
effectiveDate: '',
effectiveDateType: false, //
bnfNo: '1',
bnfOrder: 1,
bnfLot: '',
idExpDate: '', //
phone: '',
birthday: '',
nationality: '1',
email: '',
province: '',
city: '',
area: '',
postalAddress: '',
email: '',
postalAddress: '', //
occupationCode: '',
occupationName: '' //
occupationType: '',
occupationName: '',
area: '',
bnfLot: '', //
// certificateValidate: '',
effectiveDateType: false //
},
areaList: areaList,
occupationShowPicker: false,
@@ -260,6 +264,11 @@ export default {
created() {
this.policy = JSON.parse(localStorage['preserve-policy'])
this.bnfDTOs = this.policy.bnfDTOs
this.bnfDTOs.map(i => {
if (i.idExpDate == '9999-01-01') {
i.effectiveDateType = true
}
})
if (this.$route.query.edit) {
this.editIndex = this.$route.query.edit
this.userInfo = this.bnfDTOs[this.$route.query.edit]
@@ -305,7 +314,7 @@ export default {
;[this.userInfo.nationality, this.nationality] = [value.id, value.text]
} else if (this.pickerType == '2') {
this.idLimit = false
this.userInfo.idNo = this.userInfo.effectiveDate = this.userInfo.birthday = ''
this.userInfo.idNo = this.userInfo.idExpDate = this.userInfo.birthday = ''
// this.userInfo.sex = '0'
this.effectiveDateTypeAble = false
//使
@@ -336,7 +345,7 @@ export default {
this.userInfo.effectiveDateType = false
//
if (Date.parse(val) < Date.parse(new Date())) {
this.userInfo.effectiveDate = ''
this.userInfo.idExpDate = ''
this.$refs.effectiveDate.date = ''
return this.$toast('您的证件已过期')
}
@@ -358,7 +367,7 @@ export default {
}
//
if (this.userInfo.idType == '3') {
if (Date.parse(this.userInfo.effectiveDate) - Date.parse(val) > Date.parse('1973-01-01')) {
if (Date.parse(this.userInfo.idExpDate) - Date.parse(val) > Date.parse('1973-01-01')) {
this.userInfo.birthday = ''
this.$refs.birthday.date = ''
return this.$toast('出生证有效期或出生日期有误')
@@ -388,7 +397,7 @@ export default {
if (data.idEffectEndDate == '9999-01-01') {
this.userInfo.effectiveDateType = true //
} else {
this.userInfo.effectiveDate = data.idEffectEndDate //
this.userInfo.idExpDate = data.idEffectEndDate //
}
this.userInfo.occupationCode = data.occupationCode //
this.userInfo.occupationName = data.occupationName //
@@ -444,22 +453,22 @@ export default {
//0-15
if (age <= 15) {
if (Date.parse(this.userInfo.effectiveDate) - Date.parse(new Date()) > Date.parse('1975-01-01')) {
this.userInfo.effectiveDate = ''
if (Date.parse(this.userInfo.idExpDate) - Date.parse(new Date()) > Date.parse('1975-01-01')) {
this.userInfo.idExpDate = ''
this.$refs.effectiveDate.date = ''
return this.$toast('证件有效期不正常未满16周岁的公民身份证有效期应小于等于5年')
}
// 16-25
} else if (age >= 16 && age <= 25) {
if (Date.parse(this.userInfo.effectiveDate) - Date.parse(new Date()) > Date.parse('1980-01-01')) {
this.userInfo.effectiveDate = ''
if (Date.parse(this.userInfo.idExpDate) - Date.parse(new Date()) > Date.parse('1980-01-01')) {
this.userInfo.idExpDate = ''
this.$refs.effectiveDate.date = ''
return this.$toast('证件有效期不正常16周岁至25周岁公民身份证有效期应小于等于10年')
}
// 26-45
} else if (age >= 26 && age <= 45) {
if (Date.parse(this.userInfo.effectiveDate) - Date.parse(new Date()) > Date.parse('1990-01-01')) {
this.userInfo.effectiveDate = ''
if (Date.parse(this.userInfo.idExpDate) - Date.parse(new Date()) > Date.parse('1990-01-01')) {
this.userInfo.idExpDate = ''
this.$refs.effectiveDate.date = ''
return this.$toast('证件有效期不正常26周岁至45周岁公民身份证有效期应小于等于20年')
}
@@ -517,15 +526,22 @@ export default {
this.bnfDTOs[this.editIndex] = this.userInfo
}
this.policy.bnfDTOs = this.bnfDTOs
this.policy.bnfDTOs.map(i => {
if (i.effectiveDateType) {
i.idExpDate = '9999-01-01'
}
delete i.effectiveDateType
})
localStorage.fromAddBC = true
localStorage['preserve-policy'] = JSON.stringify(this.policy)
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/preserve/BeneficiaryInfo',
url: location.origin + '/#/preserve/bc/BeneficiaryInfo',
needRefresh: '1'
},
routerInfo: {
path: '/preserve/BeneficiaryInfo'
path: '/preserve/bc/BeneficiaryInfo'
}
})
} else {
@@ -554,7 +570,7 @@ export default {
effectiveDataTypeChange(val) {
//,
if (val) {
this.userInfo.effectiveDate = ''
this.userInfo.idExpDate = ''
this.effectiveDateRequired = false
} else {
this.effectiveDateRequired = true
@@ -564,7 +580,7 @@ export default {
getIdentityInfo(data) {
console.log(data)
if (data.name && data.name != '待识别') {
this.userInfo.effectiveDate = data.endDate
this.userInfo.idExpDate = data.endDate
this.userInfo.name = data.name
this.userInfo.idNo = data.idNo
}

View File

@@ -161,8 +161,8 @@ import utilsAge from '@/assets/js/utils/age'
import IdentityCardScan from '@/components/ebiz/sale/IdentityCardScan'
import CustomerPicker from '@/components/ebiz/customer/CustomerPicker'
import idNoCheck from '@/assets/js/utils/idNoCheck'
import { idToData } from './js/verification'
import { selectComp } from './js/methods'
import { idToData } from '../js/verification'
import { selectComp } from '../js/methods'
let relationToInsured = DataDictionary.relationToAppnt
export default {
@@ -247,7 +247,9 @@ export default {
},
created() {
this.policy = JSON.parse(localStorage['preserve-policy'])
this.bnfDTOs = this.policy.bnfDTOs
this.bnfDTOs = this.policy.bnfDTOs.filter(i => {
return i.isNewInfo == '0'
})
if (this.$route.query.edit) {
this.editIndex = this.$route.query.edit
this.userInfo = this.bnfDTOs[this.$route.query.edit]

View File

@@ -0,0 +1,362 @@
<!--影像信息上传页面-->
<template>
<div class="image-upload-container">
<div class=" pb80">
<div class="m20 bg-white">
<div>
<!-- 全部受益人身份证件正反面 -->
<div>
<van-cell-group>
<van-field required label="全部受益人身份证件正反面" disabled />
</van-cell-group>
<div @click="test('fileListIdFront', idType)" class="flex align-items-e">
<van-uploader
name="fileListIdFront"
v-model="fileListIdFront"
:after-read="afterRead"
:before-delete="beforeDelete"
class="mt10 ml20"
:max-count="2"
@delete="deleteImg"
/>
</div>
</div>
</div>
</div>
</div>
<div class="bg-white bottom-btn">
<van-button type="danger" size="large" :disabled="isDisabled" @click="nextStep" v-no-more-click="2000">下一步</van-button>
</div>
</div>
</template>
<script>
import { Cell, CellGroup, Field, Uploader, RadioGroup, Radio, Dialog, Picker, Popup } from 'vant'
import { uploadImg } from '@/api/ebiz/sale/sale'
import config from '@/config'
import { customerInfoChange, preserveHangUp } from '@/api/ebiz/preserve/preserve'
export default {
components: {
[Cell.name]: Cell,
[CellGroup.name]: CellGroup,
[Field.name]: Field,
[Uploader.name]: Uploader,
[RadioGroup.name]: RadioGroup,
[Radio.name]: Radio,
[Dialog.name]: Dialog,
[Picker.name]: Picker,
[Popup.name]: Popup
},
data() {
return {
isDisabled: true,
id: '',
idType: '1',
type: '',
fileListIdFront: [], //身份证
file: '', // 图片流
imgName: '', // 图片名称
list: [],
entry: '',
surrenderType: ''
}
},
created() {
this.entry = JSON.parse(localStorage.customerInfo).entry
// this.accountType = this.$route.query.accountType
// this.conTractType = this.$route.query.conTractType
// switch (this.entry) {
// case 'BB': //联系方式变更
// this.surrenderType = '1'
// break
// case 'BC': //受益人变更
// this.surrenderType = '2'
// break
// case 'PC': //续期账户变更
// this.surrenderType = '3'
// break
// case 'CT': //退保
// this.surrenderType = '4'
// break
// case 'WT': //犹豫期退保
// this.surrenderType = '5'
// break
// default:
// break
// }
// 银行卡
if (window.localStorage.getItem('bankCardUrlPath') != null) {
let bankCardUrl = {
url: config.imgDomain + `/returnImageStream?a=b.jpg&imgPath=${window.localStorage.getItem('bankCardUrlPath')}`
}
this.fileListBank.push(bankCardUrl)
//续期账号变更
if (this.surrenderType == '2') {
let policyList = JSON.parse(localStorage.accountDTOList)
policyList.forEach(item => {
let obj = {
businessNo: JSON.parse(localStorage.customerInfo).edorApplyNo,
businessType: '2',
imageInfoType: '3',
rgssUrl: window.localStorage.getItem('bankCardUrlPath'),
subBusinessType: '3',
subBusinessNo: item.contNo
}
this.list.push(obj)
})
} else {
//累计红利领取
let obj = {
businessNo: JSON.parse(localStorage.customerInfo).edorApplyNo,
businessType: '2',
imageInfoType: '3',
rgssUrl: window.localStorage.getItem('bankCardUrlPath'),
subBusinessType: '3',
subBusinessNo: JSON.parse(localStorage.customerInfo).edorApplyNo
}
this.list.push(obj)
}
} else {
this.fileListBank = []
}
},
methods: {
test(type, id) {
this.id = id
this.type = type
},
afterRead(file) {
console.log('afterRead')
// 此时可以自行将文件上传至服务器
this.file = file.content
this.imgName = file.file.name
this.upload()
},
// 上传图片
upload() {
this.$toast.loading({
// 持续展示 toast
duration: 0,
// 禁用背景点击
forbidClick: true,
loadingType: 'spinner',
message: '加载中……'
})
let formdata = new FormData()
formdata.append('imgPath', this.dataURLtoFile(this.file, this.imgName))
uploadImg(formdata).then(res => {
if (res.result == '0') {
this.$toast.clear()
// 是投保人
// 证件类型
let imageInfoType = ''
if (this.type == 'fileListIdFront' && this.id == '1') {
imageInfoType = '1'
} else if (this.type == 'fileListIdBack' && this.id == '1') {
imageInfoType = '2'
} else if (this.type == 'fileListBank') {
imageInfoType = '3'
}
//续期账号变更 subBusinessNo 传保单号, 其他传申请号
if (this.surrenderType == '2') {
let policyList = JSON.parse(localStorage.accountDTOList)
policyList.forEach(item => {
let obj = {
businessNo: JSON.parse(localStorage.customerInfo).edorApplyNo,
businessType: '2',
imageInfoType,
rgssUrl: encodeURI(res.path).replace(/\+/g, '%2B'),
subBusinessType: '3',
fileName: this.imgName,
subBusinessNo: item.contNo
}
this.list.push(obj)
})
} else {
let subBusinessNo = JSON.parse(localStorage.customerInfo).edorApplyNo
let obj = {
businessNo: JSON.parse(localStorage.customerInfo).edorApplyNo,
businessType: '2',
imageInfoType,
rgssUrl: encodeURI(res.path).replace(/\+/g, '%2B'),
subBusinessType: '3',
fileName: this.imgName,
subBusinessNo
}
this.list.push(obj)
}
} else {
switch (this.type) {
case 'fileListIdFront':
this.fileListIdFront = []
break
case 'fileListIdBack':
this.fileListIdBack = []
break
case 'fileListBank':
this.fileListBank = []
break
}
this.$toast.clear()
this.$toast(res.resultMessage)
}
})
},
// 转化base64格式为文件格式
dataURLtoFile(dataurl, filename) {
//将base64转换为文件
var arr = dataurl.split(','),
mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]),
n = bstr.length,
u8arr = new Uint8Array(n)
while (n--) {
u8arr[n] = bstr.charCodeAt(n)
}
return new File([u8arr], filename, { type: mime })
},
// 删除图片前
beforeDelete(file, detail) {
Dialog.confirm({
title: '提示',
message: '您确定要删除吗'
})
.then(() => {
if (detail.name == 'fileListIdFront') {
this.fileListIdFront = []
} else if (detail.name == 'fileListIdBack') {
this.fileListIdBack = []
} else if (detail.name == 'fileListBank') {
this.fileListBank = []
}
this.deleteImg(file)
})
.catch(() => {
// cancel
})
},
// 删除图片
deleteImg(file) {
this.list.map((item, index, array) => {
if (item.fileName.indexOf(file.file.name) == -1) {
return
} else {
array.splice(index, 1)
}
})
},
// 点击下一步
nextStep() {
this.$toast.loading({
// 持续展示 toast
duration: 0,
// 禁用背景点击
forbidClick: true,
loadingType: 'spinner',
message: '加载中……'
})
delete this.list.fileName
let hangUpData = {
surrenderDTO: {
surrenderId: JSON.parse(localStorage.customerInfo).surrenderId,
edorapplyNo: JSON.parse(localStorage.customerInfo).edorapplyNo,
edoracceptNo: '',
surrenderType: this.surrenderType,
mediaDTOList: [],
customerInfoDTOList: [
{
customerNo: JSON.parse(localStorage.customerInfo).customerNo
}
],
accountDTOList: [],
recommendDTO: {},
bonusDTOList: [],
signDTOList: []
}
}
if (this.surrenderType == '2') {
let hangUpList = JSON.parse(localStorage.accountDTOList)
let surrenderId = JSON.parse(localStorage.customerInfo).surrenderId.split(',')
hangUpList.forEach((item, index) => {
preserveHangUp({
surrenderDTO: {
surrenderId: surrenderId[index],
edorapplyNo: JSON.parse(localStorage.customerInfo).edorapplyNo,
edoracceptNo: '',
surrenderType: this.surrenderType,
mediaDTOList: [],
customerInfoDTOList: [
{
customerNo: JSON.parse(localStorage.customerInfo).customerNo
}
],
accountDTOList: [item],
recommendDTO: {},
bonusDTOList: [],
signDTOList: []
}
}).then(backData => {
if (backData.result == 0) {
if (index >= hangUpList.length - 1) {
this.customerInfoChange()
}
} else {
return this.$toast(backData.resultMessage)
}
})
})
} else {
preserveHangUp(hangUpData).then(backData => {
this.$toast.clear()
if (backData.result == '0') {
let customerInfo = JSON.parse(localStorage.customerInfo)
customerInfo.edoracceptNo = backData.content
localStorage.customerInfo = JSON.stringify(customerInfo)
localStorage.bankCardUrl && localStorage.removeItem('bankCardUrl')
this.customerInfoChange()
} else {
this.$toast(backData.resultMessage)
}
})
}
},
customerInfoChange() {
customerInfoChange({
surrenderDTOList: [
{
// surrenderType: JSON.parse(localStorage.customerInfo).surrenderType, //"1","基本信息变更" "2","续期账号变更" "3","红利领取"
surrenderType: this.surrenderType,
customerInfoDTOList: [],
mediaDTOList: this.list,
surrenderId: JSON.parse(localStorage.customerInfo).surrenderId,
recommendDTO: {},
bonusDTOList: [],
signDTOList: []
}
]
}).then(res => {
if (res.result == 0) {
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/preserve/handleResult',
pullRefresh: '1',
backToFirst: '1'
},
routerInfo: {
path: '/preserve/handleResult'
}
})
} else {
this.$toast(res.resultMessage)
}
})
}
}
}
</script>
<style lang="scss" scoped></style>

View File

@@ -14,9 +14,10 @@
<script>
export default {
name: 'handleResult',
name: 'HandleResult',
data() {
return {
path: '', //
srcSuccess: this.$assetsUrl + 'images/success.png',
entry: '',
signInvalid: '',
@@ -31,17 +32,20 @@ export default {
}
// this.path
switch (this.entry) {
case 'contact':
this.path = '/preserve/ContactConfirmation?entry=contact'
case 'BB':
this.path = '/preserve/ContactConfirmation?entry=BB'
break
case 'beneficiary':
this.path = '/preserve/BeneficiaryConfirmation?entry=beneficiary&'
case 'BC':
this.path = '/preserve/BeneficiaryConfirmation?entry=BC'
break
case 'renewal':
this.path = '2'
case 'PC':
this.path = '/preserve/pc/renewalConfirmation?entry=PC'
break
case 'bonus':
this.path = '3'
case 'CT':
this.path = '/preserve/ct/surrenderConfirmation?entry=CT'
break
case 'WT':
this.path = ''
break
default:
this.path = ''
@@ -49,23 +53,27 @@ export default {
}
},
mounted() {
// document.body.style.backgroundColor = '#fff'
document.getElementsByTagName('body')[0].classList.add('bg-white')
},
destroyed() {
document.getElementsByTagName('body')[0].classList.remove('bg-white')
},
methods: {
nextStep() {
if (this.entry != 'beneficiary') {
if (this.entry != 'BC') {
//
// if (this.customerInfo.idType != '1') {
//
//
this.jumpNextPage(this.path)
// } else {
// this.toFace({
// number: this.customerInfo.idNo, //
// name: this.customerInfo.name //
// })
// }
} else if (this.entry == 'beneficiary') {
if (this.customerInfo.idType != '1') {
//
//
this.jumpNextPage(this.path)
} else {
this.toFace({
number: this.customerInfo.idNo, //
name: this.customerInfo.name, //
businessSource: '4' //:1-2-3-4-
})
}
} else if (this.entry == 'BC') {
//
// 18
// 18
@@ -80,7 +88,7 @@ export default {
this.jumpNextPage(this.path)
}
},
jumpNextPage(path = '/preserve/BeneficiaryInfo') {
jumpNextPage(path = '/preserve/bc/BeneficiaryInfo') {
this.$jump({
flag: 'h5',
extra: {
@@ -93,11 +101,10 @@ export default {
},
toFace(config) {
// eslint-disable-next-line no-undef
EWebBridge.webCallAppInJs('face_auth', config)
// {
// number: this.customerInfo.idNo, //
// name: this.customerInfo.name //
// })
EWebBridge.webCallAppInJs('face_auth', {
number: this.customerInfo.idNo, //
name: this.customerInfo.customerName //
})
//
// new Promise(resolve => {
// console.log('----')

View File

@@ -1,22 +1,11 @@
<!--保单列表页-->
<template>
<div class="proposal-list-container">
<!-- <van-list
v-model="loading"
:immediate-check="false"
:finished="finished"
:finished-text="finishedText"
error-text="请求失败,点击重新加载"
:error.sync="error"
@load="loadMore"
class="pb45"
> -->
<!-- <div v-if="isSuccess"> -->
<div class="policy-list-container">
<div v-if="policyList.length > 0">
<div class="fs12" v-for="(item, index) in policyList" :key="index" @click="toChange(item)">
<div class="flex align-items-c justify-content-c h40 gray">
<div>保单号:</div>
<div>{{ item.policyNo }}</div>
<div>{{ item.contNo }}</div>
</div>
<div class="bg-white pv15 pr15 pl10 ml15 mr15">
@@ -58,18 +47,17 @@
</div>
</div>
</div>
<!-- </div> -->
<div v-else class="text-center">
<img class="mt40 w250" src="@/assets/images/pic_page-non.png" />
<div class="fs17 c-gray-dark mt40">暂无保单</div>
</div>
<!-- </van-list> -->
</div>
</template>
<script>
import { Tag, List, Row, Col } from 'vant'
import { policyList } from '@/api/ebiz/preserve/preserve'
export default {
name: 'PolicyList',
components: {
[Tag.name]: Tag,
[Row.name]: Row,
@@ -79,69 +67,51 @@ export default {
data() {
return {
entry: '', //
// policyList: [] //
customerInfo: JSON.parse(localStorage.getItem('preserve-customerInfo')), //
policyList: [
{
contNo: '11111111',
appntName: '张三',
insuredName: '李四',
riskName: '国富人寿八桂无忧',
amt: '130.000',
cvaliDate: '2020-01-19'
},
{
"grpContNo": "11222111",
"contNo": "11111111",
"proposalPrtNo": "641596",
"hangUpFlag": "2",
"appntName": "张三2",
"insuredName": "李四2",
"riskName": "国富人寿八桂无忧",
"amt": "130.00",
"cvaliDate": "2020-01-19"
}
] //
/*
finishedText: '没有更多了',
finished: false,
error: false,
loading: false,
pageSize: 5, //
morePage: 1, //
isSuccess: false
*/
policyList: [] //
}
},
mounted() {
async mounted() {
if (localStorage['preserve-policy']) {
localStorage.removeItem('preserve-policy')
}
this.entry = this.$route.query.entry
//await this.getPolicyList({ customerNo: this.customerInfo.customerNo })
// this.getPolicyList({ customerNo: '' })
await this.getPolicyList({ customerNo: this.customerInfo.customerNo, edorType: this.entry })
},
methods: {
//
async getPolicyList(data) {
policyList(data).then(res => {
if (res.result == '0') {
// this.policyList = res.content.policyListDTOList
this.policyList = res.content.contList
} else {
this.$toast(res.resultMessage)
}
getPolicyList(data) {
return new Promise((resolve, reject) => {
policyList(data).then(
res => {
if (res.result == '0') {
this.policyList = res.content.policyDTOList
resolve()
} else {
this.$toast(res.content)
reject()
}
},
error => {
reject(console.log(error))
}
)
})
},
//
toChange(detail) {
console.log(detail)
localStorage['preserve-policy'] = JSON.stringify(detail)
let url
switch (this.entry) {
case 'surrender': //退
url = `surrenderInfo?entry=${this.entry}`
case 'CT': //退
url = `ct/surrenderInfo?entry=${this.entry}`
break
case 'beneficiary': //
url = `beneficiaryInfo?entry=${this.entry}`
// case 'WT': //退
// url = `wt/surrenderInfo?entry=${this.entry}`
// break
case 'BC': //
url = `bc/beneficiaryInfo?entry=${this.entry}`
break
default:
break

View File

@@ -1,3 +1,4 @@
<!-- 保全搜索客户页面-->
<template>
<div class="search-container bg-white">
<div class="search-content flex relative">
@@ -30,9 +31,15 @@
<script>
import { Search, DropdownMenu, DropdownItem } from 'vant'
import { customerList, customerInfo } from '@/api/ebiz/preserve/preserve'
import { customerList } from '@/api/ebiz/preserve/preserve'
export default {
name: 'search',
name: 'Search',
// props: {
// options: {
// type: Array,
// default: () => []
// }
// },
data() {
return {
searchVal: '', //
@@ -53,28 +60,11 @@ export default {
[DropdownMenu.name]: DropdownMenu,
[DropdownItem.name]: DropdownItem
},
async created() {
//
this.entry = this.$route.query.entry
switch (this.entry) {
case 'contact': //
this.surrenderType = '1'
break
case 'beneficiary': //
this.surrenderType = '2'
break
case 'renewal': //
this.surrenderType = '3'
break
case 'surrender': //退
this.surrenderType = '4'
break
case 'hesitateSurrender': //退
this.surrenderType = '5'
break
default:
break
}
created() {
document.getElementsByTagName('body')[0].classList.add('bg-white')
},
destroyed() {
document.getElementsByTagName('body')[0].classList.remove('bg-white')
},
methods: {
//
@@ -83,20 +73,21 @@ export default {
this.$toast('请输入搜索内容')
return
}
if (localStorage['preserve-customerInfo']) {
localStorage.removeItem('preserve-customerInfo')
}
customerList({
queryParam: val,
queryType: this.selected //012
// surrenderType: this.surrenderType, //"1","" "2","" "3",""
// systemType: '0'
}).then(res => {
this.$toast.clear()
if (res.result == 0) {
this.list = res.content
this.list = res.content.customerList
if (this.list.length == 0) {
this.$toast(`暂无此客户`)
}
} else {
this.$toast(res.resultMessage)
this.$toast(res.content)
}
})
this.isSearch = false
@@ -115,46 +106,29 @@ export default {
},
//
handleClick(params) {
let surrenderType = ''
this.entry = this.$route.query.entry
let url = ''
switch (this.entry) {
case 'contact':
surrenderType = '1'
url = `/preserve/contactInfo?entry=contact`
case 'BB':
url = `/preserve/bb/contactInfo?entry=BB`
break
case 'beneficiary':
surrenderType = '2'
url = `/preserve/policyList?entry=beneficiary`
case 'BC':
url = `/preserve/common/policyList?entry=BC`
break
case 'renewal':
surrenderType = '3'
url = `/preserve/policyList?entry=renewal`
case 'PC':
url = `/preserve/pc/RenewalInfo?entry=PC`
break
case 'surrender':
surrenderType = '4'
url = `/preserve/policyList?entry=surrender`
case 'CT':
url = `/preserve/common/policyList?entry=CT`
break
case 'hesitateSurrender':
surrenderType = '5'
url = `/preserve/policyList?entry=hesitateSurrender`
case 'WT':
url = `/preserve/common/policyList?entry=WT`
break
default:
break
}
customerInfo({
customerNo: params.customerNo
// surrenderType //"1","" "2","" "3",""
}).then(res => {
console.log('客户信息详情', res)
// delete res.content.coreCustomerDTOList
//preserve-customerInfo --
if (res.result == 0) {
localStorage.setItem('preserve-customerInfo', JSON.stringify(res.content))
this.jupmTo(url)
} else {
this.$toast(res.resultMessage)
}
})
localStorage.setItem('preserve-customerInfo', JSON.stringify(params))
this.jupmTo(url)
},
//
jupmTo(url) {

View File

@@ -0,0 +1,63 @@
<!--提交结果页面-->
<template>
<div class="submit-result-container">
<div class="payResult-header flex justify-content-c align-items-c p20 pt80">
<img class="w60 h60 mt100" :src="srcSuccess" alt="" />
</div>
<p class="mt20 text-center">提交成功</p>
<p class="mt20 fs12 gray text-center">如有疑问请拨打客服电话: 4000-000-000</p>
<div class="bg-white bottom-btn"><van-button type="danger" size="large" @click="nextStep" v-no-more-click="1000">返回</van-button></div>
</div>
</template>
<script>
export default {
name: 'SubmitResult',
data() {
return {
srcSuccess: this.$assetsUrl + 'images/success.png'
}
},
mounted() {
setTimeout(() => {
// eslint-disable-next-line no-undef
EWebBridge.webCallAppInJs('webview_left_button', {
intercept: '1' //是否拦截原生返回事件 1是 其他否
})
}, 100)
window.appCallBack = this.appCallBack
document.getElementsByTagName('body')[0].classList.add('bg-white')
if (localStorage['preserve-customerInfo']) {
localStorage.removeItem('preserve-customerInfo')
}
if (localStorage['preserve-policy']) {
localStorage.removeItem('preserve-policy')
}
if (localStorage['preserve-customerInfo-old']) {
localStorage.removeItem('preserve-customerInfo-old')
}
document.body.style.backgroundColor = '#fff'
},
destroyed() {
document.getElementsByTagName('body')[0].classList.remove('bg-white')
},
methods: {
nextStep() {
// service
this.$jump({
flag: 'service'
})
},
appCallBack(data) {
if (data.trigger == 'left_button_click') {
this.$jump({
flag: 'service'
})
}
}
}
}
</script>
<style lang="scss" scoped></style>

View File

@@ -0,0 +1,3 @@
<template>
<div></div>
</template>

View File

@@ -0,0 +1,248 @@
<!--影像信息上传页面-->
<template>
<div class="image-upload-container">
<div class=" pb80">
<div class="m20 bg-white">
<div>
<!-- 银行卡 -->
<div v-for="(item, index) in fileList" :key="index">
<div v-if="item.isShow">
<van-cell-group>
<van-field required :label="item.label" disabled />
</van-cell-group>
<div @click="test(item)">
<van-uploader
:name="item.name"
v-model="item.realFileList"
:after-read="afterRead"
:before-delete="beforeDelete"
class="mt10 ml20"
:max-count="item.max"
/>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="bg-white bottom-btn">
<van-button type="danger" size="large" @click="nextStep" v-no-more-click="2000">下一步</van-button>
</div>
</div>
</template>
<script>
import { Cell, CellGroup, Field, Uploader, RadioGroup, Radio, Dialog, Picker, Popup } from 'vant'
import { uploadImg } from '@/api/ebiz/sale/sale'
import { changeEdor } from '@/api/ebiz/preserve/preserve'
export default {
components: {
[Cell.name]: Cell,
[CellGroup.name]: CellGroup,
[Field.name]: Field,
[Uploader.name]: Uploader,
[RadioGroup.name]: RadioGroup,
[Radio.name]: Radio,
[Dialog.name]: Dialog,
[Picker.name]: Picker,
[Popup.name]: Popup
},
data() {
return {
isDisabled: true,
id: '',
idType: '1',
type: '',
fileList: [
{
name: 'idCardfront',
label: '身份证正面',
imageInfoType: '1', // 影像类型
subBusinessType: '3', // 影像归属 0 投保人 1 被保人 2 受益人 3 代理人
realFileList: [],
popList: [],
isShow: true, //是否显示(是否需要上传)
max: 1 //限制最大张数
},
{
name: 'idCardBack',
label: '身份证反面',
imageInfoType: '2', // 影像类型
subBusinessType: '3', // 影像归属 0 投保人 1 被保人 2 受益人 3 代理人
realFileList: [],
popList: [],
isShow: true, //是否显示(是否需要上传)
max: 1 //限制最大张数
},
{
name: 'bank',
label: '银行卡',
imageInfoType: '3', // 影像类型
subBusinessType: '3', // 影像归属 0 投保人 1 被保人 2 受益人 3 代理人
realFileList: [],
popList: [],
isShow: true, //是否显示(是否需要上传)
max: 2 //限制最大张数
},
{
name: 'others',
label: '纸质保单影像',
imageInfoType: '11', // 影像类型
subBusinessType: '3', // 影像归属 0 投保人 1 被保人 2 受益人 3 代理人
realFileList: [],
popList: [],
isShow: true, //是否显示(是否需要上传)
max: 500 //限制最大张数
}
],
uploadCheck: {},
entry: '',
customerInfo: JSON.parse(localStorage.getItem('preserve-customerInfo'))
}
},
created() {
// 初始化 上传影像数据
if (this.$route.query.isIdCard == '0') {
this.fileList[0].isShow = false
this.fileList[1].isShow = false
}
if (this.$route.query.isbankCard == '0') {
this.fileList[2].isShow = false
}
if (this.$route.query.isPolRecvWay == '0') {
this.fileList[3].isShow = false
}
document.getElementsByTagName('body')[0].classList.add('bg-white')
},
destroyed() {
document.getElementsByTagName('body')[0].classList.remove('bg-white')
},
methods: {
test(item) {
this.uploadCheck = item
},
afterRead(file) {
// 此时可以自行将文件上传至服务器
this.$toast.loading({
duration: 0,
forbidClick: true,
loadingType: 'spinner',
message: '加载中……'
})
let formdata = new FormData()
formdata.append('imgPath', this.dataURLtoFile(file.content, file.file.name))
uploadImg(formdata).then(res => {
this.$toast.clear()
if (res.result == '0') {
this.uploadCheck.popList.push({ name: file.file.name, imgPath: res.path })
console.log(this.fileList)
} else {
this.$toast(res.resultMessage)
}
})
},
// 转化base64格式为文件格式
dataURLtoFile(dataurl, filename) {
//将base64转换为文件
var arr = dataurl.split(','),
mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]),
n = bstr.length,
u8arr = new Uint8Array(n)
while (n--) {
u8arr[n] = bstr.charCodeAt(n)
}
return new File([u8arr], filename, { type: mime })
},
// 删除图片前
beforeDelete(file, detail) {
Dialog.confirm({
title: '提示',
message: '您确定要删除吗'
})
.then(() => {
this.fileList.map(item => {
if (item.name == detail.name) {
// 处理
let deleteIndex = null
for (let i = 0; i < item.realFileList.length; i++) {
if (item.realFileList[i].file == file.file) {
deleteIndex = i
break
}
}
item.realFileList.splice(deleteIndex, 1)
item.popList.splice(deleteIndex, 1)
}
})
})
.catch(() => {
// cancel
})
},
// 点击下一步
nextStep() {
this.$toast.loading({
// 持续展示 toast
duration: 0,
// 禁用背景点击
forbidClick: true,
loadingType: 'spinner',
message: '加载中……'
})
//
let saveMediaDTO = {
platformType: 'app',
edorType: 'CT',
operateType: '02',
customerNo: this.customerInfo.customerNo,
name: this.customerInfo.customerName,
iDNo: this.customerInfo.idNo,
mobile: this.customerInfo.customerMobile,
surrenderId: this.customerInfo.surrenderId,
edorApplyNo: this.customerInfo.edorApplyNo,
mediaUploadDTOS: []
}
console.log(this.fileList)
this.fileList.forEach(item => {
item.popList.forEach(subItem => {
saveMediaDTO.mediaUploadDTOS.push(
Object.assign(
{},
{
businessNo: this.customerInfo.edorApplyNo,
businessType: item.imageInfoType,
imageInfoType: item.imageInfoType,
rgssUrl: subItem.imgPath,
subBusinessType: item.imageInfoType,
subBusinessNo: item.imageInfoType,
manageComCode: item.imageInfoType
}
)
)
})
})
changeEdor(saveMediaDTO).then(res => {
this.$toast.clear()
if (res.result == 0) {
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/preserve/common/handleResult?entry=CT',
pullRefresh: '1',
backToFirst: '1'
},
routerInfo: {
path: '/preserve/common/handleResult?entry=CT'
}
})
} else {
this.$toast(res.resultMessage)
}
})
}
}
}
</script>
<style lang="scss" scoped></style>

View File

@@ -0,0 +1,289 @@
<!--退保-保全代办确认页-->
<template>
<div class="surrender-confirmation-container pb50">
<div style="border-bottom: 1px solid #ebedf0" class="fs14 pl10 pv12 bg-white">
<p>
<span>尊敬的</span>
<span class="red">{{ ebizSurrender.accountName }}</span
>先生/女士您好
</p>
<p class="mt10">
<span>您的</span>
<span class="red">退保</span>已由代理人代办标红字体为修改/添加内容请确认信息并进行提交:
</p>
</div>
<van-cell-group class="mt10 cont-info-container">
<!-- 保单信息 -->
<p style="border-bottom: 1px solid #ebedf0" class="fs15 fwb pl10 pv12">保单信息</p>
<van-cell title="保单号" :value="ebizSurrender.contNo" />
<van-cell title="产品名称" :value="ebizSurrender.riskName" />
<van-cell title="投保人" :value="ebizSurrender.appntName" />
<van-cell title="被保险人" :value="ebizSurrender.insuredName" />
<van-cell title="保单生效日期" :value="ebizSurrender.cvalidate" />
<van-cell title="退保金额" :value="ebizSurrender.surrenderMoney | amtFormat" />
<van-cell title="万能险退保手续费比例" :value="ebizSurrender.surrenderRate" v-if="riskType" />
</van-cell-group>
<!-- 账号信息 -->
<van-cell-group class="mt10 cont-info-container">
<p style="border-bottom: 1px solid #ebedf0" class="fs15 fwb pl10 pv12">账号信息</p>
<van-cell title="开户人姓名" :value="ebizSurrender.accountName" />
<van-cell title="退款账户" :value="account" />
<van-cell title="开户银行">
<div :class="{ red: changeInfo.bankName }" slot="default">{{ ebizSurrender.bankName }}</div>
</van-cell>
<van-cell title="银行账号">
<div :class="{ red: changeInfo.bankNo }" slot="default">{{ ebizSurrender.bankNo }}</div>
</van-cell>
<van-cell title="开户行所在地">
<div :class="{ red: changeInfo.bankProvince }" slot="default">{{ ebizSurrender.bankProvince }}</div>
</van-cell>
<van-cell title="退保原因">
<div :class="{ red: changeInfo.reason }" slot="default">{{ ebizSurrender.reason }}</div>
</van-cell>
<van-cell title="其他退保原因">
<div :class="[{ red: changeInfo.remark }, 'van-hairline--surround']" slot="default">{{ ebizSurrender.remark }}</div>
</van-cell>
</van-cell-group>
<van-cell-group class="fs14 mt10 pl15 pr15 pb20">
<p class="pt20 pb20">以下内容需要您阅读确认:</p>
<div v-for="(item, index) in pdfList" :key="index">
<p>需阅读</p>
<div class="mb10 mt10 flex align-items-c justify-content-fs">
<span class="red">{{ item.documentName }}</span>
<img :src="src" v-if="item.documentStatus == '1'" />
</div>
</div>
<p class="start">点击开始按钮进行相关操作</p>
</van-cell-group>
<van-dialog v-model="show" title="提示" show-cancel-button @confirm="authConfirm(authCode)" @cancel="clearTimer">
<p class="p10 fs14">向此手机发送验证码确认用户身份</p>
<p class="p10 fs14" style="border-bottom: 1px solid #ebedf0;">{{ customerInfo.customerMobile | mask }}</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>
<div class="bottom-btn bg-white">
<van-button type="danger" v-if="!isUnRead" size="large" @click="show = true" v-no-more-click="2000">提交申请</van-button>
<van-button type="danger" v-else size="large" @click="start" v-no-more-click="2000">开始</van-button>
</div>
</div>
</template>
<script>
import { Field, Cell, CellGroup, Dialog } from 'vant'
import { queryConfirmDetail, changeEdor } from '@/api/ebiz/preserve/preserve'
import { getAuthCode } from '@/api/ebiz/sale/sale'
import filters from '@/views/ebiz/preserve/filters'
export default {
name: 'SurrenderConfirmation',
components: {
[Field.name]: Field,
[Cell.name]: Cell,
[CellGroup.name]: CellGroup,
[Dialog.name]: Dialog
},
data() {
return {
show: false, // 获取短信验证码
codeDisabled: false, // 获取验证码按钮是否禁用
timeId: null, // 计时器ID
countDown: 60, // 倒计时
authCode: '', // 验证码
src: this.$assetsUrl + 'images/u6490.png', // 图片路径
sessionId: '',
isUnRead: false, //是否存在未阅读文档
customerInfo: {},
policy: {},
changeInfo: {},
surrenderSignList: [],
ebizSurrender: {},
pdfList: [], //需阅读文档list
riskType: null, //是否是万能险 4-是万能险 其他/null-非万能险
account: '' //退款银行账户
}
},
async created() {
document.getElementsByTagName('body')[0].classList.add('bg-white')
this.customerInfo = JSON.parse(localStorage['preserve-customerInfo']) //客户详情
this.policy = JSON.parse(localStorage['preserve-policy']) //保单详情
this.riskType = this.policy.riskType
this.init()
},
destroyed() {
document.getElementsByTagName('body')[0].classList.remove('bg-white')
},
methods: {
start() {
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/preserve/ct/SurrenderTip'
},
routerInfo: {
path: '/preserve/ct/SurrenderTip'
}
})
},
init() {
return new Promise((resolve, reject) => {
queryConfirmDetail({
surrenderId: this.customerInfo.surrenderId,
edorType: 'CT'
}).then(
res => {
if (res.result == 0) {
this.pdfList = res.content.surrenderSignList
this.ebizSurrender = res.content.content[1]
this.surrenderSignList = res.content.surrenderSignList
let keys = Object.keys(res.content.content[1])
for (let item of keys) {
this.changeInfo[item] = res.content.content[0][item] !== res.content.content[1][item]
}
this.account = this.changeInfo.bankNo == true ? '新银行账户' : '原银行账户'
this.ebizSurrender.surrenderRate =
this.ebizSurrender.surrenderRate == '0' ? this.ebizSurrender.surrenderRate : this.ebizSurrender.surrenderRate + '%'
this.isUnRead = this.pdfList.some(i => {
return i.documentStatus == '0'
})
resolve()
} else {
reject(this.$toast(res.resultMessage))
}
},
error => {
reject(this.$toast(error))
}
)
})
},
// 获取短信验证码
getAuthCode() {
this.codeDisabled = true
//倒计时
this.timeId = setInterval(() => {
this.countDown--
if (this.countDown <= 0) {
window.clearInterval(this.timeId)
this.codeDisabled = false
this.countDown = 60
}
}, 1000)
getAuthCode({
operateType: 'appntInfoEntry',
type: 'H5',
operateCode: this.customerInfo.customerMobile,
system: 'agentApp',
operateCodeType: '0'
}).then(res => {
console.log(res)
if (res.result == 0) {
this.sessionId = res.sessionId
} else {
this.$toast(res.resultMessage)
}
})
},
// 验证码确认事件
async authConfirm() {
//清理计时器
this.clearTimer()
this.submit()
},
// 清理计时器
clearTimer() {
window.clearInterval(this.timeId)
this.timeId = null
this.countDown = 60
this.codeDisabled = false
},
//确认变更
submit() {
let data = {
platformType: 'APP',
edorType: 'CT',
operateType: '04',
surrenderId: this.customerInfo.surrenderId,
edorApplyNo: this.customerInfo.edorApplyNo,
checkCodeDTO: {
smsId: this.sessionId,
code: this.authCode
}
}
changeEdor(data).then(res => {
if (res.result == 0) {
this.$jump({
flag: 'h5',
extra: {
url: location.origin + `/#/preserve/common/submitResult`
},
routerInfo: {
path: `/preserve/common/submitResult`
}
})
} else {
this.$toast(res.resultMessage)
}
})
}
/*
// 在微信中校验token是否失效
async checkSignInvalid(signInvalid) {
let that = this
this.$toast.loading({
duration: 0, // 持续展示 toast
forbidClick: true, // 禁用背景点击
loadingType: 'spinner',
message: '加载中……'
})
let data = {
sign: signInvalid
}
return new Promise((resolve, reject) => {
checkSignInvalid(data).then(res => {
if (res.result == '0') {
that.$toast.clear()
let status = res.content.status
resolve(status)
} else {
reject()
}
})
})
}
*/
},
filters: {
mask: filters.mask,
idToText: filters.idToText,
amtFormat: filters.amtFormat
},
beforeDestroy() {
//清理计时器
this.clearTimer()
}
}
</script>
<style lang="scss" scoped>
.surrender-confirmation-container {
.cont-info-container {
/deep/.van-cell__title,
.van-cell__value {
flex: auto;
text-align: left;
width: 50%;
}
}
}
.red {
color: #e9332e !important;
}
</style>

View File

@@ -0,0 +1,486 @@
<!--退保页-->
<template>
<div class="surrender-info-container pb45">
<div v-if="!isScan">
<van-cell-group class="mt10 cont-info-container">
<!-- 保单信息 -->
<p style="border-bottom: 1px solid #ebedf0" class=" fs15 fwb pl10 pv12">保单信息</p>
<van-cell title="产品名称" :value="detail.riskName" required name="产品名称" />
<van-cell title="保单号" :value="detail.contNo" required name="保单号" />
<van-cell title="投保人" :value="detail.appntName" required name="投保人" />
<van-cell title="被保险人" :value="detail.insuredName" required name="被保险人" />
<van-cell title="保单生效日期" :value="detail.cvalidate" required name="保单生效日期" />
<van-cell title="退保金额" :value="ctTrialDTO.surrenderMoney | amtFormat" required name="退保金额" />
<van-cell title="万能险退保手续费比例" :value="ctTrialDTO.surrenderRate" required v-if="riskType" name="万能险退保手续费比例" />
</van-cell-group>
<!-- 账号信息 -->
<div class="account-info-container">
<van-cell-group class="mt10">
<p style="border-bottom: 1px solid #ebedf0" class=" fs15 fwb pl10 pv12">账号信息</p>
<van-field label="开户人姓名" required :value.sync="ctTrialDTO.accountName" name="开户人姓名" v-validate="'required'" readonly />
<van-field
:value="account"
label="退款账户"
placeholder="请选择"
right-icon="arrow"
@click="toSelect('3')"
readonly
v-validate="'required'"
name="退款账户"
required
/>
<van-field
:value.sync="ctAccountDTO.bankName"
label="开户银行"
placeholder="请选择"
right-icon="arrow"
@click="toSelect('1')"
readonly
v-validate="'required'"
name="开户银行"
v-if="accountType != '1'"
required
/>
<van-field v-else label="开户银行" :value.sync="ctAccountDTO.bankName" v-validate="'required'" name="开户银行" required readonly />
</van-cell-group>
<van-cell-group class="flex align-items-c">
<van-field
v-model="ctAccountDTO.bankNo"
label="银行账号"
required
maxlength="19"
placeholder="请输入"
clearable
v-validate="'required|bankCard'"
name="银行账号"
type="textarea"
/>
<van-button type="danger" size="small" round class="bankCard mr10 w110 h20" @click="cardScanning('0')" v-no-more-click="2000">银行卡扫描</van-button>
</van-cell-group>
<van-field v-model="ctAccountDTO.bankProvince" label="开户银行所在地" placeholder="请输入" v-validate="'required'" name="开户银行所在地" required />
<van-field
:value.sync="reason"
label="退保原因"
required
placeholder="请选择"
right-icon="arrow"
readonly
v-validate="'required'"
name="退保原因"
@click="toSelect('2')"
/>
</div>
<!-- 其他退保原因输入框 -->
<van-row class="mb10 mt1">
<van-col span="8"></van-col>
<van-col span="16">
<van-field
class="van-hairline--surround"
v-model="remark"
rows="4"
autosize
type="textarea"
name="其他退保原因"
placeholder="请输入其他退保原因"
v-validate="surrenderReasonType == '6' ? 'required' : ''"
v-if="surrenderReasonType == '6'"
/>
</van-col>
</van-row>
<div class="bottom-btn bg-white">
<van-button type="danger" size="large" @click="nextStep" v-no-more-click="2000">下一步</van-button>
</div>
<!-- 字段选择 -->
<van-popup v-model="popupShow" position="bottom">
<van-picker show-toolbar :columns="columns" @confirm="onConfirm" @cancel="popupShow = false" />
</van-popup>
</div>
<!-- 银行卡扫描 -->
<BankCardScan :scanShow="isScan" :clear="false" @getScanInfo="getBankCardInfo"></BankCardScan>
</div>
</template>
<script>
import { Field, Cell, CellGroup, Popup, Row, Col, Picker } from 'vant'
import BankCardScan from '@/components/ebiz/sale/BankCardScan'
import { policyInfo, trial, changeEdor } from '@/api/ebiz/preserve/preserve'
import { getBankList } from '@/api/ebiz/sale/sale'
import dataDic from '../js/data-dictionary.js'
import filters from '@/views/ebiz/preserve/filters'
export default {
name: 'SurrenderInfo',
components: {
[Field.name]: Field,
[Cell.name]: Cell,
[CellGroup.name]: CellGroup,
[Row.name]: Row,
[Col.name]: Col,
[Popup.name]: Popup,
[Picker.name]: Picker,
BankCardScan
},
data() {
return {
valueKey: '',
popupShow: false,
pickerType: '',
columns: [],
policy: null, //保单详情
customerInfo: {}, //客户详情
bankList: [], // 银行列表
isScan: false, // 是否扫描银行卡
account: '原银行账户', //退款账户
accountType: '1', //退款账户码值
surrenderReasonType: '', //退款原因码值
riskType: null, //是否是万能险 4-是万能险 其他/null-非万能险
prem: 0, //保单总保费
polRecvWay: 0, //是否是纸质合同 0电子1纸质2电子+纸质
reason: '', //退保原因
remark: '', //退保其他原因描述
//退款银行账户信息
ctAccountDTO: {
bankCode: '',
bankNo: '',
bankName: '',
bankProvince: ''
},
//试算信息
ctTrialDTO: {
surrenderMoney: '',
surrenderRate: '',
accountName: ''
},
//退保基本信息
detail: {
riskName: '',
contNo: '',
appntName: '',
insuredName: '',
cvalidate: ''
},
//原始退保信息
ctBonusDTO: {
isNewInfo: '1'
}
}
},
created() {
this.customerInfo = JSON.parse(localStorage['preserve-customerInfo']) //客户详情
this.policy = JSON.parse(localStorage['preserve-policy'])
},
async mounted() {
document.getElementsByTagName('body')[0].classList.add('bg-white')
// 筛选按钮的点击事件
window.appCallBack = this.appCallBack
this.getBank()
await this.getPolicyInfo()
await this.getTrial({ customerNo: this.customerInfo.customerNo, edorType: this.$route.query.entry, contNo: this.policy.contNo })
},
destroyed() {
document.getElementsByTagName('body')[0].classList.remove('bg-white')
},
filters: {
idToText: filters.idToText,
amtFormat: filters.amtFormat
},
methods: {
//获取试算信息
getTrial(data) {
return new Promise((resolve, reject) => {
trial(data).then(
res => {
if (res.result == '0') {
this.ctTrialDTO.accountName = res.content.newAccName
this.ctTrialDTO.surrenderRate = res.content.feeRate
this.ctTrialDTO.surrenderMoney = res.content.edorCTPrem
this.ctAccountDTO.bankCode = res.content.newAccBankCode
this.ctAccountDTO.bankNo = res.content.newAccNo
this.ctAccountDTO.bankProvince = res.content.newBankProvince
this.polRecvWay = res.content.polRecvWay
dataDic['edorBankType'].some(item => {
if (item.id == this.ctAccountDTO.bankCode) {
this.ctAccountDTO.bankName = item.text
}
})
this.ctBonusDTO = Object.assign({}, this.ctBonusDTO, this.ctTrialDTO, this.ctAccountDTO)
this.ctTrialDTO.surrenderRate = res.content.feeRate == '0' ? res.content.feeRate : res.content.feeRate + '%'
resolve()
} else {
reject(this.$toast(res.resultMessage))
}
},
error => {
reject(this.$toast(error))
}
)
})
},
//获取初始化信息
getPolicyInfo() {
let data = {
contNo: this.policy.contNo,
edorType: 'CT',
customerNo: this.customerInfo.customerNo,
idno: this.customerInfo.idNo
}
return new Promise((resolve, reject) => {
policyInfo(data).then(
res => {
if (res.result == '0') {
let resData = res.content.cont
this.detail.riskName = resData.riskName
this.detail.contNo = resData.contNo
this.detail.appntName = resData.appntName
this.detail.insuredName = resData.insuredName
this.detail.cvalidate = resData.cvaliDate
this.detail.appntName = resData.appnt.appntName
this.detail.insuredName = resData.insuredList[0].insuredName
if (resData.riskList.length > 0) {
resData.riskList.forEach(i => {
this.prem += Number(i.prem)
})
}
this.riskType = resData.riskList.some(item => {
return item.riskType == '4'
})
this.policy.riskType == this.riskType
this.ctBonusDTO = Object.assign({}, this.ctBonusDTO, this.detail)
resolve()
} else {
reject(this.$toast(res.content))
}
},
error => {
reject(this.$toast(error))
}
)
})
},
//弹框选择
toSelect(pickerType, valueKey) {
//pickerType 1.银行账户 退保原因 3、退保账户
;[this.popupShow, this.pickerType] = [true, pickerType]
if (valueKey) this.valueKey = valueKey
switch (pickerType) {
case '1':
this.columns = this.bankList
break
case '2':
this.columns = dataDic.surrenderReasonList
break
case '3':
this.columns = dataDic.accountList
}
},
//确认选择字段
onConfirm(value) {
this.popupShow = false
switch (this.pickerType) {
case '1':
this.ctAccountDTO.bankCode = value.code
this.ctAccountDTO.bankName = value.bankName
break
case '2':
this.reason = value.text
this.surrenderReasonType = value.id
if (this.surrenderReasonType != '6') {
this.remark = ''
}
break
case '3':
this.account = value.text
this.accountType = value.id
if (this.accountType == '1') {
this.ctAccountDTO.bankCode = this.ctBonusDTO.bankCode
this.ctAccountDTO.bankName = this.ctBonusDTO.bankName
this.ctAccountDTO.bankProvince = this.ctBonusDTO.bankProvince
this.ctAccountDTO.bankNo = this.ctBonusDTO.bankNo
} else {
this.ctAccountDTO.bankCode = ''
this.ctAccountDTO.bankName = ''
this.ctAccountDTO.newBankProvince = ''
this.ctAccountDTO.bankNo = ''
}
break
}
},
// 获取银行卡扫描信息
getBankCardInfo(data) {
this.ctAccountDTO.bankNo = data.name
this.$jump({
flag: 'navigation',
extra: {
title: '退保',
hiddenRight: '1'
}
})
this.isScan = false
},
// 银行卡扫描
cardScanning(cardScanningType) {
window.localStorage.setItem('cardScanningType', cardScanningType)
document.body.style.backgroundColor = '#F5F5F5'
let title = ''
this.isclear = false
;[this.isScan, title] = [true, '银行卡扫描']
setTimeout(() => {
this.$jump({
flag: 'navigation',
extra: {
title,
hiddenLeft: '1'
}
})
this.closeBtn()
}, 400)
},
closeBtn() {
// 筛选按钮的显示
this.$jump({
flag: 'webview_right_button',
extra: {
btns: [
{
img: this.$assetsUrl + 'images/del-close.png',
route: { flag: '', extra: {} }
}
]
}
})
},
appCallBack() {
this.isclear = true
// 筛选按钮的点击事件
this.isclear = true
this.$jump({
flag: 'navigation',
extra: {
title: '退保',
hiddenRight: '1'
}
})
this.isScan = false
},
// 下一步
async nextStep() {
this.$forceUpdate()
let valid = await this.$validator.validate()
if (true === valid) {
let ctBonusDTONew = Object.assign({}, this.ctAccountDTO, this.ctTrialDTO, this.detail, {
reason: this.reason,
remark: this.remark,
isNewInfo: '0'
})
let ctBonusDTOList = [this.ctBonusDTO, ctBonusDTONew]
let data = {
platformType: 'APP',
edorType: 'CT',
operateType: '01',
contNo: this.detail.contNo,
ctBonusDTOList
}
console.log('data=====', data)
/*若更换新的银行卡需重新上传银行卡影像保费满10000需上传身份证影像如果低于10000无需上传
如果是纸质合同,需要添加纸质保单影像,
在此页进行判断是否需要上传身份证影像和纸质保单影像*/
let url = '',
isPolRecvWay = this.polRecvWay == '1' ? '1' : '0',
isbankCard = this.accountType == '2' ? '1' : '0',
isIdCard = this.customerInfo.idType == '1' ? '1' : '0'
if (isIdCard == '0' && isbankCard == '0' && isPolRecvWay == '0') {
url = '/preserve/common/handleResult?entry=CT'
} else {
url = `/preserve/ct/imageUpload?entry=CT&isbankCard=${isbankCard}&isIdCard=${isIdCard}&isPolRecvWay=${isPolRecvWay}`
}
console.log('url=====', url)
changeEdor(data).then(res => {
if (res.result == '0') {
this.customerInfo.surrenderId = res.content.surrenderId
this.customerInfo.edorApplyNo = res.content.edorApplyNo
localStorage.setItem('preserve-customerInfo', JSON.stringify(this.customerInfo))
localStorage.setItem('preserve-policy', JSON.stringify(this.policy))
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#' + url
},
routerInfo: {
path: url
}
})
}
})
} else {
this.$toast(this.$validator.errors.all()[0])
}
},
// 获取银行卡列表
async getBank() {
let data = {
operateType: 'claim_bank_type'
}
let res = await getBankList(data)
if (res.result == '0') {
res.content.forEach(item => {
item.id = item.code
item.text = item.bankName
})
this.bankList = res.content
} else {
this.$toast(res.resultMessage)
}
}
}
}
</script>
<style lang="scss" scoped>
.van-dialog__confirm {
background-color: #e9332e !important;
margin-right: 20px;
}
.surrender-info-container {
.cont-info-container {
/deep/.van-cell__title,
.van-cell__value {
flex: auto;
text-align: left;
}
/deep/.van-cell__title {
width: 40%;
}
.van-cell__value {
width: 60%;
}
}
.account-info-container {
/deep/.van-cell__title {
flex: auto;
width: 40%;
text-align: left;
}
/deep/.van-cell__value {
flex: auto;
width: 60%;
text-align: left;
}
.align-items-c {
/deep/.van-cell__title {
width: 73%;
}
}
}
/deep/ .bankCard {
width: 120px;
height: 20px;
line-height: 20px;
border-radius: 10px;
}
}
</style>

View File

@@ -0,0 +1,170 @@
<!--联系方式变更协议-->
<template>
<div class="surrender-tip-content">
<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 pr30 fs14">
<van-radio name="1" @click="click">
本人确认已阅读
<span class="red">{{ pdfList[0].documentName }}</span>
</van-radio>
</van-radio-group>
<div class="bg-white bottom-btn">
<van-button type="danger" size="large" :disabled="isDisable" @click="goNext" v-no-more-click="1000">下一步</van-button>
</div>
</div>
</template>
<script>
import { RadioGroup, Radio, Dialog, NoticeBar } from 'vant'
import { changeEdor, queryConfirmDetail } from '@/api/ebiz/preserve/preserve'
export default {
data() {
return {
radio: '',
// 倒计时时间
number: '',
// 定时器时间
time: '10',
// 定时器名称
timer: null,
isOver: false,
// 判断验证码是否开始倒计时
Time: true,
// 按钮是否可以点击
isDisable: true,
pdfUrl: '',
pdfList: [],
customerInfo: JSON.parse(localStorage.getItem('preserve-customerInfo')),
policy: JSON.parse(localStorage['preserve-policy']),
src: location.origin + '/pdfjs/web/viewer.html?file='
}
},
components: {
[RadioGroup.name]: RadioGroup,
[Radio.name]: Radio,
[Dialog.name]: Dialog,
[NoticeBar.name]: NoticeBar
},
mounted() {},
created() {
this.timeOut()
this.init()
},
methods: {
//信息初始化
init() {
return new Promise((resolve, reject) => {
queryConfirmDetail({
surrenderId: this.customerInfo.surrenderId,
edorType: 'CT'
}).then(
res => {
if (res.result == 0) {
this.pdfList = res.content.surrenderSignList
this.pdfUrl = this.pdfList[0].policyUrl
resolve()
} else {
reject(this.$toast(res.resultMessage))
}
},
error => {
reject(this.$toast(error))
}
)
})
},
timeOut() {
let time = this.time
this.Time = false
this.number = `${time}`
let timer = setInterval(() => {
time--
if (time <= 0) {
time = 0
clearInterval(timer)
this.Time = true
this.isOver = true
}
this.number = `${time}`
}, 1000)
},
// 点击阅读时
click() {
if (this.isOver == false) {
Dialog.confirm({
title: '提示',
message: '该内容涉及您的重大权益,请您仔细阅读',
showCancelButton: false
}).then(() => {
this.radio = ''
})
}
},
// 下一步
goNext() {
let data = {
platformType: 'APP',
edorType: 'CT',
operateType: '03',
surrenderId: this.customerInfo.surrenderId,
edorApplyNo: this.customerInfo.edorApplyNo,
signMediaDTO: {
signId: this.pdfList[0].signId,
surrenderId: this.customerInfo.surrenderId,
documentStatus: '1'
}
}
changeEdor(data)
.then(res => {
console.log(res)
if (res.result == 0) {
let path = '/preserve/ct/surrenderConfirmation?entry=CT'
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#' + path
},
routerInfo: {
path: path
}
})
} else {
this.$toast(res.resultMessage)
}
})
.catch(err => {
console.log(err)
})
}
},
computed: {
listenChange() {
const { isOver, radio } = this
return { isOver, radio }
}
},
watch: {
listenChange(val) {
if (val.isOver == true && val.radio !== '') {
this.isDisable = false
} else {
this.isDisable = true
}
}
}
}
</script>
<style lang="scss" scoped>
.notice {
width: 100%;
position: fixed;
top: 0;
z-index: 20;
}
.iframe {
width: 100vw;
height: 75vh;
}
</style>

View File

@@ -0,0 +1,257 @@
<!--受益人 -->
<template>
<div class="beneficiary-container">
<div h10></div>
<div class="fs14 flex justify-content-s pv12 ph15 van-hairline--bottom">
<label class="c-gray-dark">被保险人</label>
<span class="c-gray-darker">{{ insuredName }}</span>
</div>
<div class="fs14 pv12 ph15 van-hairline--bottom flex">
<label class="c-gray-dark">身故受益人</label>
<div class="ml20 c-gray-darker">
<van-radio-group :disabled="isDisType" v-model="type" class="flex">
<van-radio name="1">法定受益人</van-radio>
<van-radio name="2" class="ml10">指定受益人</van-radio>
</van-radio-group>
</div>
</div>
<!-- 受益人列表 -->
<div class="fs14 beneficiary-list" v-if="type == 2">
<ul>
<li class="pv20 ph15 item" v-for="(item, index) in beneficiaries" :key="index">
<div class="bg-white p15" @click="detail(item)">
<div class="flex justify-content-s c-gray-darker">
<div>
<img src="@/assets/images/bnf_avatar.png" width="40" height="40" class="radius50 v-middle" />
<span class="ml10 c-gray-base">{{ item.name }}</span>
</div>
</div>
<p class="mt20">
<span class="c-gray-dark">是被保险人的</span>
<span class="ml20">{{ item.relationToInsured | idToText('relationToAppnt') }}</span>
</p>
<p class="mt10">
<span class="c-gray-dark">受益份额</span>
<span class="ml35">{{ item.bnfLot }}%</span>
</p>
</div>
</li>
</ul>
</div>
<!-- <van-dialog
v-model="show"
title="短信确认"
show-cancel-button
class="dialog-delete"
cancelButtonColor="#4FC6B3"
confirmButtonColor="#FFFFFF"
@confirm="authConfirm(authCode)"
@cancel="clearTimer"
>
<p class="p10 fs14">向此手机发送验证码确认用户身份</p>
<p class="p10 fs14" style="border-bottom: 1px solid #ebedf0;">{{ '15512341234' | Mask }}</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> -->
<!-- <van-button type="danger" class="bottom-btn" @click="nextStep">提交申请</van-button> -->
</div>
</template>
<script>
import { Field, CellGroup, RadioGroup, Radio, Icon, Dialog } from 'vant'
import { progressDetailQuery } from '@/api/ebiz/preserve/preserve'
export default {
name: 'DetailBeneficiary',
components: {
[Field.name]: Field,
[CellGroup.name]: CellGroup,
[RadioGroup.name]: RadioGroup,
[Radio.name]: Radio,
[Icon.name]: Icon,
[Dialog.name]: Dialog
},
filters: {
Mask: function(value) {
if (value) {
return value.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2')
} else {
return ''
}
}
},
data() {
// let feachData = {
// surrenderDTOList: [
// {
// surrenderId: '',
// edorapplyNo: '',
// surrenderType: '2',
// bnfDTOs: []
// }
// ]
// }
return {
// show: false, // 获取短信验证码
// codeDisabled: false, // 获取验证码按钮是否禁用
// timeId: null, // 计时器ID
// countDown: 60, // 倒计时
// authCode: '', // 验证码
// feachData: feachData,
type: '',
isDisType: true,
policy: null,
insuredName: '', //被保险人
beneficiaries: [] // 指定受益人列表
}
},
created() {
progressDetailQuery({
surrenderType : 2,
surrenderId : this.$route.params.surrenderId
})
.then(res => {
if(res.result == '0'){
this.policy = res.content.policyListDTOList[0]
this.insuredName = this.policy.insuredName
this.beneficiaries = res.content.bnfDTOs
this.type = this.beneficiaries[0].bnfType
} else {
this.$toast(res.resultMessage)
}
})
.catch( (err) => {
console.log(err);
})
// 获取保单列表存储的数据
// this.policy = JSON.parse(localStorage['preserve-policy'])
// this.insuredName = this.policy.insuredName
// this.type = this.policy.bnfDTOs[0].bnfType
// this.beneficiaries = this.policy.bnfDTOs
},
mounted() {},
methods: {
//告知信息
// nextStep() {
// this.showAuth()
// },
detail(item) {
// edit=0
localStorage["preserve-userInfo"] = JSON.stringify(item)
let path = '/preserve/detail/BeneficiaryInfo'
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#' + path
},
routerInfo: {
path: path
}
})
},
// 显示验证码 van-dialog
// showAuth() {
// this.show = true
// },
// // 获取短信验证码
// getAuthCode() {
// this.codeDisabled = true
// //倒计时
// this.timeId = setInterval(() => {
// this.countDown--
// if (this.countDown <= 0) {
// window.clearInterval(this.timeId)
// this.codeDisabled = false
// this.countDown = 60
// }
// }, 1000)
// getAuthCode({
// operateType: 'appntInfoEntry',
// sessionId: '',
// validateCode: '',
// operateCode: this.customerMobile,
// system: '',
// operateCodeType: '0'
// }).then(res => {
// if (res.result == 0) {
// this.sessionId = res.sessionId
// } else {
// this.$toast({
// message: res.resultMessage,
// onClose: this.showAuth
// })
// }
// })
// },
// // 验证码确认事件
// async authConfirm() {
// //清理计时器
// this.clearTimer()
// this.changeSubmit()
// },
// // 清理计时器
// clearTimer() {
// window.clearInterval(this.timeId)
// this.timeId = null
// this.countDown = 60
// this.codeDisabled = false
// },
// //提交变更申请
// async changeSubmit() {
// if (!this.sessionId) {
// this.$toast({
// message: '请先获取验证码',
// onClose: this.showAuth
// })
// return
// }
// let res = await autchCodeCheck({
// smsId: this.sessionId,
// code: this.authCode
// })
// if (res.result == 0) {
// this.$jump({
// flag: 'h5',
// extra: {
// url: location.origin + `/#/preserve/submitResult`,
// backToFirst: '1'
// },
// routerInfo: {
// path: `/preserve/submitResult`
// }
// })
// } else {
// this.show = false
// this.$toast({
// message: res.resultMessage,
// onClose: this.showAuth
// })
// }
// }
},
// beforeDestroy() {
// //清理计时器
// this.clearTimer()
// }
}
</script>
<style lang="scss" scoped>
.beneficiary-container {
.add-btn {
width: 80%;
margin: 20px auto;
border: 1px dashed #999;
}
.beneficiary-list {
margin-bottom: 65px;
}
.item {
background-color: #f5f5f5;
}
}
</style>

View File

@@ -0,0 +1,286 @@
<template>
<div class="add-beneficiary-container pb50">
<!-- 基本信息 -->
<van-cell-group>
<van-field
:value="userInfo.relationToInsured | idToText('relationToAppnt')"
required
readonly
label="是被保险人的"
name="是被保险人的"
right-icon="arrow"
placeholder="请选择"
v-validate="'required'"
/>
<customer-picker
v-validate="'required|name'"
name="姓名"
label="姓名"
required
:value.sync="userInfo.name"
:parentShowPicker.sync="customerShowPicker"
readonly
></customer-picker>
<van-field
:value="userInfo.idType | idToText('idType')"
v-validate="'required'"
readonly
required
label="证件类型"
name="证件类型"
right-icon="arrow"
placeholder="请选择"
/>
<van-field
v-model="userInfo.idNo"
label="证件号码"
name="证件号码"
required
readonly
placeholder="请输入"
maxlength="18"
clearable
v-validate="'required'"
></van-field>
<!-- <FieldDatePicter
:v-validate="{ required: effectiveDateRequired }"
label="证件起始日期"
name="证件起始日期"
:required="isRequired"
:defaultDate="new Date()"
:value.sync="userInfo.certificateValidate"
type="date"
@confirm="onDateConfirm($event, '1')"
ref="certificateValidate"
:flag="certificateValidateShow"
:readonly="idLimit"
></FieldDatePicter> -->
<FieldDatePicter
:v-validate="{ required: effectiveDateRequired }"
label="证件截止日期"
name="证件截止日期"
:required="isRequired"
:defaultDate="new Date()"
:value.sync="userInfo.effectiveDate"
type="date"
@confirm="onDateConfirm($event, '1')"
ref="effectiveDate"
:flag="effectiveDateShow"
readonly
></FieldDatePicter>
<div class="border-bt relative fs14 p10 flex align-center">
<van-checkbox v-model="userInfo.effectiveDateType" class="fr" :disabled="true">长期</van-checkbox>
</div>
<select-radio :radios="sexRadio" disabled required label="性别" :value.sync="userInfo.sex"></select-radio>
<van-field
:value="userInfo.nationality | idToText('nativeplace')"
readonly
label="国家/地区"
name="国家/地区"
required
v-validate="'required'"
right-icon="arrow"
placeholder="请选择"
/>
<van-field
v-model="userInfo.bnfOrder"
required
readonly
label="受益顺序"
name="受益顺序"
placeholder="请输入"
v-validate="'required|onlyNumber'"
maxlength="1"
/>
<van-field
v-model="userInfo.bnfLot"
label="受益比例(%)"
name="受益比例"
placeholder="请输入"
required
readonly
v-validate="'required|onlyNumber'"
maxlength="3"
clearable
/>
<template v-if="false">
<van-field
v-model="userInfo.mobile"
clearable
label="联系电话"
name="联系电话"
required
readonly
placeholder="请输入"
v-validate="'required|mobile'"
maxlength="11"
/>
<van-field
v-model="areaName"
readonly
label="联系地址"
name="联系地址"
required
right-icon="arrow"
placeholder="请选择"
v-validate="'required'"
@click="chooseArea"
/>
<van-field v-model="userInfo.village" label="" readonly name="详细地址" placeholder="请输入详细地址" v-validate="'required'" clearable maxlength="30" />
<van-field v-model="userInfo.email" required readonly label="电子邮箱" name="电子邮箱" placeholder="请输入" v-validate="'required|email'" clearable />
<occupation-picker
:value.sync="userInfo.occupationCode"
:chooseName.sync="userInfo.occupationName"
:lifeGrade.sync="userInfo.lifeGrade"
:healthGrade.sync="userInfo.healthGrade"
clearable
label="职业类别"
name="职业类别"
required
v-validate="'required'"
placeholder="请选择"
readonly
:parentShowPicker.sync="occupationShowPicker"
@on-choose="chooseOccupation"
/>
</template>
</van-cell-group>
</div>
</template>
<script>
import { Field, CellGroup, Checkbox, Popup, Picker, Area } from 'vant'
import SelectRadio from '@/components/ebiz/SelectRadio'
import FieldDatePicter from '@/components/ebiz/FieldDatePicter'
import OccupationPicker from '@/components/ebiz/occipation/OccupationPicker'
import DataDictionary from '@/assets/js/utils/data-dictionary'
import areaList from '@/assets/js/utils/area'
import getAreaName from '@/assets/js/utils/get-area-name'
import utilsAge from '@/assets/js/utils/age'
import IdentityCardScan from '@/components/ebiz/sale/IdentityCardScan'
import CustomerPicker from '@/components/ebiz/customer/CustomerPicker'
import idNoCheck from '@/assets/js/utils/idNoCheck'
import { idToData } from '../js/verification'
import { selectComp } from '../js/methods'
let relationToInsured = DataDictionary.relationToAppnt
export default {
name: 'beneficiaryInfoAdd',
components: {
[SelectRadio.name]: SelectRadio,
[FieldDatePicter.name]: FieldDatePicter,
[OccupationPicker.name]: OccupationPicker,
[Field.name]: Field,
[CellGroup.name]: CellGroup,
[Checkbox.name]: Checkbox,
[Popup.name]: Popup,
[Picker.name]: Picker,
[Area.name]: Area,
[IdentityCardScan.name]: IdentityCardScan,
[CustomerPicker.name]: CustomerPicker
},
data() {
return {
effectiveDateTypeAble: true, //长期按钮是否禁用
isScan: false, //是否显示证件扫描组件
sexRadio: [
{
label: '男',
value: '0'
},
{
label: '女',
value: '1'
}
],
currentPopupIndex: '',
relationToAppnt: '',
popupShow: false,
areaShow: false,
pickerType: undefined,
columns: [],
valueKey: 'text',
nationality: '',
idType: '居民身份证',
degree: '',
socialSecurity: '',
taxIdentity: '',
areaName: '',
areaValue: '110101',
effectiveDateRequired: true, //证件截止日期是否需要校验
effectiveDateShow: true, //证件截止日期是否可以选择
marriage: '',
isRequired: '', //长期前是否有*
userInfo: {
bnfId: '',
bnfType: '2',
bnfGrade: '',
name: '',
sex: '0',
nationality: '1',
birthday: '',
idType: '1',
idNo: '',
certificateValidate: '',
effectiveDate: '',
effectiveDateType: false, //是否长期
bnfNo: '1',
bnfOrder: 1,
bnfLot: '',
phone: '',
province: '',
city: '',
area: '',
postalAddress: '',
email: '',
occupationCode: '',
occupationName: '' // 职业中文
},
areaList: areaList,
occupationShowPicker: false,
customerShowPicker: false, //客户列表展示
idLimit: false, //证件起止日期是否只读
policy: null,
bnfDTOs: []
}
},
created() {
this.userInfo = JSON.parse(localStorage['preserve-userInfo'])
},
mounted() {},
methods: {
chooseOccupation() {
this.$jump({
flag: 'navigation',
extra: {
title: '指定受益人信息',
hiddenRight: '1'
}
})
this.occupationShowPicker = false
},
//时间戳格式处理
timeStampFormat(timeStamp) {
let date = new Date(timeStamp)
let year = date.getFullYear()
let month = date.getMonth() + 1
month = month.toString().padStart(2, '0')
let day = date.getDate()
day = day.toString().padStart(2, '0')
return `${year}-${month}-${day}`
}
}
}
</script>
<style lang="scss" scoped>
.add-beneficiary-container {
.title {
font-weight: 600;
border-bottom: 1px solid #dadada;
}
/deep/.van-checkbox {
margin-left: auto;
}
}
</style>

View File

@@ -0,0 +1,159 @@
<!-- 查看详情-联系方式变更 -->
<template>
<div class="basic-info-container pb45">
<!-- 基本信息 -->
<van-cell-group class="mt10">
<p style="border-bottom: 1px solid #ebedf0;" class="fs15 fwb pl10 pv12">基本信息</p>
<van-field label="姓名" required :value="customerInfo.customerName" readonly />
<van-field
v-model="customerInfo.customerMobile"
readonly
required
label="移动电话"
name="移动电话"
v-validate="'required|mobile'"
maxlength="11"
/>
<van-field
v-model="homeName"
readonly
required
label="联系地址"
name="联系地址"
right-icon="arrow"
v-validate="'required'"
/>
<van-field v-model="customerInfo.address" readonly label="" name="详细地址" v-validate="'required'" maxlength="30" />
<van-field
v-model="customerInfo.zipCode"
label="邮编"
readonly
required
name="邮编"
v-validate="'required|zipCode'"
maxlength="6"
/>
<van-field v-model="customerInfo.customerEmail" readonly label="电子邮箱" name="电子邮箱" v-validate="'email'" />
<van-field v-model="customerInfo.homePhone" readonly label="固定电话" name="固定电话" />
<van-field v-model="surrenderResult" readonly label="返回原因" name="返回原因" />
</van-cell-group>
</div>
</template>
<script>
import { Field, CellGroup, Popup, Picker, Area } from 'vant'
import { progressDetailQuery } from '@/api/ebiz/preserve/preserve'
import areaList from '@/assets/js/utils/area'
import getAreaName from '@/assets/js/utils/get-area-name'
export default {
name: 'DetailContact',
components: {
[Field.name]: Field,
[CellGroup.name]: CellGroup,
[Popup.name]: Popup,
[Picker.name]: Picker,
[Area.name]: Area
},
data() {
let feachData = {
surrenderDTOList: [
{
surrenderId: '',
edorapplyNo: '',
surrenderType: '1',
customerInfoDTOList: []
}
]
},
customerInfo = {
surrenderId: '',
customerNo: '',
customerType: '',
customerName: '',
idType: '',
idNo: '',
customerMobile: '',
customerEmail: '',
province: '',
city: '',
area: '',
address: '',
zipCode: '',
homePhone: '',
isNewInfo: ''
}
feachData.surrenderDTOList[0].customerInfoDTOList.push(customerInfo)
return {
homeName: '',
homeShow: false,
areaList,
feachData,
customerInfo,
surrenderResult : ''
}
},
created() {
progressDetailQuery({
surrenderType : 1,
surrenderId : this.$route.params.surrenderId
})
.then(res => {
console.log(res);
if(res.result == '0'){
this.customerInfo = res.content.customerInfoDTOList[0]
this.surrenderResult = res.content.surrenderResult
} else {
this.$toast(res.resultMessage)
}
})
.catch( (err) => {
console.log(err);
})
},
methods: {
//区域选择
sureArea(area) {
this.homeName = getAreaName(area)
;[this.customerInfo.province, this.customerInfo.city, this.customerInfo.area] = [area[0].code, area[1].code, area[2].code]
this.homeShow = false
},
// 下一步
nextStep() {
//表单校验
this.$validator.validate().then(valid => {
if (true == valid) {
edorChange(this.feachData)
.then(res => {
if (res.result == 0) {
localStorage['preserve-customerInfo-old'] = localStorage['preserve-customerInfo']
localStorage['preserve-customerInfo'] = JSON.stringify(this.customerInfo)
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/preserve/HandleResult?entry=contact'
},
routerInfo: '/preserve/HandleResult?entry=contact'
})
} else {
this.$toast(res.resultMessage)
}
})
.catch(err => {
console.log(err)
})
} else {
this.$toast(this.$validator.errors.all()[0])
return
}
})
}
}
}
</script>
<style lang="scss" scoped>
.basic-info-container {
}
</style>

View File

@@ -0,0 +1,234 @@
<!--退保-保全代办确认页-->
<template>
<div class="surrender-confirmation-container mb10">
<van-cell-group class="mt10 cont-info-container">
<!-- 保单信息 -->
<p style="border-bottom: 1px solid #ebedf0" class="fs15 fwb pl10 pv12">保单信息</p>
<van-cell title="保单号" :value="orderInfo.riskName" />
<van-cell title="产品名称" :value="orderInfo.riskName" />
<van-cell title="投保人" :value="orderInfo.appntName" />
<van-cell title="被保险人" :value="orderInfo.insuredName" />
<van-cell title="保单生效日期" :value="orderInfo.cvaliDate" />
<van-cell title="退保金额" :value="orderInfo.accountMoney" />
<van-cell title="万能险退保手续费比例" :value="orderInfo.ratio" />
</van-cell-group>
<!-- 账号信息 -->
<van-cell-group class="mt10 cont-info-container">
<p style="border-bottom: 1px solid #ebedf0" class="fs15 fwb pl10 pv12">账号信息</p>
<van-cell title="开户人姓名" :value="accountInfo.accountName" />
<van-cell title="退款账户" :value="accountInfo.accountName" />
<van-cell title="开户银行">
<div class="red" slot="default">{{ accountInfo.newBank }}</div>
</van-cell>
<van-cell title="银行账号">
<div class="red" slot="default">{{ accountInfo.newBankNo }}</div>
</van-cell>
<van-cell title="开户行所在地" :value="accountInfo.accountName" />
<van-cell title="退保原因" :value="accountInfo.accountName" />
</van-cell-group>
</div>
</template>
<script>
import { Field, Cell, CellGroup, Dialog } from 'vant'
import { customerInfoShare, orderDetail, authCode, changeStatus, queryCancel } from '@/api/ebiz/preserve/preserve'
import { checkSignInvalid } from '@/api/ebiz/sale/sale'
export default {
name: 'Surrender',
components: {
[Field.name]: Field,
[Cell.name]: Cell,
[CellGroup.name]: CellGroup,
[Dialog.name]: Dialog
},
data() {
return {
//账号信息
accountInfo: {
accountName: '张三',
newBank: '工商银行',
newBankNo: '1122334455667899076'
},
//保单信息
orderInfo: {
riskName: '国富人寿八桂无忧',
appntName: '张三',
insuredName: '李四',
cvaliDate: '2020-02-02',
accountMoney: '130.00',
ratio: '70%'
},
show: false, // 获取短信验证码
codeDisabled: false, // 获取验证码按钮是否禁用
timeId: null, // 计时器ID
countDown: 60, // 倒计时
authCode: '', // 验证码
src: this.$assetsUrl + 'images/u6490.png', // 图片路径
newBank: '', //新开户银行
newBankNo: '', //新银行卡号
customerMobile: '',
sessionId: '',
nextDisabled: true,
signInvalid: '',
isSigned: false, //是否签完名了
submitForbidden: false, //是否提交申请失败
linkInvalid: false, //链接是否失效
isCanceled: false, //是否撤销
documentStatus: '' //签名状态
}
},
async created() {
this.$route.query.customerInfo && (localStorage.customerInfo = decodeURI(this.$route.query.customerInfo))
this.$route.query.token && (localStorage.token = this.$route.query.token)
this.customerMobile = JSON.parse(localStorage.customerInfo).customerMobile
//是否已经签名
if (sessionStorage.customerSign && JSON.parse(sessionStorage.customerSign).isSign) {
this.isSigned = true
} else {
this.isSigned = false
//token签名
if (this.$route.query.signInvalid) {
localStorage.signInvalid = this.$route.query.signInvalid
this.signInvalid = this.$route.query.signInvalid
//token是否过期
let resData = await this.checkSignInvalid(this.signInvalid)
if (resData == '1') {
this.linkInvalid = false
} else {
this.linkInvalid = true
}
}
}
this.init()
},
methods: {
async init() {
this.$toast.loading({
// 持续展示 toast
duration: 0,
// 禁用背景点击
forbidClick: true,
loadingType: 'spinner',
message: '加载中……'
})
// await this.isPreserveCancel()
//如果没有被撤销
// if (backData == 'notCanceled') {
let params = {
surrenderType: '2', //"1","基本信息变更" "2","续期账号变更" "3","红利领取"
customerInfoDTOList: [],
mediaDTOList: [],
surrenderId: JSON.parse(localStorage.customerInfo).surrenderId,
edorapplyNo: JSON.parse(localStorage.customerInfo).edorapplyNo || JSON.parse(localStorage.customerInfo).edorApplyNo
}
let res = await customerInfoShare(params)
this.$toast.clear()
if (res.result == 0) {
if (!JSON.parse(localStorage.customerInfo).contNo) {
res.content.accountResList.forEach(item => {
// this.policyList.push(item.contNo)
if (item.isNewInfo == '0') {
this.policyList.push({
contNo: item.contNo,
surrenderStatus: item.surrenderStatus
})
this.newBank = item.bankName
this.newBankNo = item.bankNo
}
})
localStorage.policyList = JSON.stringify(this.policyList)
} else {
//如果是从保全进度查询分享进来(只有一个单)
res.content.accountResList.forEach(item => {
// this.policyList.push(item.contNo)
if (item.contNo == JSON.parse(localStorage.customerInfo).contNo && item.isNewInfo == '0') {
this.policyList.push({
contNo: item.contNo,
surrenderStatus: item.surrenderStatus
})
this.newBank = item.bankName
this.newBankNo = item.bankNo
}
})
}
//未签名并且链接有效的情况下
if (!this.isSigned && !this.linkInvalid) {
//撤销
this.isCanceled = res.content.accountResList.every(item => {
return item.surrenderStatus == 5
})
}
//未签名并且链接有效的情况下
if (!this.linkInvalid) {
//已提交
this.submitForbidden = res.content.accountResList.every(item => {
return item.surrenderStatus == 3 || item.surrenderStatus == 6 || item.surrenderStatus == 9 || item.surrenderStatus == 7
})
}
//未签名&链接有效&未撤销
// if (!this.isSigned && !this.linkInvalid && !this.isCanceled) {
// //提交申请失败
// this.submitForbidden = res.content.accountResList.every(item => {
// return item.surrenderStatus == 7
// })
// }
// localStorage.signList = JSON.stringify(res.content.signList[0])
if (!sessionStorage.customerSign) {
let customerSign = {
baseEncryp: '',
policyUrl: res.content.signList[0].policyUrl
}
sessionStorage.customerSign = JSON.stringify(customerSign)
}
this.documentStatus = res.content.signList[0].documentStatus
this.getOrderDetail({
contNo: this.policyList[0].contNo
})
} else {
this.$toast(res.resultMessage)
}
},
//获取保单详情
async getOrderDetail(data) {
let res = await orderDetail(data)
if (res.result == 0) {
this.nextDisabled = false
let flag = true
this.list.forEach((item, index) => {
if (item.contNo == data.contNo) {
flag = false
console.info(index, item, res.content)
// this.list.splice(index, 1, res.content)
this.list.splice(index, 1, Object.assign(this.policyList[index], res.content))
}
})
if (flag) {
// this.list.push(res.content)
this.list.push(Object.assign(this.policyList[0], res.content))
this.policyList.forEach((item, index) => {
if (index != 0) {
this.list.push(item)
}
})
}
} else {
this.$toast(res.resultMessage)
}
},
},
}
</script>
<style lang="scss" scoped>
.surrender-confirmation-container {
.cont-info-container {
/deep/.van-cell__title,
.van-cell__value {
flex: auto;
text-align: left;
width: 50%;
}
}
}
</style>

View File

@@ -0,0 +1,258 @@
<!--续期账号变更-保全代办确认页-->
<template>
<div class="renewal-confirmation-container pb50">
<van-cell-group class="mt10 cont-info-container">
<!-- 保单信息 -->
<p style="border-bottom: 1px solid #ebedf0" class="fs15 fwb pl10 pv12">保单信息</p>
<van-collapse v-model="activeNames" @change="collapseChange">
<div v-for="(item, index) in list" :key="index">
<van-collapse-item @click.native="changeCollapse(111)" v-no-more-click="2000" :title="`保单号:${item.contNo}`" :name="index">
<!-- <div slot="value" class="text-right collapse-value red fs12">{{ item.surrenderStatus == '5' ? '已撤销' : '' }}</div> -->
<van-cell title="产品名称" :value="item.riskName" />
<van-cell title="投保人" :value="item.appntName" />
<van-cell title="被保险人" :value="item.insuredName" />
<van-cell title="交费方式" :value="item.insuPayType | idToText('payIntv')" />
<van-cell title="保单生效日期" :value="item.cvaliDate" />
<van-cell title="保单状态" :value="item.contState | idToText('contState')" />
<van-cell title="开户人姓名" :value="item.accountName" />
<van-cell title="原银行名称" :value="item.bankCode | idToText('preserveBank')" />
<van-cell title="原银行账号" :value="item.bankNo" />
</van-collapse-item>
</div>
</van-collapse>
</van-cell-group>
<!-- 以上变更后续账号信息 -->
<van-cell-group class="mt10 cont-info-container">
<p style="border-bottom: 1px solid #ebedf0" class="fs15 fwb pl10 pv12">以上变更后续账号信息</p>
<van-cell title="开户人姓名" :value="list[0].accountName" v-if="list.length" />
<van-cell title="新开户银行">
<div class="red" slot="default">{{ newBank }}</div>
</van-cell>
<van-cell title="新银行账号">
<div class="red" slot="default">{{ newBankNo }}</div>
</van-cell>
</van-cell-group>
</div>
</template>
<script>
import { Field, Cell, Collapse, CollapseItem, CellGroup, Dialog } from 'vant'
import { customerInfoShare, orderDetail, authCode, changeStatus, queryCancel } from '@/api/ebiz/preserve/preserve'
import { checkSignInvalid } from '@/api/ebiz/sale/sale'
export default {
name: 'RenewalConfirmation',
components: {
[Field.name]: Field,
[Cell.name]: Cell,
[CellGroup.name]: CellGroup,
[Collapse.name]: Collapse,
[CollapseItem.name]: CollapseItem,
[Dialog.name]: Dialog
},
data() {
return {
show: false, // 获取短信验证码
codeDisabled: false, // 获取验证码按钮是否禁用
timeId: null, // 计时器ID
countDown: 60, // 倒计时
authCode: '', // 验证码
activeNames: [0],
src: this.$assetsUrl + 'images/u6490.png', // 图片路径
policyList: [],
list: [
// {
// contNo: 'HL052019110010001047',
// riskName: '鼎诚人寿重大疾病险',
// appntName: '嘿嘿',
// insuredName: '狗乐',
// insuPayType: '11',
// cvaliDate: '2020-12-31',
// contState: '001',
// accountName: '彭小芳',
// bankCode: '102',
// bankNo: '374198274319824389127341'
// },
// {
// contNo: 'HL052019110010001047',
// riskName: '鼎诚人寿重大疾病险',
// appntName: '嘿嘿',
// insuredName: '狗乐',
// insuPayType: '11',
// cvaliDate: '2020-12-31',
// contState: '001',
// accountName: '彭小芳',
// bankCode: '102',
// bankNo: '374198274319824389127341'
// }
],
newBank: '', //新开户银行
newBankNo: '', //新银行卡号
customerMobile: '',
sessionId: '',
nextDisabled: true,
signInvalid: '',
isSigned: false, //是否签完名了
submitForbidden: false, //是否提交申请失败
linkInvalid: false, //链接是否失效
isCanceled: false, //是否撤销
documentStatus: '' //签名状态
}
},
async created() {
this.$route.query.customerInfo && (localStorage.customerInfo = decodeURI(this.$route.query.customerInfo))
this.$route.query.token && (localStorage.token = this.$route.query.token)
this.customerMobile = JSON.parse(localStorage.customerInfo).customerMobile
this.init()
},
methods: {
async init() {
this.$toast.loading({
// 持续展示 toast
duration: 0,
// 禁用背景点击
forbidClick: true,
loadingType: 'spinner',
message: '加载中……'
})
// await this.isPreserveCancel()
//如果没有被撤销
// if (backData == 'notCanceled') {
let params = {
surrenderType: '2', //"1","基本信息变更" "2","续期账号变更" "3","红利领取"
customerInfoDTOList: [],
mediaDTOList: [],
surrenderId: JSON.parse(localStorage.customerInfo).surrenderId,
edorapplyNo: JSON.parse(localStorage.customerInfo).edorapplyNo || JSON.parse(localStorage.customerInfo).edorApplyNo
}
let res = await customerInfoShare(params)
this.$toast.clear()
if (res.result == 0) {
if (!JSON.parse(localStorage.customerInfo).contNo) {
res.content.accountResList.forEach(item => {
// this.policyList.push(item.contNo)
if (item.isNewInfo == '0') {
this.policyList.push({
contNo: item.contNo,
surrenderStatus: item.surrenderStatus
})
this.newBank = item.bankName
this.newBankNo = item.bankNo
}
})
localStorage.policyList = JSON.stringify(this.policyList)
} else {
//如果是从保全进度查询分享进来(只有一个单)
res.content.accountResList.forEach(item => {
// this.policyList.push(item.contNo)
if (item.contNo == JSON.parse(localStorage.customerInfo).contNo && item.isNewInfo == '0') {
this.policyList.push({
contNo: item.contNo,
surrenderStatus: item.surrenderStatus
})
this.newBank = item.bankName
this.newBankNo = item.bankNo
}
})
}
//未签名并且链接有效的情况下
if (!this.isSigned && !this.linkInvalid) {
//撤销
this.isCanceled = res.content.accountResList.every(item => {
return item.surrenderStatus == 5
})
}
//未签名并且链接有效的情况下
if (!this.linkInvalid) {
//已提交
this.submitForbidden = res.content.accountResList.every(item => {
return item.surrenderStatus == 3 || item.surrenderStatus == 6 || item.surrenderStatus == 9 || item.surrenderStatus == 7
})
}
//未签名&链接有效&未撤销
// if (!this.isSigned && !this.linkInvalid && !this.isCanceled) {
// //提交申请失败
// this.submitForbidden = res.content.accountResList.every(item => {
// return item.surrenderStatus == 7
// })
// }
// localStorage.signList = JSON.stringify(res.content.signList[0])
if (!sessionStorage.customerSign) {
let customerSign = {
baseEncryp: '',
policyUrl: res.content.signList[0].policyUrl
}
sessionStorage.customerSign = JSON.stringify(customerSign)
}
this.documentStatus = res.content.signList[0].documentStatus
this.getOrderDetail({
contNo: this.policyList[0].contNo
})
} else {
this.$toast(res.resultMessage)
}
// }
},
changeCollapse(params) {
console.log(params)
},
//展开保单详情
collapseChange(val) {
if (val.length) {
let flag = true
this.list.forEach(item => {
if (item.contNo == this.policyList[val[val.length - 1]].contNo && item.riskName) {
return (flag = false)
}
})
if (flag) {
this.getOrderDetail({
contNo: this.policyList[val[val.length - 1]].contNo
})
}
}
},
//获取保单详情
async getOrderDetail(data) {
let res = await orderDetail(data)
if (res.result == 0) {
this.nextDisabled = false
let flag = true
this.list.forEach((item, index) => {
if (item.contNo == data.contNo) {
flag = false
console.info(index, item, res.content)
// this.list.splice(index, 1, res.content)
this.list.splice(index, 1, Object.assign(this.policyList[index], res.content))
}
})
if (flag) {
// this.list.push(res.content)
this.list.push(Object.assign(this.policyList[0], res.content))
this.policyList.forEach((item, index) => {
if (index != 0) {
this.list.push(item)
}
})
}
} else {
this.$toast(res.resultMessage)
}
},
},
}
</script>
<style lang="scss" scoped>
.renewal-confirmation-container {
.cont-info-container {
/deep/.van-cell__title,
.van-cell__value {
flex: auto;
text-align: left;
width: 50%;
}
}
}
</style>

View File

@@ -0,0 +1,234 @@
<!--退保-保全代办确认页-->
<template>
<div class="surrender-confirmation-container mb10">
<van-cell-group class="mt10 cont-info-container">
<!-- 保单信息 -->
<p style="border-bottom: 1px solid #ebedf0" class="fs15 fwb pl10 pv12">保单信息</p>
<van-cell title="保单号" :value="orderInfo.riskName" />
<van-cell title="产品名称" :value="orderInfo.riskName" />
<van-cell title="投保人" :value="orderInfo.appntName" />
<van-cell title="被保险人" :value="orderInfo.insuredName" />
<van-cell title="保单生效日期" :value="orderInfo.cvaliDate" />
<van-cell title="退保金额" :value="orderInfo.accountMoney" />
<van-cell title="万能险退保手续费比例" :value="orderInfo.ratio" />
</van-cell-group>
<!-- 账号信息 -->
<van-cell-group class="mt10 cont-info-container">
<p style="border-bottom: 1px solid #ebedf0" class="fs15 fwb pl10 pv12">账号信息</p>
<van-cell title="开户人姓名" :value="accountInfo.accountName" />
<van-cell title="退款账户" :value="accountInfo.accountName" />
<van-cell title="开户银行">
<div class="red" slot="default">{{ accountInfo.newBank }}</div>
</van-cell>
<van-cell title="银行账号">
<div class="red" slot="default">{{ accountInfo.newBankNo }}</div>
</van-cell>
<van-cell title="开户行所在地" :value="accountInfo.accountName" />
<van-cell title="退保原因" :value="accountInfo.accountName" />
</van-cell-group>
</div>
</template>
<script>
import { Field, Cell, CellGroup, Dialog } from 'vant'
import { customerInfoShare, orderDetail, authCode, changeStatus, queryCancel } from '@/api/ebiz/preserve/preserve'
import { checkSignInvalid } from '@/api/ebiz/sale/sale'
export default {
name: 'Surrender',
components: {
[Field.name]: Field,
[Cell.name]: Cell,
[CellGroup.name]: CellGroup,
[Dialog.name]: Dialog
},
data() {
return {
//账号信息
accountInfo: {
accountName: '张三',
newBank: '工商银行',
newBankNo: '1122334455667899076'
},
//保单信息
orderInfo: {
riskName: '国富人寿八桂无忧',
appntName: '张三',
insuredName: '李四',
cvaliDate: '2020-02-02',
accountMoney: '130.00',
ratio: '70%'
},
show: false, // 获取短信验证码
codeDisabled: false, // 获取验证码按钮是否禁用
timeId: null, // 计时器ID
countDown: 60, // 倒计时
authCode: '', // 验证码
src: this.$assetsUrl + 'images/u6490.png', // 图片路径
newBank: '', //新开户银行
newBankNo: '', //新银行卡号
customerMobile: '',
sessionId: '',
nextDisabled: true,
signInvalid: '',
isSigned: false, //是否签完名了
submitForbidden: false, //是否提交申请失败
linkInvalid: false, //链接是否失效
isCanceled: false, //是否撤销
documentStatus: '' //签名状态
}
},
async created() {
this.$route.query.customerInfo && (localStorage.customerInfo = decodeURI(this.$route.query.customerInfo))
this.$route.query.token && (localStorage.token = this.$route.query.token)
this.customerMobile = JSON.parse(localStorage.customerInfo).customerMobile
//是否已经签名
if (sessionStorage.customerSign && JSON.parse(sessionStorage.customerSign).isSign) {
this.isSigned = true
} else {
this.isSigned = false
//token签名
if (this.$route.query.signInvalid) {
localStorage.signInvalid = this.$route.query.signInvalid
this.signInvalid = this.$route.query.signInvalid
//token是否过期
let resData = await this.checkSignInvalid(this.signInvalid)
if (resData == '1') {
this.linkInvalid = false
} else {
this.linkInvalid = true
}
}
}
this.init()
},
methods: {
async init() {
this.$toast.loading({
// 持续展示 toast
duration: 0,
// 禁用背景点击
forbidClick: true,
loadingType: 'spinner',
message: '加载中……'
})
// await this.isPreserveCancel()
//如果没有被撤销
// if (backData == 'notCanceled') {
let params = {
surrenderType: '2', //"1","基本信息变更" "2","续期账号变更" "3","红利领取"
customerInfoDTOList: [],
mediaDTOList: [],
surrenderId: JSON.parse(localStorage.customerInfo).surrenderId,
edorapplyNo: JSON.parse(localStorage.customerInfo).edorapplyNo || JSON.parse(localStorage.customerInfo).edorApplyNo
}
let res = await customerInfoShare(params)
this.$toast.clear()
if (res.result == 0) {
if (!JSON.parse(localStorage.customerInfo).contNo) {
res.content.accountResList.forEach(item => {
// this.policyList.push(item.contNo)
if (item.isNewInfo == '0') {
this.policyList.push({
contNo: item.contNo,
surrenderStatus: item.surrenderStatus
})
this.newBank = item.bankName
this.newBankNo = item.bankNo
}
})
localStorage.policyList = JSON.stringify(this.policyList)
} else {
//如果是从保全进度查询分享进来(只有一个单)
res.content.accountResList.forEach(item => {
// this.policyList.push(item.contNo)
if (item.contNo == JSON.parse(localStorage.customerInfo).contNo && item.isNewInfo == '0') {
this.policyList.push({
contNo: item.contNo,
surrenderStatus: item.surrenderStatus
})
this.newBank = item.bankName
this.newBankNo = item.bankNo
}
})
}
//未签名并且链接有效的情况下
if (!this.isSigned && !this.linkInvalid) {
//撤销
this.isCanceled = res.content.accountResList.every(item => {
return item.surrenderStatus == 5
})
}
//未签名并且链接有效的情况下
if (!this.linkInvalid) {
//已提交
this.submitForbidden = res.content.accountResList.every(item => {
return item.surrenderStatus == 3 || item.surrenderStatus == 6 || item.surrenderStatus == 9 || item.surrenderStatus == 7
})
}
//未签名&链接有效&未撤销
// if (!this.isSigned && !this.linkInvalid && !this.isCanceled) {
// //提交申请失败
// this.submitForbidden = res.content.accountResList.every(item => {
// return item.surrenderStatus == 7
// })
// }
// localStorage.signList = JSON.stringify(res.content.signList[0])
if (!sessionStorage.customerSign) {
let customerSign = {
baseEncryp: '',
policyUrl: res.content.signList[0].policyUrl
}
sessionStorage.customerSign = JSON.stringify(customerSign)
}
this.documentStatus = res.content.signList[0].documentStatus
this.getOrderDetail({
contNo: this.policyList[0].contNo
})
} else {
this.$toast(res.resultMessage)
}
},
//获取保单详情
async getOrderDetail(data) {
let res = await orderDetail(data)
if (res.result == 0) {
this.nextDisabled = false
let flag = true
this.list.forEach((item, index) => {
if (item.contNo == data.contNo) {
flag = false
console.info(index, item, res.content)
// this.list.splice(index, 1, res.content)
this.list.splice(index, 1, Object.assign(this.policyList[index], res.content))
}
})
if (flag) {
// this.list.push(res.content)
this.list.push(Object.assign(this.policyList[0], res.content))
this.policyList.forEach((item, index) => {
if (index != 0) {
this.list.push(item)
}
})
}
} else {
this.$toast(res.resultMessage)
}
},
},
}
</script>
<style lang="scss" scoped>
.surrender-confirmation-container {
.cont-info-container {
/deep/.van-cell__title,
.van-cell__value {
flex: auto;
text-align: left;
width: 50%;
}
}
}
</style>

View File

@@ -0,0 +1,165 @@
import Common from '@/assets/js/common'
import dataDic from '@/views/ebiz/preserve/js/data-dictionary'
/*
* 把其他filter放到index.js里面一起引入
*/
export default {
m2km(value) {
return Common.m2km(value)
},
/**
* 除法
* @param {Number} dividend 被除数
* @param {Number} divisor 除数
* @return {Number} 值
*/
divide(dividend, divisor) {
return Common.divide(dividend, divisor)
},
/**
* 保留小数位替代Number.toFixed()方法针对于某些数据16.455)不能做到四舍五入
* @param {[type]} value 数值
* @param {[type]} num 几位小数
* @return {[type]} 值
*/
toFixed(value, num) {
return Common.toFixed(value, num)
},
/**
* 如果是小数则保留小数位,默认两位
* @param {[type]} value 数值
* @param {Number} num 几位小数
* @return {[type]} 值
*/
toFloatFixed(value, num) {
Common.toFloatFixed(value, num)
},
/**
* 转化成工作时间
* @param {[type]} value 值
* @return {[type]} [description]
*/
businessHour(value) {
let time = ''
if (value) {
const arr = value.split(';')
time =
'星期' +
Common.getWeek(arr[0]) +
' ~ 星期' +
Common.getWeek(arr[1]) +
' ' +
Common.getTime(arr[2]) +
':' +
Common.getTime(arr[3]) +
' ~ ' +
Common.getTime(arr[4]) +
':' +
Common.getTime(arr[5])
}
return time
},
isEmptyObject(o) {
return Common.isEmptyObject(o)
},
wan(value) {
const isNumber = typeof value === 'number'
return isNumber && value / 10000
},
// 除以100保留小数位
divide100(value, num = 2, isFill) {
let values = Number(value)
const regular = /^\d+\.\d+/
if (values) {
values = values / 100
if (regular.test(values)) {
return Common.toFixed(values, num)
} else {
return Common.toFixed(values)
}
} else {
if (isFill) {
// 是否需要填充
value = 0
}
}
return value
},
discount(value, position = 0) {
let ret = value.split('.')
if (position == 0) {
ret = ret[0]
} else if (position == 1) {
ret = ret[1]
}
return ret
},
// 数据字典 id 转 text
idToText(id, type) {
let text = ''
dataDic[type].some(item => {
if (item.id == id) {
text = item.text
}
})
return text
},
/**
* 处理千分位并保留两位小数
* @param {[type]} moneyStr 钱
* @param {Boolean} flag 是否保留两位小数
* @return {[type]} 值
*/
// 处理钱的格式
moneyFormat(moneyStr, flag = false) {
// let str = (Math.round(moneyStr * 100) / 100).toString()
// let pointIdx = str.indexOf('.')
// if (pointIdx < 0) {
// str = str.replace(/(\d)(?=(?:\d{3})+$)/g, '$1,')
// pointIdx = str.length
// str += '.'
// } else {
// let int = str.substr(0, pointIdx)
// int.replace(/(\d)(?=(?:\d{3})+$)/g, '$1,')
// }
// while (str.length <= pointIdx + 2) {
// str += '0'
// }
// return str
//摘自国富群:这个在报文转换的时候,核心返回“—”的时候,直接返回空。 @于维琦(于维琦) 前端如果保额为空,直接展示“—”@皮伟(皮伟) 你跟她碰一下怎么改
if (moneyStr === null) {
return '—'
}
let str = ''
if (flag) {
str = (moneyStr + '').replace(/\d{1,3}(?=(\d{3})+$)/g, '$&,')
} else {
str = parseFloat(moneyStr)
.toFixed(2)
.replace(/(\d)(?=(\d{3})+\.)/g, '$1,')
}
return str
},
// 处理保额的格式化
amtFormat(moneyStr) {
let str = ''
str = (moneyStr + '').replace(/\d{1,3}(?=(\d{3})+$)/g, '$&,')
return str
},
//手机号加密显示
mask(value) {
if (value) {
return value.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2')
} else {
return ''
}
}
}

View File

@@ -0,0 +1,184 @@
// 保全相关的数据字典
export default {
//保全类型
preserveType: [
{
id: 'BB',
text: '客户基本资料变更'
},
{
id: 'BC',
text: '受益人变更'
},
{
id: 'CT',
text: '退保'
},
{
id: 'PC',
text: '续期账号变更'
},
{
id: 'WT',
text: '犹豫期退保'
}
],
preserveState: [
{
id: '0',
text: '确认生效'
},
{
id: '1',
text: '录入完成'
},
{
id: '2',
text: '申请确认'
},
{
id: '3',
text: '等待录入'
},
{
id: '4',
text: '预期终止'
},
{
id: '5',
text: '审批修改'
},
{
id: '6',
text: '确认未生效'
},
{
id: '7',
text: '保全撤销'
},
{
id: '8',
text: '核保终止'
},
{
id: '9',
text: '审批终止'
},
{
id: 'a',
text: '审批通过'
},
{
id: 'b',
text: '保全回退'
},
{
id: 'c',
text: '保全终止'
},
{
id: 'd',
text: '强制终止'
}
],
//退款账户列表
accountList: [{ id: '1', text: '原银行账户' }, { id: '2', text: '新银行账户' }],
//退款原因列表
surrenderReasonList: [
{ id: '1', text: '个人经济原因,无力负担保费' },
{ id: '2', text: '对险种不满意' },
{ id: '3', text: '对业务员不满意' },
{ id: '4', text: '对公司服务不满意' },
{ id: '5', text: '人情投保' },
{ id: '6', text: '其他' }
],
// 续期缴费方式 1-现金、4-银行自动转账、8-银行回单 A-支付宝 W-微信 P-POS收费
pcPayMode: [
{
label: '现金',
type: '1'
},
{
label: '银行自动转账',
id: '4'
},
{
label: '银行回单',
id: '8'
},
{
label: '支付宝',
id: 'A'
},
{
label: '微信',
id: 'W'
},
{
label: 'POS收费',
id: 'P'
}
],
// 银行卡类型
edorBankType: [
{
id: 'ABC',
text: '农业银行'
},
{
id: 'BOC',
text: '中国银行'
},
{
id: 'BOCOM',
text: '交通银行'
},
{
id: 'CCB',
text: '建设银行'
},
{
id: 'CEB',
text: '光大银行'
},
{
id: 'CIB',
text: '兴业银行'
},
{
id: 'ICBC',
text: '工商银行'
},
{
id: 'PSBC',
text: '邮储银行'
},
{
id: 'CMB',
text: '招商银行'
}
]
/*
preserveUserType: {
1: '联系方式变更保存的客户',
2: '受益人变更保存的客户',
3: '续期账号变更保存的客户',
4: '犹退保存的客户',
5: '退保保存的客户'
},
preserveAccountType: {
1: '联系方式变更保存的客户',
2: '受益人变更保存的客户',
3: '续期账号变更保存的客户',
4: '犹退保存的客户',
5: '退保保存的客户'
},
route: {
1: 'Contact',
2: 'Beneficiary',
3: 'Renewal',
4: 'CoolingOffperiodSurrender',
5: 'Surrender'
}
*/
}

View File

@@ -1,4 +1,6 @@
//点击弹出组件
import DataDictionary from '@/assets/js/utils/data-dictionary'
export function selectComp(that, index, type = '') {
that.currentPopupIndex = index
let title = ''
@@ -93,3 +95,28 @@ export function getIdentityInfo(that, data, type) {
}
})
}
// 数据字典 id 转 text
// eslint-disable-next-line no-unused-vars
function idToTextEdor(id, type) {
let text = ''
DataDictionary[type].some(item => {
if (item.id == id) {
text = item.label
}
})
return text
}
//json 数组分组
function groupBy(array, f) {
const groups = {}
array.forEach(function(o) {
const group = JSON.stringify(f(o))
groups[group] = groups[group] || []
groups[group].push(o)
})
return Object.keys(groups).map(function (group) {
return groups[group]
})
}

View File

@@ -0,0 +1,4 @@
export default {
}

View File

@@ -0,0 +1,104 @@
<!--自动转账授权书-续期账号变更-->
<template>
<div class="auto-pay-container">
<div class="pb20 pt20">
<van-notice-bar :scrollable="false" v-if="time != 0" class="notice">{{ `提示阅读时长需在${time}秒以上` }}</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">
本人确认已阅读
<span class="green">国富人寿自动转账授权书</span>
</van-radio>
</van-radio-group>
<div class="bg-white bottom-btn">
<van-button type="danger" size="large" :disabled="isDisabledComplite" @click="next" v-no-more-click="2000">下一步</van-button>
</div>
</div>
</div>
</template>
<script>
import { RadioGroup, Radio, Dialog, NoticeBar } from 'vant'
// import { preserveSign } from '@/api/ebiz/preserve/preserve'
export default {
components: {
[Radio.name]: Radio,
[RadioGroup.name]: RadioGroup,
[Dialog.name]: Dialog,
[NoticeBar.name]: NoticeBar
},
data() {
return {
radio: '',
time: '10', //定时器时间
timer: null, //定时器名称
isDisabledComplite: true //完成按钮是否可以点击
}
},
async created() {
this.timeOut()
},
mounted() {
document.body.style.backgroundColor = '#fff'
},
methods: {
// 初始化
timeOut() {
let timer = setInterval(() => {
this.time--
if (this.time <= 0) {
this.time = 0
this.radio = '0'
clearInterval(timer)
}
}, 1000)
},
// 单选框
readConfirm() {
console.log(this.radio)
if (this.radio == '1') {
this.$dialog
.alert({
title: '提示',
className: 'dialog-alert',
message: '该内容涉及您的重大权益,请您仔细阅读',
confirmButtonColor: '#E9332E'
})
.then(() => {
this.radio = '1'
this.isDisabledComplite = false
})
} else {
if (this.radio == '') {
this.isDisabledComplite = true
}
}
},
next() {}
},
beforeRouteLeave(to, from, next) {
document.body.style.backgroundColor = ''
next()
}
}
</script>
<style lang="scss" scoped>
.img {
height: 40px;
vertical-align: middle;
}
.notice {
width: 100%;
position: fixed;
top: 0;
z-index: 20;
}
.iframe {
width: 100vw;
height: 80vh;
}
.signature-confirm-content {
text-indent: 2em;
line-height: 30px;
border-bottom: 1px solid #dadada;
}
</style>

View File

@@ -0,0 +1,200 @@
<!--影像信息上传页面-->
<template>
<div class="image-upload-container">
<div class=" pb80">
<div class="m20 bg-white">
<div>
<!-- 银行卡 -->
<div v-for="(item, index) in fileList" :key="index">
<van-cell-group>
<van-field required :label="item.label" disabled />
</van-cell-group>
<div @click="test(item)">
<van-uploader
:name="item.name"
v-model="item.realFileList"
:after-read="afterRead"
:before-delete="beforeDelete"
class="mt10 ml20"
:max-count="20"
/>
</div>
</div>
</div>
</div>
</div>
<div class="bg-white bottom-btn">
<van-button type="danger" size="large" @click="nextStep" v-no-more-click="2000">下一步</van-button>
</div>
</div>
</template>
<script>
import { Cell, CellGroup, Field, Uploader, RadioGroup, Radio, Dialog, Picker, Popup } from 'vant'
import { uploadImg } from '@/api/ebiz/sale/sale'
import { changeEdor } from '@/api/ebiz/preserve/preserve'
export default {
components: {
[Cell.name]: Cell,
[CellGroup.name]: CellGroup,
[Field.name]: Field,
[Uploader.name]: Uploader,
[RadioGroup.name]: RadioGroup,
[Radio.name]: Radio,
[Dialog.name]: Dialog,
[Picker.name]: Picker,
[Popup.name]: Popup
},
data() {
return {
isDisabled: true,
id: '',
idType: '1',
type: '',
fileList: [
{
name: 'bank',
label: '银行卡',
imageInfoType: '3', // 影像类型
subBusinessType: '3', // 影像归属 0 投保人 1 被保人 2 受益人 3 代理人
realFileList: [],
popList: []
}
],
uploadCheck: {},
entry: '',
customerInfo: JSON.parse(localStorage.getItem('preserve-customerInfo'))
}
},
created() {
// 初始化 上传影像数据
},
methods: {
test(item) {
this.uploadCheck = item
},
afterRead(file) {
// 此时可以自行将文件上传至服务器
this.$toast.loading({
duration: 0,
forbidClick: true,
loadingType: 'spinner',
message: '加载中……'
})
let formdata = new FormData()
formdata.append('imgPath', this.dataURLtoFile(file.content, file.file.name))
uploadImg(formdata).then(res => {
this.$toast.clear()
if (res.result == '0') {
this.uploadCheck.popList.push({ name: file.file.name, imgPath: res.path })
console.log(this.fileList)
} else {
this.$toast(res.resultMessage)
}
})
},
// 转化base64格式为文件格式
dataURLtoFile(dataurl, filename) {
//将base64转换为文件
var arr = dataurl.split(','),
mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]),
n = bstr.length,
u8arr = new Uint8Array(n)
while (n--) {
u8arr[n] = bstr.charCodeAt(n)
}
return new File([u8arr], filename, { type: mime })
},
// 删除图片前
beforeDelete(file, detail) {
Dialog.confirm({
title: '提示',
message: '您确定要删除吗'
})
.then(() => {
this.fileList.map(item => {
if (item.name == detail.name) {
// 处理
let deleteIndex = null
for (let i = 0; i < item.realFileList.length; i++) {
if (item.realFileList[i].file == file.file) {
deleteIndex = i
break
}
}
item.realFileList.splice(deleteIndex, 1)
item.popList.splice(deleteIndex, 1)
}
})
})
.catch(() => {
// cancel
})
},
// 点击下一步
nextStep() {
this.$toast.loading({
// 持续展示 toast
duration: 0,
// 禁用背景点击
forbidClick: true,
loadingType: 'spinner',
message: '加载中……'
})
//
let saveMediaDTO = {
platformType: 'app',
edorType: 'PC',
operateType: '02',
customerNo: this.customerInfo.customerNo,
name: this.customerInfo.customerName,
iDNo: this.customerInfo.idNo,
mobile: this.customerInfo.customerMobile,
surrenderId: this.customerInfo.surrenderId,
edorApplyNo: this.customerInfo.edorApplyNo,
mediaUploadDTOS: []
}
console.log(this.fileList)
this.fileList.forEach(item => {
item.popList.forEach(subItem => {
saveMediaDTO.mediaUploadDTOS.push(
Object.assign(
{},
{
businessNo: this.customerInfo.edorApplyNo,
businessType: item.imageInfoType,
imageInfoType: item.imageInfoType,
rgssUrl: subItem.imgPath,
subBusinessType: item.imageInfoType,
subBusinessNo: item.imageInfoType,
manageComCode: item.imageInfoType
}
)
)
})
})
changeEdor(saveMediaDTO).then(res => {
this.$toast.clear()
if (res.result == 0) {
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/preserve/common/handleResult?entry=PC',
pullRefresh: '1',
backToFirst: '1'
},
routerInfo: {
path: '/preserve/common/handleResult?entry=PC'
}
})
} else {
this.$toast(res.resultMessage)
}
})
}
}
}
</script>
<style lang="scss" scoped></style>

View File

@@ -0,0 +1,162 @@
<!--续期账号变更-保全代办确认页-->
<template>
<div class="renewal-confirmation-container pb50">
<div style="border-bottom: 1px solid #ebedf0" class="fs14 pl10 pv12 bg-white">
<p>
<span>尊敬的</span>
<span class="red" v-if="list.length">{{ list[0].accountName }}</span
>先生/女士, 您好!
</p>
<p class="mt10">
<span>您的</span>
<span class="red">续期账号变更</span>已由代理人代办请确认信息并进行提交:
</p>
</div>
<van-cell-group class="mt10 cont-info-container">
<!-- 保单信息 -->
<p style="border-bottom: 1px solid #ebedf0" class="fs15 fwb pl10 pv12">保单信息</p>
<van-collapse v-model="activeNames" v-if="list.length > 0">
<div v-for="(item, index) in list" :key="index">
<van-collapse-item :title="`保单号:${item.contNo}`" :name="index" v-if="item.isNewInfo == '1'">
<van-cell title="产品名称" :value="item.riskName" />
<van-cell title="投保人" :value="item.appntName" />
<van-cell title="被保险人" :value="item.insuredName" />
<van-cell title="交费方式" :value="item.tradeAbstract | idToText('pcPayMode')" />
<van-cell title="保单生效日期" :value="item.cvalidate" />
<van-cell title="保单状态" :value="item.contState" />
<van-cell title="开户人姓名" :value="item.accountName" />
<van-cell title="原开户银行" :value="item.bankCode | idToText('edorBankType')" />
<van-cell title="原银行卡号" :value="item.bankNo" />
</van-collapse-item>
</div>
</van-collapse>
</van-cell-group>
<!-- 以上变更后续账号信息 -->
<van-cell-group class="mt10 cont-info-container">
<div v-for="(item, index) in list" :key="index">
<div v-if="item.isNewInfo == '0'">
<p style="border-bottom: 1px solid #ebedf0" class="fs15 fwb pl10 pv12">以上变更后续账号信息</p>
<van-cell title="开户人姓名" :value="item.accountName" />
<van-cell title="新开户银行">
<div class="red" slot="default">{{ item.bankCode | idToText('edorBankType') }}</div>
</van-cell>
<van-cell title="新银行账号">
<div class="red" slot="default">{{ item.bankNo }}</div>
</van-cell>
</div>
</div>
</van-cell-group>
<van-cell-group class="fs14 mt10 pl15 pr15 pb20">
<p class="pt20 pb20">以下内容需要您阅读确认:</p>
<div v-for="(item, index) in pdfList" :key="index">
<p>需阅读</p>
<div class="mb10 mt10 flex align-items-c justify-content-fs">
<span class="red">{{ item.documentName }}</span>
<img :src="src" v-if="item.documentStatus == '1'" />
</div>
</div>
<p class="start">点击开始按钮进行相关操作</p>
</van-cell-group>
<div class="bottom-btn bg-white">
<van-button type="danger" size="large" @click="startPage" v-no-more-click="2000">开始</van-button>
</div>
</div>
</template>
<script>
import { Field, Cell, Collapse, CollapseItem, CellGroup, Dialog } from 'vant'
import { queryConfirmDetail } from '@/api/ebiz/preserve/preserve'
import DataDictionary from '../js/data-dictionary'
export default {
name: 'RenewalConfirmation',
components: {
[Field.name]: Field,
[Cell.name]: Cell,
[CellGroup.name]: CellGroup,
[Collapse.name]: Collapse,
[CollapseItem.name]: CollapseItem,
[Dialog.name]: Dialog
},
data() {
return {
activeNames: [0],
src: this.$assetsUrl + 'images/u6490.png', // 图片路径
list: [],
pdfList: [],
customerInfo: JSON.parse(localStorage.getItem('preserve-customerInfo'))
}
},
filters: {
idToText: function idToTextEdor(id, type) {
let text = ''
DataDictionary[type].some(item => {
if (item.id == id) {
text = item.label
}
})
return text
}
},
async created() {
// 获取基本信息
this.init()
},
methods: {
startPage() {
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/preserve/pc/autopayAuthorization'
},
routerInfo: {
path: '/preserve/pc/autopayAuthorization'
}
})
},
async init() {
this.$toast.loading({
// 持续展示 toast
duration: 0,
// 禁用背景点击
forbidClick: true,
loadingType: 'spinner',
message: '加载中……'
})
let params = {
edorType: 'PC',
surrenderId: this.customerInfo.surrenderId,
edorapplyNo: this.customerInfo.edorapplyNo
}
queryConfirmDetail(params).then(res => {
this.$toast.clear()
if (res.result == 0) {
// 处理
this.list = res.content.content
this.pdfList = res.content.surrenderSignList
} else {
this.$toast(res.resultMessage)
}
})
}
}
}
</script>
<style lang="scss" scoped>
.renewal-confirmation-container {
.cont-info-container {
/deep/.van-cell__title,
.van-cell__value {
flex: auto;
text-align: left;
width: 50%;
}
}
}
.red {
color: #e9332e !important;
}
</style>

View File

@@ -0,0 +1,310 @@
<template>
<div class="renewal-info-container pb45">
<div v-if="!isScan">
<van-cell-group class="mt10 cont-info-container">
<!-- 保单信息 -->
<p style="border-bottom: 1px solid #ebedf0" class=" fs15 fwb pl10 pv12">保单信息</p>
<van-collapse v-model="activeNames">
<div v-for="(item, index) in list" :key="index">
<van-collapse-item :title="`保单号:${item.contNo}`" :name="index">
<van-cell title="产品名称" :value="item.riskName" />
<van-cell title="投保人" :value="item.appntName" />
<van-cell title="被保险人" :value="item.insuredName" />
<van-cell title="交费方式" :value="item.tradeAbstract | idToText('pcPayMode')" />
<van-cell title="保单生效日期" :value="item.cvalidate" />
<van-cell title="保单状态" :value="item.contState" />
<van-cell title="开户人姓名" :value="item.accountName" />
<van-cell title="原开户银行" :value="item.bankCode | idToText('edorBankType')" />
<van-cell title="原银行卡号" :value="item.bankNo" />
</van-collapse-item>
</div>
</van-collapse>
</van-cell-group>
<!-- 以上变更后续账号信息 -->
<van-cell-group class="mt10">
<p style="border-bottom: 1px solid #ebedf0" class=" fs15 fwb pl10 pv12">以上变更后续账号信息</p>
<van-cell required title="开户人" v-if="list.length">{{ list[0].accountName }}</van-cell>
<van-field
v-model="bank"
label="新开户银行"
placeholder="请选择"
right-icon="arrow"
@click="bankPopup = true"
readonly
v-validate="'required'"
data-vv-name="新开户银行"
required
/>
</van-cell-group>
<van-cell-group class="flex align-items-c">
<van-field
v-model="bankNo"
label="新银行卡号"
maxlength="19"
placeholder="请输入"
clearable
v-validate="'required|bankCard'"
data-vv-name="新银行卡号"
required
/>
<van-button type="danger" size="small" round class="bankCard mr10 w110 h20" @click="cardScanning('0')" v-no-more-click="2000">银行卡扫描</van-button>
</van-cell-group>
<div class="bottom-btn bg-white">
<van-button type="danger" size="large" @click="nextStep" v-no-more-click="2000">下一步</van-button>
</div>
<!-- 开户银行选择 -->
<van-popup v-model="bankPopup" position="bottom">
<van-list>
<van-cell v-for="item in bankList" :key="item.code" :title="item.bankName" class="text-center" @click="chooseBank(item.bankName, item.code)" />
</van-list>
</van-popup>
</div>
<!-- 银行卡扫描 -->
<BankCardScan :scanShow="isScan" :clear="false" @getScanInfo="getBankCardInfo"></BankCardScan>
</div>
</template>
<script>
import { Field, Collapse, CollapseItem, Cell, CellGroup, Dialog, Popup, List } from 'vant'
import BankCardScan from '@/components/ebiz/sale/BankCardScan'
import { pcPolicyInfo, changeEdor } from '@/api/ebiz/preserve/preserve'
import { getBankList } from '@/api/ebiz/sale/sale'
import filters from '@/views/ebiz/preserve/filters'
export default {
name: 'RenewalInfo',
components: {
[Field.name]: Field,
[Collapse.name]: Collapse,
[CollapseItem.name]: CollapseItem,
[Cell.name]: Cell,
[CellGroup.name]: CellGroup,
[List.name]: List,
[Popup.name]: Popup,
[Dialog.name]: Dialog,
BankCardScan
},
data() {
return {
bank: '', //新开户银行
bankCode: '', //新开户银行编码
bankPopup: false, // 展示银行列表
bankList: [], // 银行列表
bankNo: '', // 新银行卡号
isScan: false, // 是否扫描银行卡
activeNames: [0],
show: true,
list: [],
customerInfo: JSON.parse(localStorage.getItem('preserve-customerInfo'))
}
},
filters: {
idToText: filters.idToText
},
created() {
this.getPolicyList({
customerNo: this.customerInfo.customerNo,
edorType: 'PC', //续期账号变更
idno: this.customerInfo.idNo,
mobile: this.customerInfo.customerMobile,
name: this.customerInfo.customerName
})
this.getBank()
},
mounted() {
// 筛选按钮的点击事件
window.appCallBack = this.appCallBack
/*Dialog.confirm({
title: '提示',
message: '该客户涉及到的所有保单相应信息将变更',
showCancelButton: false
})*/
},
methods: {
// 选择银行
chooseBank(name, code) {
this.bank = name
this.bankCode = code
this.bankPopup = false
},
// 获取银行卡扫描信息
getBankCardInfo(data) {
this.bankNo = data.name
this.$jump({
flag: 'navigation',
extra: {
title: '续期账号变更',
hiddenRight: '1'
}
})
this.isScan = false
},
// 银行卡扫描
cardScanning(cardScanningType) {
window.localStorage.setItem('cardScanningType', cardScanningType)
let title = ''
this.isclear = false
;[this.isScan, title] = [true, '银行卡扫描']
setTimeout(() => {
this.$jump({
flag: 'navigation',
extra: {
title,
hiddenLeft: '1'
}
})
this.closeBtn()
}, 400)
},
closeBtn() {
// 筛选按钮的显示
this.$jump({
flag: 'webview_right_button',
extra: {
btns: [
{
img: this.$assetsUrl + 'images/del-close.png',
route: { flag: '', extra: {} }
}
]
}
})
},
appCallBack() {
this.isclear = true
// 筛选按钮的点击事件
this.isclear = true
this.$jump({
flag: 'navigation',
extra: {
title: '续期账号变更',
hiddenRight: '1'
}
})
this.isScan = false
},
// 下一步
async nextStep() {
this.$validator.validate().then(valid => {
if (true === valid) {
this.change()
} else {
this.$toast(this.$validator.errors.all()[0])
}
})
},
//获取保单详情
async getPolicyList(data) {
pcPolicyInfo(data).then(res => {
if (res.result == 0) {
this.list = res.content
} else {
if (res.content) {
this.$toast(res.content)
} else {
this.$toast(res.resultMessage)
}
}
})
},
// 获取银行卡列表
async getBank() {
let data = {
operateType: 'bank_type'
}
let res = await getBankList(data)
if (res.result == '0') {
this.bankList = res.content
} else {
this.$toast(res.resultMessage)
}
},
change() {
let surrenderDTOList = {
platformType: 'app',
edorType: 'PC',
operateType: '01',
customerNo: this.customerInfo.customerNo,
name: this.customerInfo.customerName,
iDNo: this.customerInfo.idNo,
mobile: this.customerInfo.customerMobile,
pcAccountDTOList: []
}
this.list.forEach(item => {
surrenderDTOList.pcAccountDTOList.push(
Object.assign(
{},
{
accountName: item.accountName,
bankName: item.bankName,
accountType: item.accountType,
bankCode: item.bankCode,
bankNo: item.bankNo,
bankProvince: item.bankProvince,
isNewInfo: item.isNewInfo,
contNo: item.bankNo,
appntName: item.appntName,
insuredName: item.insuredName,
cvalidate: item.cvalidate,
contState: item.contState,
riskName: item.riskName,
tradeAbstract: item.tradeAbstract
}
)
)
})
let changeItem = {
isNewInfo: '0',
bankCode: this.bankCode,
bankName: this.bank,
bankNo: this.bankNo,
accountName: this.list[0].accountName
}
surrenderDTOList.pcAccountDTOList.push(changeItem)
changeEdor(surrenderDTOList).then(res => {
if (res.result == 0) {
this.customerInfo.surrenderId = res.content.surrenderId
this.customerInfo.edorApplyNo = res.content.edorApplyNo
this.customerInfo.entry = 'renewal'
localStorage.setItem('preserve-customerInfo', JSON.stringify(this.customerInfo))
this.$jump({
flag: 'h5',
extra: {
url: location.origin + `/#/preserve/pc/imageUpload`
},
routerInfo: {
path: `/preserve/pc/imageUpload`
}
})
} else {
this.$toast(res.resultMessage)
}
})
}
}
}
</script>
<style lang="scss" scoped>
.van-dialog__confirm {
background-color: #e9332e !important;
margin-right: 20px;
}
.renewal-info-container {
.cont-info-container {
/deep/.van-cell__title,
.van-cell__value {
flex: auto;
}
}
/deep/ .bankCard {
width: 120px;
height: 20px;
line-height: 20px;
border-radius: 10px;
}
}
</style>

View File

@@ -0,0 +1,447 @@
<!--影像信息上传页面-->
<template>
<div class="image-upload-container">
<div class=" pb80">
<div class="m20 bg-white">
<div>
<!-- 身份证 -->
<div v-if="entry == 'surrender' || entry == 'hesitateSurrender'">
<van-cell-group>
<van-field required label="身份证正面" disabled />
</van-cell-group>
<div @click="test('fileListIdFront', idType)" class="flex align-items-e">
<van-uploader
name="fileListIdFront"
v-model="fileListIdFront"
:after-read="afterRead"
:before-delete="beforeDelete"
class="mt10 ml20"
:max-count="1"
@delete="deleteImg"
/>
</div>
<van-cell-group>
<van-field required label="身份证反面" disabled />
</van-cell-group>
<div @click="test('fileListIdBack', idType)">
<van-uploader
name="fileListIdBack"
v-model="fileListIdBack"
:after-read="afterRead"
@delete="deleteImg"
:before-delete="beforeDelete"
class="mt10 ml20"
:max-count="1"
/>
</div>
</div>
<!-- 银行卡 -->
<div v-if="entry == 'renewal' || ((entry == 'surrender' || entry == 'hesitateSurrender') && accountType == '1')">
<van-cell-group>
<van-field required label="银行卡" disabled />
</van-cell-group>
<div @click="test('fileListBank', idType)">
<van-uploader
name="fileListBank"
v-model="fileListBank"
:after-read="afterRead"
@delete="deleteImg"
:before-delete="beforeDelete"
class="mt10 ml20"
:max-count="1"
/>
</div>
</div>
<!-- 纸质保单 -->
<div v-if="(entry == 'surrender' || entry == 'hesitateSurrender') && conTractType == '1'">
<van-cell-group>
<van-field required label="纸质保单" disabled />
</van-cell-group>
<div @click="test('fileListContract ', idType)">
<van-uploader
name="fileListContract"
v-model="fileListContract"
:after-read="afterRead"
@delete="deleteImg"
:before-delete="beforeDelete"
class="mt10 ml20"
:max-count="1"
/>
</div>
</div>
</div>
</div>
</div>
<div class="bg-white bottom-btn">
<van-button type="danger" size="large" :disabled="isDisabled" @click="nextStep" v-no-more-click="2000">下一步</van-button>
</div>
</div>
</template>
<script>
import { Cell, CellGroup, Field, Uploader, RadioGroup, Radio, Dialog, Picker, Popup } from 'vant'
import { uploadImg } from '@/api/ebiz/sale/sale'
import config from '@/config'
import { customerInfoChange, preserveHangUp } from '@/api/ebiz/preserve/preserve'
export default {
components: {
[Cell.name]: Cell,
[CellGroup.name]: CellGroup,
[Field.name]: Field,
[Uploader.name]: Uploader,
[RadioGroup.name]: RadioGroup,
[Radio.name]: Radio,
[Dialog.name]: Dialog,
[Picker.name]: Picker,
[Popup.name]: Popup
},
data() {
return {
isDisabled: true,
id: '',
idType: '1',
type: '',
fileListIdFront: [], //身份证正面
fileListIdBack: [], //身份证反面
fileListBank: [], // 银行账户
fileListContract: [], //纸质保单
file: '', // 图片流
imgName: '', // 图片名称
list: [],
entry: '',
surrenderType: '',
accountType: '', //退款银行账号类型 0-原银行 1-新银行
conTractType: '' //保单类型 0-电子 1-纸质
}
},
created() {
this.entry = JSON.parse(localStorage.customerInfo).entry
this.accountType = this.$route.query.accountType
this.conTractType = this.$route.query.conTractType
switch (this.entry) {
case 'contact': //联系方式变更
this.surrenderType = '1'
break
case 'beneficiary': //受益人变更
this.surrenderType = '2'
break
case 'renewal': //续期账户变更
this.surrenderType = '3'
break
case 'surrender': //退保
this.surrenderType = '4'
break
case 'hesitateSurrender': //犹豫期退保
this.surrenderType = '5'
break
default:
break
}
// 银行卡
if (window.localStorage.getItem('bankCardUrlPath') != null) {
let bankCardUrl = {
url: config.imgDomain + `/returnImageStream?a=b.jpg&imgPath=${window.localStorage.getItem('bankCardUrlPath')}`
}
this.fileListBank.push(bankCardUrl)
//续期账号变更
if (this.surrenderType == '2') {
let policyList = JSON.parse(localStorage.accountDTOList)
policyList.forEach(item => {
let obj = {
businessNo: JSON.parse(localStorage.customerInfo).edorApplyNo,
businessType: '2',
imageInfoType: '3',
rgssUrl: window.localStorage.getItem('bankCardUrlPath'),
subBusinessType: '3',
subBusinessNo: item.contNo
}
this.list.push(obj)
})
} else {
//累计红利领取
let obj = {
businessNo: JSON.parse(localStorage.customerInfo).edorApplyNo,
businessType: '2',
imageInfoType: '3',
rgssUrl: window.localStorage.getItem('bankCardUrlPath'),
subBusinessType: '3',
subBusinessNo: JSON.parse(localStorage.customerInfo).edorApplyNo
}
this.list.push(obj)
}
} else {
this.fileListBank = []
}
},
methods: {
test(type, id) {
this.id = id
this.type = type
},
afterRead(file) {
console.log('afterRead')
// 此时可以自行将文件上传至服务器
this.file = file.content
this.imgName = file.file.name
this.upload()
},
// 上传图片
upload() {
this.$toast.loading({
// 持续展示 toast
duration: 0,
// 禁用背景点击
forbidClick: true,
loadingType: 'spinner',
message: '加载中……'
})
let formdata = new FormData()
formdata.append('imgPath', this.dataURLtoFile(this.file, this.imgName))
uploadImg(formdata).then(res => {
if (res.result == '0') {
this.$toast.clear()
// 是投保人
// 证件类型
let imageInfoType = ''
if (this.type == 'fileListIdFront' && this.id == '1') {
imageInfoType = '1'
} else if (this.type == 'fileListIdBack' && this.id == '1') {
imageInfoType = '2'
} else if (this.type == 'fileListBank') {
imageInfoType = '3'
}
//续期账号变更 subBusinessNo 传保单号, 其他传申请号
if (this.surrenderType == '2') {
let policyList = JSON.parse(localStorage.accountDTOList)
policyList.forEach(item => {
let obj = {
businessNo: JSON.parse(localStorage.customerInfo).edorApplyNo,
businessType: '2',
imageInfoType,
rgssUrl: encodeURI(res.path).replace(/\+/g, '%2B'),
subBusinessType: '3',
fileName: this.imgName,
subBusinessNo: item.contNo
}
this.list.push(obj)
})
} else {
let subBusinessNo = JSON.parse(localStorage.customerInfo).edorApplyNo
let obj = {
businessNo: JSON.parse(localStorage.customerInfo).edorApplyNo,
businessType: '2',
imageInfoType,
rgssUrl: encodeURI(res.path).replace(/\+/g, '%2B'),
subBusinessType: '3',
fileName: this.imgName,
subBusinessNo
}
this.list.push(obj)
}
} else {
switch (this.type) {
case 'fileListIdFront':
this.fileListIdFront = []
break
case 'fileListIdBack':
this.fileListIdBack = []
break
case 'fileListBank':
this.fileListBank = []
break
}
this.$toast.clear()
this.$toast(res.resultMessage)
}
})
},
// 转化base64格式为文件格式
dataURLtoFile(dataurl, filename) {
//将base64转换为文件
var arr = dataurl.split(','),
mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]),
n = bstr.length,
u8arr = new Uint8Array(n)
while (n--) {
u8arr[n] = bstr.charCodeAt(n)
}
return new File([u8arr], filename, { type: mime })
},
// 删除图片前
beforeDelete(file, detail) {
Dialog.confirm({
title: '提示',
message: '您确定要删除吗'
})
.then(() => {
if (detail.name == 'fileListIdFront') {
this.fileListIdFront = []
} else if (detail.name == 'fileListIdBack') {
this.fileListIdBack = []
} else if (detail.name == 'fileListBank') {
this.fileListBank = []
}
this.deleteImg(file)
})
.catch(() => {
// cancel
})
},
// 删除图片
deleteImg(file) {
this.list.map((item, index, array) => {
if (item.fileName.indexOf(file.file.name) == -1) {
return
} else {
array.splice(index, 1)
}
})
},
// 点击下一步
nextStep() {
this.$toast.loading({
// 持续展示 toast
duration: 0,
// 禁用背景点击
forbidClick: true,
loadingType: 'spinner',
message: '加载中……'
})
delete this.list.fileName
let hangUpData = {
surrenderDTO: {
surrenderId: JSON.parse(localStorage.customerInfo).surrenderId,
edorapplyNo: JSON.parse(localStorage.customerInfo).edorapplyNo,
edoracceptNo: '',
surrenderType: this.surrenderType,
mediaDTOList: [],
customerInfoDTOList: [
{
customerNo: JSON.parse(localStorage.customerInfo).customerNo
}
],
accountDTOList: [],
recommendDTO: {},
bonusDTOList: [],
signDTOList: []
}
}
if (this.surrenderType == '2') {
let hangUpList = JSON.parse(localStorage.accountDTOList)
let surrenderId = JSON.parse(localStorage.customerInfo).surrenderId.split(',')
hangUpList.forEach((item, index) => {
preserveHangUp({
surrenderDTO: {
surrenderId: surrenderId[index],
edorapplyNo: JSON.parse(localStorage.customerInfo).edorapplyNo,
edoracceptNo: '',
surrenderType: this.surrenderType,
mediaDTOList: [],
customerInfoDTOList: [
{
customerNo: JSON.parse(localStorage.customerInfo).customerNo
}
],
accountDTOList: [item],
recommendDTO: {},
bonusDTOList: [],
signDTOList: []
}
}).then(backData => {
if (backData.result == 0) {
if (index >= hangUpList.length - 1) {
this.customerInfoChange()
}
} else {
return this.$toast(backData.resultMessage)
}
})
})
} else {
preserveHangUp(hangUpData).then(backData => {
this.$toast.clear()
if (backData.result == '0') {
let customerInfo = JSON.parse(localStorage.customerInfo)
customerInfo.edoracceptNo = backData.content
localStorage.customerInfo = JSON.stringify(customerInfo)
localStorage.bankCardUrl && localStorage.removeItem('bankCardUrl')
this.customerInfoChange()
} else {
this.$toast(backData.resultMessage)
}
})
}
},
customerInfoChange() {
customerInfoChange({
surrenderDTOList: [
{
// surrenderType: JSON.parse(localStorage.customerInfo).surrenderType, //"1","基本信息变更" "2","续期账号变更" "3","红利领取"
surrenderType: this.surrenderType,
customerInfoDTOList: [],
mediaDTOList: this.list,
surrenderId: JSON.parse(localStorage.customerInfo).surrenderId,
recommendDTO: {},
bonusDTOList: [],
signDTOList: []
}
]
}).then(res => {
if (res.result == 0) {
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/preserve/handleResult',
pullRefresh: '1',
backToFirst: '1'
},
routerInfo: {
path: '/preserve/handleResult'
}
})
} else {
this.$toast(res.resultMessage)
}
})
}
},
computed: {
listenChange() {
const { fileListIdFront, fileListIdBack, fileListBank } = this
return {
fileListIdFront,
fileListIdBack,
fileListBank
}
}
},
watch: {
listenChange(val) {
if (
(val.fileListIdFront.length != '0' &&
val.fileListIdBack.length != '0' &&
val.fileListBank.length != '0' &&
(this.entry == 'surrender' || this.entry == 'hesitateSurrender') &&
this.accountType == '1') ||
(this.entry == 'renewal' && val.fileListBank.length != '0') ||
(val.fileListIdFront.length != '0' &&
val.fileListIdBack.length != '0' &&
(this.entry == 'surrender' || this.entry == 'hesitateSurrender') &&
this.accountType == '0')
) {
this.isDisabled = false
} else {
this.isDisabled = true
}
}
}
}
</script>
<style lang="scss" scoped></style>