Compare commits

...

23 Commits

Author SHA1 Message Date
liu.xiaofeng@ebiz-digits.com
c85a4b0c36 健康险续保测试问题修复6 2023-12-05 14:48:08 +08:00
liu.xiaofeng@ebiz-digits.com
c60d13d299 健康险续保测试问题修复5 2023-12-05 14:46:58 +08:00
liu.xiaofeng@ebiz-digits.com
2b04786ee4 健康险续保测试问题修复4 2023-12-05 11:18:31 +08:00
liu.xiaofeng@ebiz-digits.com
b6a054e497 健康险续保测试问题修复3 2023-12-05 11:05:29 +08:00
liu.xiaofeng@ebiz-digits.com
6ef1448c5c 健康险续保测试问题修复2 2023-12-05 10:51:32 +08:00
liu.xiaofeng@ebiz-digits.com
3fe55b31a0 健康险续保测试问题修复1 2023-12-05 09:58:44 +08:00
liu.xiaofeng@ebiz-digits.com
56be7ad3d0 健康险续保测试问题修复 2023-12-05 09:53:50 +08:00
liu.xiaofeng@ebiz-digits.com
ef3838cee6 健康险续保营业部经理可以编辑未续报原因 2023-11-17 15:11:03 +08:00
liu.xiaofeng@ebiz-digits.com
e547b257b8 由列表页面跳转详情页面路由传参由原来的固定调整为动态的值 2023-11-13 17:20:13 +08:00
liu.xiaofeng@ebiz-digits.com
b36991c560 健康险续保搜索栏操作逻辑修改2 2023-11-03 17:06:54 +08:00
liu.xiaofeng@ebiz-digits.com
c308f870d0 健康险续保搜索栏操作逻辑修改1 2023-11-03 17:05:09 +08:00
liu.xiaofeng@ebiz-digits.com
406cf41e6c 健康险续保搜索栏操作逻辑修改 2023-11-03 16:55:31 +08:00
liu.xiaofeng@ebiz-digits.com
ddfbfa27ba 健康险续保列表页面搜索框功能修改并新增模糊搜索营业部经理下的代理人列表数据 2023-11-03 10:19:08 +08:00
liu.xiaofeng@ebiz-digits.com
88107a13b6 选择服务经理的弹窗数据展示效果调整为两个字段展示并做切换效果 2023-11-02 14:30:28 +08:00
liu.xiaofeng@ebiz-digits.com
329a10039f 营业部经理增加选择按钮并添加下拉弹窗 2023-11-02 10:35:38 +08:00
liu.xiaofeng@ebiz-digits.com
a029015516 区分营业部经理和服务经理的数据显示 2023-10-30 16:21:20 +08:00
liu.xiaofeng@ebiz-digits.com
382cddbe1c 自动计算健康险续保选择月份的第一天和最后一天的日期 2023-10-30 09:31:08 +08:00
liu.xiaofeng@ebiz-digits.com
2fa4b6dbd7 对接健康险续保得接口并调整相关字段展示1 2023-10-27 14:36:21 +08:00
liu.xiaofeng@ebiz-digits.com
eb20a40976 对接健康险续保得接口并调整相关字段展示 2023-10-27 13:30:50 +08:00
liu.xiaofeng@ebiz-digits.com
1be37f4648 增加健康险清单和健康险详情接口 2023-10-26 17:45:46 +08:00
liu.xiaofeng@ebiz-digits.com
96d62889be 健康险续保列表接口对接 2023-10-26 15:35:47 +08:00
liu.xiaofeng@ebiz-digits.com
3c447b9221 续保列表与详情页面效果细节调整 2023-10-18 15:41:15 +08:00
liu.xiaofeng@ebiz-digits.com
272bccd8b7 xubao 2023-10-17 18:13:51 +08:00
6 changed files with 521 additions and 24 deletions

View File

