【FIX】投保流程优化

This commit is contained in:
勾通
2025-11-18 13:47:24 +08:00
parent edc93779b2
commit 01c8b8e3a7
6 changed files with 253 additions and 137 deletions

View File

@@ -7,7 +7,10 @@
@click-overlay = "clickOverlay('overlay')" @click-overlay = "clickOverlay('overlay')"
> >
<div class="result-popup-title"> <div class="result-popup-title">
<span>您的适当性评估结果</span> <div>
<span></span>
<span>您的风险能力测评结果</span>
</div>
<van-icon name="cross" @click="clickOverlay('icon')"/> <van-icon name="cross" @click="clickOverlay('icon')"/>
</div> </div>
<div class="result-popup-content"> <div class="result-popup-content">
@@ -16,7 +19,7 @@
<div class='content'>您适合购买的产品类型为 <div class='content'>您适合购买的产品类型为
<span class='product-type'>{{resultRiskType}}</span> <span class='product-type'>{{resultRiskType}}</span>
</div> </div>
<div> <div class="levelList">
<div v-for="(item,idx) in productLevel" :key="idx" class="itemLevel"> <div v-for="(item,idx) in productLevel" :key="idx" class="itemLevel">
{{ item }} {{ item }}
</div> </div>
@@ -99,21 +102,36 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
.popup-ques-result{ .popup-ques-result{
.result-popup{ .result-popup{
border-top-left-radius: 15px;
border-top-right-radius: 15px;
.result-popup-title{ .result-popup-title{
padding:10px 10px 0; padding:10px 15px 10px 0;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
font-size: 20px; font-size: 18px;
font-weight: bolder; font-weight: bolder;
color:#000; color:#000;
border-bottom: 1px solid #ebe7e7;
div{
display:flex;
align-items: center;
span:first-child{
display:block;
height:20px;
width: 5px;
background-color: red;
border-radius: 2px;
margin-right:15px;
}
}
} }
.result-popup-content{ .result-popup-content{
padding:10px 10px 60px; padding:10px 10px 60px;
box-sizing:border-box; box-sizing:border-box;
.content{ .content{
font-size: 18px; font-size: 16px;
font-weight: bold; font-weight: bold;
color: #333; color: #333;
margin-bottom: 5px; margin-bottom: 5px;
@@ -121,9 +139,16 @@ export default {
color: #ee0a24; color: #ee0a24;
font-weight: bold; font-weight: bold;
} }
&:nth-child(2){
text-indent: 2em;
}
&:nth-child(3){
text-indent: 2em;
margin-bottom:5px;
}
} }
.tips{ .tips{
font-size: 14px; font-size: 12px;
color: #000; color: #000;
font-weight: bold; font-weight: bold;
margin-bottom: 5px; margin-bottom: 5px;
@@ -152,10 +177,17 @@ export default {
} }
} }
.levelList{
border:1px #DA7C43 solid;
border-radius:10px;
padding:10px;
background-color: #F5EAE4;
}
.itemLevel{ .itemLevel{
font-size: 12px; font-size: 12px;
color:#999; color:#DA7C43;
margin-bottom:5px; margin-bottom:5px;
line-height:1.8;
} }
} }
} }

View File

@@ -42,7 +42,9 @@ import {
Collapse, Collapse,
CollapseItem, CollapseItem,
RadioGroup, RadioGroup,
Radio Radio,
Checkbox,
CheckboxGroup
} from 'vant' } from 'vant'
@@ -74,6 +76,8 @@ Vue.use(PullRefresh)
Vue.use(List) Vue.use(List)
Vue.use(VanImage) Vue.use(VanImage)
Vue.use(Sticky) Vue.use(Sticky)
Vue.use(Checkbox)
Vue.use(CheckboxGroup)
Vue.use(animated) Vue.use(animated)
Vue.prototype.$assetsUrl = config.assetsUrl Vue.prototype.$assetsUrl = config.assetsUrl

View File

