Merge branch 'dev_claim' into feature/GFRS【】理赔_claim

# Conflicts:
#	src/api/ebiz/claims/claims.js
#	src/assets/js/utils/data-dictionary.js
#	src/assets/js/utils/jump.js
#	src/components/ebiz/agentEenter/RsTop.vue
#	src/router/ebiz/index.js
#	src/store/index.js
#	src/views/ebiz/sale/InsuredInfo.vue
This commit is contained in:
tian.guangyuan
2020-04-29 15:52:55 +08:00
29 changed files with 10848 additions and 10 deletions

View File

@@ -46,10 +46,20 @@ export function apply(data) {
})
}
//理赔申请提交
export function submit(data) {
return request({
url: getUrl(`/claim/claimApply/submit`, 1),
method: 'post',
data
})
}
//客户列表查询
export function customerList(data) {
return request({
url: getUrl(`/edor/customer/customerList`, 1),
url: getUrl(`/claim/customer/customerList`, 1),
method: 'post',
data
})

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,244 @@
export default {
nationality: [
{ id: "ABW", text: "阿鲁巴" },
{ id: "AFG", text: "阿富汗" },
{ id: "AGO", text: "安哥拉" },
{ id: "AIA", text: "安圭拉" },
{ id: "ALB", text: "阿尔巴尼亚" },
{ id: "AND", text: "安道尔" },
{ id: "ANT", text: "荷属安的列斯" },
{ id: "ARE", text: "阿联酋" },
{ id: "ARG", text: "阿根廷" },
{ id: "ARM", text: "亚美尼亚" },
{ id: "ASM", text: "美属萨摩亚" },
{ id: "ATA", text: "南极洲" },
{ id: "ATF", text: "法属南部领土" },
{ id: "ATG", text: "安提瓜和巴布达" },
{ id: "AUS", text: "澳大利亚" },
{ id: "AUT", text: "奥地利" },
{ id: "AZE", text: "阿塞拜疆" },
{ id: "BDI", text: "布隆迪" },
{ id: "BEL", text: "比利时" },
{ id: "BEN", text: "贝宁" },
{ id: "BFA", text: "布基纳法索" },
{ id: "BGD", text: "孟加拉国" },
{ id: "BGR", text: "保加利亚" },
{ id: "BHR", text: "巴林" },
{ id: "BHS", text: "巴哈马" },
{ id: "BIH", text: "波斯尼亚和黑塞哥维那" },
{ id: "BLR", text: "白俄罗斯" },
{ id: "BLZ", text: "伯利兹" },
{ id: "BMU", text: "百慕大" },
{ id: "BOL", text: "玻利维亚" },
{ id: "BRA", text: "巴西" },
{ id: "BRB", text: "巴巴多斯" },
{ id: "BRN", text: "文莱" },
{ id: "BTN", text: "不丹" },
{ id: "BVT", text: "布维岛" },
{ id: "BWA", text: "博茨瓦纳" },
{ id: "CAF", text: "中非" },
{ id: "CAN", text: "加拿大" },
{ id: "CCK", text: "科科斯(基林)群岛" },
{ id: "CHE", text: "瑞士" },
{ id: "CHL", text: "智利" },
{ id: "CHN", text: "中国" },
{ id: "CIV", text: "科特迪瓦" },
{ id: "CMR", text: "喀麦隆" },
{ id: "COD", text: "刚果(金)" },
{ id: "COG", text: "刚果(布)" },
{ id: "COK", text: "库克群岛" },
{ id: "COL", text: "哥伦比亚" },
{ id: "COM", text: "科摩罗" },
{ id: "CPV", text: "佛得角" },
{ id: "CRI", text: "哥斯达黎加" },
{ id: "CUB", text: "古巴" },
{ id: "CXR", text: "圣诞岛" },
{ id: "CYM", text: "开曼群岛" },
{ id: "CYP", text: "塞浦路斯" },
{ id: "CZE", text: "捷克" },
{ id: "DEU", text: "德国" },
{ id: "DJI", text: "吉布提" },
{ id: "DMA", text: "多米尼克" },
{ id: "DNK", text: "丹麦" },
{ id: "DOM", text: "多米尼加共和国" },
{ id: "DZA", text: "阿尔及利亚" },
{ id: "ECU", text: "厄瓜多尔" },
{ id: "EGY", text: "埃及" },
{ id: "ERI", text: "厄立特里亚" },
{ id: "ESH", text: "西撒哈拉" },
{ id: "ESP", text: "西班牙" },
{ id: "EST", text: "爱沙尼亚" },
{ id: "ETH", text: "埃塞俄比亚" },
{ id: "FIN", text: "芬兰" },
{ id: "FJI", text: "斐济" },
{ id: "FLK", text: "马尔维纳斯群岛(福克兰群岛)" },
{ id: "FRA", text: "法国" },
{ id: "FRO", text: "法罗群岛" },
{ id: "FSM", text: "密克罗尼西亚" },
{ id: "GAB", text: "加蓬" },
{ id: "GBR", text: "英国" },
{ id: "GEO", text: "格鲁吉亚" },
{ id: "GHA", text: "加纳" },
{ id: "GIB", text: "直布罗陀" },
{ id: "GIN", text: "几内亚" },
{ id: "GLP", text: "瓜德罗普" },
{ id: "GMB", text: "冈比亚" },
{ id: "GNB", text: "几内亚比绍" },
{ id: "GNQ", text: "赤道几内亚" },
{ id: "GRC", text: "希腊" },
{ id: "GRD", text: "格林纳达" },
{ id: "GRL", text: "格陵兰" },
{ id: "GTM", text: "危地马拉" },
{ id: "GUF", text: "法属圭亚那" },
{ id: "GUM", text: "关岛" },
{ id: "GUY", text: "圭亚那" },
{ id: "HKG", text: "中国香港" },
{ id: "HMD", text: "赫德岛和麦克唐纳岛" },
{ id: "HND", text: "洪都拉斯" },
{ id: "HRV", text: "克罗地亚" },
{ id: "HTI", text: "海地" },
{ id: "HUN", text: "匈牙利" },
{ id: "IDN", text: "印度尼西亚" },
{ id: "IND", text: "印度" },
{ id: "IOT", text: "英属印度洋领土" },
{ id: "IRL", text: "爱尔兰" },
{ id: "IRN", text: "伊朗" },
{ id: "IRQ", text: "伊拉克" },
{ id: "ISL", text: "冰岛" },
{ id: "ISR", text: "以色列" },
{ id: "ITA", text: "意大利" },
{ id: "JAM", text: "牙买加" },
{ id: "JOR", text: "约旦" },
{ id: "JPN", text: "日本" },
{ id: "KAZ", text: "哈萨克斯坦" },
{ id: "KEN", text: "肯尼亚" },
{ id: "KGZ", text: "吉尔吉斯斯坦" },
{ id: "KHM", text: "柬埔寨" },
{ id: "KIR", text: "基里巴斯" },
{ id: "KNA", text: "圣基茨和尼维斯" },
{ id: "KOR", text: "韩国" },
{ id: "KWT", text: "科威特" },
{ id: "LAO", text: "老挝" },
{ id: "LBN", text: "黎巴嫩" },
{ id: "LBR", text: "利比里亚" },
{ id: "LBY", text: "利比亚" },
{ id: "LCA", text: "圣卢西亚" },
{ id: "LIE", text: "列支敦士登" },
{ id: "LKA", text: "斯里兰卡" },
{ id: "LSO", text: "莱索托" },
{ id: "LTU", text: "立陶宛" },
{ id: "LUX", text: "卢森堡" },
{ id: "LVA", text: "拉脱维亚" },
{ id: "MAC", text: "澳门" },
{ id: "MAR", text: "摩洛哥" },
{ id: "MCO", text: "摩纳哥" },
{ id: "MDA", text: "摩尔多瓦" },
{ id: "MDG", text: "马达加斯加" },
{ id: "MDV", text: "马尔代夫" },
{ id: "MEX", text: "墨西哥" },
{ id: "MHL", text: "马绍尔群岛" },
{ id: "MKD", text: "马斯顿" },
{ id: "MLI", text: "马里" },
{ id: "MLT", text: "马耳他" },
{ id: "MMR", text: "缅甸" },
{ id: "MNG", text: "蒙古" },
{ id: "MNP", text: "北马里亚纳" },
{ id: "MOZ", text: "莫桑比克" },
{ id: "MRT", text: "毛里塔尼亚" },
{ id: "MSR", text: "蒙特塞拉特" },
{ id: "MTQ", text: "马提尼克" },
{ id: "MUS", text: "毛里求斯" },
{ id: "MWI", text: "马拉维" },
{ id: "MYS", text: "马来西亚" },
{ id: "MYT", text: "马约特" },
{ id: "NAM", text: "纳米比亚" },
{ id: "NCL", text: "新喀里多尼亚" },
{ id: "NER", text: "尼日尔" },
{ id: "NFK", text: "诺福克岛" },
{ id: "NGA", text: "尼日利亚" },
{ id: "NIC", text: "尼加拉瓜" },
{ id: "NIU", text: "纽埃" },
{ id: "NLD", text: "荷兰" },
{ id: "NOR", text: "挪威" },
{ id: "NPL", text: "尼泊尔" },
{ id: "NRU", text: "瑙鲁" },
{ id: "NZL", text: "新西兰" },
{ id: "OMN", text: "阿曼" },
{ id: "PAK", text: "巴基斯坦" },
{ id: "PAN", text: "巴拿马" },
{ id: "PCN", text: "皮特凯恩群岛" },
{ id: "PER", text: "秘鲁" },
{ id: "PHL", text: "菲律宾" },
{ id: "PLW", text: "帕劳" },
{ id: "PNG", text: "巴布亚新几内亚" },
{ id: "POL", text: "波兰" },
{ id: "PRI", text: "波多黎各" },
{ id: "PRK", text: "朝鲜" },
{ id: "PRT", text: "葡萄牙" },
{ id: "PRY", text: "巴拉圭" },
{ id: "PSE", text: "巴勒斯坦" },
{ id: "PYF", text: "法属波利尼西亚" },
{ id: "QAT", text: "卡塔尔" },
{ id: "REU", text: "留尼汪" },
{ id: "ROM", text: "罗马尼亚" },
{ id: "RUS", text: "俄罗斯" },
{ id: "RWA", text: "卢旺达" },
{ id: "SAU", text: "沙特阿拉伯" },
{ id: "SCG", text: "塞尔维亚和黑山" },
{ id: "SDN", text: "苏丹" },
{ id: "SEN", text: "塞内加尔" },
{ id: "SGP", text: "新加坡" },
{ id: "SGS", text: "南乔治亚岛和南桑德韦奇岛" },
{ id: "SHN", text: "圣赫勒拿" },
{ id: "SJM", text: "斯瓦尔巴群岛和扬马群岛" },
{ id: "SLB", text: "所罗门群岛" },
{ id: "SLE", text: "塞拉利昂" },
{ id: "SLV", text: "萨尔瓦多" },
{ id: "SMR", text: "圣马力诺" },
{ id: "SOM", text: "索马里" },
{ id: "SPM", text: "圣皮埃尔和密克隆" },
{ id: "STP", text: "圣多美和普林西比" },
{ id: "SUR", text: "苏里南" },
{ id: "SVK", text: "斯洛伐克" },
{ id: "SVN", text: "斯洛文尼亚" },
{ id: "SWE", text: "瑞典" },
{ id: "SWZ", text: "斯威士兰" },
{ id: "SYC", text: "塞舌尔" },
{ id: "SYR", text: "叙利亚" },
{ id: "TCA", text: "特克斯和凯科斯群岛" },
{ id: "TCD", text: "乍得" },
{ id: "TGO", text: "多哥" },
{ id: "THA", text: "泰国" },
{ id: "TJK", text: "塔吉克斯坦" },
{ id: "TKL", text: "托克劳" },
{ id: "TKM", text: "土库曼斯坦" },
{ id: "TMP", text: "东帝汶" },
{ id: "TON", text: "汤加" },
{ id: "TTO", text: "特立尼达和多巴哥" },
{ id: "TUN", text: "突尼斯" },
{ id: "TUR", text: "土耳其" },
{ id: "TUV", text: "图瓦卢" },
{ id: "TWN", text: "中国台湾" },
{ id: "TZA", text: "坦桑尼亚" },
{ id: "UGA", text: "乌干达" },
{ id: "UKR", text: "乌克兰" },
{ id: "UMI", text: "美属本土外小岛屿" },
{ id: "URY", text: "乌拉圭" },
{ id: "USA", text: "美国" },
{ id: "UZB", text: "乌兹别克斯坦" },
{ id: "VAT", text: "梵蒂冈" },
{ id: "VCT", text: "圣文森特和格林纳丁斯" },
{ id: "VEN", text: "委内瑞拉" },
{ id: "VGB", text: "英属维尔京群岛" },
{ id: "VIR", text: "美属维尔京群岛" },
{ id: "VNM", text: "越南" },
{ id: "VUT", text: "瓦努阿图" },
{ id: "WLF", text: "瓦利斯和富图纳群岛" },
{ id: "WSM", text: "西萨摩亚" },
{ id: "YEM", text: "也门" },
{ id: "ZAF", text: "南非" },
{ id: "ZAR", text: "扎伊尔" },
{ id: "ZMB", text: "赞比亚" },
{ id: "ZWE", text: "津巴布韦" },
]
}

View File

@@ -10,7 +10,7 @@
</van-notice-bar>
</div>
<div class="steps_w w260 mh50 mv8 h20 relative ">
<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>
@@ -21,8 +21,8 @@
<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">
@@ -78,12 +78,12 @@ export default {
}
.lh20 {
text-align: center;
line-height: 20px;
// line-height: 20px;
}
.wire {
width: 54px;
height: 2px;
background: red;
// width: 54px;
// height: 2px;
// background: red;
}
}
</style>

