• 返回失败信息


    <template>
    	<div class="step_insure">
    		<com-nav-bar title="投保信息">
    			<i class="iconfont icon-xiangzuo" slot="left"></i>
    		</com-nav-bar>
    		<div class="step_insure_inner" ref="scrollWrapper">
    			<div>
    				<div class="info_wrapper">
    					<div class="list-item">
    						<div class="authInfo" v-if="authentication==0">
    							<span class="authtext">您尚未进行实名认证</span>
    							<span class="authaction" @click="goDetails()">立即进行认证<i class="iconfont icon-xiangyou"></i></span>
    						</div>
    						<div class="stance"></div>
    						<div class="title">
    							<h3>基本信息</h3>
    						</div>
    						<ul class="info-list">
    							<com-date-picker :formatType="dateType" name="起保时间" :minDate="mintime" maxDate="2030-01-30 23:59:00" v-model="submitData.startDate" />
    							<li class="item">
    								<span class="name">保障期</span>
    								<div class="content">
    									<span class="contentvals">{{cover}}</span>
    								</div>
    							</li>
    							<li class="date-picker-item" v-if="id=='P10010001'">
    								<span class="name">保障方案</span>
    								<label class="content">
    									<div class="wrapper">
    										<input readonly type="text" v-model="value1" placeholder="请选择"  @click="show=true"/>
    									</div>
    									<i class="iconfont icon-xiangyou"></i>
    								</label>
    								<popup-picker ref="picker" :data="arr1" :columns="1" :show.sync="show" :show-name="true" @on-hide="onHide" @on-change="onChange" :show-cell="false" />
    							</li>
    						</ul>
    						<div class="title" v-if="id==='CMJTCCX'">
    							<h3 class="clearleft">房产信息</h3>
    						</div>
    						<ul class="info-list" v-if="id==='CMJTCCX'">
    							<li class="item">
    								<span class="name">房产地址</span>
    								<div class="content">
    									<input type="text" v-model="target.address" placeholder="请填写房屋地址" />
    								</div>
    							</li>
    							<com-area-picker v-model="target.areaData" name="区域" v-if="id=='JSRYWX'||id=='CMJTCCX'" />
    						</ul>
    						<div class="tabHeader" v-if="id=='P10010001'||id=='SDCHSYWX'">
    							<span class="tabtn" @click="change(index,)" v-for="(item,index) in changeData" :class="{actives:actives===index}" :key="index">
    								{{item.name}}
    							</span>
    						</div>
    						<div class="title" style="padding-top:15px"  v-if="id=='P10010001'||id=='SDCHSYWX'">
    							<h2 class="clearleft">投保人信息</h2>
    						</div>
    						<div class="title" v-else>
    							<h3 class="clearleft">投保人信息</h3>
    						</div>
    						<ul class="info-list" v-if="actives==0">
    							<li class="item">
    								<span class="name">姓名</span>
    								<div class="content">
    									<input type="text" v-model="policyholder.name" placeholder="请填写姓名" />
    								</div>
    							</li>
    							<com-picker v-if="id=='P10010001'" v-model="policyholder.certType" :data="cerTypes" name="证件类型" />
    							<com-picker v-else  v-model="policyholder.certType" :data="cerTypesD" name="证件类型" />
    							<li class="item">
    								<span class="name">证件号码</span>
    								<div class="content">
    									<input type="text" v-model="policyholder.certCode" placeholder="请填写证件号" />
    								</div>
    							</li>
    							<com-date-picker v-if="policyholder.certType!=1" name="出生日期" minDate="1880-01-30 23:59:00" maxDate="2030-01-30 23:59:00" v-model="policyholder.birthDate" />
    							<com-sex name="性别" v-if="policyholder.certType!=1" @sendVal="send" />
    							<li class="item">
    								<span class="name">手机号</span>
    								<div class="content">
    									<input type="tel" v-model="policyholder.phone" placeholder="请填写手机号" />
    								</div>
    							</li>
    							<li class="item"  v-if="id=='P10010001'||id=='SDCHSYWX'">
    								<span class="name">电子邮箱(非必填)</span>
    								<div class="content">
    									<input type="tel" v-model="policyholder.email" placeholder="用于接收电子保单" />
    								</div>
    							</li>
    						</ul>
    						<ul class="info-list" v-if="actives==1">
    							<li class="item">
    								<span class="name">企业名称</span>
    								<div class="content">
    									<input type="text" v-model="policyholdere.name" placeholder="请填写名称" />
    								</div>
    							</li>
    							<li class="item">
    								<span class="name">社会统一信用码</span>
    								<div class="content">
    									<input type="text" v-model="policyholdere.certCode" placeholder="请填写" />
    								</div>
    							</li>
    							<li class="item">
    								<span class="name">联系电话</span>
    								<div class="content">
    									<input type="tel" v-model="policyholdere.phone" placeholder="请填写联系电话" />
    								</div>
    							</li>
    							<li class="item"  v-if="id=='P10010001'||id=='SDCHSYWX'">
    								<span class="name">电子邮箱(非必填)</span>
    								<div class="content">
    									<input type="tel" v-model="policyholdere.email" placeholder="用于接收电子保单" />
    								</div>
    							</li>
    						</ul>
    						<div class="title">
    							<h3 class="clearleft">被保人信息</h3>
    						</div>
    						<ul class="info-list" v-if="actives==0">
    							<div class="other">本人</div>
    						</ul>
    						<ul class="info-list" v-if="actives==1 && id==='SDCHSYWX'">
    							<li class="item">
    								<span class="name">姓名</span>
    								<div class="content">
    									<input type="text" v-model="insuredInfo.name" placeholder="请填写姓名" />
    								</div>
    							</li>
    							<com-picker v-model="insuredInfo.certType" :data="cerTypes" name="证件类型" />
    							<li class="item">
    								<span class="name">证件号码</span>
    								<div class="content">
    									<input type="text" v-model="insuredInfo.certCode" placeholder="请填写证件号" />
    								</div>
    							</li>
    							<com-date-picker v-if="insuredInfo.certType!=1" name="出生日期" minDate="1880-01-30 23:59:00" maxDate="2030-01-30 23:59:00" v-model="policyholder.birthDate" />
    							<com-sex name="性别" v-if="insuredInfo.certType!=1" @sendVal="send" />
    							<li class="item">
    								<span class="name">手机号</span>
    								<div class="content">
    									<input type="tel" v-model="insuredInfo.phone" placeholder="请填写手机号" />
    								</div>
    							</li>
    							<li class="item"  v-if="id=='P10010001'||id=='SDCHSYWX'">
    								<span class="name">电子邮箱(非必填)</span>
    								<div class="content">
    									<input type="tel" v-model="insuredInfo.email" placeholder="用于接收电子保单" />
    								</div>
    							</li>
    						</ul>
    						<ul class="info-list" v-if="actives==1 && id==='P10010001'">
    							<li class="item" @click="goDeat">
    							    <span class="name">已添加人员</span>
                                    <span class="showtext" v-if="insureDatalist.length>0 && errShow==2">{{insurelength}}人</span>
                                    <span class="showtext" v-else-if="errShow==1" style="color:red">{{insurelength}}</span>
                                    <span class="showtext" v-else>{{0}}人</span>
                                    <i class="iconfont icon-xiangyou"></i>
    							</li>
    							
    						</ul>
    						<div class="title">
    							<h3 class="clearleft">受益人信息</h3>
    						</div>
    						<ul class="info-list">
    							<div class="other">法定受益人</div>
    						</ul>
    					</div>
    				</div>
    			</div>
    		</div>
    		<div class="btn-bottom">
    			<div class="btn">
    				<button>保费:{{premium}}</button>
    				<button @click="verify()">立即投保</button>
    			</div>
    		</div>
    	</div>
    </template>
    
    <script>
    	import BScroll from "better-scroll";
    	import urls from "@/api/urls";
    	import { Group, XAddress, Confirm, PopupPicker } from "vux";
    	import cerTypes from "../../assets/json/ax";
    	import cerTypesD from "../../assets/json/certificate-types";
    	import isEmpty from "lodash/isEmpty";
    	import router from '../../router'
    
    	export default {
    		components: {
    			Group,
    			XAddress,
    			Confirm,
    			PopupPicker
    		},
    		data() {
    			const defaultTime = this.$moment().format("YYYY-MM-DD");
    			return {
    				show: false,
    				cerTypes, //身份证选项
    				cerTypesD,//身份证选项富德的
    				social: 1,
    				actives: 0,
    				value1: '',
    				insuredInfo:{
    					certType:'1',
    					personType:'1'
    				},
    				changeData: [{
    					name: '个人投保'
    				}, {
    					name: '企业投保'
    				}],
    				socialArray: [{
    						id: '1',
    						text: '有'
    					},
    					{
    						id: '0',
    						text: '无'
    					},
    				], //有无社保
    				excessive: {},
    				policyholder: {
    					certType:'1',
    					sex: '1',
    					personType:'1'
    				}, //投保人
    				policyholdere: {
    					sex: '1',
    					personType:'1'
    				}, //投保人
    				submitData: {
    					startDate: defaultTime,
    					personList: [],
    					extendParams: {}
    				}, //提交数据
    				dateType: "",
    				oldUrl: "",
    				oldPath: "",
    				flag: false,
    				area: ["110000", "110100"],
    				mintime: '',
    				cover: '',
    				authentication: 1,
    				premium: '0.00元',
    				urlAddress: '',
    				arr1: [],
    				arr: [],
    				fangan: [],
    				planCode: '',
    				hFlag: 1,
    				planfrom: '',
    				target:{
    				    areaData: ["110000", "110100"],
    					address:''
    				},
    				insurelength:'',
    				errShow:2,
    			};
    		},
    		beforeRouteEnter(to, from, next) {
    			next(vm => {
    				vm.oldUrl = from.path;
    				vm.oldPath = from.query;
    			});
    		},
    		created() {
    			this.send(1)
    			this.flag = this.$route.query.flag;
    			this.id = this.$route.query.id; //产品code
    			this.fangan = this.$route.query.fangan
    			this.value1 = this.$route.query.planName
    			this.changeDate(this.submitData.startDate);
    			this.getproductInfo()
    			if(document.location.port) {
    				this.urlAddress = document.location.protocol + '//' + document.domain + ':' + document.location.port + '/details/result';
    			} else {
    				this.urlAddress = document.location.protocol + '//' + document.domain + '/details/result';
    			}
    			if(sessionStorage.getItem('insureDatalist')){
                    this.insurelength=this.insureDatalist.length
                }else{
                    this.insurelength=0
                }
    		},
    		computed: {
    			insureDatalist() {
                    return this.$store.getters.getinsureDatalist
                },
    			payData: function() {
    				return this.$store.getters.getpayData;
    			},
    			orderData: function() {
    				return this.$store.getters.getorderData;
    			}
    		},
    		mounted() {
    			this.platform = sessionStorage.getItem("temp");
    			this.scroller = new BScroll(this.$refs.scrollWrapper, {
    				click: true,
    				pullUpLoad: {
    					threshold: 60
    				}
    			});
    			this.scroller.on("pullingUp", this.loadMore, this);
    			this.$nextTick(() => {
    				if(this.oldUrl === "/details/confirm"||this.oldUrl === "/details/insuredperList") {
    					if(isEmpty(this.payData)) {
    						this.getInfo(); //payData为空,调获取投保人信息接口
    						this.hFlag = 3
    						return false;
    					} else {
    						this.actives= this.payData.actives
    						if(this.payData.personList[0].policyholder.certType==='1'){
    							this.policyholder = this.payData.personList[0].policyholder
    						}else{
    							this.policyholdere = this.payData.personList[0].policyholder
    						}
    						this.submitData = this.payData
    					}
    				} else {
    					this.getInfo()
    					this.hFlag = 3
    				}
    			})
    		},
    		beforeDestroy() {
    			this.scroller.destroy();
    		},
    
    		methods: {
    			 // 添加被保人
                goDeat() {
                    this.$router.push({path: '/details/insuredperList',query:{type:2,errInfo:1}})
                    const params = []
    				params.actives=this.actives
    				this.getSubmitData()
                    Object.assign(this.submitData, params)
                    this.$store.dispatch('setpayData', this.submitData)
    			},
    			//切换个人和企业
    			change(val) {
    				this.actives = val
    			},
    			onHide() {},
    			onChange(val) {
    				this.value1 = val
    				this.goForm()
    			},
    			goForm() {
    				let testArr = this.arr
    				for(let i = 0; i < testArr.length; i++) {
    					if(this.value1 + '' === testArr[i].name) {
    						this.premium = testArr[i].code
    						this.planCode = testArr[i].value
    					}
    				}
    			},
    			//实名认证
    			goDetails() {
    				this.$router.push({
    					path: '/my/userauth'
    				})
    			},
    			//产品属性
    			getproductInfo() {
    				this.$loadingStart()
    				this.$http(urls.attribute, {
    						productCode: this.id,
    					})
    					.then(res => {
    						this.$loadingEnd()
    						this.mintime = res.data.minDate;
    						this.cover = res.data.coverPeriod;
    						let plan = res.data.multiPlanList
    						for(var i = 0; i < plan.length; i++) {
    							let item = {}
    							item.name = plan[i].planName;
    							item.value = plan[i].planCode;
    							item.code = plan[i].premium
    							this.arr.push(item)
    							this.arr1.push(plan[i].planName)
    						}
    						let testArr = this.arr
    						for(let i = 0; i < testArr.length; i++) {
    							if(this.value1 + '' === testArr[i].name) {
    								this.premium = testArr[i].code
    								this.planCode = testArr[i].value
    							} else {
    								this.premium = res.data.multiPlanList[0].premium
    								this.planCode = res.data.multiPlanList[0].planCode
    							}
    						}
    						if(this.hFlag == 3) {
    							this.submitData.startDate = res.data.suggestDate;
    						} else {
    							this.submitData.startDate = this.payData.startDate;
    							this.planfrom = this.payData.planCode
    							let testArr1 = this.arr
    							for(let i = 0; i < testArr1.length; i++) {
    								if(this.planfrom === testArr1[i].value) {
    									this.value1 = testArr1[i].name
    									this.premium = testArr1[i].code
    									this.planCode = testArr1[i].value
    								}
    							}
    						}
    
    					})
    					.catch(err => {
    						this.$loadingEnd();
    						this.$errorHandler(err)
    					})
    			},
    			//切换性别
    			send(val) {
    				this.policyholder.sex = val
    			},
    			// 时间转化
    			changeDate(time) {
    				let formatStr = "YYYY-MM-DD";
    				if(time) {
    					const arr = time.split(" ");
    					const arrLen = arr.length;
    					if(arrLen >= 2) {
    						const hhArr = arr[1].split(":");
    						const hhArrLen = hhArr.length;
    						if(hhArrLen > 1) {
    							formatStr += " " + "HH:mm";
    						} else if(hhArrLen === 1) {
    							formatStr += " " + "HH";
    						}
    					} else if(arrLen === 1) {
    						const yyArr = arr[0].split("-");
    						const yyArrLen = yyArr.length;
    						if(yyArrLen === 3) {
    							formatStr = "YYYY-MM-DD";
    						} else if(yyArrLen === 2) {
    							formatStr = "YYYY-MM";
    						} else if(yyArrLen === 1) {
    							formatStr = "YYYY";
    						}
    					}
    				}
    				this.dateType = formatStr;
    			},
    			//获取投保人信息
    			getInfo() {
    				this.$loadingStart();
    				this.submitData.personList = [];
    				this.$http(urls.getUserInfo, {})
    					.then(res => {
    						this.$loadingEnd();
    						let obj = {}
    						obj.name = res.data.name
    						obj.phone = res.data.phone
    						obj.certCode = res.data.certCode
    						obj.certType = res.data.certType
    						this.fangan = this.$route.query.id
    						this.authentication = res.data.certStatus
    						if(this.id=='P10010001'||this.id=='SDCHSYWX'){
    							console.log("赛车和零工保")
    							if(res.data.certType==="20"){
    								console.log("是企业")
    								this.actives=1
    								this.policyholdere = obj
    							}else{
    								this.actives=0
    								this.policyholder= obj
    								this.policyholder.certType = res.data.certType;
    								Object.assign(this.policyholder, {
    									'sex': '1'
    								})
    							}
    						}else{
    							console.log("产品都不满足")
    							this.policyholder= obj
    							Object.assign(this.policyholder, {
    								'sex': '1'
    							})
    						}
    						
    					})
    					.catch(this.$errorHandler.bind(this));
    			},
    			//获取提交的信息
    			getSubmitData() {
    				this.submitData.personList = []
    				this.submitData.productCode = this.id
    				this.submitData.actives = this.actives
    				if(this.planCode == '') {
    					this.submitData.planCode = this.value1
    				} else {
    					this.submitData.planCode = this.planCode
    				}
    				this.submitData.count = 1
    				this.submitData.extendParams = {
    					payFinishUrl: this.urlAddress
    				}
    				//快递保和分拣包加地区
    				if(
    					this.id == "JSRYWX" ||
    					this.id == "JSRYWXFJ"
    				) {
    					this.policyholder.areaData = this.area;
    					this.policyholder.area = this.area.join("-");
    				} else {}
    				var item = {};
    				//身份证的时候去掉性别
    				if(this.policyholder.certType == 1) {
    					delete this.policyholder.sex
    				}
    				//切换个人企业投保的时候传值
    				if(	this.actives==0){
    					this.policyholder.certType='1'
    					item.policyholder = this.policyholder
    					item.holderIsInsured = 1
    				}else{
    					this.policyholdere.certType='20'
    					item.policyholder = this.policyholdere
    					item.insureds =[this.insuredInfo]
    				}
    				//云丁产品
    				if(this.id == "CMJTCCX") {
    					this.target.area=this.target.areaData.join("-");
    					item.target = this.target
    				} 	
    				//零工保的企业投保
    				if(this.id=='P10010001' && this.actives==1){
    					this.submitData.type=2
    					var items=[]
    					if(Array.isArray(this.insureDatalist)){
    						let val=this.insureDatalist
    						for(var i= 0;i<val.length;i++){
    							items.push(val[i])
    						}
    						item.policyholder= this.policyholdere
    						item.insureds=items
    					}
    				}
    				this.submitData.personList.push(item)
    			},
    			// 投保信息验证
    			verify() {
    				console.log( this.submitData)
    				this.getSubmitData()
    				this.$loadingStart();
    				this.$http(urls.batchVerity, this.submitData)
    					.then(res => {
    						this.$loadingEnd();		
    						if(res.code == "2003") {
    							let _this=this
                                this.$vux.alert.show({
                                    title: '鲸保网提示',
                                    content: res.message[0].details,
                                    onShow () {
                                    },
                                    onHide () {
                                        _this.flag=false
                                        //失败的数组
                                        let failedList=res.message
                                        let arr=_this.submitData.personList[0].insureds
                                        let arr_=[]
    									let result=[]
    									//验证
                                        let re = /^(personList[0].insureds[[d]{1,10}])/
                                        let cache = {}
                                        for(let i=0;i<failedList.length;i++){
                                            let failItem = failedList[i]
                                            if(re.test(failItem.digest)){
                                                let reResult = re.exec(failItem.digest)
                                                if(!cache[reResult[1]]){
                                                    cache[reResult[1]]=failItem.details
                                                }
                                            }
    									}
    									//整合对比失败的数组
                                        for(let i=0;i<arr.length;i++){
                                            var itemObj={}
                                            itemObj=arr[i]
                                            let key = "personList[0].insureds["+i+"]"
                                            if(cache[key]){
                                                itemObj.errMsg=cache[key]
                                            }
                                            arr_.push(itemObj)
                                            _this.$store.dispatch("setinsureDatalist",arr_); //存储列表
                                        }
                                         console.log(arr_)
                                        //自己组成的数组
                                        for(var i = 0; i < arr_.length; i++){
                                            var obj = arr_[i];
                                            if(obj.errMsg){
                                                result.push(i)
                                            }
                                        }
                                        console.log(result)
                                        _this.errShow=1
                                        _this.insurelength=result.length+'人身份信息错误'
                                        
                                    }
                                })
    						} else {
    							this.$loadingEnd();
    							this.flag = false;
    							this.excessive = res.data;
    							this.$store.dispatch("setorderReturnData", this.excessive);
    							this.$store.dispatch("setpayData", this.submitData);
    							router.push({
    								path: "/details/confirm",
    							});
    						}
    					})
    					.catch(err => {
    						this.flag = false;
    						this.$loadingEnd();
    						this.$errorHandler(err);
    					});
    			}
    		}
    	};
    </script>
    
  • 相关阅读:
    LightOJ 1370 Bi-shoe and Phi-shoe
    CF410div2 B. Mike and strings
    CF410div2 A. Mike and palindrome
    CF410div2 D. Mike and distribution
    CF798 C. Mike and gcd problem
    LightOJ1282 Leading and Trailing
    入门-2
    入门-1
    铅笔,用用,舍不得放下
    《快乐读书 轻松理财》书摘
  • 原文地址:https://www.cnblogs.com/lml-lml/p/10284325.html
Copyright © 2020-2023  润新知