@@ -5,7 +5,7 @@ const addRiskList = () => import('@/views/ebiz/common/AddRiskList')
const calculatePremium = () => import('@/views/ebiz/common/CalculatePremium') const calculatePremium = () => import('@/views/ebiz/common/CalculatePremium')
const defalut = () => import('@/views/ebiz/common/Defalut') const defalut = () => import('@/views/ebiz/common/Defalut')
const companyIntroduce = () => import('@/views/ebiz/common/CompanyIntroduce') const companyIntroduce = () => import('@/views/ebiz/common/CompanyIntroduce')
const evaluateResult = () => import('@/views/ebiz/common/EvaluateResult') const productEvaResult = () => import('@/views/ebiz/common/productEvaResult')
export default [ export default [
{ {
@@ -69,9 +69,9 @@ export default [
} }
}, },
{ {
path: '/common/evaluateResult', path: '/common/productEvaResult',
name: 'EvaluateResult', name: 'productEvaResult',
component: evaluateResult, component: productEvaResult,
meta: { meta: {
title: '评估结果', title: '评估结果',
index: 1 index: 1

View File

@@ -37,7 +37,7 @@ const shortPeriodProduct = () => import('@/views/ebiz/sale/shortPeriodProduct')
const commitmentSelfProtect = () => import('@/views/ebiz/sale/commitmentSelfProtect') const commitmentSelfProtect = () => import('@/views/ebiz/sale/commitmentSelfProtect')
const readDocuments = () => import('@/views/ebiz/sale/readDocuments') const readDocuments = () => import('@/views/ebiz/sale/readDocuments')
const signDocuments = () => import('@/views/ebiz/sale/signDocuments') const signDocuments = () => import('@/views/ebiz/sale/signDocuments')
const questionEvaluate = () => import('@/views/ebiz/sale/questionEvaluate') const productEvaluate = () => import('@/views/ebiz/sale/productEvaluate')
let riskName = localStorage.riskName let riskName = localStorage.riskName
/**@type {import("vue-router").RouteRecord[]} */ /**@type {import("vue-router").RouteRecord[]} */
@@ -348,9 +348,9 @@ export default [
} }
}, },
{ {
path: '/sale/questionEvaluate', path: '/sale/productEvaluate',
name: 'questionEvaluate', name: 'productEvaluate',
component: questionEvaluate, component: productEvaluate,
meta: { meta: {
title: '保险产品适当性评估问卷' title: '保险产品适当性评估问卷'
} }

View File

@@ -25,6 +25,7 @@
confirmButtonText="知晓并同意警示书,继续投保" confirmButtonText="知晓并同意警示书,继续投保"
@confirm="onConfirm" @confirm="onConfirm"
class="riskDialog" class="riskDialog"
close-on-click-overlay="true"
> >
<span> <span>
  本人声明已了解及完全清楚产品责任风险情况保险利益不确定及不及时交纳保险费的风险经审慎考虑后仍坚持购买该产品并愿意承担由此可能产生的损失和其他后果购买该产品的决定系本人独立自主真实的意思表示   本人声明已了解及完全清楚产品责任风险情况保险利益不确定及不及时交纳保险费的风险经审慎考虑后仍坚持购买该产品并愿意承担由此可能产生的损失和其他后果购买该产品的决定系本人独立自主真实的意思表示
@@ -194,6 +195,9 @@ export default {
padding:20px 0; padding:20px 0;
} }
.quitDesc{ .quitDesc{
padding:10px;
border:1px dotted red;
border-radius:10px;
text-indent: 2em; text-indent: 2em;
} }
} }
@@ -213,6 +217,7 @@ export default {
} }
/deep/ .riskDialog{ /deep/ .riskDialog{
.van-dialog__header{ .van-dialog__header{
color:#ee0a24;
padding:20px 0; padding:20px 0;
font-size:16px; font-size:16px;
} }
@@ -222,8 +227,11 @@ export default {
font-size:14px; font-size:14px;
} }
.van-dialog__confirm{ .van-dialog__confirm{
background:#ee0a24;
.van-button__content{
font-size:16px; font-size:16px;
color:#5ca7de; color:#fff;
}
} }
} }
} }