View File

@@ -0,0 +1,198 @@
<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" @input="valChange">
<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.customerName }}</p>
<p class="mobile gray mb5">手机号: {{ item.customerMobile }}</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: [],
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: {
// 输入内容变化时
valChange(value) {
if (value == '') {
this.isSearch = true
}
},
// 搜索
onSearch() {
let data = {
queryParam: this.searchVal,
queryType: '0'
//surrenderType: '1' //1(投被保人都会查出来) 2(只会查出投保人)
// userModel: {
// branchType: '02',
// id: 'A861101000053',
// manageComCode: 'string',
// name: 'string'
// }
}
customerList(data).then(res => {
if (res.result == 0) {
if (res.content[0].customerName != '') {
this.list = res.content
}
if (this.list.length) {
this.isShow = false
} else {
this.isShow = true
}
} else {
if (res.content == null) {
this.$toast('暂无当前客户')
} else {
this.$toast(res.resultMessage)
}
}
})
this.isSearch = false
},
// 取消
onCancel() {
this.list = []
this.selected = 0
this.searchVal = ''
this.isShow = false
this.isSearch = true
},
choose(data, index) {
// console.log(data)
// let params = {
// customerNumber: data.customerNumber
// }
// this.$emit('customerDetail', data)
let Data = []
Data.push(data)
Data.push(index)
this.$emit('on-choose', Data)
this.list = []
this.selected = 0
this.searchVal = ''
this.isSearch = true
//使用vuex判断是被保人信息填写页面还是申请人填写页面调用的客户查询
let pageFlag = this.$store.getters.getPageFlag
console.log('pageFlag ==', pageFlag)
if (pageFlag == 'insuredInfo') {
this.$jump({
flag: 'navigation',
extra: {
title: '被保人信息',
hiddenRight: '1'
}
})
} else if (pageFlag == 'applyInfo') {
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>
.customer {
height: 100%;
}
.search-container {
height: 100%;
.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

@@ -0,0 +1,65 @@
<template>
<div class="read-container">
<div class="text-center">声明须知</div>
<div class="fs14 mt10 mb10">
<div>1本人及申请人确认出险信息和资料提供属实并无虚假及重大遗漏</div>
<div>2本人同意国富人寿保险股份有限公司以收到齐全的索赔资料时间作为理赔受理时间</div>
<div>3本人授权国富人寿保险股份有限公司以检索 调阅 摘抄 复印或其他方式向医院 医生以及任何单位或个人获取出险人的个人信息 健康信息等所有与理赔相关的资料及证明 本人愿意承担由此产生的任何法律责任 本授权声明之影印件亦属有效</div>
<div>4本人同意承担因领款信息提供错误或者因本人 受托人过错导致的一切转账问题而产生的法律 经济责任</div>
</div>
<div class="text-center">反保险欺诈提示</div>
<div class="fs14 mt10 mb10">
<div>请您与我们一同杜绝以下骗取保险金的行为</div>
<div>1.故意虚构保险标的</div>
<div>2.对发生的保险事故编造虚假的原因或者夸大损失的程度</div>
<div>3.编造未曾发生的保险事故</div>
<div>4.故意造成财产损失的保险事故</div>
<div>5.故意造成被保险人死亡伤残或者疾病的</div>
<div>进行保险诈骗犯罪活动可能会受到拘役有期徒刑并处罚金或者没收财产的刑事处罚尚不构成犯罪的可能会受到15日以下拘留5000元以下罚款的行政处罚保险公司不承担赔偿或给付保险金的责任保险事故的鉴定人证明人财产评估人故意提供虚假的证明文件为他人诈骗提供条件的将会受到相应的刑事或行政处罚</div>
</div>
<div class="mt10 fs14">
<input type="checkbox" v-model="isAgree" class="inline-b" style="vertical-align: middle;margin-right: 5px"><span @click="toggleCheck">本人已阅读并接受声明须知反保险欺诈提示内容并备齐资料</span>
</div>
<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 { Checkbox } from 'vant'
export default {
components: {
[Checkbox.name]: Checkbox
},
data() {
return {
isAgree: false
}
},
methods: {
toggleCheck() {
this.isAgree = !this.isAgree
},
nextStep() {
if (this.isAgree) {
this.$emit("confirm")
} else {
this.$toast("请接受以上内容")
}
}
}
}
</script>
<style lang="scss">
.read-container {
overflow: auto;
box-sizing: border-box;
position: fixed;
top: 0;
left: 0;
padding: 20px 10px 60px 10px;
width: 100vw;
height: 100vh;
background: #fff;
}
</style>

View File

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

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

@@ -0,0 +1,183 @@
//理赔 定义相关组件
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

@@ -14,4 +14,5 @@ import survey from './survey'
import nbs from './nbs'
import manpower from './manpower'
import cardList from './cardList'
export default [...proposal, ...sale, ...customer, ...my, ...serve, ...common, ...product, ...cardList ,...agentEenter, ...milestone, ...poster, ...report, ...survey, ...nbs, ...manpower] //根据需要进行删减
import claims from './claims'
export default [...proposal, ...sale, ...customer, ...my, ...serve, ...common, ...product, ...cardList ,...agentEenter, ...milestone, ...poster, ...report, ...survey, ...nbs, ...manpower, ...claims] //根据需要进行删减

View File

@@ -0,0 +1,435 @@
<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="15 ml">申请类型</van-col>
<van-row>
<van-col
class="van-radio__label pb10 flex"
v-for="(item, index) in typeRadio"
:key="index"
span="9"
>
<van-button
round
plain
size="small"
type="info"
class="ph10 van-button--danger wh"
@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"
:maxDate="currentDate"
@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"
rows="1"
autosize
v-validate="'required'"
center
label
name="详细地址"
type="textarea"
clearable
placeholder="请输入详细地点"
maxlength="30"
/>
<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.hospitalCode | 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-if="userInfo.isInsureOther == '1'"
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="userInfo.mandatorCertiType | idToText('lpIdType')" readonly label="证件类型" />
<van-field :value="userInfo.mandatorCertiCode" readonly label="证件号码" />
<van-field :value="userInfo.agentItem | idToText('needTodo')" readonly label="代办事项" />
<van-field
v-model="userInfo.days"
label="委托日期(自申请日期起算)"
name="委托日期(自申请日期起算)"
v-validate="'required'"
required
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 } from '@/api/ebiz/claims/claims'
import { getAgentInfo } from '@/api/ebiz/my/my'
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: [], //后台获取反显的申请类型编码
currentDate: new Date(), //当前时间
popupShow: false, //用于字段选择的显示隐藏
pickerType: '', //用于区分是哪个字段选择
valueKey: '',
columns: [], //用于字段选择绑定的数据
applyType: [], //保存选择的申请类型数组
cause: '0', //通过该值判断出险原因
from: this.$route.query.from, //页面跳转来源
slaveStatus: 'claimApplyRisk', //进行到的状态
areaName: '', //用于页面上显示联系地址
areaShow: false, //显示隐藏地址选择
areaList: areaList, //用于省市区组件绑定数据
//接口传参
userInfo: {
accidentCause: '', //出险原因
applyType: '', //申请类型
accidentDate: '', //出险时间
accCounty: '', //新增出险区/县
accCity: '', //新增出险市
accProvince: '', //新增出险省
hospitalCode: '', //新增治疗医院
isInsureOther: null, //新增是否购买过其他公司保险
otherCompany: '', //新增其他公司保险名称(非必填)
accidentAddress: '', //出险地点
accAddressInfo: '', //出险地点的字符串拼接
caseDesc: '', //事故经过
mandatorName: '', //受托人姓名
mandatorCertiType: '', //证件类型
mandatorCertiCode: '', //证件号码
agentItem: '01', //代办事项
days: '', //新增委托天数
businessNo: '' //业务号码
}
}
},
mounted() {
document.body.style.backgroundColor = '#fff'
this.getAgentInfo()
//获取业务号码
this.userInfo.businessNo = localStorage.businessNo
console.log(this.userInfo.businessNo)
},
beforeRouteLeave(to, from, next) {
document.body.style.backgroundColor = ''
next()
},
methods: {
//获取委托人信息
getAgentInfo() {
let data = {}
getAgentInfo(data).then(res => {
if (res.result == 0) {
this.userInfo.mandatorName = res.name
this.userInfo.mandatorCertiType = res.cardType
this.userInfo.mandatorCertiCode = res.cardNo
}
})
},
//出险日期
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.hospitalCode = value.id
} else if (this.pickerType == '2') {
//保存接口传参是否购买过其他公司保险的码值
this.userInfo.isInsureOther = value.id
}
},
//点击申请类型(多选)
toActive(value, e) {
//判断当前点击的申请类型有无active的class类名
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.accAddressInfo = area[0].name + area[1].name + area[2].name
;[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)
if (!this.userInfo.applyType) {
this.$toast('申请类型不能为空')
return
}
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 = {
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('businessNo', res.content.businessNo)
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;
}
.wh {
min-width: 28vw;
}
.flex {
margin-left: 5vw;
display: flex;
justify-content: center;
}
</style>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,134 @@
<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.applyDate" />
<van-cell title="赔付结论" :value="list.payResult | ResultFormat" />
<van-cell title="给付金额(元)" :value="list.payMoney" />
<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.applyerBankName" /> -->
<van-cell title="开户人" :value="list.accountName" />
<van-cell title="银行卡号" :value="list.applyerBankAccountNo" />
<van-cell title="案件状态" :value="list.caseStatus | statusFormat" />
</van-cell-group>
<van-steps :active="actives[index]" active-color="#e9332e">
<van-step>待索赔</van-step>
<van-step>审核中</van-step>
<van-step>已结案</van-step>
</van-steps>
<van-steps v-if="list.caseStatus == '53'" :active="refuse[index]" active-color="#e9332e">
<van-step>待索赔</van-step>
<van-step>已拒绝</van-step>
</van-steps>
<!-- <div v-if="list.caseStatus == '60'" 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 { Cell, CellGroup, Icon, Step, Steps } from 'vant'
import { progressDetail } from '@/api/ebiz/claims/claims'
export default {
name: 'claimsDetail',
components: {
[Cell.name]: Cell,
[CellGroup.name]: CellGroup,
[Icon.name]: Icon,
[Step.name]: Step,
[Steps.name]: Steps
},
data() {
return {
srcImg: '', // 银行logo
list: {}, //详情数据
actives: [0, 1, 2], //进度数组
refuse: [0,3], //拒绝数组
index: ''
}
},
created() {
// 获取理赔进度详情
this.getClaimsetail()
},
filters: {
statusFormat: function(status) {
let text
switch (status) {
case '51':
text = '待索赔(我司已收到您的理赔报案,请您收集齐全的索赔资料后及时申请理赔,若已提交理赔申请,请忽略。)'
break
case '52':
text = '审核中(我司正在审核中,请您耐心等待。)'
break
case '53':
text = '已拒绝(案件已关闭或撤销,若有疑问请联系我们。)'
break
case '60':
text = '已结案(您的理赔已结案,请关注我司的短信或电话通知,若已收到通知和款项,请忽略。)'
break
}
return text
},
ResultFormat: function(Result) {
let text
switch (Result) {
case '1':
text = '给付'
break
case '2':
text = '拒付'
break
}
return text
}
},
methods: {
getClaimsetail() {
let that = this
let data = {
// userModel: {
// id: '123456',
// name: '王某',
// mobile: '13592585978'
// },
businessNo: '', //赔案号
caseStatus: 'claimProgress', //状态
claimNo: localStorage.getItem('claimNo') //赔案号
}
progressDetail(data).then(res => {
if (res.result == 0) {
console.log(res)
that.list = res.content
if (that.list.caseStatus == '51') {
this.index = 0
} else if (that.list.caseStatus == '52') {
this.index = 1
} else if (that.list.caseStatus == '60') {
this.index = 2
} else if (that.list.caseStatus == '53') {
this.index = 3
}
that.srcImg = that.$assetsUrl + `images/bank/bank_${that.list.applyerBankCode}.png`
}
})
}
}
}
</script>
<style>
.green {
color: #07c160 !important;
}
</style>

View File

@@ -0,0 +1,353 @@
<template>
<div class="sale-list-container pb50">
<van-sticky>
<van-tabs :line-width="45" v-model="active" @change="tabChange" sticky>
<!-- <van-tab name="claimProgress" title="已报案"></van-tab> -->
<van-tab name="applying" title="申请中"></van-tab>
<van-tab name="claimProgress" title="未结案"></van-tab>
<van-tab name="claimProgress" title="已结案"></van-tab>
</van-tabs>
</van-sticky>
<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 == 'claimProgress' && caseStatus == '10'"
>报案号:{{ 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' && (caseStatus == '50'|| caseStatus == '60')"
>赔案号:{{ 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" v-if="item.accidentDate">
<div class="inline-b">
<van-tag plain color="#4fc6b3">出险时间</van-tag>
</div>
<span class="fs14 c-gray-dark ml20">{{ item.accidentDate }}</span>
</div>
<div>
<div class="inline-b">
<van-tag plain color="#5ca7de">案件状态</van-tag>
</div>
<!-- <span class="fs14 c-gray-dark ml20" v-if="active == 'claimProgress' && caseStatus == '10'">
<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>
<span
class="fs14 c-gray-dark ml20"
v-if="active == 'claimProgress'"
>{{ item.caseStatus | statusFormat }}</span>
</div>
</div>
<div class="mt10 flex justify-content-fe">
<van-button
v-if="active == 'claimProgress' && item.caseStatus == '10'"
round
plain
size="small"
class="mr5"
type="danger"
@click="goApply"
>理赔申请</van-button>
<van-button
v-if="active == 'applying' && item.caseStatus != '3' && item.nextSlaveStatus != '25'"
round
size="small"
class="mr5"
type="danger"
@click="goEdit(item.nextSlaveStatus, item.businessNo, item.claimId)"
>编辑</van-button>
<van-button
v-if="active == 'applying' && item.caseStatus != '3' && item.nextSlaveStatus != '25'"
round
plain
size="small"
class="mr5"
type="danger"
@click.stop="del(item.businessNo)"
>删除</van-button>
<van-button
v-if="active == 'claimProgress' && (item.caseStatus == '51' || item.caseStatus == '52' || item.caseStatus == '53' || item.caseStatus == '60' )"
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 == 'claimProgress' && caseStatus == '10'">暂无报案信息</div>
<div class="fs17 mt40" v-if="active == 'applying'">暂无申请信息</div>
<div
class="fs17 mt40"
v-if="active == 'claimProgress' && (caseStatus == '50'|| caseStatus == '60')"
>暂无赔案信息</div>
</div>
<!-- </van-list> -->
</div>
</template>
<script>
import { List, Tab, Tabs, Tag, Row, Col, 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,
[Sticky.name]: Sticky
},
data() {
return {
active: 'applying', //applying 待申请 claimProgress查进度
claimsList: [], //接口数据
actives: [], //查进度状态
isSuccess: false, //有无数据显示
caseStatus: '' //案件状态
}
},
mounted() {
this.getOrderList()
//从成功页点击返回时候需要添加拦截
EWebBridge.webCallAppInJs('webview_left_button', {
intercept: '1' //是否拦截原生返回事件 1是 其他否
})
window.appCallBack = this.appCallBack
},
methods: {
appCallBack(data) {
if (data.trigger == 'left_button_click') {
this.$jump({
flag: 'service'
})
}
},
//初始化列表
getOrderList() {
let data = {
progressStatus: this.active,
caseStatus: this.caseStatus
}
this.$toast.loading({
duration: 0, // 持续展示 toast
forbidClick: true, // 禁用背景点击
loadingType: 'spinner',
message: '加载中……'
})
progress(data).then(res => {
this.$toast.clear()
if (res.result == '0') {
console.log(res)
this.isSuccess = true
if (res.content) {
this.claimsList = res.content.claimProgressInfos
}
if (this.claimsList.length == 0) {
this.isSuccess = false
}
} else {
this.$toast(res.resultMessage)
}
})
},
tabChange(name, title) {
this.currentPage = 1
this.active = name
this.claimsList = []
// if (title == '已报案') {
// this.caseStatus = '10'
// }
if (title == '未结案') {
this.caseStatus = '50'
} else if (title == '已结案') {
this.caseStatus = '60'
}
this.getOrderList()
},
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() {
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, claimId) {
let that = this
localStorage.setItem('claimFrom', 'claimList')
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/Success?edit=1'
// break
}
if (status == '24') {
that.$jump({
flag: 'h5',
extra: {
url: location.origin + `/#${url}`,
forbidSwipeBack: '1',
pullRefresh: '1',
backToFirst: '1'
},
routerInfo: { path: url }
})
} else {
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 '4':
text = '理赔申请提交失败'
break
case '10':
text = '报案成功'
break
case '40':
text = '已申请'
break
case '50':
text = '待结案'
break
case '51':
text = '待索赔'
break
case '52':
text = '审核中'
break
case '53':
text = '已拒绝'
break
case '60':
text = '已结案'
break
case 'Y':
text = '已支付'
break
}
return text
}
}
}
</script>
<style lang="scss" scoped></style>

View File

@@ -0,0 +1,367 @@
<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 class="text">国富人寿理赔申请书</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
>
</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>
</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
// }
// })
// }
if(val == 1) {
if (this.isWeixin) {
this.toAirSign('3', '申请人签名', '20', '4')
} else {
EWebBridge.webCallAppInJs('ca_sign', {
//身份证号码
number: that.list.applyerCertiCode,
//姓名
name: that.list.applyerName,
type: that.list.applyerCertiType,
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 {
if (localStorage.claimFrom) {
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/claims/signatureConfirmation',
pullRefresh: '1',
refresh: '1',
backToFirst: '1'
},
routerInfo: {
path: '/claims/signatureConfirmation'
}
})
} else {
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/claims/signatureConfirmation',
pullRefresh: '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;
}
.text {
color: #e9332e;
}
</style>

View File

@@ -0,0 +1,54 @@
<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">失败原因{{ failMessage }}</p>
<p class="fs15 mt10">重新提交或致电统一客服电话</p>
<p class="green mt10">4000-694-6688</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 {
failMessage: localStorage.getItem('failMessage')
}
},
methods: {
appCallBack(data) {
if (data.trigger == 'left_button_click') {
this.$jump({
flag: 'service'
})
}
},
back() {
this.$jump({
flag: 'service'
})
}
},
mounted() {
document.body.style.backgroundColor = '#fff'
},
beforeRouteLeave(to, from, next) {
document.body.style.backgroundColor = ''
next()
}
}
</script>
<style lang="scss" scoped>
.img {
width: 50px;
}
.green {
color: #1abc9c !important;
}
</style>

View File

@@ -0,0 +1,351 @@
<template>
<div>
<div class="pb80">
<div>
<div class="bg-white">
<div class="p10" v-for="(item,index) in issueDetails" :key="index">
<van-cell-group>
<van-field required :label="item.issueContent" disabled />
</van-cell-group>
<div class="p10">
<span class="fs14 red">
问题说明
<br />
{{item.issueContent}}
</span>
<div @click="test(item.issueType,index)">
<van-uploader
:name="index"
v-model="fileList[index]"
:after-read="afterRead"
@delete="deleteImg"
:before-delete="beforeDelete"
class="mt10 "
/>
</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>
</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 { save } from '@/api/ebiz/claims/claims'
export default {
components: {
[Cell.name]: Cell,
[CellGroup.name]: CellGroup,
[Field.name]: Field,
[Uploader.name]: Uploader,
[RadioGroup.name]: RadioGroup,
[Radio.name]: Radio,
[Dialog.name]: Dialog,
[Picker.name]: Picker,
[Popup.name]: Popup,
[RsTop.name]: RsTop
},
data() {
return {
isDisabled: true, //待验证
issueDetails: [], //后台返回需要上传的图片类型数组
len: '', //需要上传图片类型数组的length
// 理赔申请书
fileList: [],
imgClaimNo: '', //赔案号
// 图片流
file: '',
// 图片名称
imgName: '',
// 是哪个证件类型
// id: '',
type: '', //
// accidentCause: '', //出险原因
// applyType: '', //申请类型
list: [], //给后台传的list
imageType: '',
isDisabledStr: [],
index:''
}
},
mounted() {
document.body.style.backgroundColor = '#fff'
this.issueDetails = JSON.parse(localStorage.getItem('issueDetails'))
this.imgClaimNo = localStorage.getItem('imgClaimNo')
this.len = this.issueDetails.length
for (var i = 0; i < this.len; i++) {
let item = []
this.fileList.push(item)
}
for (var i = 0; i < this.len; i++) {
let Status = 'true'
this.isDisabledStr.push(Status)
}
},
beforeRouteLeave(to, from, next) {
document.body.style.backgroundColor = ''
next()
},
methods: {
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') {
this.$toast.clear()
if (this.fileList[this.index].length > 0) {
this.isDisabledStr.splice(this.index, 1, 'false')
} else {
this.isDisabledStr.splice(this.index, 1, 'true')
}
//循环查询isDisabledStr数组中还是否有true
for (let i = 0; i < this.isDisabledStr.length; i++) {
if (this.isDisabledStr[i] === 'true') {
this.isDisabled = true
} else {
this.isDisabled = false
}
}
let obj = {
imageType: this.type,
fileName: that.imgName,
rgssUrl: encodeURI(res.path).replace(/\+/g, '%2B')
}
that.list.push(obj)
}
})
},
//删除之前提示
beforeDelete(file, detail) {
let i = detail.name
Dialog.confirm({
title: '提示',
message: '您确定要删除吗'
}).then(() => {
this.deleteImg(this.fileList[i], file)
})
},
//删除图片
deleteImg(arr, file) {
//删除v-model绑定数组里的图片
// arr.map((item, index, array) => {
// if (item.content == file.content) {
// array.splice(index, 1)
// } else {
// return
// }
// })
//删除给后台传的图片
// this.list.map((item, index, array) => {
// if (item.fileName.indexOf(file.file.name) > 0) {
// array.splice(index, 1)
// } else {
// return
// }
// })
for (let i = 0; i < arr.length; i++) {
if (arr[i].content == file.content) {
arr.splice(i, 1)
break;
}
}
for (let i = 0; i < this.list.length; i++) {
if (this.list[i].fileName.indexOf(file.file.name) > 0) {
this.list.splice(i, 1)
break;
}
}
},
test(type, index) {
this.type = type
this.index = index
},
// 下一步
nextStep() {
console.log(this.list)
Dialog.confirm({
title: '提示',
message: '您所提交的信息将作为理赔审核的重要依据,提交后无法修改',
confirmButtonText: '提交',
cancelButtonText: '再看看'
})
.then(() => {
this.$toast.loading({
duration: 0, // 持续展示 toast
forbidClick: true, // 禁用背景点击
loadingType: 'spinner',
message: '加载中……'
})
let data = {
claimImageInfoDTOS: this.list,
claimNo: this.imgClaimNo
}
save(data).then(res => {
if (res.result == '0') {
console.log(res)
this.$toast.clear()
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/claims/success',
forbidSwipeBack: '1',
backToFirst: '1'
},
routerInfo: {
path: '/claims/success'
}
})
} else {
// this.list = []
// this.fileList = []
// for (var i = 0; i < this.len; i++) {
// let item = []
// this.fileList.push(item)
// }
this.$toast(res.resultMessage)
}
})
})
.catch(() => {})
}
},
filters: {
filterType: function(type) {
let text
switch (type) {
case '01':
text = '理赔申请书签名样式与投保书签名样式不一致'
break
case '02':
text = '请提供银行卡复印件'
break
case '03':
text = '请提供银行转账授权书'
break
case '04':
text = '请提供有效委托授权书'
break
case '05':
text = '请提供有效受托人身份证明'
break
case '06':
text = '请提供有效受益人身份证明'
break
case '07':
text = '请提供有效被保险人身份证明'
break
case '08':
text = '请提供门诊病历资料'
break
case '09':
text = '请提供门诊收据原件/复印件'
break
case '10':
text = '请提供门诊费用清单'
break
case '11':
text = '请提供住院病历资料'
break
case '12':
text = '请提供住院费用清单/社保结算单'
break
case '13':
text = '请提供意外事故证明'
break
case '14':
text = '请提供有效驾驶证、行驶证复印件'
break
case '15':
text = '请提供交通事故认定书'
break
case '16':
text = '请提供死亡证明材料'
break
case '17':
text = '请提供受益人与被保险人的关系证明材料'
break
case '18':
text = '请提供遗产继承人申明'
break
case '19':
text = '其他'
break
}
return text
}
}
}
</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,576 @@
<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 img fileList02"
/>
</div>
</div>
<div v-if="applyType.indexOf('04') == -1 && age < 18">
<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 img fileList03"
/>
</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 img fileList04"
/>
</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 img fileList05"
/>
</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 img fileList06"
/>
</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 img fileList07"
/>
</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 img fileList08"
/>
</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 img fileList09"
/>
</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 img fileList10"
/>
</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 img fileList11"
/>
</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 utils from '@/assets/js/business-common'
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: '',
// 是哪个证件类型
type: '', //
accidentCause: '', //出险原因
applyType: '', //申请类型
list: [], //给后台传的list
imageType: '',
age: '', //被保人的年龄
classList: [],
DOMlist: [], //当前页面所有的上传框
isDisabledStr: []
}
},
mounted() {
document.body.style.backgroundColor = '#fff'
if (this.$route.query.edit) {
this.progressDetail()
} else {
this.accidentCause = localStorage.accidentCause //出险原因
this.applyType = localStorage.applyType //申请类型
}
let insuredBirthday = localStorage.getItem('insuredBirthday')
this.age = utils.jsGetAge(insuredBirthday)
this.$nextTick(function() {
let lists = []
this.DOMlist = document.querySelectorAll('.img')
this.DOMlist.forEach(function(item, index) {
lists.push(item.classList[3])
})
this.classList = lists //保存当前所有上传框的className
})
},
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)
} else if (detail.name == 'fileList08') {
this.deleteImg(this.fileList08, file)
} else if (detail.name == 'fileList09') {
this.deleteImg(this.fileList09, file)
} else if (detail.name == 'fileList10') {
this.deleteImg(this.fileList10, file)
} else if (detail.name == 'fileList11') {
this.deleteImg(this.fileList11, file)
} else if (detail.name == 'fileList12') {
this.deleteImg(this.fileList12, file)
}
// this.deleteImg(file)
})
.catch(() => {})
},
//删除图片
deleteImg(arr, file) {
//删除v-model绑定的数组中的图片
// arr.map((item, index, array) => {
// if (item.content == file.content) {
// array.splice(index, 1)
// } else {
// return
// }
// })
//删除给后台传的图片
// this.list.map((item, index, array) => {
// if (item.fileName.indexOf(file.file.name) > 0) {
// array.splice(index, 1)
// } else {
// return
// }
// })
for (let i = 0; i < arr.length; i++) {
if (arr[i].content == file.content) {
arr.splice(i, 1)
break;
}
}
for (let i = 0; i < this.list.length; i++) {
if (this.list[i].fileName.indexOf(file.file.name) > 0) {
this.list.splice(i, 1)
break;
}
}
},
test(type) {
this.type = type
},
// 下一步
nextStep() {
this.$toast.loading({
duration: 0, // 持续展示 toast
forbidClick: true, // 禁用背景点击
loadingType: 'spinner',
message: '加载中……'
})
let data = {
claimImageReqDTO: {
businessNo: localStorage.businessNo, //业务号
claimImageInfoDTOS: this.list
},
slaveStatus: 'claimApplyImage'
}
apply(data).then(res => {
if (res.result == '0') {
this.$toast.clear()
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/claims/SignatureConfirmation',
forbidSwipeBack: '1',
pullRefresh: '1',
backToFirst: this.$route.query.edit ? '1' : ''
},
routerInfo: {
path: '/claims/SignatureConfirmation'
}
})
} else {
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) {
this.classList.map((item, index, array) => {
if (val[item].length > 0) {
//当对应fileList的length不为0时,替换isDisabledStr数组中对应下标的true为false
this.isDisabledStr.splice(index, 1, 'false')
} else {
//否则还是为true
this.isDisabledStr.splice(index, 1, 'true')
}
})
//循环查询isDisabledStr数组中还是否有true
for (let i = 0; i < this.isDisabledStr.length; i++) {
if (this.isDisabledStr[i] === 'true') {
this.isDisabled = true
} else {
this.isDisabled = false
}
}
}
},
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,600 @@
<template>
<div class="insured-info-container">
<van-cell-group class="pb60">
<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>
<customer-picker
@nameChange="nameChange"
@on-choose="chooseCustomer(arguments)"
name="姓名"
label="姓名"
:parentShowPicker.sync="customerShowPicker"
:value.sync="userInfo.insuredName"
v-validate="'required|name'"
required
@on-click="selectClick('1')"
></customer-picker>
<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"
:maxDate="currentDate"
@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
@blur="getRelatedData(userInfo.certiCode)"
>
<van-button v-if="userInfo.certiType == 1" slot="button" size="small" type="danger" round @click="selectClick('3')" v-no-more-click="1000"
>证件扫描</van-button
>
</van-field>
<FieldDatePicter
v-validate="certiexpiredateRequired ? 'required' : ''"
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 | NationalityIdToText('nationality')"
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-field
v-model="userInfo.insuredAddr"
rows="1"
autosize
v-validate="'required'"
center
label
name="详细地址"
type="textarea"
clearable
placeholder="请输入详细地址"
maxlength="30"
/>
</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>
<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 CustomerPicker from '@/components/ebiz/claims/CustomerPicker'
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 Nationality from '@/assets/js/utils/nationality.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, customerInfo } from '@/api/ebiz/claims/claims'
import { idToData } from '@/views/ebiz/customer/js/verification'
import utilsAge from '@/assets/js/utils/age'
import occupationList from '@/components/ebiz/occipation/data/occupation'
export default {
name: 'insuredInfo',
components: {
[CellGroup.name]: CellGroup,
[Field.name]: Field,
[SelectRadio.name]: SelectRadio,
[FieldDatePicter.name]: FieldDatePicter,
[OccupationPicker.name]: OccupationPicker,
[CustomerPicker.name]: CustomerPicker,
[Popup.name]: Popup,
[Picker.name]: Picker,
[IdentityCardScan.name]: IdentityCardScan,
[Checkbox.name]: Checkbox,
[Area.name]: Area
},
data() {
return {
isScan: false, //是否显示证件扫描组件
customerShowPicker: false, //(客户搜索组件显示隐藏)
// 性别
sexRadio: [
{
label: '男',
value: '0'
},
{
label: '女',
value: '1'
}
],
slaveStatus: 'claimApplyInsured', //进行到的状态
currentDate: new Date(), //当前时间
from: this.$route.query.from, //跳转来源
columns: [],
popupShow: false,
pickerType: '',
occupationShowPicker: false,
certiexpiredateRequired: true, //证件截止日期是否需要校验
effectiveDateType: false, //是否长期
effectiveDateTypeAble: false, // 长期是否禁用
currentPopupIndex: '',
areaList: areaList, //省市区数据
areaName: '', //联系地址
areaShow: false, //地址选择显示隐藏
userInfo: {
insuredName: '', //姓名
insuredSex: '0', //性别
insuredBirthday: '', //出生日期
certiType: '1', //证件类型
certiCode: '', // 证件号码
insuredOccuCode: '', //职业类型编码
insuredOccuName: '', //职业类别名称
lifeGrade: '', //寿险等级
healthGrade: '', //健康等级
insuredMobile: '', //联系电话
certiTypeEndDate: '', //新增字段截止日期
insuredNationatlity: 'CHN', // 新增字段国籍
insuredProvince: '', //新增字段被保人所在省
insuredCity: '', //新增字段被保人所在市
insuredCounty: '', //新增字段被保人所在区/县
insuredAddr: '', //被保人详细地址
businessNo: '', //业务号码
insuredNo: '', //被保人编号
certiIsLong: '' //是否长期
}
}
},
created() {
this.judge()
},
mounted() {
localStorage.setItem('businessNo', '')
console.log('mounted ==', localStorage.businessNo)
document.body.style.backgroundColor = '#fff'
// 筛选按钮的点击事件
window.appCallBack = this.appCallBack
//删除从进度查询点编辑的标识
localStorage.removeItem('claimFrom')
this.$store.commit('updatePageFlag', 'insuredInfo')
},
beforeRouteLeave(to, from, next) {
document.body.style.backgroundColor = ''
next()
},
methods: {
//判断是否由客户报案历史进入,客户信息反显
judge() {
if (this.from == 'ReportInfo') {
if (JSON.parse(localStorage.getItem('customerData'))) {
this.userInfo = JSON.parse(localStorage.getItem('customerData'))
}
}
},
//校验出生日期
onDateConfirm(val) {
if (Date.parse(val) > Date.parse(new Date())) {
this.userInfo.insuredBirthday = ''
this.$refs.insuredBirthday.date = ''
return this.$toast('出生日期不晚于当日')
}
},
//校验证件截止日期
onEndDateConfirm(val, type) {
//如果已经勾选了长期
if (this.userInfo.effectiveDateType) {
//清空数据并返回
this.userInfo.certiTypeEndDate = ''
this.$refs.certiTypeEndDate.date = ''
return
}
if (Date.parse(val) < Date.parse(new Date())) {
this.userInfo.certiTypeEndDate = ''
this.$refs.certiTypeEndDate.date = ''
return this.$toast('您的证件已过期')
}
},
//失焦验证身份证
getRelatedData(val) {
if (this.userInfo.certiType != '1') {
return
}
//如果证件校验不通过,恢复默认值
if (idToData(val).text) {
;[this.userInfo.certiCode, this.userInfo.insuredSex, this.effectiveDateTypeAble] = ['', '0', false]
return this.$toast(idToData(val).text)
}
this.effectiveDateType = false
this.userInfo.certiIsLong = '0'
this.userInfo.insuredSex = idToData(val).sex
this.effectiveDateTypeAble = idToData(val).age <= 45
},
//弹框选择
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 = Nationality.nationality
}
},
//区域选择
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) {
console.log('value', value)
this.popupShow = false
if (this.pickerType == '2') {
// 身份证以外的证件类型可以使用长期
if (value.id != '1') {
this.effectiveDateTypeAble = false
} else {
this.effectiveDateType = false
this.userInfo.certiTypeEndDate = ''
this.userInfo.certiIsLong = this.effectiveDateType ? '1' : '0'
let age = utilsAge.getAge(this.userInfo.certiCode, new Date())
this.effectiveDateTypeAble = age <= 45
}
this.userInfo.certiType = value.id
} else if (this.pickerType == '4') {
this.userInfo.insuredNationatlity = value.id
}
},
//长期状态改变时
effectiveDataTypeChange(val) {
if (val) {
this.userInfo.certiTypeEndDate = ''
this.certiexpiredateRequired = false
this.userInfo.certiIsLong = '1'
} else {
this.certiexpiredateRequired = true
this.userInfo.certiIsLong = '0'
}
// effectiveDataTypeChange(this, val)
},
selectClick(index) {
this.currentPopupIndex = index
selectComp(this, index, '2')
let title = ''
if (index == 1) {
;[this.customerShowPicker, title] = [true, '搜索客户']
} else 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)
},
//监听名字变化
nameChange(name) {
this.userInfo.insuredName = name
},
//选择客户
chooseCustomer(Detail) {
this.customerShowPicker = false
this.userInfo.insuredNo = Detail[0][0].customerNo //客户编号
this.userInfo.insuredName = Detail[0][0].customerName //姓名
this.userInfo.insuredSex = Detail[0][0].customerSex //性别
this.userInfo.certiType = Detail[0][0].idType //证件类型
this.userInfo.certiCode = Detail[0][0].idNo //证件号
this.userInfo.insuredOccuCode = Detail[0][0].occuCode //职业代码
this.userInfo.insuredBirthday = Detail[0][0].customerBirthday //生日
this.userInfo.insuredNationatlity = Detail[0][0].nationality //国籍
this.userInfo.insuredMobile = Detail[0][0].customerMobile //手机号
this.userInfo.insuredAddr = Detail[0][0].homeAddress //联系地址
this.userInfo.insuredProvince = Detail[0][0].province //联系省
this.userInfo.insuredCity = Detail[0][0].city //联系市
this.userInfo.insuredCounty = Detail[0][0].area //联系区
this.effectiveDateType = Detail[0][0].isEndDate == '9999-01-01' //是否长期
this.userInfo.certiIsLong = Detail[0][0].isEndDate == '9999-01-01' ? '1' : '0' //是否长期 0-否1-是
this.userInfo.certiTypeEndDate = Detail[0][0].isEndDate == '9999-01-01' ? '2010-01-01' : Detail[0][0].isEndDate //截止日期
this.userInfo.insuredOccuCode = Detail[0][0].occuCode //职业编码
let result = this.showOccuName(Detail[0][0].occuCode)
if (result) {
this.userInfo.insuredOccuName = result.insuredOccuName //职业名称
this.userInfo.lifeGrade = result.lifeGrade //
this.userInfo.healthGrade = result.healthGrade //
}
if (Detail[0][0].province.length) {
this.areaName = getAreaName([{ code: Detail[0][0].province }, { code: Detail[0][0].city }, { code: Detail[0][0].area }])
}
},
//根据职业编码显示职业名称
showOccuName(occuCode) {
let firstTier = Number(occuCode.substr(0, 1)) - 1
let result
occupationList[firstTier].subs.forEach(item => {
if (item.subs[0].code == occuCode) {
result = { insuredOccuName: item.subs[0].name, lifeGrade: item.subs[0].lifeGrade, healthGrade: item.subs[0].healthGrade }
return
}
})
return result
},
ChooseOccupation() {
this.occupationShowPicker = false
this.$jump({
flag: 'navigation',
extra: {
title: '被保人信息',
hiddenRight: '1'
}
})
},
closeBtn() {
// 筛选按钮的显示
this.$jump({
flag: 'webview_right_button',
extra: {
btns: [
{
img: this.$assetsUrl + 'images/del-close.png',
route: { flag: '', extra: {} }
}
]
}
})
},
appCallBack(data) {
if (data.trigger == 'left_button_click') {
localStorage.removeItem('businessNo')
}
// 筛选按钮的点击事件
this.$jump({
flag: 'navigation',
extra: {
title: '被保人信息',
hiddenRight: '1'
}
})
if (this.currentPopupIndex == 1) {
this.customerShowPicker = false
} else if (this.currentPopupIndex == 2) {
this.occupationShowPicker = false
} else if (this.currentPopupIndex == 3) {
this.isScan = false
}
},
nextStep() {
console.log('this.certiexpiredateRequired ~~== ', this.certiexpiredateRequired)
//表单校验, 成功跳转
this.$validator.validate().then(valid => {
if (true === valid) {
if (this.userInfo.certiType == '1') {
//身份证
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 {
this.save()
}
} else {
this.$toast(this.$validator.errors.all()[0])
}
})
},
save() {
if (localStorage.businessNo) {
this.userInfo.businessNo = localStorage.businessNo
}
localStorage.setItem('insuredBirthday', this.userInfo.insuredBirthday)
this.$toast.loading({
duration: 0, // 持续展示 toast
forbidClick: true, // 禁用背景点击
loadingType: 'spinner',
message: '加载中……'
})
let data = {
slaveStatus: this.slaveStatus,
claimApplyInsuredReqDTO: this.userInfo
}
console.log('save ==', data)
apply(data).then(res => {
console.log('res', res)
if (res.result == 0) {
this.$toast.clear()
localStorage.setItem('businessNo', res.content.businessNo)
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;
}
.van-cell {
align-items: center;
}
}
</style>

View File

@@ -0,0 +1,185 @@
<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="issues.length > 0">
<div class="fs12" v-for="(item, index) in issues" :key="index">
<div class="flex align-items-c justify-content-c h40">
<div>陪案号:</div>
<div>{{ item.claimNo }}</div>
</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="inline-b">
<van-tag plain color="#4fc6b3">出险时间</van-tag>
</div>
<span class="fs14 c-gray-dark ml20">{{ item.accidentDate }}</span>
</div>
<div>
<div class="inline-b">
<van-tag plain color="#5ca7de">案件状态</van-tag>
</div>
<span class="fs14 c-gray-dark ml20">{{ item.caseState | statusFormat}}</span>
</div>
</div>
<div class="mt10 flex justify-content-fe">
<van-button
@click="gofillImage(item)"
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'
import { issueList } from '@/api/ebiz/claims/claims'
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为理赔
issues: [
// {
// claimNo: '', //赔案号
// accidentDate: '', //出险日期
// insuredName: '', //被保人姓名
// issueContent: '', //问题件内容
// issueType: '', //问题件类型
// bussType: '', //影像业务类型
// caseStatus:''//案件状态
// }
]
}
},
mounted() {
this.getIssueList()
},
methods: {
getIssueList() {
this.$toast.loading({
duration: 0, // 持续展示 toast
forbidClick: true, // 禁用背景点击
loadingType: 'spinner',
message: '加载中……'
})
let data = {
// userModel: {
// id: '11101000000053',
// name: '王某',
// mobile: '13592585978'
// },
agentCode: '' //代理人编号
}
issueList(data).then(res => {
this.$toast.clear()
if (res.result == '0') {
console.log(res.content.issues)
this.issues = res.content.issues
} else {
this.$toast(res.resultMessage)
}
})
},
gofillImage(data) {
let issueDetails = JSON.stringify(data.issueDetails)
localStorage.setItem('issueDetails', issueDetails)
localStorage.setItem('imgClaimNo', data.claimNo)
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/claims/FillImage',
forbidSwipeBack: '1'
},
routerInfo: {
path: '/claims/FillImage'
}
})
}
},
filters: {
statusFormat: function(status) {
let text
switch (status) {
case '2':
text = '理赔申请未提交'
break
case '3':
text = '理赔申请已提交'
break
case '4':
text = '理赔申请提交失败'
break
case '10':
text = '报案成功'
break
case '20':
text = '立案'
break
case '40':
text = '已申请'
break
case '50':
text = '待结案'
break
case '51':
text = '待索赔'
break
case '52':
text = '审核中'
break
case '53':
text = '已拒绝'
break
case '60':
text = '已结案'
break
case 'Y':
text = '已支付'
break
}
return text
}
}
}
</script>
<style scoped>
</style>>

