迁移理赔部分代码、前后端联调理赔报案,理赔申请至影像上传接口

This commit is contained in:
wangmingzhe
2019-12-04 16:51:08 +08:00
parent 92a5045bbe
commit cd2b60a077
29 changed files with 10338 additions and 35 deletions

View File

@@ -0,0 +1,92 @@
import request from '@/assets/js/utils/request'
import getUrl from '@/assets/js/utils/get-url'
//进度查询列表
export function progress(data) {
return request({
url: getUrl(`/claim/claimApply/progress`, 1),
method: 'post',
data
})
}
//进度查询详情
export function progressDetail(data) {
return request({
url: getUrl(`/claim/claimApply/progressDetail`, 1),
method: 'post',
data
})
}
//历史报案列表
export function history(data) {
return request({
url: getUrl(`/claim/claimReport/history`, 1),
method: 'post',
data
})
}
//理赔申请
export function apply(data) {
return request({
url: getUrl(`/claim/claimApply/apply`, 1),
method: 'post',
data
})
}
//客户列表查询
export function customerList(data) {
return request({
url: getUrl(`/edor/customer/customerList`, 1),
method: 'post',
data
})
}
//客户详情查询
export function customerInfo(data) {
return request({
url: getUrl(`/edor/customer/customerInfo`, 1),
method: 'post',
data
})
}
//理赔申请查询
export function query(data) {
return request({
url: getUrl(`/claim/claimApply/query`, 1),
method: 'post',
data
})
}
//理赔申请删除接口
export function Delete(data) {
return request({
url: getUrl(`/claim/claimApply/delete`, 1),
method: 'get',
data
})
}
//理赔报案提交
export function report(data) {
return request({
url: getUrl(`/claim/claimReport/report`, 1),
method: 'post',
data
})
}
// 获取验证码
export function getAuthCode(data) {
return request({
url: getUrl('/customer/authcode/loginedSend', 1),
method: 'post',
data
})
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -165,19 +165,19 @@ export default {
id: 6,
text: '台湾居民来往大陆通行证'
},
// {
// id: 7,
// text: '其他',
// disabled: true
// }
{
id: 8,
text: '外国人永久居留身份证'
},
{
id: 9,
text: '港澳台居民居住证'
id: 7,
text: '其他',
disabled: true
}
// {
// id: 8,
// text: '外国人永久居留身份证'
// },
// {
// id: 9,
// text: '港澳台居民居住证'
// }
],
//投保人证件类型
insuredIdType: [
@@ -187,15 +187,17 @@ export default {
},
{
id: 2,
text: '户口本'
text: '户口本',
disabled: true
},
{
id: 3,
text: '出生证'
text: '出生证',
disabled: true
},
{
id: 4,
text: '外国人护照'
text: '护照'
},
{
id: 5,
@@ -205,21 +207,52 @@ export default {
id: 6,
text: '台湾居民来往大陆通行证'
},
// {
// id: 7,
// text: '其他',
// disabled: true
// }
{
id: 8,
text: '外国人永久居留身份证'
id: 7,
text: '其他',
disabled: true
}
// {
// id: 8,
// text: '外国人永久居留身份证'
// },
// {
// id: 9,
// text: '港澳台居民居住证'
// }
],
//出生证明
birthType: [
{
id: 1,
text: '身份证'
},
{
id: 9,
text: '港澳台居民居住证'
id: 2,
text: '户口本'
},
{
id: 3,
text: '出生证明',
disabled: true
},
{
id: 4,
text: '护照'
},
{
id: 5,
text: '港澳居民通行证'
},
{
id: 6,
text: '台湾居民通行证'
},
{
id: 7,
text: '其他'
}
],
//投保人/被保人关系
relationToAppnt: [
{
@@ -243,6 +276,61 @@ export default {
text: '其他'
}
],
//理赔报案投保人/被保人关系
relationToAppnts: [
{
id: '00',
text: '本人'
},
{
id: '01',
text: '配偶'
},
{
id: '02',
text: '父母'
},
{
id: '03',
text: '子女'
},
{
id: '04',
text: '其他'
},
{
id: '05',
text: '祖父母'
},
{
id: '06',
text: '孙子女'
},
{
id: '07',
text: '外祖父母'
},
{
id: '08',
text: '外孙子女'
},
{
id: '09',
text: '亲戚'
},
{
id: '10',
text: '发放房地产抵押贷款的金融机构'
},
{
id: '11',
text: '业务员'
},
{
id: '12',
text: '监护人'
}
],
//婚姻状况
marriage: [
{
@@ -307,14 +395,14 @@ export default {
id: 1,
text: '仅为中国税收居民'
},
{
id: 2,
text: '仅为非中国税收居民'
},
{
id: 3,
text: '既是中国税收居民又是其他国家(地区)税收居民'
}
// {
// id: 2,
// text: '仅为非中国税收居民'
// },
// {
// id: 3,
// text: '既是中国税收居民又是其他国家(地区)税收居民'
// }
],
//交费期限
payEndYear: [
@@ -847,5 +935,254 @@ export default {
}
],
// 健康状况
healthCondition: []
healthCondition: [],
// 申请人身份
applicantStatus: [{ id: '01', text: '本人' }, { id: '02', text: '监护人' }],
// 出险申请类型
applyType: [
{
id: '01',
text: '疾病残疾',
docus: [
{ id: 1, text: '理赔申请书' },
{ id: 2, text: '保险合同' },
{ id: 3, text: '被保险人身份证明' },
{ id: 4, text: '申请人身份证明,银行账户复印件' },
{ id: 5, text: '理赔授权委托书,受托人身份证明 (仅适用于代办)' },
{ id: 6, text: '诊断证明,门急诊病历,住院病历' },
{ id: 8, text: '病理及各项检查检验报告' },
{ id: 9, text: '伤残鉴定书' }
]
},
{
id: '02',
text: '意外残疾',
docus: [
{ id: 1, text: '理赔申请书' },
{ id: 2, text: '保险合同' },
{ id: 3, text: '被保险人身份证明' },
{ id: 4, text: '申请人身份证明,银行账户复印件' },
{ id: 5, text: '理赔授权委托书,受托人身份证明 (仅适用于代办)' },
{ id: 6, text: '诊断证明,门急诊病历,住院病历' },
{ id: 8, text: '病理及各项检查检验报告' },
{ id: 9, text: '伤残鉴定书' },
{ id: 10, text: '意外事故证明' }
]
},
{
id: '03',
text: '重大疾病',
docus: [
{ id: 1, text: '理赔申请书' },
{ id: 2, text: '保险合同' },
{ id: 3, text: '被保险人身份证明' },
{ id: 4, text: '申请人身份证明,银行账户复印件' },
{ id: 5, text: '理赔授权委托书,受托人身份证明 (仅适用于代办)' },
{ id: 6, text: '诊断证明,门急诊病历,住院病历' },
{ id: 8, text: '病理及各项检查检验报告' },
{ id: 10, text: '意外事故证明' }
]
},
{
id: '04',
text: '特定疾病',
docus: [
{ id: 1, text: '理赔申请书' },
{ id: 2, text: '保险合同' },
{ id: 3, text: '被保险人身份证明' },
{ id: 4, text: '申请人身份证明,银行账户复印件' },
{ id: 5, text: '理赔授权委托书,受托人身份证明 (仅适用于代办)' },
{ id: 6, text: '诊断证明,门急诊病历,住院病历' },
{ id: 8, text: '病理及各项检查检验报告' },
{ id: 10, text: '意外事故证明' }
]
},
{
id: '05',
text: '疾病医疗',
docus: [
{ 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: '06',
text: '意外医疗',
docus: [
{ 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: 10, text: '意外事故证明' }
]
},
{
id: '07',
text: '保费豁免',
docus: [
{ id: 1, text: '理赔申请书' },
{ id: 2, text: '保险合同' },
{ id: 3, text: '被保险人身份证明' },
{ id: 4, text: '申请人身份证明,银行账户复印件' },
{ id: 5, text: '理赔授权委托书,受托人身份证明 (仅适用于代办)' },
{ id: 6, text: '诊断证明,门急诊病历,住院病历' },
{ id: 8, text: '病理及各项检查检验报告' },
{ id: 9, text: '伤残鉴定书' },
{ id: 10, text: '意外事故证明' },
{ id: 11, text: '死亡证明书,户籍注销证明,遗体处理证明' }
]
}
],
// 理赔证件类型
lpIdType: [
{
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: '其他'
}
],
needTodo: [
{
id: '01',
text: '办理理赔申请'
}
],
chargeList: [
{
id: 0,
text: '西药费'
},
{
id: 1,
text: '中成药费'
},
{
id: 2,
text: '中草药费'
},
{
id: 3,
text: '挂号费'
},
{
id: 4,
text: '诊查费'
},
{
id: 5,
text: '检查费'
},
{
id: 6,
text: '化验费'
},
{
id: 6,
text: '化验费'
},
{
id: 7,
text: '放射检查费'
},
{
id: 8,
text: '治疗费'
},
{
id: 9,
text: '特检费'
},
{
id: 10,
text: '麻醉费'
},
{
id: 11,
text: '手术费'
},
{
id: 12,
text: '输血费'
},
{
id: 13,
text: '材料费'
},
{
id: 14,
text: '护理费'
},
{
id: 15,
text: '床位费'
},
{
id: 16,
text: '生育费'
},
{
id: 17,
text: '诊疗费'
},
{
id: 18,
text: '其他'
}
],
//是否购买其他公司保险"
cureList:[
{
id: 1,
text: '是'
},
{
id: 0,
text: '否'
}
]
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,89 @@
<template>
<div>
<div>
<van-notice-bar color="#1989fa" background="#ecf9ff" wrapable :scrollable="false">
<van-icon name="info-o" class="v-middle" />
<span v-if="tabType">个险营销员需如实填写下列各项内容及真实提供简历学历证明身份证等材料如有不实后果自负</span>
<span v-else>
上述健康告知各项若答复请注明号数并详细说明如有诊治请告知原因日期医院名称及诊治结果
</span>
</van-notice-bar>
</div>
<div class="steps_w w325 mh20 mv8 h20 relative ">
<div class="step flex justify-content-s align-items-c h20 absolute top0 left0">
<div class="circle radius50 w12 h12 bg-gray "></div>
<div class="wire w50 h2 bg-gray"></div>
<div class="circle radius50 w12 h12 bg-gray"></div>
<div class="wire w50 h2 bg-gray"></div>
<div class="circle radius50 w12 h12 bg-gray"></div>
<div class="wire w50 h2 bg-gray"></div>
<div class="circle radius50 w12 h12 bg-gray"></div>
<div class="wire w50 h2 bg-gray"></div>
<div class="circle radius50 w12 h12 bg-gray "></div>
<div class="wire w50 h2 bg-gray"></div>
<div class="circle radius50 w12 h12 bg-gray"></div>
</div>
<div class="step flex justify-content-s h20 align-items-c absolute top0 left0">
<div class="flex justify-content-s align-items-c" v-for="(item, i) in active" :key="i">
<div class="wire w41 h2 bg-green-dark" v-if="item != '1'"></div>
<div class="lh20 fs12 white radius50 w20 h20 bg-green-dark">{{ item }}</div>
</div>
<!-- <div class="wire w41 h2 bg-green-dark"></div>
<div class="lh20 fs12 white radius50 w20 h20 bg-green-dark">3</div>
<div class="wire w41 h2 bg-green-dark"></div>
<div class="lh20 fs12 white radius50 w20 h20 bg-green-dark">4</div>
<div class="wire w41 h2 bg-green-dark"></div>
<div class="lh20 fs12 white radius50 w20 h20 bg-green-dark">5</div>
<div class="wire w41 h2 bg-green-dark"></div>
<div class="lh20 fs12 white radius50 w20 h20 bg-green-dark">6</div> -->
</div>
</div>
</div>
</template>
<script>
import { NoticeBar, Icon, Steps, progress, Step } from 'vant'
export default {
name: 'RsTop',
data() {
return {}
},
props: {
active: {
type: Array,
default: function() {
return []
}
},
tabType: {
type: Boolean,
default: true
}
},
components: {
[NoticeBar.name]: NoticeBar,
[Icon.name]: Icon,
[Steps.name]: Steps,
[Step.name]: Step,
[progress.name]: progress
}
}
</script>
<style lang="scss" scoped>
.step {
.circle {
overflow: hidden;
}
.lh20 {
text-align: center;
// line-height: 20px;
}
.wire {
// width: 54px;
// height: 2px;
// background: red;
}
}
</style>

View File

@@ -0,0 +1,183 @@
<template>
<div class="customer">
<div class="search-container bg-white">
<div class="search-content flex relative">
<van-dropdown-menu class="pr5 ml10 mt5" active-color="#e9332e" v-if="isSearch">
<van-dropdown-item v-model="selected" :options="options" />
</van-dropdown-menu>
<van-search
class="search-box flex1"
v-model="searchVal"
show-action
@search="onSearch"
@cancel="onCancel"
>
<div slot="action" v-if="isSearch" @search="onSearch" @click="onSearch">搜索</div>
<div slot="action" v-else @click="onCancel">取消</div>
</van-search>
</div>
<ul class="search-list-container" v-if="list.length">
<li
class="search-list-item flex pt10 pb10 pl15 pr15 relative"
v-for="(item, index) in list"
@click="choose(item,index)"
:key="index"
>
<img
src="@/assets/images/bnf_avatar.png"
width="60"
height="60"
class="radius50 v-middle item-avatar mr20 ml10"
/>
<div class="item-info fl fs12">
<p class="username mb5">{{ item.name }}</p>
<p class="mobile gray mb5">手机号: {{ item.mobile }}</p>
<p class="idno gray">证件号码: {{ item.idno }}</p>
</div>
</li>
</ul>
<div v-if="isShow" class="list flex flex-direction-colunm justify-content-c align-items-c">
<img class="w250" src="@/assets/images/pic_page-non.png" />
<div class="fs17 c-gray-dark mt60">暂无客户信息</div>
<!-- <van-button round @click="goToDetail" size="large" type="danger" class="mt20" style="width:50%;" plain v-no-more-click="1000">理赔申请</van-button> -->
</div>
</div>
</div>
</template>
<script>
import { Search, DropdownMenu, DropdownItem } from 'vant'
import { customerList, getAgentCustomerInfo } from '@/api/ebiz/claims/claims'
export default {
name: 'Customer',
data() {
return {
searchVal: '', // 搜索关键词
list: [
// {
// name: '哈哈哈哈1',
// mobile: '13821329641',
// idno: '120224198902183324'
// },
// {
// name: '哈哈哈哈2',
// mobile: '13000000000',
// idno: '00000000000000000'
// }
],
isSuccess: false,//
selected: 0,
isSearch: true, // 是否显示搜索按钮
isShow: false, //无客户数据时显示
options: [{ text: '客户姓名', value: 0 }, { text: '证件号码', value: 1 }, { text: '手机号', value: 2 }],
from: this.$route.query.from
}
},
components: {
[Search.name]: Search,
[DropdownMenu.name]: DropdownMenu,
[DropdownItem.name]: DropdownItem
},
mounted() {
document.body.style.backgroundColor = '#fff'
},
beforeRouteLeave(to, from, next) {
document.body.style.backgroundColor = ''
next()
},
methods: {
// 搜索
onSearch() {
let data = {
queryParam: this.searchVal,
queryType: '111111',
agentCode: this.selected //0客户姓名1证件号码2手机号
}
customerList(data).then(res => {
if (res.result == 0) {
console.log(res)
this.list = res.content
if (this.list.length) {
this.isShow = false
} else {
this.isShow = true
}
} else {
this.$toast(res.resultMessage)
}
})
this.isSearch = false
},
// 取消
onCancel() {
this.list = []
this.selected = 0
this.searchVal = ''
this.isSearch = true
},
choose(data,index) {
// console.log(data)
// let params = {
// customerNumber: data.customerNumber
// }
let Data = []
Data.push(data)
Data.push(index)
this.$emit('on-choose', Data)
this.list = []
this.selected = 0
this.searchVal = ''
this.isSearch = true
this.$jump({
flag: 'navigation',
extra: {
title: '报案申请',
hiddenRight: '1'
}
})
// getAgentCustomerInfo(params).then(res => {
// console.log(res, '详情')
// if (res.result == '0') {
// this.isSuccess = true
// let content = res.content
// this.$emit('on-choose', content)
// }
// })
}
}
}
</script>
<style lang="scss" scoped>
.search-container {
.search-content:not(:last-child)::after {
position: absolute;
box-sizing: border-box;
content: ' ';
pointer-events: none;
right: 0;
bottom: 0;
left: 4.26667vw;
border-bottom: 1px solid #dadada;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
}
.search-list-item:not(:last-child)::after {
position: absolute;
box-sizing: border-box;
content: ' ';
pointer-events: none;
right: 0;
bottom: 0;
left: 4.26667vw;
border-bottom: 1px solid #dadada;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
}
// /deep/[class*='van-hairline']::after {
// border: none;
// }
}
</style>

View File

@@ -0,0 +1,167 @@
<template>
<div id="customer-picker">
<van-field
:label="label"
:value="name"
@input="onChange"
:placeholder="placeholder"
:required="required"
:right-icon="$assetsUrl + 'images/avatar.png'"
@click-right-icon="chooseCustomer"
:readonly="readonly"
/>
<van-popup v-model="parentShowPicker" position="bottom">
<customer @on-choose="choose" :code="code" :name="name" :life="life" :health="health"></customer>
</van-popup>
</div>
</template>
<script>
import { Field, Popup, Icon, Sticky } from 'vant'
import Customer from './Customer'
export default {
name: 'CustomerPicker',
props: {
label: {
type: String,
default: '11'
},
value: {
type: String,
default: ''
},
chooseName: {
type: String,
default: ''
},
placeholder: {
type: String,
default: '请选择'
},
required: {
type: Boolean,
default: false
},
data: {
type: Array,
default: () => {}
},
//选项对象中,文字对应的 key
valueKey: {
type: String,
default: 'text'
},
keyId: {},
lifeGrade: {
type: String,
default: ''
},
healthGrade: {
type: String,
default: ''
},
parentShowPicker: {
type: Boolean,
default: false
},
readonly: {
type: Boolean,
default: false
},
disabled: {
type: Boolean,
default: false
}
},
data() {
return {
name: '',
code: '',
life: '',
health: '',
showPicker: false
}
},
components: {
[Field.name]: Field,
[Popup.name]: Popup,
[Customer.name]: Customer,
[Icon.name]: Icon,
[Sticky.name]: Sticky
},
created() {
this.init()
},
mounted() {
this.showPicker = this.parentShowPicker
},
watch: {
value() {
this.name = this.value
}
},
methods: {
/**
* 初始化
*/
init() {
this.name = this.value
},
onChange(value) {
this.$emit('nameChange', value)
},
choose(data) {
this.name = data.customerName
this.$emit('on-choose', data)
},
chooseCustomer() {
if (this.disabled) {
return
}
this.showPicker = true
this.$emit('on-click')
},
cancel() {
this.showPicker = false
this.$emit('cancel', '')
}
}
}
</script>
<style lang="scss" scoped>
#customer-picker {
.van-popup--bottom {
height: 100%;
}
.van-popup {
background: #f5f5f5;
}
/deep/.van-cell:not(:last-child)::after {
position: absolute;
box-sizing: border-box;
content: ' ';
pointer-events: none;
right: 0;
bottom: 0;
left: 4.26667vw;
border-bottom: 1px solid transparent;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
}
}
#customer-picker:not(:last-child)::after {
position: absolute;
z-index: 99;
box-sizing: border-box;
content: ' ';
pointer-events: none;
right: 0;
// bottom: 0;
// top: 0;
left: 4.26667vw;
border-bottom: 1px solid #dadada;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
}
</style>

View File

@@ -1,6 +1,6 @@
import Common from '@/assets/js/common'
import DataDictionary from '@/assets/js/utils/data-dictionary'
import Hospital from '@/assets/js/utils/hospital'
/*
* 把其他filter放到index.js里面一起引入
*/
@@ -110,6 +110,17 @@ export default {
})
return text
},
// 数据字典 id 转 text
HospitalIdToText(id, type) {
let text = ''
Hospital[type].some(item => {
if (item.id == id) {
text = item.text
}
})
return text
},
/**
* 处理千分位并保留两位小数
* @param {[type]} moneyStr 钱

186
src/router/ebiz/claims.js Normal file
View File

@@ -0,0 +1,186 @@
//理赔 定义相关组件
const ProblemList = () => import('@/views/ebiz/claims/ProblemList')
const FillImage = () => import('@/views/ebiz/claims/FillImage')
const success = () => import('@/views/ebiz/claims/Success')
const fail = () => import('@/views/ebiz/claims/Fail')
const claimsList = () => import('@/views/ebiz/claims/ClaimsList')
const searchCustomer = () => import('@/views/ebiz/claims/SearchCustomer')
const searchHospital = () => import('@/views/ebiz/claims/SearchHospital')
const insuredInfo = () => import('@/views/ebiz/claims/InsuredInfo')
const reportInfo = () => import('@/views/ebiz/claims/ReportInfo')
const imageData = () => import('@/views/ebiz/claims/ImageData')
const signatureConfirmation = () => import('@/views/ebiz/claims/SignatureConfirmation')
const claimsSignature = () => import('@/views/ebiz/claims/ClaimsSignature')
const claimsDetail = () => import('@/views/ebiz/claims/ClaimsDetail')
const accident = () => import('@/views/ebiz/claims/Accident')
const applyInfo = () => import('@/views/ebiz/claims/ApplyInfo')
const reportApply = () => import('@/views/ebiz/claims/ReportApply')
const reportSuccess = () => import('@/views/ebiz/claims/ReportSuccess')
const reportFail = () => import('@/views/ebiz/claims/ReportFail')
export default [
{
path: '/claims/ProblemList',
name: 'ProblemList',
component: ProblemList,
meta: {
title: '问题件列表',
index: 1
}
},
{
path: '/claims/FillImage',
name: 'FillImage',
component: FillImage,
meta: {
title: '补充影像资料',
index: 1
}
},
{
path: '/claims/success',
name: 'success',
component: success,
meta: {
title: '提交成功',
index: 1
}
},
{
path: '/claims/fail',
name: 'fail',
component: fail,
meta: {
title: '提交失败',
index: 1
}
},
{
path: '/claims/claimsList',
name: 'claimsList',
component: claimsList,
meta: {
title: '理赔进度查询',
index: 1
}
},
{
path: '/claims/searchCustomer',
name: 'searchCustomer',
component: searchCustomer,
meta: {
title: '搜索客户',
index: 1
}
},
{
path: '/claims/searchHospital',
name: 'searchHospital',
component: searchHospital,
meta: {
title: '搜索医院',
index: 1
}
},
{
path: '/claims/insuredInfo',
name: 'insuredInfo',
component: insuredInfo,
meta: {
title: '被保人信息',
index: 1
}
},
{
path: '/claims/reportInfo',
name: 'reportInfo',
component: reportInfo,
meta: {
title: '报案信息',
index: 1
}
},
{
path: '/claims/imageData',
name: 'imageData',
component: imageData,
meta: {
title: '上传理赔影像资料',
index: 1
}
},
{
path: '/claims/signatureConfirmation',
name: 'signatureConfirmation',
component: signatureConfirmation,
meta: {
title: '签字确认',
index: 1
}
},
{
path: '/claims/claimsSignature',
name: 'claimsSignature',
component: claimsSignature,
meta: {
title: '签字确认',
index: 1
}
},
{
path: '/claims/claimsDetail',
name: 'claimsDetail',
component: claimsDetail,
meta: {
title: '理赔详情',
index: 2
}
},
{
path: '/claims/accident',
name: 'accident',
component: accident,
meta: {
title: '出险信息',
index: 3
}
},
{
path: '/claims/applyInfo',
name: 'applyInfo',
component: applyInfo,
meta: {
title: '申请信息',
index: 4
}
},
{
path: '/claims/reportApply',
name: 'reportApply',
component: reportApply,
meta: {
title: '报案申请',
index: 1
}
},
{
path: '/claims/reportSuccess',
name: 'reportSuccess',
component: reportSuccess,
meta: {
title: '报案成功',
index: 1
}
},
{
path: '/claims/reportFail',
name: 'reportFail',
component: reportFail,
meta: {
title: '报案失败',
index: 1
}
},
]

View File

@@ -6,4 +6,5 @@ import my from './my'
import serve from './serve'
import common from './common'
import product from './product'
export default [...proposal, ...sale, ...customer, ...my, ...serve, ...common, ...product] //根据需要进行删减
import claims from './claims'
export default [...proposal, ...sale, ...customer, ...my, ...serve, ...common, ...product, ...claims] //根据需要进行删减

View File

@@ -0,0 +1,439 @@
<template>
<div class="accident-container">
<!-- 出险概况 -->
<p class="h10 bg-gray-base"></p>
<van-cell-group>
<p style="border-bottom: 1px solid #ebedf0" class="fs15 fwb pl10 pv12">出险概况</p>
<select-radio
:radios="sexRadio"
label="出险原因"
name="出险原因"
v-validate="'required'"
required
:value.sync="cause"
></select-radio>
<van-row type="flex" class="van-cell van-field pv7 ph8">
<van-col class="red posit">*</van-col>
<van-col span="11 ml">申请类型</van-col>
<van-row>
<van-col
class="van-radio__label pb10"
v-for="(item, index) in typeRadio"
:key="index"
span="11"
>
<van-button
round
plain
size="small"
type="info"
class="ph15 van-button--danger"
@click="toActive(item.value, $event)"
>{{ item.label }}</van-button>
</van-col>
</van-row>
</van-row>
<FieldDatePicter
required
v-validate="'required'"
label="出险时间"
name="出险时间"
:value.sync="userInfo.accidentDate"
type="date"
:flag="true"
ref="accidentDate"
@confirm="onDateConfirm($event)"
></FieldDatePicter>
<van-field
v-model="areaName"
label="联系地址"
name="联系地址"
right-icon="arrow"
required
readonly
v-validate="'required'"
placeholder="请选择地址"
@click="areaShow = true"
/>
<van-field
v-model="userInfo.accidentAddress"
required
center
label="详细地址"
clearable
placeholder="请输入详细地址"
/>
<van-field
v-model="userInfo.caseDesc"
rows="1"
autosize
label="事故经过"
name="事故经过"
type="textarea"
required
v-validate="'required'"
placeholder="请输入事故经过"
clearable
maxlength="200"
/>
<van-field
:value="userInfo.insuredHospital | HospitalIdToText('hospitalList')"
label="治疗医院"
name="治疗医院"
right-icon="arrow"
required
readonly
v-validate="'required'"
placeholder="请选择地址"
@click="toSelect('1')"
/>
<van-field
:value="userInfo.isInsureOther | idToText('cureList')"
label="是否购买其他公司保险"
name="是否购买其他公司保险"
right-icon="arrow"
required
readonly
v-validate="'required'"
placeholder="请选择"
@click="toSelect('2')"
/>
<van-field
v-model="userInfo.otherCompany"
center
label="保险公司名称"
clearable
placeholder="请输入保险公司名称"
/>
</van-cell-group>
<!-- 委托信息 -->
<van-cell-group class="pb60">
<p style="border-bottom: 1px solid #ebedf0" class="fs15 fwb pl10 pv12">委托信息</p>
<van-field :value="userInfo.mandatorName" readonly label="受托人姓名" />
<van-field :value="idType" readonly label="证件类型" />
<van-field :value="userInfo.mandatorCertiCode" readonly label="证件号码" />
<van-field :value="userInfo.agentItem | idToText('needTodo')" readonly label="代办事项" />
<van-field :value="userInfo.days" readonly label="委托日期(自申请日期起算)" center clearable placeholder="请输入详细地址"/>
</van-cell-group>
<!-- 地区选择 -->
<van-popup v-model="areaShow" position="bottom">
<van-area
:area-list="areaList"
value="110101"
@confirm="sureArea($event, '1')"
@cancel="areaShow = false"
/>
</van-popup>
<!-- 字段选择 -->
<van-popup v-model="popupShow" position="bottom">
<van-picker show-toolbar :columns="columns" @confirm="onConfirm" @cancel="popupShow = false" />
</van-popup>
<div class="bottom-btn bg-white">
<van-button type="danger" size="large" @click="nextStep" v-no-more-click="1000">下一步</van-button>
</div>
</div>
</template>
<script>
import { Field, CellGroup, Checkbox, Popup, Picker, Area, RadioGroup, Radio, Row, Col } from 'vant'
import SelectRadio from '@/components/ebiz/SelectRadio'
import FieldDatePicter from '@/components/ebiz/FieldDatePicter'
import beforeDate from '@/assets/js/utils/getBeforeDate.js'
import areaList from '@/assets/js/utils/area'
import Hospital from '@/assets/js/utils/hospital'
import getAreaName from '@/assets/js/utils/get-area-name'
import DataDictionary from '@/assets/js/utils/data-dictionary.js'
import { apply, query } from '@/api/ebiz/claims/claims'
export default {
name: 'accident',
components: {
[SelectRadio.name]: SelectRadio,
[FieldDatePicter.name]: FieldDatePicter,
[Field.name]: Field,
[CellGroup.name]: CellGroup,
[Checkbox.name]: Checkbox,
[Popup.name]: Popup,
[Picker.name]: Picker,
[Area.name]: Area,
[RadioGroup.name]: RadioGroup,
[Radio.name]: Radio,
[Row.name]: Row,
[Col.name]: Col
},
data() {
return {
sexRadio: [
{
label: '意外',
value: '0'
},
{
label: '疾病',
value: '1'
}
],
typeRadio: [
{
label: '医疗费用补偿',
value: '01'
},
{
label: '住院日额津贴',
value: '02'
},
{
label: '重大疾病',
value: '03'
},
{
label: '身故',
value: '04'
},
{
label: '残疾',
value: '05'
},
{
label: '全残',
value: '06'
},
{
label: '中症',
value: '07'
},
{
label: '轻症',
value: '08'
},
{
label: '特定疾病',
value: '09'
}
],
arr: [], //后台获取反显的申请类型编码
maxDate: beforeDate.getBeforeYear(16),
popupShow: false,
pickerType: '',
valueKey: '',
columns: [],
applyType: [],
cause: '0', //通过该值判断出险原因
from: this.$route.query.from, //页面跳转来源
slaveStatus: 'claimApplyRisk', //进行到的状态
insuranceId: '', //出险信息主键id
idType: '身份证',
applyName: [],
areaName: '', //联系地址
areaShow: false, //显示隐藏地址选择
areaList: areaList, //省市区数据
userInfo: {
accidentCause: '', //出险原因
applyType: '', //申请类型
accidentDate: '', //出险时间
accCounty: '', //新增出险区/县
accCity: '', //新增出险市
accProvince: '', //新增出险省
insuredHospital: '', //新增治疗医院
isInsureOther: null, //新增是否购买过其他公司保险
otherCompany: '', //新增其他公司保险名称(非必填)
accidentAddress: '', //出险地点
caseDesc: '', //事故经过
mandatorName: '王某', //受托人姓名
mandatorCertiType: '0', //证件类型
mandatorCertiCode: '410305199508111533', //证件号码
agentItem: '01', //代办事项
days:'23',//新增委托天数
businessNo: '', //业务号码
id: localStorage.insuranceId || '' //用于区分新增还是二次提交
}
}
},
mounted() {
//this.ReturnShow()
document.body.style.backgroundColor = '#fff'
this.userInfo.businessNo = window.localStorage.getItem('businessNo')
let userModel = JSON.parse(window.localStorage.getItem('userModel'))
this.userInfo.mandatorName = userModel.name
this.idType = userModel.idType
this.userInfo.mandatorCertiCode = userModel.idno
//受托人证件类型
switch (this.idType) {
case '身份证':
this.userInfo.mandatorCertiType = '0'
break
case '护照':
this.userInfo.mandatorCertiType = '4'
break
case '台胞证':
this.userInfo.mandatorCertiType = '8'
break
case '回乡证':
this.userInfo.mandatorCertiType = '5'
break
case '其他':
this.userInfo.mandatorCertiType = '9'
break
}
},
beforeRouteLeave(to, from, next) {
document.body.style.backgroundColor = ''
next()
},
methods: {
// //点击下一步再次返回页面数据反显
// ReturnShow() {
// console.log(888888)
// if (localStorage.insuranceId !== undefined && localStorage.insuranceId !== null && localStorage.insuranceId !== '') {
// this.insuranceId = localStorage.insuranceId
// let data = {
// slaveStatus: this.slaveStatus,
// id: this.insuranceId
// }
// query(data).then(res => {
// // console.log(res.content.claimApplyRiskReqDTO.applyType)
// // console.log(this.userInfo.accidentCause)
// if (res.result == 0) {
// this.userInfo = res.content.claimApplyRiskReqDTO
// //保存后台返回的申请类型字符串
// let ClassStr = res.content.claimApplyRiskReqDTO.applyType
// //将字符串转换成数组
// this.arr = ClassStr.split(',')
// switch (this.userInfo.accidentCause) {
// case '1':
// this.cause = '0'
// break
// case '2':
// this.cause = '1'
// break
// }
// } else {
// this.$toast(res.resultMessage)
// }
// })
// }
// },
//出险日期
onDateConfirm(val) {
//如果录入日期晚于当前日期
if (Date.parse(val) > Date.parse(new Date())) {
this.userInfo.accidentDate = ''
this.$refs.accidentDate.date = ''
return this.$toast('出险日期不能晚于当前日期')
}
},
// 弹框选择
toSelect(pickerType, valueKey) {
;[this.popupShow, this.pickerType] = [true, pickerType]
if (valueKey) this.valueKey = valueKey
if (pickerType == '1') {
this.columns = Hospital.hospitalList
} else if (pickerType == '2') {
this.columns = DataDictionary.cureList
}
},
// 确认选择字段
onConfirm(value) {
this.popupShow = false
if (this.pickerType == '1') {
this.userInfo.insuredHospital = value.id
} else if (this.pickerType == '2') {
this.userInfo.isInsureOther = value.id
}
},
//点击申请类型(多选)
toActive(value, e) {
if (e.target.classList.contains('active')) {
e.target.classList.remove('active')
this.applyType.pop(value)
} else {
e.target.classList.add('active')
this.applyType.push(value)
}
this.userInfo.applyType = this.applyType.join(',')
},
//区域选择
sureArea(area, type) {
this.areaName = getAreaName(area)
;[this.userInfo.accProvince, this.userInfo.accCity, this.userInfo.accCounty] = [area[0].code, area[1].code, area[2].code]
this.areaShow = false
},
nextStep() {
console.log(this.userInfo)
this.$validator.validate().then(valid => {
if (true === valid) {
switch (this.cause) {
case '0':
this.userInfo.accidentCause = '1'
break
case '1':
this.userInfo.accidentCause = '2'
break
}
this.$toast.loading({
duration: 0, // 持续展示 toast
forbidClick: true, // 禁用背景点击
loadingType: 'spinner',
message: '加载中……'
})
let data = {
userModel: {
id: '123456',
name: '王某',
mobile: '13592585978'
},
slaveStatus: this.slaveStatus,
claimApplyRiskReqDTO: this.userInfo
}
apply(data).then(res => {
if (res.result == 0) {
console.log(res)
this.$toast.clear()
localStorage.setItem('accidentCause', this.cause)
localStorage.setItem('applyType', this.userInfo.applyType)
localStorage.setItem('insuranceId', res.content.insuranceId)
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/claims/ApplyInfo?from=Accident',
forbidSwipeBack: '1'
},
routerInfo: {
path: '/claims/ApplyInfo?from=Accident'
}
})
} else {
this.$toast(res.resultMessage)
}
})
} else {
this.$toast(this.$validator.errors.all()[0])
}
})
}
}
}
</script>
<style scoped>
.posit {
position: absolute;
left: 8px;
}
.active {
background: #e9332e !important;
border: 1px solid #e9332e !important;
color: #ffffff !important;
}
.ml {
margin-left: 9px;
}
</style>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,68 @@
<template>
<div class="claims-detail-container">
<van-cell-group>
<van-cell title="赔案号" :value="list.claimNo" />
<van-cell title="申请人" :value="list.applyerName" />
<van-cell title="被保险人" :value="list.insuredName" />
<van-cell title="出险时间" :value="list.accidentTime" />
<van-cell title="支付金额(元)" :value="list.payMoney | moneyFormat" />
<van-cell title="开户银行">
<div class="flex align-items-c justify-content-fe">
<img :src="srcImg" class="imgItem mr10" />
<span>{{ list.applyerBankName }}</span>
</div>
</van-cell>
<van-cell title="领款账户" :value="list.applyerBankAccountNo" />
</van-cell-group>
</div>
</template>
<script>
import { Cell, CellGroup, Icon } from 'vant'
import { progressDetail } from '@/api/ebiz/claims/claims'
export default {
name: 'claimsDetail',
components: {
[Cell.name]: Cell,
[CellGroup.name]: CellGroup,
[Icon.name]: Icon
},
data() {
return {
srcImg: '', // 银行logo
list: {}
}
},
created() {
// 获取理赔进度详情
this.getClaimsetail()
},
filters: {
toReplace(value) {
//value.replace(*, 'W3School')
}
},
methods: {
getClaimsetail() {
let that = this
let data = {
caseStatus: 'claimProgress',
claimNo: localStorage.getItem('claimNo')
}
progressDetail(data).then(res => {
if (res.result == 0) {
that.list = res.content
that.srcImg = that.$assetsUrl + `images/bank/bank_${that.list.applyerBankCode}.png`
}
})
}
}
}
</script>
<style>
.green {
color: #07c160 !important;
}
</style>

View File

@@ -0,0 +1,324 @@
<template>
<div class="sale-list-container pb50">
<van-sticky>
<van-tabs :line-width="45" v-model="active" @change="tabChange" sticky>
<van-tab name="progressReport" title="已报案"></van-tab>
<van-tab name="applying" title="待申请"></van-tab>
<van-tab name="claimProgress" title="查进度"></van-tab>
</van-tabs>
</van-sticky>
<!-- <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 v-if="claimsList.length > 0">
<div v-for="(item, index) in claimsList" :key="index">
<div class="fs12 mt20 mb5 text-center" v-if="active == 'progressReport'">报案号:{{ item.claimNo }}</div>
<div class="fs12 mt20 mb5 text-center" v-if="active == 'applying'">申请号:{{ item.businessNo }}</div>
<div class="fs12 mt20 mb5 text-center" v-if="active == 'claimProgress'">赔案号:{{ item.claimNo }}</div>
<div class="bg-white pv15 pr15 pl10 m15">
<div class="flex justify-content-s align-items-c">
<div class="mb10">
<div class="w60 inline-b">
<van-tag plain color="#DD9C56">被保</van-tag>
</div>
<span class="fs14 c-gray-dark ml20">{{ item.insuredName }}</span>
</div>
</div>
<div class="pt15" style="border-top:1px solid #dadada">
<div class="mb10">
<div class="w60 inline-b">
<van-tag plain color="#4fc6b3">出险时间</van-tag>
</div>
<span class="fs14 c-gray-dark ml20">{{ item.accidentDate }}</span>
</div>
<div>
<div class="w60 inline-b">
<van-tag plain color="#5ca7de">案件状态</van-tag>
</div>
<span class="fs14 c-gray-dark ml20" v-if="active == 'progressReport'">
<label v-if="item.caseStatus">报案成功</label>
<label v-else>报案失败</label>
</span>
<span class="fs14 c-gray-dark ml20" v-if="active == 'applying'">{{ item.caseStatus | statusFormat }}</span>
</div>
</div>
<van-steps :active="actives[index]" active-color="#4FC6B3" v-if="active == 'claimProgress'">
<van-step>已申请</van-step>
<van-step>已立案</van-step>
<van-step>已结案</van-step>
<van-step>已支付</van-step>
</van-steps>
<div class="mt10 flex justify-content-fe">
<van-button v-if="active == 'progressReport'" round plain size="small" class="mr5" type="danger" @click="goApply">理赔申请</van-button>
<van-button v-if="active == 'applying'" round size="small" class="mr5" type="danger" @click="goEdit(item.nextSlaveStatus, item.businessNo)"
>编辑</van-button
>
<van-button v-if="active == 'applying'" round plain size="small" class="mr5" type="danger" @click.stop="del(item.businessNo)">删除</van-button>
<van-button
v-if="active == 'claimProgress' && (item.caseStatus == '2' || item.caseStatus == '3')"
round
plain
size="small"
class="mr5"
type="danger"
@click="goDetail(item.claimNo)"
>理赔详情</van-button
>
</div>
</div>
</div>
</div>
</div>
<div v-else class="text-center">
<img class="mt40" src="@/assets/images/pic_page-non.png" />
<div class="fs17 mt40" v-if="active == 'progressReport'">暂无案件信息</div>
<div class="fs17 mt40" v-if="active == 'applying'">暂无申请信息</div>
<div class="fs17 mt40" v-if="active == 'claimProgress'">暂无赔案信息</div>
</div>
<!-- </van-list> -->
</div>
</template>
<script>
import { List, Tab, Tabs, Tag, Row, Col, Step, Steps, Dialog, Sticky } from 'vant'
import { progress } from '@/api/ebiz/claims/claims'
import axios from 'axios'
import index from '@/config/index'
export default {
name: 'claimsList',
components: {
[List.name]: List,
[Tab.name]: Tab,
[Tabs.name]: Tabs,
[Tag.name]: Tag,
[Row.name]: Row,
[Col.name]: Col,
[Step.name]: Step,
[Steps.name]: Steps,
[Sticky.name]: Sticky
},
data() {
return {
active: 'progressReport', //applying 待申请 claimProgress查进度
claimsList: [],
actives: [], //查进度状态
loading: false,
finished: false,
total: '', //总页数
currentPage: 1, //当前页数
error: false,
finishedText: '没有更多了',
pageSize: 5, //每页数据条数
isSuccess: false
}
},
mounted() {
this.getOrderList()
},
methods: {
//分页用
// loadMore() {
// let pageInfo = {
// pageNum: this.currentPage,
// pageSize: this.pageSize,
// progressStatus: this.active
// }
// this.getOrderList(pageInfo)
// },
//初始化列表
getOrderList() {
let data = {
progressStatus: this.active
}
this.$toast.loading({
duration: 0, // 持续展示 toast
forbidClick: true, // 禁用背景点击
loadingType: 'spinner',
message: '加载中……'
})
progress(data).then(res => {
this.$toast.clear()
if (res.result == '0') {
this.isSuccess = true
if (res.content) {
this.claimsList = res.content.claimProgressInfos
if (this.active == 'claimProgress') {
this.claimsList.map(item => {
switch (item.caseStatus) {
case '40':
item.caseStatus = 0
break
case '50':
item.caseStatus = 1
break
case '60':
item.caseStatus = 2
break
case 'Y':
item.caseStatus = 3
break
}
this.actives.push(item.caseStatus)
})
}
}
if (this.claimsList.length == 0) {
this.isSuccess = false
}
} else {
// this.finished = true
// this.loading = false
// this.finishedText = res.resultMessage
}
})
},
tabChange(name) {
this.currentPage = 1
this.active = name
this.claimsList = []
this.getOrderList()
//;[this.loading, this.finished] = [true, false]
// this.finishedText = '正在加载...'
//this.loadMore()
},
del(businessNo) {
Dialog.confirm({
className: 'dialog-delete',
title: '提示',
message: '是否确认删除',
cancelButtonColor: '#4FC6B3',
confirmButtonColor: '#FFFFFF'
}).then(() => {
axios
.get(index.apiDomain + `/claim/claimApply/delete`, {
params: {
businessNo: businessNo
},
headers: {
token: localStorage.token
}
})
.then(res => {
let data = {
progressStatus: 'applying'
}
progress(data).then(res => {
if (res.result == 0) {
this.getOrderList()
} else {
// this.$toast(res.resultMessage)
}
})
})
})
},
goApply() {
localStorage.removeItem('claimId')
localStorage.removeItem('insuranceId')
localStorage.removeItem('applyId')
let that = this
that.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/claims/InsuredInfo?edit=1',
forbidSwipeBack: '1'
},
routerInfo: {
path: '/claims/InsuredInfo?edit=1'
}
})
},
goEdit(status, businessNo) {
let that = this
localStorage.removeItem('claimId')
localStorage.removeItem('insuranceId')
localStorage.removeItem('applyId')
localStorage.setItem('businessNo', businessNo)
let url = ''
switch (status) {
case '20': //填写被保人页
url = '/claims/InsuredInfo?edit=1'
break
case '21': //填写出险信息页
url = '/claims/Accident?edit=1'
break
case '22': //填写理赔申请信息
url = '/claims/ApplyInfo?edit=1'
break
case '23': //上传影像页
url = '/claims/ImageData?edit=1'
break
case '24': //签名页
url = '/claims/SignatureConfirmation?edit=1'
break
case '25':
url = '/claims/SignatureConfirmation?edit=1'
break
}
that.$jump({
flag: 'h5',
extra: {
url: location.origin + `/#${url}`,
forbidSwipeBack: '1'
},
routerInfo: { path: url }
})
},
goDetail(claimNo) {
localStorage.setItem('claimNo', claimNo)
let that = this
that.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/claims/claimsDetail',
forbidSwipeBack: '1'
},
routerInfo: {
path: '/claims/claimsDetail'
}
})
}
},
filters: {
statusFormat: function(status) {
let text
switch (status) {
case '2':
text = '理赔申请未提交'
break
case '3':
text = '理赔申请已提交'
break
case '40':
text = '已申请'
break
case '50':
text = '已立案'
break
case '60':
text = '已结案'
break
case 'Y':
text = '已支付'
break
}
return text
}
}
}
</script>
<style lang="scss" scoped></style>

View File

@@ -0,0 +1,336 @@
<template>
<div>
<div class="pb60">
<van-notice-bar :scrollable="false" v-if="!Time" class="notice">{{ `提示阅读时长需在${time}秒以上` }}</van-notice-bar>
<iframe :src="src + pdfUrl" class="iframe"></iframe>
<van-radio-group v-model="radio" class="pb10 pt20 pl30">
<van-radio name="1" @click="click" class="fs14">
本人确认已阅读
<span>鼎诚人寿理赔申请书</span>
</van-radio>
</van-radio-group>
<div class="pt10 pl30 flex align-items-c">
<span class="mr10">受托人签名 :</span>
<div v-if="signVal == '4'">
<van-button type="danger" size="small" @click="sign(0)" :disabled="isDisable" v-no-more-click="1000">
{{ list.mandatorSignState == '0' ? '签名' : '已签名' }}</van-button
>
<img class="img pl15" :src="base64" alt />
</div>
</div>
<div class="pt10 pl30 flex align-items-c">
<span class="mr10">申请人签名 :</span>
<div v-if="signVal == '3'">
<van-button type="danger" size="small" @click="sign(1)" v-no-more-click="1000" :disabled="isDisableInsured">{{
list.applyerSignState == '0' ? '签名' : '已签名'
}}</van-button>
<img class="img pl15" :src="base64" alt />
</div>
</div>
</div>
<div class="bottom-btn bg-white">
<van-button type="danger" size="large" @click="next" :disabled="isDisabledComplite" v-no-more-click="1000">完成</van-button>
</div>
</div>
</template>
<script>
import { RadioGroup, Radio, Dialog, NoticeBar } from 'vant'
import config from '@/config'
import { progressDetail, apply } from '@/api/ebiz/claims/claims'
export default {
data() {
let isWeixin = this.$utils.device().isWeixin //判断环境
return {
pdfUrl: '',
src: location.origin + '/pdfjs/web/viewer.html?file=',
radio: '',
// 是否在微信
isWeixin,
signVal: '',
// 定时器时间
time: '10',
// 定时器名称
timer: null,
isOver: false,
// 判断验证码是否开始倒计时
Time: false,
// 受托人按钮是否可以点击
isDisable: true,
// 申请人按钮是否可以点击
isDisableInsured: true,
// 是否可以点击
isDisabledComplite: true,
// 签名信息
list: {},
//加密包
baseEncryp: '',
//信息回显
base64: ''
}
},
components: {
[RadioGroup.name]: RadioGroup,
[Radio.name]: Radio,
[Dialog.name]: Dialog,
[NoticeBar.name]: NoticeBar
},
mounted() {
this.init()
document.body.style.backgroundColor = '#fff'
this.signVal = localStorage.getItem('sign-val')
},
beforeRouteLeave(to, from, next) {
document.body.style.backgroundColor = ''
next()
},
methods: {
// 单选框
click() {
let that = this
if (that.isOver == false) {
Dialog.confirm({
title: '提示',
message: '该内容涉及您的重大权益,请您仔细阅读',
showCancelButton: false
}).then(() => {
that.radio = ''
})
}
},
// 初始化
timeOut() {
let timer = setInterval(() => {
this.time--
if (this.time <= 0) {
this.time = 0
clearInterval(timer)
this.Time = true
this.isOver = true
}
}, 1000)
},
// 初始化
init() {
// 在微信
if (this.isWeixin) {
let imgBase64Data = sessionStorage.getItem('imgBase64Data')
let wxSigned = sessionStorage.getItem('wxSigned')
let signInfo = JSON.parse(localStorage.getItem('signInfo'))
console.log('imgBase64Data:imgBase64Data ' + imgBase64Data)
console.log('wxSigned: ' + wxSigned)
if (wxSigned) {
console.log('第二次进入理赔申请!')
this.progressDetail().then(() => {
this.Time = true
this.isOver = true
this.radio = '1'
this.baseEncryp = imgBase64Data //加密包
this.base64 = sessionStorage.getItem('base64') //国片回显
this.isDisabledComplite = false
console.log('signInfo.status:' + signInfo.status)
if (signInfo.status == '3') {
console.log('``````````````````')
// this.$set(this.list, 'applyerSignState', '1')
// console.log('list.applyerSignState: ' + this.list.applyerSignState)
this.isDisabledComplite = false
}
})
} else {
console.log('第一次进入理赔申请')
this.timeOut()
this.progressDetail()
}
} else {
this.progressDetail()
this.timeOut()
}
},
progressDetail() {
// 获取签名详情
let data = {
caseStatus: 'applying',
businessNo: localStorage.businessNo
}
return new Promise((resolve, reject) => {
progressDetail(data).then(res => {
if (res.result == 0) {
let that = this
that.list = res.content
that.pdfUrl = encodeURIComponent(config.imgDomain + `/returnDirectStream?imgPath=${that.list.rgssUrl}`)
resolve('success')
}
})
})
},
sign(val) {
//0 受托人 1申请人
let that = this
that.$toast.loading({
duration: 0, // 持续展示 toast
forbidClick: true, // 禁用背景点击
loadingType: 'spinner',
message: '加载中……'
})
if (val == 0) {
EWebBridge.webCallAppInJs('ca_sign', {
//身份证号码
number: that.list.mandatorCertiCode,
//姓名
name: that.list.mandatorName,
keyword: '受托人签名',
pageNo: '1',
index: '1',
offset: '20',
pos: '3'
}).then(data => {
this.$toast.clear()
if (JSON.parse(data).state == '1') {
that.list.mandatorSignState = '1'
that.isDisabledComplite = false
that.baseEncryp = decodeURI(JSON.parse(data).sign)
that.base64 = that.base64 = 'data:image/png;base64,' + JSON.parse(data).base64
}
})
} else {
if (this.isWeixin) {
this.toAirSign('3', '申请人签名', '20', '4')
} else {
EWebBridge.webCallAppInJs('ca_sign', {
//身份证号码
number: that.list.applyerCertiCode,
//姓名
name: that.list.applyerName,
keyword: '申请人签名',
pageNo: '1',
index: '1',
offset: '20',
pos: '3'
}).then(data => {
this.$toast.clear()
if (JSON.parse(data).state == '1') {
that.list.applyerSignState = '1'
that.isDisabledComplite = false
that.baseEncryp = decodeURI(JSON.parse(data).sign)
that.base64 = that.base64 = 'data:image/png;base64,' + JSON.parse(data).base64
}
})
}
}
},
// 跳往空签
toAirSign(status, keyword, offset, originStatus) {
localStorage.setItem(
'signInfo',
JSON.stringify({
originStatus: originStatus,
idNo: this.list.applyerCertiCode,
name: this.list.applyerName,
type: this.list.applyerCertiType,
keyword: keyword,
status: status,
offset: offset,
originUrl: location.href
})
)
window.location.href = this.$mainUrl + '/sign/index.html'
},
next() {
let that = this
this.$toast.loading({
duration: 0, // 持续展示 toast
forbidClick: true, // 禁用背景点击
loadingType: 'spinner',
message: '加载中……'
})
let data = {
slaveStatus: 'claimApplySign',
claimApplySignReqDTO: {
businessNo: localStorage.businessNo,
name: that.list.name,
peopleType: that.signVal,
rgssUrl: that.list.rgssUrl,
imgState: '',
signState: '1',
baseEncryp: that.baseEncryp
}
}
apply(data).then(res => {
if (res.result == '0') {
this.$toast.clear()
if (this.isWeixin) {
localStorage.removeItem('signInfo')
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/claims/signatureConfirmation',
forbidSwipeBack: '1',
pullRefresh: '1',
backToFirst: '1'
},
routerInfo: {
path:
'/claims/signatureConfirmation?token=' +
localStorage.token +
'&businessNo=' +
localStorage.getItem('businessNo') +
'&signInvalid=' +
sessionStorage.getItem('signInvalid') +
'&airSign=1'
}
})
} else {
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/claims/signatureConfirmation',
pullRefresh: '1',
backToFirst: '1',
refresh: '1'
},
routerInfo: {
path: '/claims/signatureConfirmation'
}
})
}
} else {
that.$toast(res.resultMessage)
}
})
}
},
computed: {
listenChange() {
const { isOver, radio } = this
return { isOver, radio }
}
},
watch: {
listenChange(val) {
if (this.signVal == '4') {
if (val.isOver == true && val.radio != '') {
this.isDisable = false
} else {
this.isDisable = true
}
} else {
if (val.isOver == true && val.radio != '') {
this.isDisableInsured = false
} else {
this.isDisableInsured = true
}
}
}
}
}
</script>
<style lang="scss" scoped>
.img {
height: 40px;
vertical-align: middle;
}
.iframe {
width: 100vw;
height: 70vh;
}
</style>

View File

@@ -0,0 +1,38 @@
<template>
<div>
<div class="pt80 flex align-items-c flex-direction-colunm">
<img src="@/assets/images/u25897.png" class="img" />
<h2 class="mt15 gray">提交失败</h2>
<p class="fs15 mt10">您的理赔申请提交失败您可返回至服务页面</p>
<p class="fs15 mt10">重新提交或致电统一客服电话</p>
<p class="green mt10">4008-008-008</p>
</div>
<div class="bottom-btn bg-white">
<van-button type="danger" size="large" @click="back" v-no-more-click="1000">返回</van-button>
</div>
</div>
</template>
<script>
export default {
data() {
return {}
},
methods: {
back() {
console.log('返回')
}
},
mounted() {
document.body.style.backgroundColor = '#fff'
},
beforeRouteLeave(to, from, next) {
document.body.style.backgroundColor = ''
next()
}
}
</script>
<style lang="scss" scoped>
.img {
width: 50px;
}
</style>

View File

@@ -0,0 +1,132 @@
<template>
<div>
<div calss="bg-white">
<div class="p10">
<van-uploader
name="fileList"
v-model="fileList"
:after-read="afterRead"
@delete="deleteImg"
:before-delete="beforeDelete"
class="mt10 ml20"
/>
</div>
</div>
<div>
<van-cell-group>
<van-field
v-model="message"
rows="1"
autosize
label="详细说明"
type="textarea"
placeholder="请输入详细说明"
/>
</van-cell-group>
</div>
<div class="flex justify-content-s bottom-btn bg-white">
<van-button
class="bottom0 left0"
square
type="danger"
size="large"
@click="submit"
v-no-more-click="1000"
>提交</van-button>
</div>
</div>
</template>
<script>
import { Uploader, Dialog, Field, CellGroup } from 'vant'
export default {
data() {
return {
fileList: [], //图片数组
message: '', //说明
}
},
components: {
[Uploader.name]: Uploader,
[Dialog.name]: Dialog,
[Field.name]: Field,
[CellGroup.name]: CellGroup
},
methods: {
//为图片名加随机数与时间戳
afterRead(file) {
this.file = file.content
this.imgName = Math.floor(Math.random() * 100).toString() + new Date().getTime() + file.file.name
//调用上传图片
this.uploadImg()
},
//转换
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(() => {
})
},
//删除图片
deleteImg(arr, file) {
arr.map((item, index, array) => {
if (item.content == file.content) {
array.splice(index, 1)
} else {
return
}
})
},
//提交
submit() {
Dialog.confirm({
title: '提示',
message: '您所提交的信息将作为理赔审核的重要依据,提交后无法修改',
confirmButtonText:'提交',
cancelButtonText:'再看看'
}).then(() => {
//提交信息
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/claims/fail'
},
routerInfo: {
path: '/claims/fail'
}
})
})
}
},
mounted() {
document.body.style.backgroundColor = '#fff'
},
beforeRouteLeave(to, from, next) {
document.body.style.backgroundColor = ''
next()
}
}
</script>
<style lang="scss" scoped>
.img {
width: 50px;
}
</style>

View File

@@ -0,0 +1,536 @@
<template>
<div>
<div class="pb80">
<div>
<!-- <div class="p10 fs14 top">
<van-icon name="info-o" class="v-middle" />
<span>以下资料为基本资料由于保险事故具体情况不同我公司可能还需您提供与本次理赔相关的其他资料如有需要我公司工作人员会及时与您取得联系</span>
</div>-->
<div class="bg-white">
<div class="p10">
<!-- <van-cell-group>
<van-field required label="理赔申请书" disabled />
</van-cell-group>
<div @click="test('fileList01')">
<van-uploader
name="fileList01"
v-model="fileList01"
:after-read="afterRead"
@delete="deleteImg"
:before-delete="beforeDelete"
class="mt10 ml20"
/>
</div>-->
<div v-if="applyType.indexOf('04') == -1">
<van-cell-group>
<van-field required label="申请人有效身份证件" disabled />
</van-cell-group>
<div @click="test('fileList02')">
<van-uploader
name="fileList02"
v-model="fileList02"
:after-read="afterRead"
@delete="deleteImg"
:before-delete="beforeDelete"
class="mt10 ml20"
/>
</div>
</div>
<div v-if="applyType.indexOf('04') == -1">
<van-cell-group>
<van-field required label="被保险人有效身份证件及与申请人的关系证明" disabled />
</van-cell-group>
<div @click="test('fileList03')">
<van-uploader
name="fileList03"
v-model="fileList03"
:after-read="afterRead"
@delete="deleteImg"
:before-delete="beforeDelete"
class="mt10 ml20"
/>
</div>
</div>
<div v-if="applyType.indexOf('04') >= 0">
<van-cell-group>
<van-field required label="身故受益人有效身份证件及与被保险人的关系证明" disabled />
</van-cell-group>
<div @click="test('fileList04')">
<van-uploader
name="fileList04"
v-model="fileList04"
:after-read="afterRead"
@delete="deleteImg"
:before-delete="beforeDelete"
class="mt10 ml20"
/>
</div>
</div>
<van-cell-group>
<van-field required label="申请人银行储蓄卡" disabled />
</van-cell-group>
<div @click="test('fileList05')">
<van-uploader
name="fileList05"
v-model="fileList05"
:after-read="afterRead"
@delete="deleteImg"
:before-delete="beforeDelete"
class="mt10 ml20"
/>
</div>
<div v-if="applyType.indexOf('04') == -1">
<van-cell-group>
<van-field required label="诊断证明和出院小结" disabled />
</van-cell-group>
<div @click="test('fileList06')">
<van-uploader
name="fileList06"
v-model="fileList06"
:after-read="afterRead"
@delete="deleteImg"
:before-delete="beforeDelete"
class="mt10 ml20"
/>
</div>
</div>
<div v-if="applyType.indexOf('01') >= 0 || applyType.indexOf('02') >= 0 ">
<van-cell-group>
<van-field required label="发票及费用清单" disabled />
</van-cell-group>
<div @click="test('fileList07')">
<van-uploader
name="fileList07"
v-model="fileList07"
:after-read="afterRead"
@delete="deleteImg"
:before-delete="beforeDelete"
class="mt10 ml20"
/>
</div>
</div>
<div v-if="applyType.indexOf('04') >= 0 ">
<van-cell-group>
<van-field required label="死亡证明资料" disabled />
</van-cell-group>
<div @click="test('fileList08')">
<van-uploader
name="fileList08"
v-model="fileList08"
:after-read="afterRead"
@delete="deleteImg"
:before-delete="beforeDelete"
class="mt10 ml20"
/>
</div>
</div>
<div
v-if="applyType.indexOf('03') >= 0 || applyType.indexOf('07') >= 0 || applyType.indexOf('08') >= 0 || applyType.indexOf('09') >= 0"
>
<van-cell-group>
<van-field required label="确诊病情相关检查资料" disabled />
</van-cell-group>
<div @click="test('fileList09')">
<van-uploader
name="fileList09"
v-model="fileList09"
:after-read="afterRead"
@delete="deleteImg"
:before-delete="beforeDelete"
class="mt10 ml20"
/>
</div>
</div>
<div v-if="applyType.indexOf('05') >= 0 || applyType.indexOf('06') >= 0">
<van-cell-group>
<van-field required label="伤残鉴定书" disabled />
</van-cell-group>
<div @click="test('fileList10')">
<van-uploader
name="fileList10"
v-model="fileList10"
:after-read="afterRead"
@delete="deleteImg"
:before-delete="beforeDelete"
class="mt10 ml20"
/>
</div>
</div>
<div v-if="applyType.indexOf('04') >= 0 ">
<van-cell-group>
<van-field required label="个人税收居民身份声明" disabled />
</van-cell-group>
<div @click="test('fileList11')">
<van-uploader
name="fileList11"
v-model="fileList11"
:after-read="afterRead"
@delete="deleteImg"
:before-delete="beforeDelete"
class="mt10 ml20"
/>
</div>
</div>
<van-cell-group>
<van-field label="其他" disabled />
</van-cell-group>
<div @click="test('fileList12')">
<van-uploader
name="fileList12"
v-model="fileList12"
:after-read="afterRead"
@delete="deleteImg"
:before-delete="beforeDelete"
class="mt10 ml20"
/>
</div>
<!-- end -->
</div>
</div>
</div>
</div>
<div class="flex justify-content-s bottom-btn bg-white">
<van-button
class="bottom0 left0"
square
type="danger"
size="large"
@click="nextStep"
:disabled="isDisabled"
v-no-more-click="1000"
>下一步</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 RsTop from '@/components/ebiz/agentEenter/RsTop'
import config from '@/config'
import { progressDetail, apply } from '@/api/ebiz/claims/claims'
export default {
data() {
return {
isDisabled: true,
// 理赔申请书
// fileList01: [],
// 申请人有效身份证件
fileList02: [],
// 被保险人有效身份证件及与申请人的关系证明
fileList03: [],
// 身故受益人有效身份证件及与被保险人的关系证明
fileList04: [],
// 申请人银行储蓄卡
fileList05: [],
// 诊断证明和出院小结
fileList06: [],
// 发票及费用清单
fileList07: [],
// 死亡证明资料
fileList08: [],
// 确诊病情相关检查资料
fileList09: [],
// 残疾鉴定文件
fileList10: [],
// 个人税收居民身份声明
fileList11: [],
// 其他
fileList12: [],
// 图片流
file: '',
// 图片名称
imgName: '',
// 是哪个证件类型
id: '',
type: '', //
accidentCause: '', //出险原因
applyType: '', //申请类型
list: [], //给后台传的list
imageType: ''
}
},
mounted() {
document.body.style.backgroundColor = '#fff'
if (this.$route.query.edit) {
this.progressDetail()
} else {
this.accidentCause = localStorage.accidentCause //出险原因
this.applyType = localStorage.applyType //申请类型
}
console.log(this.applyType.indexOf('04'))
},
beforeRouteLeave(to, from, next) {
document.body.style.backgroundColor = ''
next()
},
methods: {
progressDetail() {
// 获取详情
let data = {
caseStatus: 'applying',
businessNo: localStorage.businessNo
}
progressDetail(data).then(res => {
console.log(res)
if (res.result == 0) {
this.accidentCause = res.content.accidentCause
this.applyType = res.content.applyType
}
})
},
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 })
},
afterRead(file) {
let that = this
that.file = file.content
that.imgName = Math.floor(Math.random() * 100).toString() + new Date().getTime() + file.file.name //为图片名加随机数 与时间戳
that.uploadImg()
},
uploadImg() {
let that = this
this.$toast.loading({
duration: 0, // 持续展示 toast
forbidClick: true, // 禁用背景点击
loadingType: 'spinner',
message: '加载中……'
})
let formdata = new FormData()
formdata.append('imgPath', that.dataURLtoFile(that.file, that.imgName))
console.log('file-----------------', that.file)
console.log('name-----------------', that.imgName)
uploadImg(formdata).then(res => {
if (res.result == '0') {
console.log(res)
this.$toast.clear()
if (that.type == 'fileList01') {
this.imageType = '1'
} else if (that.type == 'fileList02') {
this.imageType = '2'
} else if (that.type == 'fileList03') {
this.imageType = '3'
} else if (that.type == 'fileList04') {
this.imageType = '4'
} else if (that.type == 'fileList05') {
this.imageType = '5'
} else if (that.type == 'fileList06') {
this.imageType = '6'
} else if (that.type == 'fileList07') {
this.imageType = '7'
} else if (that.type == 'fileList08') {
this.imageType = '8'
} else if (that.type == 'fileList09') {
this.imageType = '9'
} else if (that.type == 'fileList10') {
this.imageType = '10'
} else if (that.type == 'fileList11') {
this.imageType = '11'
} else if (that.type == 'fileList12') {
this.imageType = '12'
}
let obj = {
imageType: this.imageType,
fileName: that.imgName,
rgssUrl: encodeURI(res.path).replace(/\+/g, '%2B')
}
that.list.push(obj)
}
})
},
//删除之前提示
beforeDelete(file, detail) {
Dialog.confirm({
title: '提示',
message: '您确定要删除吗'
}).then(() => {
if (detail.name == 'fileList01') {
this.deleteImg(this.fileList01, file)
} else if (detail.name == 'fileList02') {
this.deleteImg(this.fileList02, file)
} else if (detail.name == 'fileList03') {
this.deleteImg(this.fileList03, file)
} else if (detail.name == 'fileList04') {
this.deleteImg(this.fileList04, file)
} else if (detail.name == 'fileList05') {
this.deleteImg(this.fileList05, file)
} else if (detail.name == 'fileList06') {
this.deleteImg(this.fileList06, file)
} else if (detail.name == 'fileList07') {
this.deleteImg(this.fileList07, file)
}
// this.deleteImg(file)
})
},
//删除图片
deleteImg(arr, file) {
arr.map((item, index, array) => {
if (item.content == file.content) {
array.splice(index, 1)
} else {
return
}
})
},
test(type) {
let that = this
that.type = type
},
// 下一步
nextStep() {
console.log(this.list)
this.$toast.loading({
duration: 0, // 持续展示 toast
forbidClick: true, // 禁用背景点击
loadingType: 'spinner',
message: '加载中……'
})
let data = {
userModel: {
id: '123456',
name: '王某',
mobile: '13592585978'
},
claimImageReqDTO: {
businessNo: localStorage.businessNo, //业务号
claimImageInfoDTOS: this.list
},
slaveStatus: 'claimApplyImage'
}
apply(data).then(res => {
if (res.result == '0') {
this.$toast.clear()
localStorage.removeItem('claimId', 'applyId', 'insuranceId')
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/claims/SignatureConfirmation',
forbidSwipeBack: '1',
pullRefresh: '1',
backToFirst: '1'
},
routerInfo: {
path: '/claims/SignatureConfirmation'
}
})
} else {
this.list = []
this.$toast(res.resultMessage)
}
})
}
},
computed: {
listenChange() {
const {
fileList01,
fileList02,
fileList03,
fileList04,
fileList05,
fileList06,
fileList07,
fileList08,
fileList09,
fileList10,
fileList11,
fileList12
} = this
return {
fileList01,
fileList02,
fileList03,
fileList04,
fileList05,
fileList06,
fileList07,
fileList08,
fileList09,
fileList10,
fileList11,
fileList12
}
}
},
watch: {
listenChange(val) {
let that = this
if (that.applyType.indexOf('04') >= 0) {
//申请类型有身故时
if (val.fileList04.length != '0' && val.fileList05.length != '0' && val.fileList08.length != '0' && val.fileList11.length != '0') {
that.isDisabled = false
} else {
that.isDisabled = true
}
} else {
//申请类型没有身故时
if (val.fileList01.length != '0' && val.fileList02.length != '0' && val.fileList03.length != '0') {
that.isDisabled = false
} else {
that.isDisabled = true
}
}
}
},
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,
[RsTop.name]: RsTop
}
}
</script>
<style lang="scss" scoped>
@import '@/assets/sass/variables.scss';
.top {
color: #739fce;
background: #ebfaff;
line-height: 20px;
}
.attachmentManagement-block {
width: 4px;
height: 15px;
background: #d6211a;
margin-right: 5px;
}
.attachmentManagement-next {
width: 100%;
}
/deep/ .van-hairline-unset--top-bottom::after {
border: none;
}
/deep/.van-cell__title {
width: auto !important;
}
</style>

View File

@@ -0,0 +1,549 @@
<template>
<div class="insured-info-container">
<van-cell-group>
<p class="h10 bg-gray-base"></p>
<div style="border-bottom: 1px solid #ebedf0" class="flex justify-content-s">
<p class="fwb fs15 pl10 pv12">基本信息</p>
<u class="pv12 fs14 pr10 green" @click="toSearch">已有历史报案信息</u>
</div>
<van-field
label="姓名"
name="姓名"
required
v-model="userInfo.insuredName"
placeholder="请输入"
v-validate="'required|name'"
clearable
/>
<select-radio
:radios="sexRadio"
label="性别"
name="性别"
v-validate="'required'"
required
:value.sync="userInfo.insuredSex"
></select-radio>
<FieldDatePicter
required
v-validate="'required'"
label="出生日期"
name="出生日期"
:value.sync="userInfo.insuredBirthday"
ref="insuredBirthday"
type="date"
:flag="true"
@confirm="onDateConfirm($event, '2')"
></FieldDatePicter>
<van-field
:value="userInfo.certiType | idToText('lpIdType')"
required
v-validate="'required'"
readonly
label="证件类型"
name="证件类型"
right-icon="arrow"
placeholder="请选择"
@click="toSelect('2')"
/>
<van-field
v-model="userInfo.certiCode"
maxlength="18"
label="证件号码"
name="证件号码"
placeholder="请输入"
required
v-validate="'required'"
clearable
>
<van-button
v-if="userInfo.certiType == 0"
slot="button"
size="small"
type="danger"
round
@click="selectClick('3')"
>证件扫描</van-button>
</van-field>
<FieldDatePicter
:v-validate="{ required: certiexpiredateRequired }"
required
label="证件截止日期"
name="证件截止日期"
:defaultDate="new Date()"
:value.sync="userInfo.certiTypeEndDate"
type="date"
@confirm="onEndDateConfirm($event, '1')"
ref="certiTypeEndDate"
:flag="true"
></FieldDatePicter>
<div class="border-bt relative fs14 p10 flex align-center">
<van-checkbox
v-model="effectiveDateType"
:disabled="effectiveDateTypeAble"
@change="effectiveDataTypeChange"
>长期</van-checkbox>
</div>
<occupation-picker
:value.sync="userInfo.insuredOccuCode"
:chooseName.sync="userInfo.insuredOccuName"
:lifeGrade.sync="userInfo.lifeGrade"
:healthGrade.sync="userInfo.healthGrade"
clearable
label="职业"
name="职业"
required
v-validate="'required'"
placeholder="请选择"
:parentShowPicker.sync="occupationShowPicker"
@on-click="selectClick('2')"
@on-choose="ChooseOccupation"
/>
<van-field
label="联系电话"
name="联系电话"
v-model="userInfo.insuredMobile"
placeholder="请输入"
required
v-validate="'required|mobile'"
maxlength="11"
clearable
/>
<van-field
:value="userInfo.insuredNationatlity | idToText('nativeplace')"
readonly
required
label="国籍"
name="国籍"
v-validate="'required'"
right-icon="arrow"
placeholder="请选择"
@click="toSelect('4')"
/>
<van-field
v-model="areaName"
label="联系地址"
name="联系地址"
right-icon="arrow"
required
readonly
v-validate="'required'"
placeholder="请选择地址"
@click="areaShow = true"
/>
</van-cell-group>
<!-- 字段选择 -->
<van-popup v-model="popupShow" position="bottom">
<van-picker show-toolbar :columns="columns" @confirm="onConfirm" @cancel="popupShow = false" />
</van-popup>
<!--身份证扫描 -->
<van-popup v-model="isScan" position="bottom">
<IdentityCardScan @getScanInfo="getIdentityInfo"></IdentityCardScan>
</van-popup>
<!-- 地区选择 -->
<van-popup v-model="areaShow" position="bottom">
<van-area
:area-list="areaList"
value="110101"
@confirm="sureArea($event, '1')"
@cancel="areaShow = false"
/>
</van-popup>
<van-field
v-model="userInfo.insuredAddr"
required
center
label="详细地址"
clearable
placeholder="请输入详细地址"
/>
<div class="bottom-btn bg-white">
<van-button type="danger" size="large" @click="nextStep" v-no-more-click="1000">下一步</van-button>
</div>
</div>
</template>
<script>
import { Field, CellGroup, Popup, Picker, Checkbox, Area } from 'vant'
import SelectRadio from '@/components/ebiz/SelectRadio'
import FieldDatePicter from '@/components/ebiz/FieldDatePicter'
import OccupationPicker from '@/components/ebiz/occipation/OccupationPicker'
import { selectComp, chooseOccupation } from '@/views/ebiz/sale/js/methods'
import IdentityCardScan from '@/components/ebiz/sale/IdentityCardScan'
import DataDictionary from '@/assets/js/utils/data-dictionary.js'
import areaList from '@/assets/js/utils/area'
import getAreaName from '@/assets/js/utils/get-area-name'
import idNoCheck from '@/assets/js/utils/idNoCheck'
import { apply, query } from '@/api/ebiz/claims/claims'
import { idToData } from '@/views/ebiz/customer/js/verification'
import utilsAge from '@/assets/js/utils/age'
export default {
name: 'insuredInfo',
components: {
[CellGroup.name]: CellGroup,
[Field.name]: Field,
[SelectRadio.name]: SelectRadio,
[FieldDatePicter.name]: FieldDatePicter,
[OccupationPicker.name]: OccupationPicker,
[Popup.name]: Popup,
[Picker.name]: Picker,
[IdentityCardScan.name]: IdentityCardScan,
[Checkbox.name]: Checkbox,
[Area.name]: Area
},
data() {
return {
isScan: false, //是否显示证件扫描组件
// 性别
sexRadio: [
{
label: '男',
value: '0'
},
{
label: '女',
value: '1'
}
],
slaveStatus: 'claimApplyInsured', //进行到的状态
claimId: '', //用于数据反显的id
from: this.$route.query.from, //跳转来源
columns: [],
popupShow: false,
occupationShowPicker: false,
certiexpiredateRequired: true, //证件截止日期是否需要校验
effectiveDateType: '',
effectiveDateTypeAble: '', // 长期是否禁用
currentPopupIndex: '',
areaList: areaList, //省市区数据
areaName: '', //联系地址
areaShow: false, //地址选择显示隐藏
userInfo: {
insuredName: '', //姓名
insuredSex: '0', //性别
insuredBirthday: '', //出生日期
certiType: '', //证件类型
certiCode: '', // 证件号码
insuredNo: '', //被保人编号
insuredOccuCode: '', //职业类型编码
insuredOccuName: '', //职业类别名称
lifeGrade: '', //寿险等级
healthGrade: '', //健康等级
insuredMobile: '', //联系电话
certiTypeEndDate: '', //新增截止日期
insuredNationatlity: '1', // 新增国籍
insuredProvince: '', //新增被保人所在省
insuredCity: '', //新增被保人所在市
insuredCounty: '', //新增被保人所在区/县
insuredAddr: '', //被保人详细地址
id: localStorage.claimId || '' //用于区分新增还是二次提交
}
}
},
created() {
this.judge()
//this.ReturnShow()
},
mounted() {
document.body.style.backgroundColor = '#fff'
// 筛选按钮的点击事件
window.appCallBack = this.appCallBack
},
beforeRouteLeave(to, from, next) {
document.body.style.backgroundColor = ''
next()
},
methods: {
appCallBack(data) {
if (data.trigger == 'left_button_click') {
localStorage.removeItem('claimId', 'applyId', 'insuranceId')
}
},
//判断是否由客户报案历史进入,客户信息反显
judge() {
if (this.from == 'ReportInfo') {
if (JSON.parse(localStorage.getItem('customerData'))) {
this.userInfo = JSON.parse(localStorage.getItem('customerData'))
//this.userInfo.rptNo = '12345678' //测试使用
}
}
// console.log(this.userInfo)
},
//校验出生日期
onDateConfirm(val) {
if (Date.parse(val) > Date.parse(new Date())) {
this.userInfo.insuredBirthday = ''
this.$refs.insuredBirthday.date = ''
return this.$toast('出生日期不晚于当日')
}
},
//校验证件截止日期
onEndDateConfirm(val, type) {
if (Date.parse(val) < Date.parse(new Date())) {
this.userInfo.certiTypeEndDate = ''
this.$refs.certiTypeEndDate.date = ''
return this.$toast('您的证件已过期')
}
},
//弹框选择
toSelect(pickerType, valueKey) {
//pickerType 1.申请人身份 2、证件类型 3、税收居民身份 4、国家/地区 5、开户银行 6、疾病代码 7、事故代码 8.手术代码9.治疗医院
;[this.popupShow, this.pickerType] = [true, pickerType]
if (valueKey) this.valueKey = valueKey
if (pickerType == '2') {
this.columns = DataDictionary.lpIdType
} else if (pickerType == '4') {
this.columns = DataDictionary.nativeplace
this.$set(this.columns[11], 'disabled', true)
this.$set(this.columns[13], 'disabled', true)
}
},
//区域选择
sureArea(area, type) {
this.areaName = getAreaName(area)
;[this.userInfo.insuredProvince, this.userInfo.insuredCity, this.userInfo.insuredCounty] = [area[0].code, area[1].code, area[2].code]
this.areaShow = false
},
//获取身份证扫描信息
getIdentityInfo(data) {
let that = this
console.log(data)
// 正面
if (data.name && data.name != '待识别') {
that.userInfo.insuredName = data.name
that.userInfo.certiCode = data.idNo
that.userInfo.insuredSex = data.gender == '男' ? '0' : '1'
that.userInfo.insuredBirthday = idToData(that.userInfo.certiCode).birthday
}
this.$jump({
flag: 'navigation',
extra: {
title: '申请信息',
hiddenRight: '1'
}
})
that.isScan = false
},
// 点击去搜索页
toSearch() {
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/claims/searchCustomer?from=InsuredInfo',
backToFirst: '1'
},
routerInfo: {
path: '/claims/searchCustomer?from=InsuredInfo'
}
})
},
//确认选择字段
onConfirm(value) {
this.popupShow = false
if (this.pickerType == '2') {
//身份证以外的证件类型可以使用长期
// if (value.id != '0') {
// this.effectiveDateTypeAble = true
// } else {
// //let age = utilsAge.getAge(this.userInfo.idNo, new Date())
// //this.effectiveDateTypeAble = age <= 45
// }
this.userInfo.certiType = value.id
} else if (this.pickerType == '4') {
this.userInfo.insuredNationatlity = value.id
}
},
selectClick(index) {
this.currentPopupIndex = index
selectComp(this, index, '2')
let title = ''
if (index == 2) {
;[this.occupationShowPicker, title] = [true, '职业类别']
} else if (index == 3) {
localStorage.scanFromInsured = 'true'
;[this.isScan, title] = [true, '身份证扫描']
}
setTimeout(() => {
this.$jump({
flag: 'navigation',
extra: {
title,
hiddenLeft: '1'
}
})
this.closeBtn()
}, 400)
},
ChooseOccupation() {
// chooseOccupation(this, '2')
this.occupationShowPicker = false
},
closeBtn() {
// 筛选按钮的显示
this.$jump({
flag: 'webview_right_button',
extra: {
btns: [
{
img: this.$assetsUrl + 'images/del-close.png',
route: { flag: '', extra: {} }
}
]
}
})
},
appCallBack() {
// 筛选按钮的点击事件
this.$jump({
flag: 'navigation',
extra: {
title: '申请信息',
hiddenRight: '1'
}
})
if (this.currentPopupIndex == 2) {
this.occupationShowPicker = false
} else if (this.currentPopupIndex == 3) {
this.isScan = false
}
},
nextStep() {
//表单校验, 成功跳转
this.$validator.validate().then(valid => {
if (true === valid) {
if (this.userInfo.certiType == '0') {
//身份证
if (this.userInfo.certiCode.length == '18') {
//18位身份证第17位是性别位, 奇男偶女
let sexSign = this.userInfo.certiCode.substr(16, 1)
if ((parseInt(sexSign) % 2 == 0 && this.userInfo.insuredSex != 1) || (parseInt(sexSign) % 2 != 0 && this.userInfo.insuredSex != 0)) {
return this.$toast('性别录入与身份证不符')
}
//18位身份证第7-14位是生日位, 年月日
let birthSign = this.userInfo.certiCode.substr(6, 8)
if (
this.userInfo.insuredBirthday.substr(0, 4) != birthSign.substr(0, 4) ||
this.userInfo.insuredBirthday.substr(5, 2) != birthSign.substr(4, 2) ||
this.userInfo.insuredBirthday.substr(8, 2) != birthSign.substr(6, 2)
) {
return this.$toast('生日录入与身份证不符')
}
}
// 证件号码规则校验
if (!idNoCheck.isIdno(this.userInfo.certiCode)) {
this.$toast('您填写的证件号码有误')
} else {
this.save()
}
// } else if (this.userInfo.certiType == '1') {
// //户口本
// if (this.userInfo.certiCode.length != 18) {
// this.$toast('户口本的证件号码长度应等于18位')
// } else {
// this.save()
// }
// } else if (this.userInfo.certiType == '2') {
// //出生证
// if (this.userInfo.certiCode.length < 3) {
// this.$toast('出生证须大于等于3个字符')
// } else {
// this.save()
// }
// } else if (this.userInfo.certiType == '5') {
// //证件是港澳居民通行证
// if (this.userInfo.certiCode.length != 9) {
// this.$toast('证件类型为港澳居民通行证的证件号码须为9位')
// } else if (!/^(H|M)[0-9]{8}$/.test(this.userInfo.certiCode)) {
// this.$toast('证件类型为港澳居民通行证的,证件号码首位字母为"H"/"M",证件号码第2位至第9位为阿拉伯数字')
// } else {
// this.save()
// }
// } else if (this.userInfo.certiType == '6') {
// //证件是台湾居民通行证
// if (this.userInfo.certiCode.length != 8) {
// this.$toast('证件类型为台湾居民通行证的证件号码须为8位数字')
// } else {
// this.save()
// }
} else {
this.save()
}
} else {
this.$toast(this.$validator.errors.all()[0])
}
})
},
//长期状态改变时
effectiveDataTypeChange(val) {
if (val) {
this.userInfo.certiTypeEndDate = '9999-09-09'
this.certiexpiredateRequired = false
} else {
this.userInfo.certiTypeEndDate = ''
this.certiexpiredateRequired = true
}
effectiveDataTypeChange(this, val)
},
save() {
console.log(this.userInfo)
this.$toast.loading({
duration: 0, // 持续展示 toast
forbidClick: true, // 禁用背景点击
loadingType: 'spinner',
message: '加载中……'
})
let data = {
userModel: {
id: '123456',
name: '王某',
mobile: '13592585978'
},
slaveStatus: this.slaveStatus,
claimApplyInsuredReqDTO: this.userInfo
}
apply(data).then(res => {
console.log(res)
if (res.result == 0) {
this.$toast.clear()
localStorage.setItem('businessNo', res.content.businessNo)
let Data = JSON.stringify(res.content.userModel)
localStorage.setItem('userModel', Data)
localStorage.setItem('claimId', res.content.claimId)
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/claims/Accident?from=InsuredInfo',
forbidSwipeBack: '1'
},
routerInfo: {
path: '/claims/Accident?from=InsuredInfo'
}
})
} else {
this.$toast(res.resultMessage)
}
})
}
}
}
</script>
<style lang="scss" scoped>
.insured-info-container {
/deep/.van-checkbox {
margin-left: auto;
}
/deep/.van-radio {
margin-left: auto;
}
/deep/ .bankCard {
width: 120px;
height: 20px;
line-height: 20px;
border-radius: 10px;
}
}
</style>

View File

@@ -0,0 +1,128 @@
<template>
<div class="problem-list-container">
<div class="problem-list-content">
<!-- tab 栏切换 -->
<van-tabs v-model="activeName">
<van-tab title="契约" name="contract">
<div v-if="ProblemData.length > 0">
<div class="fs12" v-for="(item, index) in ProblemData" :key="index">
<div class="flex align-items-c justify-content-c h40">
<div>报案号:</div>
<div>{{ item.No }}</div>
</div>
<div class="bg-white p15">
<div class="mv15">
<div class="w60 inline-b">
<van-tag plain color="#5CA7DE">投保人</van-tag>
</div>
<span class="fs15 c-gray-dark">{{ item.insured }}</span>
</div>
<div class="mv15">
<div class="w60 inline-b">
<van-tag plain color="#DD9C56">被保人</van-tag>
</div>
<span class="fs15 c-gray-dark">{{ item.applicant }}</span>
</div>
<div class="mv15">
<div class="w60 inline-b">
<van-tag plain color="#95DDD1">主险</van-tag>
</div>
<span class="fs15 c-gray-dark">{{ item.mainRisk }}</span>
</div>
<van-cell-group class="pv0">
<van-cell title="首期保费(元):" value="20176.00" :border="false" class="ph0" />
</van-cell-group>
<div class="pt15">
<div class="mb10">
<div class="w90 inline-b">
<van-tag plain color="#999999">投保提交日期</van-tag>
</div>
<span class="fs14 c-gray-dark ml10">{{ item.insuredDate }}</span>
</div>
<div class="mb10">
<div class="w90 inline-b">
<van-tag plain color="#999999">照会下达日期</van-tag>
</div>
<span class="fs14 c-gray-dark ml10">{{ item.issuedDate }}</span>
</div>
<div>
<div class="w90 inline-b">
<van-tag plain color="#999999">状态</van-tag>
</div>
<span class="fs14 c-gray-dark ml10">{{ item.stauts }}</span>
</div>
</div>
<div class="mt10 flex justify-content-fe">
<van-button
@click="gofillImage"
round
size="small"
class="mr5"
type="danger"
plain
v-no-more-click="1000"
>问题件处理</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-tab>
<van-tab title="保全" name="preservation">内容 2</van-tab>
<van-tab title="理赔" name="claims">内容 3</van-tab>
</van-tabs>
</div>
</div>
</template>
<script>
import { Tab, Tabs, Tag, Cell, CellGroup } from 'vant'
export default {
name: 'ProblemList',
components: {
[Tab.name]: Tab,
[Tabs.name]: Tabs,
[Tag.name]: Tag,
[Cell.name]: Cell,
[CellGroup.name]: CellGroup
},
data() {
return {
activeName: 'contract', //tab标签页通过标签指定的name进行匹配contract为契约、preservation为保全、claims为理赔
ProblemData: [
{
No: 32187368721638721638,
insured: '李雷',
applicant: '张珊珊',
mainRisk: '鼎诚鼎康保终身重大疾病保险',
insuredDate: '2019-10-11',
issuedDate: '2019-11-01',
stauts: '未处理'
}
]
}
},
methods: {
gofillImage() {
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/claims/FillImage'
},
routerInfo: {
path: '/claims/FillImage'
}
})
}
}
}
</script>
<style scoped>
</style>>

View File

@@ -0,0 +1,626 @@
<template>
<div class="apply-info-container pb50">
<!-- 基本信息 -->
<p class="h10 bg-gray-base"></p>
<van-cell-group>
<p style="border-bottom: 1px solid #ebedf0" class="fs15 fwb pl10 pv12">基本信息</p>
<customer-picker
@nameChange="nameChange"
@on-choose="chooseCustomer(arguments)"
name="申请人姓名"
label="申请人姓名"
:parentShowPicker.sync="customerShowPicker"
:value.sync="insuredName"
v-validate="'required|name'"
required
@on-click="selectClick('1')"
></customer-picker>
<select-radio
:radios="sexRadio"
label="性别"
name="性别"
v-validate="'required'"
required
:value.sync="insuredSex"
></select-radio>
<FieldDatePicter
required
v-validate="'required'"
label="出生日期"
name="出生日期"
:value.sync="insuredBirthday"
type="date"
:flag="true"
></FieldDatePicter>
<van-field
:value="certiType | idToText('lpIdType')"
v-validate="'required'"
readonly
required
label="证件类型"
name="证件类型"
right-icon="arrow"
placeholder="请选择"
@click="toSelect('1')"
/>
<van-field
v-model="certiCode"
maxlength="18"
label="证件号码"
name="证件号码"
clearable
required
v-validate="'required'"
placeholder="请输入"
@blur="getRelatedData(certiCode)"
></van-field>
</van-cell-group>
<!-- 报案人信息 -->
<van-cell-group>
<p style="border-bottom: 1px solid #ebedf0" class="fs15 fwb pl10 pv12">报案人信息</p>
<van-field
:value="reportAndInsuredRelation | idToText('relationToAppnts')"
v-validate="'required'"
readonly
required
label="与被保人关系"
name="与被保人关系"
right-icon="arrow"
placeholder="请选择"
@click="toSelect('2')"
/>
<van-field
v-model="reportName"
clearable
required
label="姓名"
name="姓名"
placeholder="请输入"
v-validate="'required|name'"
/>
<van-cell-group>
<van-field
v-model="reportMobile"
clearable
required
label="联系电话"
name="联系电话"
placeholder="请输入"
v-validate="'required|mobile'"
/>
<van-field v-model="code" required center label="验证码" clearable placeholder="请输入短信验证码">
<van-button
type="danger"
slot="button"
size="small"
@click="getCode"
:disabled="codeDisabled"
v-no-more-click="1000"
>
{{
codeDisabled ? `${countDown}s后重新获取` : '获取验证码'
}}
</van-button>
</van-field>
</van-cell-group>
</van-cell-group>
<!-- 报案信息 -->
<van-cell-group>
<p style="border-bottom: 1px solid #ebedf0" class="fs15 fwb pl10 pv12">报案信息</p>
<select-radio
:radios="happenCause"
label="出险原因"
name="出险原因"
v-validate="'required'"
required
:value.sync="accidentCause"
></select-radio>
<van-row type="flex" class="van-cell van-field pv7 ph8">
<van-col class="red posit">*</van-col>
<van-col span="14 ml">申请类型</van-col>
<van-row>
<van-col
class="van-radio__label pb10"
v-for="(item, index) in typeRadio"
:key="index"
span="11"
>
<van-button
round
plain
size="small"
type="info"
class="ph15 van-button--danger"
@click="toActive(item.value, $event)"
>{{ item.label }}</van-button>
</van-col>
</van-row>
</van-row>
<FieldDatePicter
required
v-validate="'required'"
label="出险时间"
name="出险时间"
:value.sync="accidentDateTime"
type="date"
:flag="true"
ref="accidentDate"
:max-date="currentDate"
></FieldDatePicter>
<van-field
v-model="areaName"
label="出险地点"
name="出险地点"
right-icon="arrow"
required
readonly
v-validate="'required'"
placeholder="请选择地址"
@click="areaShow = true"
/>
<van-field v-model="accAdress" required center label="详细地址" clearable placeholder="请输入详细地址" />
<van-field
v-model="caseDesc"
rows="1"
autosize
label="事故描述"
name="事故描述"
type="textarea"
required
v-validate="'required'"
placeholder="请输入事故描述"
clearable
maxlength="200"
/>
</van-cell-group>
<van-popup v-model="popupShow" position="bottom">
<van-picker show-toolbar :columns="columns" @confirm="onConfirm" @cancel="popupShow = false" />
</van-popup>
<!-- 地区选择 -->
<van-popup v-model="areaShow" position="bottom">
<van-area
:area-list="areaList"
value="110101"
@confirm="sureArea($event, '1')"
@cancel="areaShow = false"
/>
</van-popup>
<div class="bottom-btn bg-white">
<van-button type="danger" size="large" @click="nextStep" v-no-more-click="1000">提交</van-button>
</div>
</div>
</template>
<script>
import { Field, CellGroup, Checkbox, Popup, Picker, RadioGroup, Radio, Tag, Collapse, CollapseItem, Row, Col, Area } from 'vant'
import SelectRadio from '@/components/ebiz/SelectRadio'
import FieldDatePicter from '@/components/ebiz/FieldDatePicter'
import OccupationPicker from '@/components/ebiz/occipation/OccupationPicker'
import CustomerPicker from '@/components/ebiz/claims/CustomerPicker'
import IdentityCardScan from '@/components/ebiz/sale/IdentityCardScan'
import DataDictionary from '@/assets/js/utils/data-dictionary.js'
import beforeDate from '@/assets/js/utils/getBeforeDate.js'
import utilsAge from '@/assets/js/utils/age'
import areaList from '@/assets/js/utils/area'
import getAreaName from '@/assets/js/utils/get-area-name'
import idNoCheck from '@/assets/js/utils/idNoCheck'
import { apply, history, customerInfo, query, report } from '@/api/ebiz/claims/claims'
import { idToData } from '@/views/ebiz/customer/js/verification'
import BankCardScan from '@/components/ebiz/sale/BankCardScan'
import { getAuthCode } from '@/api/ebiz/sale/sale'
import { getIdentityInfo, onDateConfirm, effectiveDataTypeChange } from '../sale/js/methods'
export default {
name: 'reportApply',
components: {
[SelectRadio.name]: SelectRadio,
[FieldDatePicter.name]: FieldDatePicter,
[OccupationPicker.name]: OccupationPicker,
[CustomerPicker.name]: CustomerPicker,
[Field.name]: Field,
[CellGroup.name]: CellGroup,
[Checkbox.name]: Checkbox,
[Popup.name]: Popup,
[Picker.name]: Picker,
[Area.name]: Area,
[RadioGroup.name]: RadioGroup,
[Radio.name]: Radio,
BankCardScan,
[Tag.name]: Tag,
[IdentityCardScan.name]: IdentityCardScan,
[Collapse.name]: Collapse,
[CollapseItem.name]: CollapseItem,
[Row.name]: Row,
[Col.name]: Col
},
data() {
return {
customerShowPicker: false, //(客户搜索组件显示隐藏)
areaShow: false, //(地区选择显示隐藏)
currentPopupIndex: '',
currentDate: new Date(), //当前时间
codeDisabled: false, // 获取验证码按钮是否禁用
timeId: null, // 计时器ID
countDown: 60, // 倒计时
applyTypeArr: [], //申请类型数组
areaList: areaList, //省市区数据
areaName: '', //省市区显示绑定
rptNo: '', //报案号(报案成功返回)
customerNo: '', //客户编号(搜索客户点击所得)
DataIndex: '', //所选客户的index
accAdress: '', //出险地点
accCity: '', //出险-市
accCounty: '', //出险-县
accProvince: '', //出险-省
accidentCause: '1', //出险原因
accidentDateTime: '', //出险时间
applyType: '', //申请类型
caseDesc: '', //事故描述
certiCode: '', //证件号码
certiType: '', //证件类型
code: '', //验证码
smsId: '123456', //获取验证码时返回的
insuredBirthday: '', //被保人出生日期
insuredName: '', //被保人姓名
// insuredNo: '', //被保人编号(当选择被保人本人时传输此数据)
insuredSex: '0', //被保人性别
reportAndInsuredRelation: '11', //与被保人关系
reportMobile: '', //报案人联系电话
reportName: '', //报案人姓名
sexRadio: [
{
label: '男',
value: '0'
},
{
label: '女',
value: '1'
}
],
happenCause: [
{
label: '意外',
value: '1'
},
{
label: '疾病',
value: '2'
}
],
typeRadio: [
{
label: '医疗费用补偿',
value: '01'
},
{
label: '住院日额津贴',
value: '02'
},
{
label: '重大疾病',
value: '03'
},
{
label: '身故',
value: '04'
},
{
label: '残疾',
value: '05'
},
{
label: '全残',
value: '06'
},
{
label: '中症',
value: '07'
},
{
label: '轻症',
value: '08'
},
{
label: '特定疾病',
value: '09'
}
],
popupShow: false,
valueKey: '',
pickerType: '',
columns: []
}
},
created() {},
mounted() {
document.body.style.backgroundColor = '#fff'
// 筛选按钮的点击事件
// window.appCallBack = this.appCallBack
},
beforeRouteLeave(to, from, next) {
document.body.style.backgroundColor = ''
next()
},
methods: {
selectClick(index) {
this.currentPopupIndex = index
let title = ''
if (index == 1) {
;[this.customerShowPicker, 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: {} }
}
]
}
})
},
//弹框选择
toSelect(pickerType, valueKey) {
//pickerType 1.申请人身份 2、证件类型 3、税收居民身份 4、国家/地区 5、开户银行 6、疾病代码 7、事故代码 8.手术代码9.治疗医院
;[this.popupShow, this.pickerType] = [true, pickerType]
if (valueKey) this.valueKey = valueKey
if (pickerType == '1') {
this.columns = DataDictionary.lpIdType
} else if (pickerType == '2') {
this.columns = DataDictionary.relationToAppnts
}
},
//确认选择字段
onConfirm(value) {
this.popupShow = false
if (this.pickerType == '1') {
this.certiType = value.id
} else if (this.pickerType == '2') {
this.reportAndInsuredRelation = value.id
}
},
//监听名字变化
nameChange(name) {
this.insuredName = name
},
//失焦验证身份证
getRelatedData(val) {
if (this.certiType != '0') {
return
}
//如果证件校验不通过,恢复默认值
if (idToData(val).text) {
;[this.certiCode, this.insuredSex] = ['', '0']
return this.$toast(idToData(val).text)
}
this.insuredSex = idToData(val).sex
},
//点击申请类型(多选)
toActive(value, e) {
if (e.target.classList.contains('active')) {
e.target.classList.remove('active')
this.applyTypeArr.pop(value)
} else {
e.target.classList.add('active')
this.applyTypeArr.push(value)
}
this.applyType = this.applyTypeArr.join(',')
},
//获取验证码
getCode() {
if (this.reportMobile == '') {
return this.$toast('请填写联系电话')
}
this.codeDisabled = true
let data = {
operateType: 'appntInfoEntry',
type: 'H5',
operateCode: this.reportMobile,
system: 'agentApp',
operateCodeType: '0'
}
//获取验证码
getAuthCode(data).then(res => {
console.log(res)
//倒计时
this.timeId = setInterval(() => {
this.countDown--
if (this.countDown <= 0) {
window.clearInterval(this.timeId)
this.codeDisabled = false
this.countDown = 60
}
}, 1000)
if (res.result == 0) {
this.smsId = res.sessionId
} else {
this.$toast(res.resultMessage)
}
})
},
//区域选择
sureArea(area, type) {
this.areaName = getAreaName(area)
;[this.accProvince, this.accCity, this.accCounty] = [area[0].code, area[1].code, area[2].code]
this.areaShow = false
},
//选择客户
chooseCustomer(Detail) {
console.log(Detail)
this.customerNo = Detail[0][0].customerNo
this.DataIndex = Detail[0][1]
this.customerShowPicker = false
let data = {
customerNo: this.customerNo,
surrenderType: '0'
}
customerInfo(data).then(res => {
console.log(res)
if (res.result == 0) {
let CustomerDetails = res.content
//let Customerdetail = this.CustomerDetails[this.DataIndex]
this.insuredName = CustomerDetails.customerName
this.insuredSex = CustomerDetails.customerSex
this.certiType = CustomerDetails.idType
this.certiCode = CustomerDetails.idNo
this.insuredBirthday = CustomerDetails.customerBirthday
} else {
this.$toast(res.resultMessage)
}
})
// 字段取值
},
//点击提交
nextStep() {
this.$validator.validate().then(valid => {
if (true === valid) {
if (this.certiType == '0') {
//身份证
if (this.certiCode.length == '18') {
//18位身份证第17位是性别位, 奇男偶女
let sexSign = this.certiCode.substr(16, 1)
if ((parseInt(sexSign) % 2 == 0 && this.insuredSex != 1) || (parseInt(sexSign) % 2 != 0 && this.insuredSex != 0)) {
return this.$toast('性别录入与身份证不符')
}
//18位身份证第7-14位是生日位, 年月日
let birthSign = this.certiCode.substr(6, 8)
if (
this.insuredBirthday.substr(0, 4) != birthSign.substr(0, 4) ||
this.insuredBirthday.substr(5, 2) != birthSign.substr(4, 2) ||
this.insuredBirthday.substr(8, 2) != birthSign.substr(6, 2)
) {
return this.$toast('生日录入与身份证不符')
}
}
// 证件号码规则校验
if (!idNoCheck.isIdno(this.certiCode)) {
this.$toast('您填写的证件号码有误')
} else {
this.save()
}
} else {
this.save()
}
} else {
this.$toast(this.$validator.errors.all()[0])
}
})
},
save() {
this.$toast.loading({
duration: 0, // 持续展示 toast
forbidClick: true, // 禁用背景点击
loadingType: 'spinner',
message: '加载中……'
})
let data = {
userModel: {
id: '123456',
name: '王某'
},
accAdress: this.accAdress,
accCity: this.accCity,
accCounty: this.accCounty,
accProvince: this.accProvince,
accidentCause: this.accidentCause,
accidentDateTime: this.accidentDateTime,
applyType: this.applyType,
caseDesc: this.caseDesc,
certiCode: this.certiCode,
certiType: this.certiType,
code: this.code,
smsId: this.smsId,
insuredBirthday: this.insuredBirthday,
insuredName: this.insuredName,
insuredNo: this.insuredNo,
insuredSex: this.insuredSex,
reportAndInsuredRelation: this.reportAndInsuredRelation,
reportMobile: this.reportMobile,
reportName: this.reportName
}
report(data).then(res => {
console.log(res)
if (res.result == 0) {
this.$toast.clear()
this.rptNo = res.content.rptNo //报案号
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/claims/reportSuccess',
forbidSwipeBack: '1'
// backToFirst: '1'
},
routerInfo: {
path: '/claims/reportSuccess'
}
})
} else {
this.$toast(res.resultMessage)
}
})
}
}
}
</script>
<style lang="scss" scoped>
.apply-info-container {
/deep/.van-checkbox {
margin-left: auto;
}
/deep/.van-radio {
margin-left: auto;
}
/deep/ .bankCard {
width: 120px;
height: 20px;
line-height: 20px;
border-radius: 10px;
}
}
.Other-fees-list {
display: flex;
flex-flow: row wrap;
justify-content: space-around;
}
.collapse {
padding: 0 !important;
}
.border {
border: 1px dashed #cccccc;
}
.active {
background: #e9332e !important;
border: 1px solid #e9332e !important;
color: #ffffff !important;
}
.ml {
margin-left: 3px;
}
</style>

View File

@@ -0,0 +1,47 @@
<template>
<div>
<div class="pt80 flex align-items-c flex-direction-colunm">
<img src="@/assets/images/u25897.png" class="img" />
<h2 class="mt15 gray">报案失败</h2>
<p class="fs15 mt10">失败原因</p>
<p class="fs15 mt10">重新报案或致电统一客服电话</p>
<p class="green mt10">4008-008-008</p>
</div>
<div class="bottom-btn bg-white">
<van-button type="danger" size="large" @click="back" v-no-more-click="1000">返回</van-button>
</div>
</div>
</template>
<script>
export default {
data() {
return {}
},
methods: {
back() {
// this.$jump({
// flag: 'h5',
// extra: {
// url: location.origin + '/#/claims/ProblemList'
// // backToFirst: '1'
// },
// routerInfo: {
// path: '/claims/ProblemList'
// }
// })
}
},
mounted() {
document.body.style.backgroundColor = '#fff'
},
beforeRouteLeave(to, from, next) {
document.body.style.backgroundColor = ''
next()
}
}
</script>
<style lang="scss" scoped>
.img {
width: 50px;
}
</style>

View File

@@ -0,0 +1,149 @@
<template>
<div class="list-container">
<div class="list-content" v-if="list.length > 0 && !isShow">
<div class="fs12" v-for="(item, index) in list" :key="index">
<div class="flex align-items-c justify-content-c h40">
<div>报案号:</div>
<div>{{ item.rptNo }}</div>
</div>
<div class="bg-white pv15 pr15 pl10 ml15 mr15">
<div class="mv15">
<div class="w45 inline-b">
<van-tag plain color="#DD9C56">被保</van-tag>
</div>
<span class="fs15 c-gray-dark">{{ item.insuredName }}</span>
</div>
<div class="pt15" style="border-top:1px solid #dadada">
<div>
<div class="w80 inline-b">
<van-tag plain color="#999999">出险时间</van-tag>
</div>
<span class="fs14 c-gray-dark">{{ item.accidentDateTime }}</span>
</div>
</div>
<div class="pt15">
<div>
<div class="w80 inline-b">
<van-tag plain color="#999999">案件状态</van-tag>
</div>
<span class="fs14 c-gray-dark" v-if="item.caseStatus">报案成功</span>
<span class="fs14 c-gray-dark" v-else>报案失败</span>
</div>
</div>
<div class="mt10 flex justify-content-fe">
<van-button round @click="goToDetail(item)" size="small" class="mr5" type="danger" plain v-no-more-click="1000">点击选择</van-button>
</div>
</div>
</div>
</div>
<div v-else class="list flex flex-direction-colunm justify-content-c align-items-c">
<img class="w250" src="@/assets/images/pic_page-non.png" />
<div class="fs17 c-gray-dark mt40">暂无报案信息</div>
<van-button round @click="goToDetail" size="large" type="danger" class="mt20" style="width:50%;" plain v-no-more-click="1000">理赔申请</van-button>
</div>
</div>
</template>
<script>
import { Search, List, Tag, Row, Col } from 'vant'
import { history } from '@/api/ebiz/claims/claims'
// import { getPolicyList } from '@/api/ebiz/serve/serve'
export default {
components: {
[Search.name]: Search,
[List.name]: List,
[Tag.name]: Tag,
[Row.name]: Row,
[Col.name]: Col
},
data() {
return {
// 列表信息
list: [
// {
// riskName: '鼎诚鼎康保定期重大疾病保险A款',
// policyNo: '804122000018622',
// insuredName: '张三1',
// amount: '50000',
// effectDate: '2019-11-01',
// orderStatus: '000',
// policyType: '0'
// }
],
//客户编号
insuredNo: '',
// 无数据时候显示
isShow: false
}
},
created() {
this.getHistory()
},
mounted() {
if (this.isShow == true) {
document.body.style.backgroundColor = '#fff'
}
},
beforeRouteLeave(to, from, next) {
document.body.style.backgroundColor = ''
next()
},
computed: {},
methods: {
getHistory() {
this.insuredNo = window.localStorage.getItem('customerNo')
let data = {
insuredNo: this.insuredNo
}
history(data).then(res => {
console.log(res)
if (res.result == 0) {
this.list = res.content.claimReportInfos
} else {
// this.$toast(res.resultMessage)
}
})
},
// 点击选择去被保人信息
goToDetail(data) {
let Data = JSON.stringify(data)
localStorage.setItem('customerData', Data)
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/claims/insuredInfo?from=ReportInfo',
forbidSwipeBack: '1'
},
routerInfo: {
path: '/claims/insuredInfo?from=ReportInfo'
}
})
}
}
}
</script>
<style lang="scss" scoped>
@import '@/assets/sass/variables.scss';
.list-container {
height: 100%;
.list {
height: 100%;
}
.list-content {
height: 100%;
.list-header {
background: $white;
}
}
img {
width: 253px;
height: 201px;
}
.policy-status {
line-height: 30px;
}
}
</style>

View File

@@ -0,0 +1,70 @@
<template>
<div>
<div class="pt80 flex align-items-c flex-direction-colunm">
<img src="@/assets/images/u20257.png" class="img" alt />
<h2 class="green mt15">报案成功</h2>
<p class="mt20 fs15">报案号6538742194921874</p>
<p class="fs15 mt10">您的报案已受理我们会尽快核实请您耐心等待</p>
<p class="mt10">您可致电统一客服电话</p>
<p class="green mt10">4008-008-008</p>
</div>
<div class="flex justify-content-s bottom-btn bg-white">
<van-button class="bottom0 left0" square plain type="danger" @click="goBack" v-no-more-click="1000" size="large">返回</van-button>
<van-button
class="bottom0 left0"
square
type="danger"
size="large"
v-no-more-click="1000"
@click="nextStep"
>去申请</van-button>
</div>
</div>
</template>
<script>
export default {
data() {
return {}
},
mounted() {
document.body.style.backgroundColor = '#fff'
},
beforeRouteLeave(to, from, next) {
document.body.style.backgroundColor = ''
next()
},
methods: {
//返回服务页面
back() {
// this.$jump({
// flag: 'h5',
// extra: {
// url: location.origin + '/#/claims/ProblemList'
// // backToFirst: '1'
// },
// routerInfo: {
// path: '/claims/ProblemList'
// }
// })
},
//前往报案申请页面
nextStep() {
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/claims/insuredInfo'
// backToFirst: '1'
},
routerInfo: {
path: '/claims/insuredInfo'
}
})
}
}
}
</script>
<style lang="scss" scoped>
.img {
width: 50px;
}
</style>

View File

@@ -0,0 +1,143 @@
<template>
<div class="search-container bg-white">
<div class="search-content flex relative">
<van-dropdown-menu class="pr5 ml10 mt5" active-color="#47DBBD" v-if="isSearch">
<van-dropdown-item v-model="selected" :options="options" />
</van-dropdown-menu>
<van-search class="search-box flex1" v-model="searchVal" show-action @search="onSearch" @cancel="onCancel">
<div slot="action" v-if="isSearch" @search="onSearch" @click="onSearch" v-no-more-click="1000">搜索</div>
<div slot="action" v-else @click="onCancel">取消</div>
</van-search>
</div>
<ul class="search-list-container" v-if="list.length">
<li class="search-list-item flex pt10 pb10 pl15 pr15 relative" @click="handleClick(item.customerNo)" v-for="(item, index) in list" :key="index">
<img src="@/assets/images/bnf_avatar.png" width="60" height="60" class="radius50 v-middle item-avatar mr20 ml10" />
<div class="item-info fl fs12">
<p class="username mb5">{{ item.name }}</p>
<p class="mobile gray mb5">手机号: {{ item.mobile }}</p>
<p class="idno gray">证件号码: {{ item.idno }}</p>
</div>
</li>
</ul>
<div v-if="isShow" class="list flex flex-direction-colunm justify-content-c align-items-c">
<img class="w250" src="@/assets/images/pic_page-non.png" />
<div class="fs17 c-gray-dark mt60">暂无客户信息</div>
<!-- <van-button round @click="goToDetail" size="large" type="danger" class="mt20" style="width:50%;" plain v-no-more-click="1000">理赔申请</van-button> -->
</div>
</div>
</template>
<script>
import { Search, DropdownMenu, DropdownItem } from 'vant'
import { customerList } from '@/api/ebiz/claims/claims'
export default {
name: 'search',
data() {
return {
searchVal: '', // 搜索关键词
list: [],
selected: 0,
isSearch: true, // 是否显示搜索按钮
isShow: false, //无客户数据时显示
options: [
{ text: '客户姓名', value: 0 },
{ text: '证件号码', value: 1 },
{ text: '手机号', value: 2 }
],
insuredNo: '' //客户编号
}
},
components: {
[Search.name]: Search,
[DropdownMenu.name]: DropdownMenu,
[DropdownItem.name]: DropdownItem
},
mounted() {
document.body.style.backgroundColor = '#fff'
},
beforeRouteLeave(to, from, next) {
document.body.style.backgroundColor = ''
next()
},
methods: {
// 搜索
onSearch() {
let data = {
queryParam: this.searchVal,
agentCode: '111111',
queryType: this.selected //0客户姓名1证件号码2手机号
}
customerList(data).then(res => {
if (res.result == 0) {
console.log(res)
this.list = res.content
if (this.list.length) {
this.isShow = false
} else {
this.isShow = true
}
} else {
this.$toast(res.resultMessage)
}
})
this.isSearch = false
},
// 取消
onCancel() {
this.list = []
this.selected = 0
this.searchVal = ''
this.isSearch = true
},
// 点击客户
handleClick(value) {
localStorage.setItem('customerNo', value)
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/claims/reportInfo',
forbidSwipeBack: '1',
backToFirst: '1'
},
routerInfo: {
path: '/claims/reportInfo'
}
})
}
}
}
</script>
<style lang="scss" scoped>
.search-container {
.search-content:not(:last-child)::after {
position: absolute;
box-sizing: border-box;
content: ' ';
pointer-events: none;
right: 0;
bottom: 0;
left: 4.26667vw;
border-bottom: 1px solid #dadada;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
}
.search-list-item:not(:last-child)::after {
position: absolute;
box-sizing: border-box;
content: ' ';
pointer-events: none;
right: 0;
bottom: 0;
left: 4.26667vw;
border-bottom: 1px solid #dadada;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
}
// /deep/[class*='van-hairline']::after {
// border: none;
// }
}
</style>

View File

@@ -0,0 +1,66 @@
<template>
<div class="search-container bg-white">
<van-search class="search-box relative" v-model="searchVal" placeholder="请输入关键字" show-action @search="onSearch" @cancel="onCancel">
<div slot="action" @click="onSearch" v-no-more-click="1000">搜索</div>
</van-search>
<ul class="search-list-container">
<li class="search-list-item pt10 pb10 pl15 relative fs15">天津人民医院</li>
<li class="search-list-item pt10 pb10 pl15 relative fs15">天津市第二医院</li>
</ul>
</div>
</template>
<script>
import { Search } from 'vant'
export default {
name: 'search',
data() {
return {
searchVal: '', // 搜索关键词
list: [] // 医院列表
}
},
components: {
[Search.name]: Search
},
methods: {
// 搜索
onSearch() {
console.log(111)
},
// 取消
onCancel() {
console.log(222)
}
}
}
</script>
<style lang="scss" scoped>
.search-container {
.van-search:not(:last-child)::after {
position: absolute;
box-sizing: border-box;
content: ' ';
pointer-events: none;
right: 0;
bottom: 0;
left: 4.26667vw;
border-bottom: 1px solid #dadada;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
}
.search-list-item:not(:last-child)::after {
position: absolute;
box-sizing: border-box;
content: ' ';
pointer-events: none;
right: 0;
bottom: 0;
left: 4.26667vw;
border-bottom: 1px solid #dadada;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
}
}
</style>

View File

@@ -0,0 +1,351 @@
<template>
<div class="mb50">
<van-cell-group class="mt10">
<van-cell title="被保人姓名" :value="list.insuredName"></van-cell>
<van-cell title="出险时间" :value="list.accidentTime"></van-cell>
<van-cell title="申请类型" :value="list.applyTypeName"></van-cell>
</van-cell-group>
<div>
<van-collapse v-model="activeNames" class="mt10" v-if="!isWeixin">
<van-collapse-item name="1">
<div slot="title">
受托人
<span class="ml20">{{ list.mandatorName }}</span>
</div>
<p class="mb20">以下内容需要您按照顺序阅读并签字确认:</p>
<p>需签署</p>
<p class="mb20">
<span class="text" :class="{ red: list.mandatorSignState == 1 }">{{ list.name }}</span>
<img :src="src" v-if="list.mandatorSignState == '1'" />
</p>
<p class="start">点击开始按钮进行相关操作</p>
<div class="flex justify-content-a mt20">
<van-button
type="danger"
size="normal"
style="width: 157px;"
plain
v-no-more-click="1000"
@click="start_ocr(4)"
:disabled="list.mandatorSignState == 1"
>开始</van-button
>
</div>
</van-collapse-item>
</van-collapse>
<van-collapse v-model="activeNames" class="mt10 pb50">
<van-collapse-item name="2">
<div slot="title">
申请人
<span class="ml20">{{ list.applyerName }}</span>
</div>
<p class="mb20">以下内容需要您按照顺序阅读并签字确认:</p>
<p>需签署</p>
<p class="mb20">
<span class="text" :class="{ red: list.applyerSignState == 1 }">{{ list.name }}</span>
<img :src="src" v-if="list.applyerSignState == '1'" />
</p>
<p class="start">点击开始按钮进行相关操作</p>
<div class="flex justify-content-a mt20" v-if="!isInvalid">
<van-button
type="danger"
size="normal"
style="width: 157px;"
plain
v-no-more-click="1000"
@click="share(3)"
v-if="!isWeixin"
:disabled="list.applyerSignState == 1"
>分享</van-button
>
<van-button
type="danger"
size="normal"
style="width: 157px;"
plain
v-no-more-click="1000"
@click="start_ocr(3)"
:disabled="list.applyerSignState == 1"
>开始</van-button
>
</div>
<div class="text" v-else>操作时间已失效请联系销售人员</div>
</van-collapse-item>
</van-collapse>
</div>
<div class="bottom-btn bg-white" v-if="!isWeixin && list.mandatorSignState == 1 && list.applyerSignState == 1">
<van-button type="danger" size="large" @click="next" v-no-more-click="1000">提交</van-button>
</div>
</div>
</template>
<script>
import { Cell, CellGroup, Collapse, CollapseItem, Dialog } from 'vant'
import { getToken, getSignInvalid, checkSignInvalid } from '@/api/ebiz/sale/sale'
import { progressDetail } from '@/api/ebiz/claims/claims'
import { weixinShare } from '@/assets/js/utils/wxShare.js'
export default {
data() {
let isWeixin = this.$utils.device().isWeixin //判断环境
return {
// 折叠面板
activeNames: ['1', '2'],
// 是否在微信
isWeixin,
signVal: '', //用于区分委托人还是申请人
list: {},
// 是否显示分享按钮 在微信中不显示
// 图片路径
src: this.$assetsUrl + 'images/u6490.png',
// 微信分享校验值
signInvalid: '',
// 是谁分享的微信链接 3为申请人
shareCode: '',
// 是否从空签成功跳转过来 1为是 其他为不是
airSign: '',
// 微信分享链接是否失效 false 为未失效 true为已失效
isInvalid: false,
wxShare: {}
}
},
components: {
[Cell.name]: Cell,
[CellGroup.name]: CellGroup,
[Collapse.name]: Collapse,
[CollapseItem.name]: CollapseItem,
[Dialog.name]: Dialog
},
created() {
this.init()
},
methods: {
// 初始化
async init() {
if (this.isWeixin) {
if (this.$route.query.airSign) {
//从签名页调过来的标识
sessionStorage.setItem('airSign', this.$route.query.airSign)
}
localStorage.setItem('token', this.$route.query.token)
if (this.$route.query.signInvalid) {
sessionStorage.setItem('signInvalid', this.$route.query.signInvalid)
}
if (this.$route.query.businessNo) {
localStorage.setItem('businessNo', this.$route.query.businessNo)
}
let signInvalid = sessionStorage.getItem('signInvalid')
let rs = await this.checkSignInvalid(signInvalid)
console.log('```````````````')
console.log(rs)
if (rs == '1') {
this.isInvalid = false
} else {
this.isInvalid = true
}
this.airSign = sessionStorage.getItem('airSign')
this.shareCode = sessionStorage.getItem('shareCode')
await this.progressDetail()
} else {
this.progressDetail()
this.getSignInvalid() // 获取微信中token是否失效标识码
}
},
progressDetail() {
// 获取签名详情
let data = {
caseStatus: 'applying',
businessNo: localStorage.businessNo
}
progressDetail(data).then(res => {
console.log(res)
if (res.result == 0) {
this.list = res.content
}
})
},
// 获取微信中token是否失效标识码
getSignInvalid() {
this.$toast.loading({
duration: 0, // 持续展示 toast
forbidClick: true, // 禁用背景点击
loadingType: 'spinner',
message: '加载中……'
})
let data = {}
getSignInvalid(data).then(res => {
if (res.result == '0') {
this.$toast.clear()
this.signInvalid = res.content.sign
}
})
},
// 在微信中校验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()
}
})
})
},
// 微信分享
share(code) {
EWebBridge.webCallAppInJs('bridge', {
flag: 'share',
extra: {
title: `鼎诚人寿理赔申请书签字`,
content: '签字进行',
url:
location.origin +
'/#/claims/signatureConfirmation?token=' +
localStorage.token +
'&shareCode=' +
code +
'&signInvalid=' +
this.signInvalid +
'&businessNo=' +
localStorage.businessNo,
img: this.$assetsUrl + 'images/logo.png'
}
})
},
// 人脸识别
start_ocr(val) {
//3申请人需要空签 4受托人
console.log(val)
let that = this
if (this.isWeixin) {
localStorage.setItem('sign-val', val)
if (val == 3) {
if (that.list.applyerCertiType != '0') {
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/claims/ClaimsSignature'
},
routerInfo: {
path: '/claims/ClaimsSignature'
}
})
} else {
let data = {
idcardName: that.list.applyerName,
idcardNumber: that.list.applyerCertiCode
}
getToken(data).then(res => {
if (res.result == '0') {
localStorage.setItem('face-origin', '4')
window.location.href = `https://api.megvii.com/faceid/lite/do?token=${res.content.token}`
} else {
this.$toast(res.resultMessage)
}
})
}
}
} else {
//不在微信
localStorage.setItem('sign-val', val)
if (val == 4) {
if (that.list.mandatorCertiType != '0') {
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/claims/ClaimsSignature'
},
routerInfo: {
path: '/claims/ClaimsSignature'
}
})
} else {
EWebBridge.webCallAppInJs('face_auth', {
//身份证号码
number: that.list.mandatorCertiCode,
//姓名
name: that.list.mandatorName
}).then(data => {
if (JSON.parse(data).state == '1') {
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/claims/ClaimsSignature'
},
routerInfo: {
path: '/claims/ClaimsSignature'
}
})
}
})
}
} else {
if (that.list.applyerCertiType != '0') {
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/claims/ClaimsSignature'
},
routerInfo: {
path: '/claims/ClaimsSignature'
}
})
} else {
EWebBridge.webCallAppInJs('face_auth', {
//身份证号码
number: that.list.applyerCertiCode,
//姓名
name: that.list.applyerName
}).then(data => {
if (JSON.parse(data).state == '1') {
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/claims/ClaimsSignature'
},
routerInfo: {
path: '/claims/ClaimsSignature'
}
})
}
})
}
}
}
},
// 提交
next() {
let that = this
that.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/claims/Success',
forbidSwipeBack: '1',
backToFirst: '1'
},
routerInfo: {
path: '/claims/Success'
}
})
}
}
}
</script>
<style lang="scss" scoped>
.text {
color: #4fc6b3;
margin-right: 5px;
}
</style>

View File

@@ -0,0 +1,48 @@
<template>
<div>
<div class="pt80 flex align-items-c flex-direction-colunm">
<img src="@/assets/images/u20257.png" class="img" alt />
<h2 class="green mt15">提交成功</h2>
<!-- <p class="mt20 fs15">赔案号6538742194921874</p> -->
<p class="fs15 mt10">理赔申请提交成功我们会尽快核实请您耐心等待</p>
<p class="mt10">您可致电统一客服电话</p>
<p class="green mt10">4008-008-008</p>
</div>
<div class="bottom-btn bg-white">
<van-button type="danger" size="large" @click="back" v-no-more-click="1000">返回</van-button>
</div>
</div>
</template>
<script>
export default {
data() {
return {}
},
methods: {
back() {
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/claims/claimsList'
// backToFirst: '1'
},
routerInfo: {
path: '/claims/claimsList'
}
})
}
},
mounted() {
document.body.style.backgroundColor = '#fff'
},
beforeRouteLeave(to, from, next) {
document.body.style.backgroundColor = ''
next()
}
}
</script>
<style lang="scss" scoped>
.img {
width: 50px;
}
</style>