View File

@@ -1,7 +1,14 @@
<template> <template>
<div class="question-container"> <div class="question-container">
<div class="question-header bg-white pt20 pb20 pr10 pl10" > <van-collapse v-model="activeNames" class="collapse">
<van-collapse-item name="1" >
<template #title>
<div class="collapseItemTitle">
<span class="appntTitleIcon"></span>
<h5 class="fs18 appntTitle">投保人信息</h5> <h5 class="fs18 appntTitle">投保人信息</h5>
</div>
</template>
<div class="fieldContent"> <div class="fieldContent">
<van-cell-group :border="false"> <van-cell-group :border="false">
<van-field v-model="saleInsuredInfo.name" label="姓名" readonly required/> <van-field v-model="saleInsuredInfo.name" label="姓名" readonly required/>
@@ -11,7 +18,14 @@
<van-field v-model="saleInsuredInfo.occupationName" label="职业" readonly required/> <van-field v-model="saleInsuredInfo.occupationName" label="职业" readonly required/>
</van-cell-group> </van-cell-group>
</div> </div>
<!-- <button class="btn" @click="clickBtn">返回</button> --> </van-collapse-item>
<van-collapse-item name="2" class="collapse-item">
<template #title>
<div class="collapseItemTitle">
<span class="appntTitleIcon"></span>
<h5 class="fs18 appntTitle">适当性评估问卷</h5>
</div>
</template>
<div class="evalDesc" > <div class="evalDesc" >
<h5 class="fs18"> {{questionInfo.questionHeadDesc}}</h5> <h5 class="fs18"> {{questionInfo.questionHeadDesc}}</h5>
<h5 class="fs18">{{questionInfo.question1Desc}}</h5> <h5 class="fs18">{{questionInfo.question1Desc}}</h5>
@@ -21,9 +35,9 @@
<h5 class="fs18">{{questionInfo.questionTailDesc}}</h5> <h5 class="fs18">{{questionInfo.questionTailDesc}}</h5>
</div> </div>
<div class="question-detail"> <div class="question-detail">
<div v-for="(item,idx) in questionList"> <div v-for="(item,idx) in questionList" class="questionItemList">
<!-- 单选框 --> <!-- 单选框 -->
<div v-if="item.type=='radio'"> <div v-if="item.type=='radio'" class="questionItem">
<p style="margin:2vh 0">{{ item.title }}</p> <p style="margin:2vh 0">{{ item.title }}</p>
<van-radio-group :disabled='disableEdit' class="mb15" v-model="answerList[idx]" @change="handlerRadio($event,item,idx)"> <van-radio-group :disabled='disableEdit' class="mb15" v-model="answerList[idx]" @change="handlerRadio($event,item,idx)">
<van-radio <van-radio
@@ -38,7 +52,7 @@
</div> </div>
<!-- 多选框 --> <!-- 多选框 -->
<div v-if="item.type=='checkbox'"> <div v-if="item.type=='checkbox'" class="questionItem">
<p style="margin:2vh 0">{{ item.title }}</p> <p style="margin:2vh 0">{{ item.title }}</p>
<van-checkbox-group <van-checkbox-group
:disabled='disableEdit' :disabled='disableEdit'
@@ -74,7 +88,7 @@
</div> </div>
<!-- 输入框 --> <!-- 输入框 -->
<div v-if="item.type=='input'" class="mb15"> <div v-if="item.type=='input'" class="mb15 questionItem">
<p class="budget-text"> <p class="budget-text">
<template v-for="(segment, index) in item.title.split(/\___/)" > <template v-for="(segment, index) in item.title.split(/\___/)" >
<!-- 显示文本片段 --> <!-- 显示文本片段 -->
@@ -97,11 +111,13 @@
</div> </div>
</div> </div>
</div> </div>
</div> </van-collapse-item>
</van-collapse>
<div class="question-btn bottom-btn bg-white"> <div class="question-btn bottom-btn bg-white">
<van-button type="danger" size="large" :disabled="disabled" class="bottom-btn" @click="submitAnswer" v-no-more-click="1000">提交</van-button> <van-button type="danger" size="large" :disabled="disabled" class="bottom-btn" @click="submitAnswer" v-no-more-click="1000">提交</van-button>
</div> </div>
<PopupQuesResult <PopupProductEva
@reTestHandler="reTest" @reTestHandler="reTest"
@toInsureHandler="toInsure" @toInsureHandler="toInsure"
@clickOverlayHandler="clickOverlay" @clickOverlayHandler="clickOverlay"
@@ -114,11 +130,11 @@
</template> </template>
<script> <script>
import { getOrderDetail, saveEvalateAnswer } from '@/api/ebiz/sale/sale' import { getOrderDetail, saveEvalateAnswer } from '@/api/ebiz/sale/sale'
import PopupQuesResult from '@/components/common/PopupQuesResult' import PopupProductEva from '@/components/common/PopupProductEva'
export default { export default {
name: 'Question', name: 'Question',
components: { components: {
PopupQuesResult PopupProductEva
}, },
data() { data() {
return { return {
@@ -142,6 +158,7 @@ export default {
showRetest:true, showRetest:true,
assessUpdateLimitFlag :null, assessUpdateLimitFlag :null,
disableEdit:false, // disableEdit:false, //
activeNames:['1','2']
} }
}, },
watch: { watch: {
@@ -917,10 +934,10 @@ export default {
this.$jump({ this.$jump({
flag: 'h5', flag: 'h5',
extra: { extra: {
url: location.origin +`/#/common/evaluateResult?orderNo=${this.$route.query.orderNo}` url: location.origin +`/#/common/productEvaResult?orderNo=${this.$route.query.orderNo}`
}, },
routerInfo: { routerInfo: {
path: `/common/evaluateResult?orderNo=${this.$route.query.orderNo}` path: `/common/productEvaResult?orderNo=${this.$route.query.orderNo}`
} }
}) })
} }
@@ -931,27 +948,28 @@ export default {
.question-container { .question-container {
width: 100%; width: 100%;
padding-bottom:50px; padding-bottom:50px;
/deep/.question-detail{ /deep/ .question-detail{
margin-top:10px; margin-top:10px;
.van-checkbox{ .van-checkbox{
align-items: flex-start; align-items: flex-start;
} }
// .question-detail-checkbox{ .questionItem{
// padding: 10px; margin-bottom:15px;
// } padding-bottom: 5px;
border-bottom: 1px #ebe7e7 solid;
} }
.question-header{ .questionItemList:nth-child(7){
// height:calc(100vh - 40px); .questionItem {
//padding-bottom:20px; border:none;
overflow-y: auto; }
/deep/ .fieldContent{ }
margin:5px 0; }
.van-cell__title,input{ .van-cell__title,input{
color:#999; color:#999;
font-size:14px; font-size:14px;
} }
}
.appntTitle{ .appntTitle{
color:#333; color:#333;
} }
@@ -961,7 +979,7 @@ export default {
} }
} }
}
.question-btn{ .question-btn{
height:50px; height:50px;
} }
@@ -984,6 +1002,60 @@ export default {
} }
} }
.van-collapse-item{
margin-top:10px;
}
/deep/ .firstCollapseItem{
.van-collapse-item__content{
padding-top:0;
}
}
// .appntTitleIcon{
// display:block;
// height:20px;
// width: 5px;
// background-color: red;
// border-radius: 2px;
// margin-right:15px;
// }
// /deep/ .collapse{
// .van-cell__title :before{
// content:'';
// position:absolute;
// left:0;
// height: 10px;
// width:5px;
// background-color:red;
// }
// }
/deep/ .collapse{
.van-collapse-item__title{
padding-left:0;
}
}
.collapseItemTitle{
display:flex;
align-items: center;
padding-left:0;
span:first-child{
display:block;
height:20px;
width: 5px;
background-color: red;
border-radius: 2px;
margin-right:15px;
}
}
} }