View File

@@ -0,0 +1,684 @@
<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"
:maxDate="currentDate"
></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 class="pb60">
<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="15 ml">申请类型</van-col>
<van-row>
<van-col
class="van-radio__label pb10 flex"
v-for="(item, index) in typeRadio"
:key="index"
span="9"
>
<van-button
round
plain
size="small"
type="info"
class="ph10 van-button--danger wh"
@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"
:maxDate="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="accAddress"
v-validate="'required'"
center
label
name="详细地点"
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 { customerInfo,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
accAddressInfo: '', //出险地点的字符串拼接
accAddress: '', //出险地点
accCity: '', //出险-市
accCounty: '', //出险-县
accProvince: '', //出险-省
accidentCause: '1', //出险原因
accidentDateTime: '', //出险时间
applyType: '', //申请类型
caseDesc: '', //事故描述
certiCode: '', //证件号码
certiType: '1', //证件类型
code: '', //验证码
smsId: '', //获取验证码时返回的
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: {} }
}
]
}
})
},
appCallBack() {
// 筛选按钮的点击事件
this.$jump({
flag: 'navigation',
extra: {
title: '报案申请',
hiddenRight: '1'
}
})
this.customerShowPicker = false
},
//弹框选择
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 != '1') {
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.accAddressInfo = area[0].name + area[1].name + area[2].name
;[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
this.insuredNo = CustomerDetails.insuredNo //保存客户编号(被保人编号)
} else {
this.$toast(res.resultMessage)
}
})
},
//点击提交
nextStep() {
this.$validator.validate().then(valid => {
if (true === valid) {
if (this.certiType == '1') {
//身份证
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('您填写的证件号码有误')
}
if (!this.applyType) {
return this.$toast('申请类型不能为空')
} else {
this.save()
}
} else {
if (!this.applyType) {
return this.$toast('申请类型不能为空')
}
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: '王某'
// },
accAddressInfo: this.accAddressInfo, //后端暂时需要,后面可能会删掉
accAddress: this.accAddress,
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 //报案号
localStorage.setItem('rptNo', res.content.rptNo)
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/claims/reportSuccess',
forbidSwipeBack: '1'
},
routerInfo: {
path: '/claims/reportSuccess'
}
})
} else {
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/claims/reportFail',
forbidSwipeBack: '1'
},
routerInfo: {
path: '/claims/reportFail'
}
})
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;
}
.wh {
min-width: 28vw;
}
.flex {
margin-left: 5vw;
display: flex;
justify-content: center;
}
</style>

