feat-主险选择新增职业校验逻辑

This commit is contained in:
zhang.weiwei
2024-08-07 18:34:48 +08:00
parent 1dd7a9368c
commit a6f57ffa35
3 changed files with 112 additions and 70 deletions

View File

@@ -117,4 +117,15 @@ export function funcPermCheck(data) {
method: 'post',
data
})
}
}
/** add by zhangweiwei FCRS-764 国富无忧两全保险B款新增主险职业校验逻辑 start at 20240807 */
// 校验职业是否符合产品要求
export function occupationCodeCheck(data) {
return request({
url: getUrl('/sale/product/occupationCodeCheck', 1),
method: 'post',
data
})
}
/** add by zhangweiwei FCRS-764 国富无忧两全保险B款新增主险职业校验逻辑 end at 20240807 */

View File

@@ -62,7 +62,8 @@ let sale = [
'/sale/insure/selfToHuman',
'/sale/insure/orderPayStatusQuery',
'/sale/order/revokeOrder',
'/sale/product/getcompany'
'/sale/product/getcompany',
'/sale/product/occupationCodeCheck'
] //在线投保
let agentEnter = [
'/agent/enter/share',

View File

@@ -50,8 +50,8 @@
</div>
</template>
<script>
import { Cell, CellGroup, Tag, Radio, RadioGroup,Tab,Tabs} from 'vant'
import { mainRiskList,mainRiskListProposal,calculatePremium,getActProductList } from '@/api/ebiz/common/common'
import { Cell, CellGroup, Tag, Radio, RadioGroup, Tab, Tabs } from 'vant'
import { mainRiskList, mainRiskListProposal, calculatePremium, getActProductList, occupationCodeCheck } from '@/api/ebiz/common/common'
import { getOrderDetail, riskLevelCheck } from '@/api/ebiz/sale/sale'
import { getDetail } from '@/api/ebiz/proposal/proposal.js'
import riskRules from './risk-rules'
@@ -63,13 +63,13 @@ export default {
[CellGroup.name]: CellGroup,
[Tag.name]: Tag,
[Cell.name]: Cell,
[Tab.name]:Tab,
[Tabs.name]:Tabs,
[Tab.name]: Tab,
[Tabs.name]: Tabs
},
data() {
return {
recommendType: '', // 渠道控制
isCrossChannel: 0, // 是否选择交叉渠道列表 0-否 1-是
recommendType: '', // 渠道控制
isCrossChannel: 0, // 是否选择交叉渠道列表 0-否 1-是
active: 'normal',
specilFlag: '0',
flag: true,
@@ -79,7 +79,7 @@ export default {
radioVal: '',
isFrom: localStorage.isFrom,
activeFlag: '',
isActivityCode:'' //activityCode 有值的话代表是活动,无值代表是普通产品
isActivityCode: '' //activityCode 有值的话代表是活动,无值代表是普通产品
}
},
async mounted() {
@@ -87,16 +87,16 @@ export default {
flag: 'navigation',
extra: {
title: '主险选择列表'
},
}
})
if (localStorage.isFrom == 'sale') {
return new Promise((resolve, reject) => {
getOrderDetail({ orderNo: this.$route.query.orderNo }).then(
res => {
(res) => {
if (res.result == 0) {
//------------------------专为桂/惠企写死--begin---------------//
if (res.orderDTO.insuredDTOs[0] && res.orderDTO.insuredDTOs[0].riskDTOLst) {
this.flag = this.specilFlag = res.orderDTO.insuredDTOs[0].riskDTOLst.some(v => {
this.flag = this.specilFlag = res.orderDTO.insuredDTOs[0].riskDTOLst.some((v) => {
return v.riskCode == 'GFRS_M0024' || v.riskCode == 'GFRS_M0040'
})
if (this.flag) {
@@ -108,16 +108,16 @@ export default {
//isActivityCode 有值代表是活动,无值代表是普通产品
this.isActivityCode = res.orderDTO.orderInfoDTO.activityCode
// recommendType 03 银保渠道
this.recommendType = res.orderDTO.recmdDTO.recommendType;
this.recommendType = res.orderDTO.recmdDTO.recommendType
if (this.recommendType == '02' || this.recommendType == '11' || (this.recommendType == '03' && this.isActivityCode)) {
// 电投 团险渠道产品 均为交叉渠道销售
this.isCrossChannel = '1';
this.isCrossChannel = '1'
}
// ------------------------专为桂/惠企写死--end---------------//
}
resolve(this.isActivityCodeFunc())
},
error => {
(error) => {
reject(this.isActivityCodeFunc())
}
)
@@ -126,49 +126,51 @@ export default {
return new Promise((resolve, reject) => {
getDetail({
orderNo: this.$route.query.proposalOrderNo
}).then(res => {
if (res.result == '0') {
this.recommendType = res.content[0].recmdDTO?res.content[0].recmdDTO.recommendType:'';
if (this.recommendType == '02' || this.recommendType == '11') {
// 电投 团险渠道产品 均为交叉渠道销售
this.isCrossChannel = '1';
}).then(
(res) => {
if (res.result == '0') {
this.recommendType = res.content[0].recmdDTO ? res.content[0].recmdDTO.recommendType : ''
if (this.recommendType == '02' || this.recommendType == '11') {
// 电投 团险渠道产品 均为交叉渠道销售
this.isCrossChannel = '1'
}
}
resolve(this.isActivityCodeFunc())
},
(error) => {
reject(this.isActivityCodeFunc())
}
resolve(this.isActivityCodeFunc())
},
error => {
reject(this.isActivityCodeFunc())
})
)
})
}
},
methods: {
onChangeMainList(name){
onChangeMainList(name) {
if (name == 'cross') {
this.isCrossChannel = '1';
}else{
this.isCrossChannel = '0';
this.isCrossChannel = '1'
} else {
this.isCrossChannel = '0'
}
this.isActivityCodeFunc();
this.isActivityCodeFunc()
},
isActivityCodeFunc(){
//isActivityCode 有值代表是活动,无值代表是普通产品
isActivityCodeFunc() {
//isActivityCode 有值代表是活动,无值代表是普通产品
// if(this.isActivityCode && this.isCrossChannel == '0'){
if(this.isActivityCode){
this.getActProductListFunc()
}else{
this.getMainRiskList()
}
if (this.isActivityCode) {
this.getActProductListFunc()
} else {
this.getMainRiskList()
}
},
//获取主险列表--活动下的产品
async getActProductListFunc() {
let mainRiskCodes = localStorage.mainRiskCodes && JSON.parse(localStorage.mainRiskCodes)
let resultData = await getActProductList({
activityCode:this.isActivityCode,
type:'app'
activityCode: this.isActivityCode,
type: 'app'
})
if (resultData.result == 0) {
resultData.content.mainRiskDTOS.forEach(item => {
resultData.content.mainRiskDTOS.forEach((item) => {
//已选主险不能再选、险种互斥
if (mainRiskCodes && mainRiskCodes.includes(item.riskProductCode)) {
this.delList.push(item.riskProductCode)
@@ -195,12 +197,12 @@ export default {
// ------------------------专为惠企写死--end---------------//
//如果是选择产品, 进入电子投保, 在主险列表能默认选中我在产品列表选择的产品
if (this.list.length > 0) {
console.log(localStorage.productCodeChooseFromList)
this.result = this.list.find(v => {
console.log(localStorage.productCodeChooseFromList)
this.result = this.list.find((v) => {
return v.riskProductCode == localStorage.productCodeChooseFromList
})
}
if (this.list.length == 0) {
this.$route('暂无可选产品')
// this.$dialog({ message: '暂无可选产品!' }).then(() => {
@@ -237,16 +239,16 @@ export default {
break
}
if (this.isCrossChannel == '1') {
mainListDate.platform = 'cross'
mainListDate.platform = 'cross'
}
let resultData
if(this.isFrom == 'proposal'){
if (this.isFrom == 'proposal') {
resultData = await mainRiskListProposal(mainListDate)
}else{
} else {
resultData = await mainRiskList(mainListDate)
}
if (resultData.result == 0) {
resultData.mainRiskDTOS.forEach(item => {
resultData.mainRiskDTOS.forEach((item) => {
//已选主险不能再选、险种互斥
if (mainRiskCodes && mainRiskCodes.includes(item.riskProductCode)) {
this.delList.push(item.riskProductCode)
@@ -273,7 +275,7 @@ export default {
// 如果是选择产品, 进入电子投保, 在主险列表能默认选中我在产品列表选择的产品
if (this.list.length > 0) {
console.log(localStorage.productCodeChooseFromList)
this.result = this.list.find(v => {
this.result = this.list.find((v) => {
return v.riskProductCode == localStorage.productCodeChooseFromList
})
}
@@ -308,17 +310,36 @@ export default {
this.$toast('请选择产品')
return
}
if(localStorage.getItem('isFrom') == 'sale') {
/** add by zhangweiwei FCRS-764 国富无忧两全保险B款新增主险职业校验逻辑 start at 20240807 */
let insuredPersonInfo = JSON.parse(this.$CacheUtils.getLocItem('saleInsuredPersonInfo'))
occupationCodeCheck({
occupationCode: insuredPersonInfo.occupationCode,
productCode: this.result.riskProductCode
}).then((res) => {
if (res.result == 0) {
this.handleMainRisk()
} else {
this.$toast(res.resultMessage)
}
})
/** add by zhangweiwei FCRS-764 国富无忧两全保险B款新增主险职业校验逻辑 end at 20240807 */
},
/**
* 处理主险
*/
handleMainRisk() {
if (localStorage.getItem('isFrom') == 'sale') {
let params = {
productCode: this.result.riskProductCode,
orderNo: this.$route.query.orderNo,
orderNo: this.$route.query.orderNo
}
if(this.recommendType == '03' && !this.isActivityCode) {
if (this.recommendType == '03' && !this.isActivityCode) {
params.productChannl = this.isCrossChannel
}
riskLevelCheck(params).then(res => {
if(res.result == 0) {
if(res.saLevelMatch == "Y"){
riskLevelCheck(params).then((res) => {
if (res.result == 0) {
if (res.saLevelMatch == 'Y') {
//置空产品
localStorage.chooseProducts = ''
//添加主险
@@ -337,6 +358,7 @@ export default {
this.addMainRisk()
}
},
//储存主险
async addMainRisk() {
localStorage.setItem('isTrial', '1')
@@ -347,7 +369,7 @@ export default {
localStorage.isTrial = resultData.productTrialInfoDTO.productTrialYearDTOS != null ? '0' : '1'
localStorage.hint = resultData.hint
if (resultData.productTrialInfoDTO.dutyGroup != null) {
resultData.productTrialInfoDTO.dutyGroup.map(item => {
resultData.productTrialInfoDTO.dutyGroup.map((item) => {
if (item.dutyName == '意外身故/伤残保险金') {
item.defaultDutyAmt = item.minDutyAmt
}
@@ -375,7 +397,7 @@ export default {
}
}
if (riskRules.ageLimit(resultData, this, null,riskProductCode)) {
if (riskRules.ageLimit(resultData, this, null, riskProductCode)) {
return
}
@@ -402,12 +424,17 @@ export default {
}
}
let flagPermission = await riskRules.getProductSellPermissionList(resultData.productCode, this,this.isCrossChannel)
let flagPermission = await riskRules.getProductSellPermissionList(resultData.productCode, this, this.isCrossChannel)
if (flagPermission.flag && localStorage.isFrom != 'proposal') {
//校验该代理人是否有该产品的售卖权限
return this.$toast(flagPermission.resultMessage)
}
let flagCompany = await riskRules.checkCompany(resultData.productCode, JSON.parse(this.$CacheUtils.getLocItem('saleInsuredInfo')).workcompany, JSON.parse(this.$CacheUtils.getLocItem('saleInsuredInfo')).isAsync,this)
let flagCompany = await riskRules.checkCompany(
resultData.productCode,
JSON.parse(this.$CacheUtils.getLocItem('saleInsuredInfo')).workcompany,
JSON.parse(this.$CacheUtils.getLocItem('saleInsuredInfo')).isAsync,
this
)
if (flagCompany && localStorage.isFrom != 'proposal') {
//校验该投保人的工作单位是否能够投保该产品
return this.$toast('该投保人工作单位不能投保该产品')
@@ -423,11 +450,11 @@ export default {
let calFactorLst = this.getFactorList(resultData)
let productTrialYearDTOS = resultData.productTrialInfoDTO.productTrialYearDTOS != null ? resultData.productTrialInfoDTO.productTrialYearDTOS : null
let hasAddtionRisk = (resultData.productTrialInfoDTO.addtionRiskLst != null && resultData.productTrialInfoDTO.addtionRiskLst.length) ? true : false
let hasAddtionRisk = resultData.productTrialInfoDTO.addtionRiskLst != null && resultData.productTrialInfoDTO.addtionRiskLst.length ? true : false
let currentProductInfo =
localStorage.isTrial == '1'
? {
isCrossChannel:this.isCrossChannel,
isCrossChannel: this.isCrossChannel,
calFactorLst,
hasAddtionRisk,
isMainRisk: 0,
@@ -443,7 +470,7 @@ export default {
predictTransferPrem: null //建议书使用 预计转入保费字段
}
: {
isCrossChannel:this.isCrossChannel,
isCrossChannel: this.isCrossChannel,
productTrialYearDTOS,
calFactorLst,
hasAddtionRisk,
@@ -481,27 +508,27 @@ export default {
let calFactorLst = resultData.productTrialInfoDTO.calFactorLst
console.log('calFactorLst', calFactorLst)
calFactorLst.forEach(item => {
calFactorLst.forEach((item) => {
item['isMainRisk'] = 0
item.columns = []
if (item.type == 0) {
//1、type=0 select 2、type=1 input+stepper
productTrialInfoDTO[item.code].forEach(factor => {
productTrialInfoDTO[item.code].forEach((factor) => {
if (factor.defaultValue == 0) {
item.showContent = factor.showContent
if (factor[item.code + 'Flag'] != undefined) {
item[item.code] = factor[item.code]
item[item.code + 'Flag'] = factor[item.code + 'Flag']
item.hasFlag = '1'
}else if(item.code == 'pensionAge'){
} else if (item.code == 'pensionAge') {
//养老保险金领取年龄
item[item.code] = factor[item.code]
item['sex'] = factor.sex
}else {
} else {
item[item.code] = factor[item.code]
}
}
let itemColumns = { text: factor.showContent, value: factor[item.code], flag: factor[item.code + 'Flag'],sex:factor.sex}
let itemColumns = { text: factor.showContent, value: factor[item.code], flag: factor[item.code + 'Flag'], sex: factor.sex }
if (factor.medical !== undefined) {
itemColumns.medical = factor.medical
}
@@ -510,10 +537,13 @@ export default {
} else if (item.type == 1) {
//按年龄选择
if (productTrialInfoDTO[item.code] != null) {
productTrialInfoDTO[item.code].forEach(factor => {
productTrialInfoDTO[item.code].forEach((factor) => {
// item = Object.assign(item, factor)
if(JSON.parse(this.$CacheUtils.getLocItem('saleInsuredPersonInfo')).insuredAge >= Number(factor.minAge) && JSON.parse(this.$CacheUtils.getLocItem('saleInsuredPersonInfo')).insuredAge <= Number(factor.maxAge)){
// if(JSON.parse(this.$CacheUtils.getLocItem('saleInsuredPersonInfo')).age >= Number(factor.minAge) && JSON.parse(this.$CacheUtils.getLocItem('saleInsuredPersonInfo')).age <= Number(factor.maxAge)){
if (
JSON.parse(this.$CacheUtils.getLocItem('saleInsuredPersonInfo')).insuredAge >= Number(factor.minAge) &&
JSON.parse(this.$CacheUtils.getLocItem('saleInsuredPersonInfo')).insuredAge <= Number(factor.maxAge)
) {
// if(JSON.parse(this.$CacheUtils.getLocItem('saleInsuredPersonInfo')).age >= Number(factor.minAge) && JSON.parse(this.$CacheUtils.getLocItem('saleInsuredPersonInfo')).age <= Number(factor.maxAge)){
item = Object.assign(item, factor)
}
})