@@ -0,0 +1,34 @@
import request from '@/assets/js/utils/request'
import getUrl from '@/assets/js/utils/get-url'
export function healthgetRenewalList(data) {
return request({
url: getUrl('/sale/health/getRenewalList', 1),
method: 'post',
data
})
}
export function healthgetRenewalListDetail(data) {
return request({
url: getUrl('/sale/health/getRenewalListDetail', 1),
method: 'post',
data
})
}
export function reasonForNonRenewalSubmitted(data) {
return request({
url: getUrl('/sale/health/reasonForNonRenewalSubmitted', 1),
method: 'post',
data
})
}
export function getAgentManager(data) {
return request({
url: getUrl('/sale/health/getAgentManager', 1),
method: 'post',
data
})
}

View File

@@ -27,29 +27,29 @@ function getSearchString (key) {
}
return obj[key]
}
let apiVersion = 'v2'
var ua = window.navigator.userAgent.toLowerCase()
//通过正则表达式匹配ua中是否含有MicroMessenger字符串, 在微信
if (localStorage.getItem('apiVersion')) {
apiVersion = localStorage.getItem('apiVersion')
} else {
if (ua.match(/MicroMessenger/i) == 'micromessenger') {
//report/reportList数据报表页面在浏览器可以打开了但在微信或企业微信中打开不了,接口请求不需要token
if (window.location.href.indexOf('apiVersion') > 0) {
apiVersion = getSearchString('apiVersion') == 'V3' ? 'v3' : 'v2';//url中apiVersion没有时为v2
} else {
apiVersion = 'v3'
}
} else {
// 在app
if (navigator.userAgent.indexOf('JZG_') > 0) {
apiVersion = navigator.userAgent.split('JZG_')[1].split('/')[0].split('_')[1] == 'V3' ? 'v3' : 'v2'
}
}
window.localStorage.setItem('apiVersion', apiVersion)
}
// 可以多个接口域名,按需添加
console.log('环境:', process.env.VUE_APP_FLAG)
let apiVersion = 'v1'
// var ua = window.navigator.userAgent.toLowerCase()
// //通过正则表达式匹配ua中是否含有MicroMessenger字符串, 在微信
// if (localStorage.getItem('apiVersion')) {
// apiVersion = localStorage.getItem('apiVersion')
// } else {
// if (ua.match(/MicroMessenger/i) == 'micromessenger') {
// //report/reportList数据报表页面在浏览器可以打开了但在微信或企业微信中打开不了,接口请求不需要token
// if (window.location.href.indexOf('apiVersion') > 0) {
// apiVersion = getSearchString('apiVersion') == 'V3' ? 'v3' : 'v2';//url中apiVersion没有时为v2
// } else {
// apiVersion = 'v3'
// }
// } else {
// // 在app
// if (navigator.userAgent.indexOf('JZG_') > 0) {
// apiVersion = navigator.userAgent.split('JZG_')[1].split('/')[0].split('_')[1] == 'V3' ? 'v3' : 'v2'
// }
// }
// window.localStorage.setItem('apiVersion', apiVersion)
// }
// // 可以多个接口域名,按需添加
// console.log('环境:', process.env.VUE_APP_FLAG)
switch (process.env.VUE_APP_FLAG) {
case 'dev':
apiDomain = 'https://iagentsales-test2.e-guofu.com:5200/api/' + apiVersion // 国富api ///api/v1

View File

@@ -0,0 +1,23 @@
//健康险续保 定义相关组件
const healthInsuranceRenewalList = () => import('@/views/ebiz/healthInsuranceRenewal/list')
const healthInsuranceRenewalDetail = () => import('@/views/ebiz/healthInsuranceRenewal/detail')
export default [
{
path: '/healthInsuranceRenewal/list',
name: 'healthInsuranceRenewalList',
component: healthInsuranceRenewalList,
meta: {
title: '健康险续保清单',
index: 1
}
},
{
path: '/healthInsuranceRenewal/detail',
name: 'healthInsuranceRenewalDetail',
component: healthInsuranceRenewalDetail,
meta: {
title: '保单详情',
index: 1
}
}
]

View File

@@ -48,6 +48,8 @@ import allowance from './allowance'
import cooperativeUnit from './cooperativeUnit'
// YB_APP
import YB_APP from '../YB_APP/index'
//健康险续保
import healthInsuranceRenewal from './healthInsuranceRenewal'
export default [
...proposal,
...sale,
@@ -84,5 +86,6 @@ export default [
...laurelClub,
...allowance,
...cooperativeUnit,
...YB_APP
...YB_APP,
...healthInsuranceRenewal
] //根据需要进行删减

View File

@@ -0,0 +1,178 @@
<template>
<div class="detail-container pb50">
<van-cell title="客户名称" :value="dataInfo.name" />
<van-cell title="地址" :value="dataInfo.address" />
<van-cell title="联系人姓名" :value="dataInfo.contactName" />
<van-cell title="联系电话" :value="dataInfo.contactPhone" />
<van-cell title="原保单号" v-if="this.$route.query.renewalFlag == '0'" :value="dataInfo.contNo" />
<van-cell title="保单号" v-if="this.$route.query.renewalFlag == '1' && agentType == '服务经理'" :value="dataInfo.contNo" />
<van-cell title="新保单号" v-if="this.$route.query.renewalFlag == '1' && agentType == '营业部经理'" :value="dataInfo.contNo" />
<div v-if="this.$route.query.renewalFlag == '0'">
<div v-for="item in dataInfo.oldRiskMessageDTOList">
<van-cell title="原保单险种名称" :value="item.riskName" />
<van-cell title="原保单保费" :value="item.prem+'元'" class="lastvancell"/>
</div>
</div>
<van-cell title="保单保费" v-if="this.$route.query.renewalFlag == '1'" :value="dataInfo.prem+'元'" />
<van-cell title="代理人" v-if="agentType == '服务经理'" :value="dataInfo.agentCustomerManagerName" />
<van-cell title="代理人工号" v-if="agentType == '服务经理'" :value="dataInfo.agentCustomerManagertCode" />
<van-cell title="客户经理" v-if="agentType == '营业部经理'" :value="dataInfo.agentCustomerManagerName" />
<van-cell title="客户经理工号" v-if="agentType == '营业部经理'" :value="dataInfo.agentCustomerManagertCode" />
<van-collapse v-if="this.$route.query.renewalFlag == '0'" v-model="activeName1">
<van-collapse-item name="1">
<template #title>
<div style="display: flex;width: 100%;justify-content: space-between">
<span style="width: 33%;">续保意见</span>
<p style="display: inline-block;width: 65%;overflow:hidden;text-overflow: ellipsis;color: #969799;white-space: nowrap;">{{dataInfo.renewalOpinions}}</p></div>
</template>
<div>{{dataInfo.renewalOpinions}}</div>
</van-collapse-item>
</van-collapse>
<van-collapse v-if="this.$route.query.renewalFlag == '0'" v-model="activeName2">
<van-collapse-item name="1">
<template #title>
<div style="display: flex;width: 100%;justify-content: space-between">
<span style="width: 33%;">未续保原因</span>
<p style="display: inline-block;width: 44%;overflow:hidden;text-overflow: ellipsis;color: #969799;white-space: nowrap;">{{dataInfo.reason}}</p>
<van-button type="danger" round size="mini" @click.stop="dialogshow = true" style="margin-right: 10px;">编辑</van-button>
</div>
</template>
<div>{{dataInfo.reason}}</div>
</van-collapse-item>
</van-collapse>
<van-dialog v-model="dialogshow" title="未续保原因" show-cancel-button @confirm="dialogConfirm" @cancel="dialogCancel">
<div style="border: 1px solid #eee;margin: 0px 15px 5px 15px;" class="dialogtextarea">
<van-field v-model="message" rows="3" autosize label="留言" type="textarea" maxlength="200" placeholder="请输入" show-word-limit/>
</div>
</van-dialog>
</div>
</template>
<script>
import { Collapse, CollapseItem, Cell} from 'vant'
import { getAgentInfo } from '@/api/ebiz/my/my.js'
import { healthgetRenewalListDetail, reasonForNonRenewalSubmitted } from '@/api/ebiz/healthInsuranceRenewal/healthInsuranceRenewal'
export default {
components: {
[Collapse.name]: Collapse,
[CollapseItem.name]: CollapseItem,
[Cell.name]: Cell
},
data() {
return {
agentType: '',
dataInfo:{},
activeName1:[],
activeName2:[],
dialogshow: false,
message:''
}
},
created() {
},
mounted() {
this.getAgentInfo()
},
methods:{
getAgentInfo(){
let params = {
}
getAgentInfo(params).then(res=>{
if (res.result == 0) {
if(res.agentGrade == 'G200' || res.agentGrade == 'G201' || res.agentGrade == 'G202' || res.agentGrade == 'G202' || res.agentGrade == 'G204'){
this.agentType = '营业部经理'
} else {
this.agentType = '服务经理'
}
this.healthgetRenewalListDetail()
} else {
this.$toast(res.resultMessage)
}
})
},
healthgetRenewalListDetail(){
let params = {
"renewalFlag":this.$route.query.renewalFlag,
"agentCode":this.$route.query.agentCode,
"cvaliStartDate":this.$route.query.cvaliStartDate,
"cvaliEndDate":this.$route.query.cvaliEndDate,
"grpContNo": this.$route.query.grpContNo
}
healthgetRenewalListDetail(params).then(res=>{
if(res.result == 0){
if(this.$route.query.renewalFlag == '0'){
this.dataInfo = res.getUnRenewaLlistDetailDTO
}
if(this.$route.query.renewalFlag == '1'){
this.dataInfo = res.getRenewaLlistDetailDTO
}
} else {
this.$toast(res.resultMessage)
}
})
},
dialogConfirm(){
let params = {
"grpContNo": this.$route.query.grpContNo, //团保单号,续保清单给扔过
"xbReason":this.message,
"submitter": this.$route.query.agentCode
}
reasonForNonRenewalSubmitted(params).then(res=>{
if(res.result == 0){
this.$toast('提交成功')
this.dataInfo.reason = this.message
this.message = ''
}else{
this.$toast(res.resultMessage)
}
})
},
dialogCancel(){
this.message = ''
this.dialogshow = false
}
}
}
</script>
<style lang="scss" scoped>
/deep/ .van-cell__title{
flex:1;
}
/deep/ .van-cell__value{
flex:2;
}
/deep/ .van-cell__value {
text-align: left !important;
}
/deep/ .van-collapse-item__content{
word-break: break-word;
}
/deep/ .van-collapse-item{
width: 100%;
.van-cell__title{
width: calc(100% - 30px;);
}
}
.dialogtextarea{
/deep/ .van-cell__title{
display: none;
}
}
.lastvancell::after {
border-bottom: 1px solid #dadada;
}
.lastvancell::after {
position: absolute;
box-sizing: border-box;
content: ' ';
pointer-events: none;
right: 0;
bottom: 0;
left: 4.26667vw;
-webkit-transform: scaleY(.5);
transform: scaleY(.5);
}
</style>

View File

@@ -0,0 +1,259 @@
<template>
<div class="sale-list-container pb50">
<div class="topsearch" style="display: flex;background:#fff;align-items: center;">
<div v-if="agentType == '营业部经理'" style="width: 50%;padding: 10px 5px;">
<van-field @click="openchooseagent" v-model="searchName" disabled style="background: #f7f8fa;padding:5px 10px;" label="业务员" right-icon="arrow" placeholder="请选择"/>
</div>
<div style="width: 50%;padding: 10px 5px;">
<van-field @click="openshowDataPicker" v-model="showChooseDate" disabled style="background: #f7f8fa;padding:5px 10px;" label="日期" right-icon="arrow" placeholder="请选择"/>
</div>
</div>
<van-sticky>
<van-tabs :line-width="45" v-model="active" @change="tabChange" sticky>
<van-tab name="0" title="未续保"></van-tab>
<van-tab name="1" title="已续保"></van-tab>
</van-tabs>
</van-sticky>
<van-list
v-model="loading"
:immediate-check="false"
:finished="finished"
:finished-text="finishedText"
error-text="请求失败点击重新加载"
:error.sync="error"
@load="getOrderList"
class="pb45">
<div v-if="listData.length > 0">
<div v-for="(item, index) in listData" :key="index">
<div style="background: #fff;margin: 15px;border-radius: 5px;padding: 15px;">
<div style="line-height: 35px;"><span style="width: 40%;display: inline-block;">客户名称</span><span style="width: 60%;display: inline-block;">{{item.name}}</span></div>
<div style="line-height: 35px;"><span style="width: 40%;display: inline-block;">保单号</span><span style="width: 60%;display: inline-block;">{{item.contNo}}</span></div>
<div style="line-height: 35px;"><span style="width: 40%;display: inline-block;">保单终止时间</span><span style="width: 60%;display: inline-block;">{{item.endDate}}</span></div>
<div style="line-height: 35px;" v-if="item.continueFlag == '0'"><span style="width: 40%;display: inline-block;">是否续保</span><span style="width: 60%;display: inline-block;color: #d9001b;">未续保</span></div>
<div style="line-height: 35px;" v-if="item.continueFlag == '1'"><span style="width: 40%;display: inline-block;">是否续保</span><span style="width: 60%;display: inline-block;">已续保</span></div>
<div style="line-height: 35px;" v-if="agentType == '营业部经理'"><span style="width: 40%;display: inline-block;">服务经理</span><span style="width: 60%;display: inline-block;">{{item.agentManager}}</span></div>
<div style="line-height: 35px;display: flex;justify-content: flex-end;"><van-button round @click="goDetail(item)" size="small" style="height: 26px;line-height: 26px;" class="mr5" type="danger" v-no-more-click="1000">详情</van-button></div>
</div>
</div>
</div>
<div v-else class="text-center">
<img class="mt40" src="@/assets/images/pic_page-non.png" />
<div class="fs17 mt40">暂无数据</div>
</div>
</van-list>
<van-popup v-model="showDataPicker" position="bottom">
<van-datetime-picker type="year-month" v-model="currentDate" title="选择年月" :formatter="formatter" @confirm="onConfirmDate" @cancel="showDataPicker = false" :min-date="minDate" :max-date="maxDate"/>
</van-popup>
<van-popup v-model="popupShow" position="bottom">
<van-picker show-toolbar :columns="columns" @confirm="onConfirm" @cancel="popupShow = false" />
</van-popup>
</div>
</template>
<script>
import { Search, Tabs, Tab, List, Tag, Sticky, Field, Icon } from 'vant'
import { healthgetRenewalList, getAgentManager } from '@/api/ebiz/healthInsuranceRenewal/healthInsuranceRenewal'
export default {
name: 'saleList',
components: {
[Field.name]: Field,
[Search.name]: Search,
[Tabs.name]: Tabs,
[Tab.name]: Tab,
[List.name]: List,
[Tag.name]: Tag,
[Sticky.name]: Sticky,
[Icon.name]: Icon,
},
data() {
return {
agentType: '',
searchName: '',
agentCode: '',
active: '0',
listData: [],
loading: false,
finished: false,
total: '',
currentPage: 1,
error: false,
finishedText: '',
pageSize: 5,
showDataPicker:false,
minDate: new Date(2000, 0),
maxDate: new Date(2100, 12),
cvaliStartDate: '',
currentDate: '',
showChooseDate: '',
cvaliEndDate: '',
oldOptionsData:[],
columns: [],
popupShow: false,
}
},
mounted() {
this.initDate()
this.getAgentManager()
},
methods: {
openchooseagent(){
this.popupShow = true
},
onConfirm(val){
let thisIndex = val.indexOf(' ')
this.agentCode = val.slice(0, thisIndex)
this.searchName = val.slice(thisIndex).trim()
this.popupShow = false
this.currentPage = 1
this.listData = []
;[this.loading, this.finished] = [true, false]
this.getOrderList()
},
getAgentManager() {
let params = {
agentCode: 'G0000011'
}
getAgentManager(params).then(res=>{
if(res.result == '0') {
if(res.content.agentManagerFlag == '1') {
this.agentType = '营业部经理'
} else {
this.agentType = '服务经理'
}
if(res.content.getAgentListResDTOList && res.content.getAgentListResDTOList.length != 0){
res.content.getAgentListResDTOList.forEach(item => {
this.columns.push(item.agentCode + ' ' + item.name)
})
}
this.getOrderList()
} else {
this.$toast(res.resultMessage)
}
})
},
//列表查询
getOrderList() {
let params = {
renewalFlag: this.active,
agentCode: this.agentCode,
cvaliStartDate: this.cvaliStartDate,
cvaliEndDate: this.cvaliEndDate,
}
healthgetRenewalList(params).then(res => {
if (res.result == '0') {
if(this.active == '0'){
if(res.unRenewalInformationDTOList && res.unRenewalInformationDTOList.length != 0){
this.listData = res.unRenewalInformationDTOList
}
}
if(this.active == '1'){
if(res.informationDTOList && res.informationDTOList.length != 0){
this.listData = res.informationDTOList
}
}
;[this.loading, this.finished] = [false, true]
} else {
;[this.loading, this.finished] = [false, true]
this.$toast(res.resultMessage)
}
})
},
//切换
tabChange(name) {
this.currentPage = 1
this.active = name
this.listData = []
;[this.loading, this.finished] = [true, false]
this.getOrderList()
},
//搜索
searchList() {
this.currentPage = 1
this.listData = []
;[this.loading, this.finished] = [true, false]
this.getOrderList()
},
//投保单详情
goDetail(item) {
this.$router.push({
path: '/healthInsuranceRenewal/detail',
query: {
grpContNo: item.grpContNo,
renewalFlag: this.active,
agentCode: this.agentCode,
cvaliStartDate: this.cvaliStartDate,
cvaliEndDate: this.cvaliEndDate,
}
})
},
initDate(){
let thisDate = new Date()
let thisYear = thisDate.getFullYear()
let thisMonth = thisDate.getMonth()+1
if(thisMonth < 10){
thisMonth = '0'+thisMonth
}
this.currentDate = thisYear + '-' + thisMonth
this.showChooseDate = thisYear + '-' + thisMonth
let date = new Date(this.currentDate);
date.setDate(1);
let firstDay1 = date.toLocaleDateString();
this.cvaliStartDate = firstDay1.replaceAll('/','-')
date.setMonth(date.getMonth() + 1);
date.setDate(0);
let lastDay1 = date.toLocaleDateString();
this.cvaliEndDate = lastDay1.replaceAll('/','-')
},
//打开日期选择
openshowDataPicker(){
this.currentDate = new Date()
this.showDataPicker = true
},
//日期选择
onConfirmDate(value){
let thisDate = new Date(value)
let thisYear = thisDate.getFullYear()
let thisMonth = thisDate.getMonth()+1
if(thisMonth < 10){
thisMonth = '0'+thisMonth
}
this.currentDate = thisYear + '-' + thisMonth
this.showChooseDate = thisYear + '-' + thisMonth
console.log(this.currentDate)
let date = new Date(this.currentDate);
date.setDate(1);
let firstDay1 = date.toLocaleDateString();
this.cvaliStartDate = firstDay1.replaceAll('/','-')
date.setMonth(date.getMonth() + 1);
date.setDate(0);
let lastDay1 = date.toLocaleDateString();
this.cvaliEndDate = lastDay1.replaceAll('/','-')
this.showDataPicker = false
this.currentPage = 1
this.listData = []
;[this.loading, this.finished] = [true, false]
this.getOrderList()
},
formatter(type, val) {
if (type === 'year') {
return `${val}`;
} else if (type === 'month') {
return `${val}`;
}
return val;
},
}
}
</script>
<style lang="scss" scoped>
.topsearch{
/deep/ .van-field__label{
width: 50px;
}
}
</style>