View File

@@ -0,0 +1,52 @@
<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: 'service'
})
},
appCallBack(data) {
if (data.trigger == 'left_button_click') {
this.$jump({
flag: 'service'
})
}
}
},
mounted() {
document.body.style.backgroundColor = '#fff'
EWebBridge.webCallAppInJs('webview_left_button', {
img: this.$assetsUrl + 'images/del-close@3x.png',
intercept: '1' //是否拦截原生返回事件 1是 其他否
})
window.appCallBack = this.appCallBack
},
beforeRouteLeave(to, from, next) {
document.body.style.backgroundColor = ''
next()
}
}
</script>
<style lang="scss" scoped>
.img {
width: 50px;
}
</style>

View File

@@ -0,0 +1,196 @@
<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'
import axios from 'axios'
import index from '@/config/index'
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.$toast.loading({
duration: 0, // 持续展示 toast
forbidClick: true, // 禁用背景点击
loadingType: 'spinner',
message: '加载中……'
})
this.insuredNo = window.localStorage.getItem('customerNo')
let data = {
// userModel: {
// id: '123456',
// name: '王某',
// mobile: '13592585978'
// },
insuredNo: this.insuredNo
}
history(data).then(res => {
console.log(res)
this.$toast.clear()
if (res.result == 0) {
this.list = res.content.claimReportInfos
} else {
// this.$toast(res.resultMessage)
}
})
},
// 点击选择去被保人信息
goToDetail(data) {
axios
.get(index.apiDomain + `/claim/claimReport/historyDetail`, {
params: {
insuredNo: this.insuredNo
},
headers: {
token: localStorage.token
}
})
.then(res => {
console.log(res)
})
.catch(err => {
console.log(err)
})
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,87 @@
<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">报案号{{this.rptNo}}</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 {
rptNo:'',//报案号
}
},
mounted() {
document.body.style.backgroundColor = '#fff'
this.rptNo = localStorage.getItem('rptNo')
EWebBridge.webCallAppInJs('webview_left_button', {
img: this.$assetsUrl + 'images/del-close@3x.png',
intercept: '1' //是否拦截原生返回事件 1是 其他否
})
window.appCallBack = this.appCallBack
},
beforeRouteLeave(to, from, next) {
document.body.style.backgroundColor = ''
next()
},
methods: {
appCallBack(data) {
if (data.trigger == 'left_button_click') {
this.$jump({
flag: 'service'
})
}
},
//返回服务页面
goBack() {
localStorage.removeItem('rptNo')
this.$jump({
flag: 'service'
})
},
//前往报案申请页面
nextStep() {
localStorage.removeItem('rptNo')
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/claims/insuredInfo'
},
routerInfo: {
path: '/claims/insuredInfo'
}
})
}
}
}
</script>
<style lang="scss" scoped>
.img {
width: 50px;
}
</style>

View File

@@ -0,0 +1,163 @@
<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" @input="valChange">
<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: {
// 输入内容改变时
valChange(value) {
if(value == '') {
this.isSearch = true
}
},
// 搜索
onSearch() {
this.$toast.loading({
duration: 0, // 持续展示 toast
forbidClick: true, // 禁用背景点击
loadingType: 'spinner',
message: '加载中……'
})
let data = {
queryParam: this.searchVal,
surrenderType: '1',
queryType: this.selected //0客户姓名1证件号码2手机号
}
customerList(data).then(res => {
if (res.result == 0) {
console.log(res)
this.$toast.clear()
if (res.content[0].customerName != '') {
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.isShow = false
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>
.customer {
height: 100%;
}
.search-container {
height: 100%;
.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,379 @@
<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.applyerSignState == 1">
<van-button type="danger" size="large" @click="next" v-no-more-click="1000" v-if="!isWeixin" :disabled="list.applyerSignState == 0">提交</van-button>
</div>
<UploadImageFile :typeface="idcardData.typeface" :realName="idcardData.idcardName" :idno="idcardData.idcardNumber" @sendimage="sendimage"></UploadImageFile>
<Read v-show="readShow" @confirm="goToNext"/>
</div>
</template>
<script>
import UploadImageFile from '@/components/ebiz/sale/UploadImageFile'
import Read from '@/components/ebiz/claims/Read'
import { Cell, CellGroup, Collapse, CollapseItem, Dialog } from 'vant'
import { getToken, getSignInvalid, checkSignInvalid } from '@/api/ebiz/sale/sale'
import { progressDetail, submit } 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: {},
idcardData: {
typeface: false,
idcardName: '',
idcardNumber: ''
},
readShow: false
}
},
components: {
[Cell.name]: Cell,
[CellGroup.name]: CellGroup,
[Collapse.name]: Collapse,
[CollapseItem.name]: CollapseItem,
[Dialog.name]: Dialog,
UploadImageFile: UploadImageFile,
Read
},
created() {
this.init()
},
mounted() {
if (!this.$route.query.edit || localStorage.claimFrom == null) {
EWebBridge.webCallAppInJs('webview_left_button', {
img: this.$assetsUrl + 'images/del-close@3x.png',
intercept: '1' //是否拦截原生返回事件 1是 其他否
})
window.appCallBack = this.appCallBack
}
},
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 => {
if (res.result == 0) {
console.log(res)
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 != '1') {
this.showRead()
} else {
this.idcardData.typeface = !this.idcardData.typeface
this.idcardData.idcardName = this.list.applyerName
this.idcardData.idcardNumber = this.list.applyerCertiCode
}
}
} else {
//不在微信
localStorage.setItem('sign-val', val)
if ((val = 3)) {
if (that.list.applyerCertiType != '1') {
this.showRead()
} else {
EWebBridge.webCallAppInJs('face_auth', {
//身份证号码
number: that.list.applyerCertiCode,
//姓名
name: that.list.applyerName
}).then(data => {
if (JSON.parse(data).state == '1') {
this.showRead()
}
})
}
}
}
},
sendimage(e) {
if (e) {
this.showRead()
}
},
showRead() {
this.readShow = true
},
goToNext() {
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/claims/ClaimsSignature'
},
routerInfo: {
path: '/claims/ClaimsSignature'
}
})
},
//页面返回服务页
appCallBack(data) {
if (data.trigger == 'left_button_click') {
this.$jump({
flag: 'service'
})
}
},
// 提交
next() {
localStorage.setItem('failMessage', '')
localStorage.setItem('successClaimNo', '')
let that = this
let data = { businessNo: localStorage.getItem('businessNo') }
submit(data).then(res => {
if (res.result == '0') {
localStorage.successClaimNo = res.content.claimNo
that.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/claims/Success',
forbidSwipeBack: '1',
backToFirst: '1'
},
routerInfo: {
path: '/claims/Success'
}
})
} else {
localStorage.failMessage = res.resultMessage
that.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/claims/Fail',
forbidSwipeBack: '1'
},
routerInfo: {
path: '/claims/Fail'
}
})
}
})
/*if (localStorage.claimFrom) {
that.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/claims/Success',
forbidSwipeBack: '1',
backToFirst: '1'
},
routerInfo: {
path: '/claims/Success'
}
})
} else {
that.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/claims/Fail',
forbidSwipeBack: '1'
},
routerInfo: {
path: '/claims/Fail'
}
})
}*/
}
}
}
</script>
<style lang="scss" scoped>
.text {
color: #4fc6b3;
margin-right: 5px;
}
</style>

View File

@@ -0,0 +1,60 @@
<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">赔案号{{ successClaimNo }}</p>
<p class="fs15 mt10">理赔申请提交成功我们会尽快核实请您耐心等待</p>
<p class="mt10">您可致电统一客服电话</p>
<p class="green mt10">4000-694-6688</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 {
successClaimNo: localStorage.getItem('successClaimNo')
}
},
mounted() {
document.body.style.backgroundColor = '#fff'
if (!this.$route.query.edit || localStorage.claimFrom == null) {
EWebBridge.webCallAppInJs('webview_left_button', {
img: this.$assetsUrl + 'images/del-close@3x.png',
intercept: '1' //是否拦截原生返回事件 1是 其他否
})
window.appCallBack = this.appCallBack
}
},
beforeRouteLeave(to, from, next) {
document.body.style.backgroundColor = ''
next()
},
methods: {
appCallBack(data) {
if (data.trigger == 'left_button_click') {
this.$jump({
flag: 'service'
})
}
},
back() {
this.$jump({
flag: 'service'
})
}
}
}
</script>
<style lang="scss" scoped>
.img {
width: 50px;
}
.green {
color: #1abc9c !important;
}
</style>