Merge branch 'release/0416' into 0416/GFRS-765【0423】电投自核规则前端进行转译提示

# Conflicts:
#	src/assets/js/utils/validator.js
#	src/views/ebiz/sale/AddBeneficiaryInfo.vue
#	src/views/ebiz/sale/AttachmentManagement.vue
#	src/views/ebiz/sale/InsuredPerson.vue
This commit is contained in:
tian.guangyuan
2020-04-16 10:39:09 +08:00
147 changed files with 11834 additions and 3625 deletions

View File

@@ -18,7 +18,14 @@ export function updateCustomerInfo(data) {
data
})
}
//本人实名认证
export function checkPhone(data) {
return request({
url: getUrl('/customer/checkPhone', 1),
method: 'post',
data
})
}
//查询代理人客户信息
export function getAgentCustomerInfo(data) {
return request({

View File

@@ -0,0 +1,135 @@
import request from '@/assets/js/utils/request'
import getUrl from '@/assets/js/utils/get-url'
// 个人中心 - 查询接口
export function getPersonalInfo(data) {
return request({
url: getUrl('/agent/personal/getInfo', 1),
method: 'post',
data
})
}
// 人才库列表查询接口
export function getAgentPersonnelList(data = {}) {
return request({
url: getUrl('/agent/personnel/queryList', 1),
method: 'post',
data
})
}
// 人才库 - 新增人才
export function saveAgentPersonnel(data) {
return request({
url: getUrl('/agent/personnel/saveOrUpdate', 1),
method: 'post',
data
})
}
// 人才库 - 查询详情
export function getAgentPersonnelDetail(data) {
return request({
url: getUrl('/agent/personnel/queryDetail', 1),
method: 'post',
data
})
}
// 人才库 - 查询人才库列表 - 导航页
export function getAgentPersonnelListFirst(data = {}) {
return request({
url: getUrl('/agent/personnel/queryListFirst', 1),
method: 'post',
data
})
}
// 活动量统计周报
export function queryWeekly(data) {
return request({
url: getUrl('/agent/activityRecord/queryWeekly', 1),
method: 'post',
data
})
}
// 查询日志页面增员列表
export function queryRecordList(data) {
return request({
url: getUrl('/agent/activityRecord/queryList', 1),
method: 'post',
data
})
}
// 日志详情查询
export function queryRecordDetail(data) {
return request({
url: getUrl('/agent/activityRecord/queryDetail', 1),
method: 'post',
data
})
}
// 新增日志
export function saveRecord(data) {
return request({
url: getUrl('/agent/activityRecord/saveOrUpdate', 1),
method: 'post',
data
})
}
export function getTokenForUserModel(data = {}) {
return request({
url: getUrl('/agent/enter/getTokenForUserModel', 1),
method: 'get',
params: {
data
}
})
}
// 新增分享记录
export function saveShareRecord(data) {
return request({
url: getUrl('/agent/share/saveRecord', 1),
method: 'post',
data
})
}
// 获取分享记录的key
export function getShareKey(data) {
return request({
url: getUrl('/agent/share/getKey', 1),
method: 'post',
data
})
}
// 根据问卷编码获取问卷详细信息
export function answerDetail(data = {}) {
return request({
url: getUrl('/customer/answer/detailByQnCode', 1),
method: 'post',
data
})
}
//DISC性格分析列表
export function discAnalysisList(data) {
return request({
url: getUrl('/customer/answer/queryList', 1),
method: 'post',
data
})
}
// 答卷提交接口
export function answerSubmit(data) {
return request({
url: getUrl('/customer/answer/submit', 1),
method: 'post',
data
})
}

75
src/api/ebiz/nbs/index.js Normal file
View File

@@ -0,0 +1,75 @@
import request from '@/assets/js/utils/request'
import getUrl from '@/assets/js/utils/get-url'
//事件列表
export function getList(data) {
return request({
url: getUrl('/proposal/nbs/getProposalNbsList', 1),
method: 'post',
data
})
}
export function saveForm(data) {
return request({
url: getUrl('/proposal/nbs/saveOrUpdateProposalNbs', 1),
method: 'post',
data
})
}
export function delNbs(data) {
return request({
url: getUrl('/proposal/nbs/deleteProposalNbs', 1),
method: 'post',
data
})
}
export function completeNbs(data) {
return request({
url: getUrl('/proposal/nbs/modifyProposalNbsState', 1),
method: 'post',
data
})
}
export function nbsDetail(data) {
return request({
url: getUrl('/proposal/nbs/getProposalNbsDemo', 1),
method: 'post',
data
})
}
export function nbsChart(data) {
return request({
url: getUrl('/proposal/nbs/getProposalNbsStatistics', 1),
method: 'post',
data
})
}
export function nbsTable(data) {
return request({
url: getUrl('/proposal/nbs/getProposalNbsStatisticsDetail', 1),
method: 'post',
data
})
}
//NBS智能分析报告生成PDF
export function makePDF(data) {
return request({
url: getUrl('/proposal/nbs/getPdfInfo', 1),
method: 'post',
data
})
}
//NBS客户清单列表pdf生成
export function makeCustomerPDF(data) {
return request({
url: getUrl('/proposal/nbs/getProposalNbsStatisticsDetailDownLoad', 1),
method: 'post',
data
})
}

View File

@@ -61,7 +61,14 @@ export function getAuthCode(data) {
data
})
}
// 验证验证码
export function autchCodeCheck(data) {
return request({
url: getUrl('/customer/authcode/check', 1),
method: 'post',
data
})
}
// 上传图片
export function uploadImg(data) {
return request({

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 595 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 320 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 291 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 675 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 670 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 605 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 287 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 573 B

View File

@@ -512,7 +512,8 @@ export default {
idNo: appntDTO.idNo,
appntId: appntDTO.appntId,
healthGrade: appntDTO.healthGrade,
lifeGrade: appntDTO.lifeGrade
lifeGrade: appntDTO.lifeGrade,
mobile: appntDTO.mobile
})
if (insuredDTO) {
@@ -531,7 +532,8 @@ export default {
insuredId: insuredDTO.insuredId,
idNo: insuredDTO.idNo,
healthGrade: insuredDTO.healthGrade,
lifeGrade: insuredDTO.lifeGrade
lifeGrade: insuredDTO.lifeGrade,
mobile: insuredDTO.mobile
})
let [chooseProductCodes, mainRiskCodes, addRiskCodes] = [[], [], []]

View File

@@ -206,5 +206,18 @@ export default {
isWeixin: ua.match(/MicroMessenger/i),
isDC: ua.match(/guofulife/i) //app环境
}
},
deepCopy: function deepCopy(source) {
let result
if (Array.isArray(source)) {
result = source.map(v => deepCopy(v))
} else if (typeof source === 'object' && source !== null) {
result = {}
Object.keys(source).forEach(v => (result[v] = deepCopy(source[v])))
} else {
result = source
}
return result
}
}

View File

@@ -165,19 +165,19 @@ export default {
id: 6,
text: '台湾居民来往大陆通行证'
},
{
/* {
id: 7,
text: '其他',
disabled: true
}*/
{
id: 8,
text: '外国人永久居留身份证'
},
{
id: 9,
text: '港澳台居民居住证'
}
// {
// id: 8,
// text: '外国人永久居留身份证'
// },
// {
// id: 9,
// text: '港澳台居民居住证'
// }
],
//投保人证件类型
insuredIdType: [
@@ -207,19 +207,19 @@ export default {
id: 6,
text: '台湾居民来往大陆通行证'
},
{
/* {
id: 7,
text: '其他',
disabled: true
}*/
{
id: 8,
text: '外国人永久居留身份证'
},
{
id: 9,
text: '港澳台居民居住证'
}
// {
// id: 8,
// text: '外国人永久居留身份证'
// },
// {
// id: 9,
// text: '港澳台居民居住证'
// }
],
//出生证明
birthType: [
@@ -253,7 +253,7 @@ export default {
text: '其他'
}
],
//投保人/被保人关系
//投保人/被保人关系
relationToAppnt: [
{
id: 1,
@@ -276,7 +276,7 @@ export default {
text: '其他'
}
],
//理赔报案投保人/被保人关系
//理赔报案投保人/被保人关系
relationToAppnts: [
{
id: '00',
@@ -751,7 +751,7 @@ export default {
},
{
id: '36',
text: '被保人保存成功'
text: '被保人保存成功'
},
{
id: '37',
@@ -911,6 +911,26 @@ export default {
shortName: '万能险',
name: '国富人寿鑫管家终身寿险(万能型)',
code: 'GFRS_M0017'
},
{
shortName: '医疗险',
name: '国富人寿附加住院医疗保险(医疗型)',
code: 'GFRS_A0004'
},
{
shortName: '意外险',
name: '国富人寿附加综合意外伤害保险(意外型)',
code: 'GFRS_A0005'
},
{
shortName: '重疾险',
name: '国富人寿国富民安重大疾病保险(重疾型)',
code: 'GFRS_M0018'
},
{
shortName: '寿险',
name: '国富人寿国富栋梁定期寿险',
code: 'GFRS_M0020'
}
],
// 职级
@@ -2017,5 +2037,341 @@ export default {
{ code: '01', value: '寿险' },
{ code: '02', value: '重疾' },
{ code: '03', value: '年金' }
],
// 活动量管理 - 人才库 - 状态
talentPoolStatus: [
{ id: 0, text: '暂不考虑' },
{ id: 1, text: '已加盟' },
{ id: 2, text: '确认加盟' },
{ id: 3, text: '三次以上接触' },
{ id: 4, text: '二次接触' },
{ id: 5, text: '首次接触 ' }
],
// 活动量管理 - 人才库 - 过往职业
talentPoolPastOccu: [
{ id: '001', text: '一般内勤职员' },
{ id: '002', text: '其他金融行业' },
{ id: '003', text: '家庭主妇' },
{ id: '004', text: '自由职业' },
{ id: '005', text: '离退休人员' },
{ id: '006', text: '个体经营者' },
{ id: '007', text: '销售' },
{ id: '008', text: '公务员' },
{ id: '011', text: '其他' }
],
// 利益演示单位
productRateUnit: [
{
code: 'years',
label: ''
},
{
code: 'currentAge',
label: '岁'
},
{
code: 'currentPremium',
label: '元'
},
{
code: 'totalPremium',
label: '元'
},
{
code: 'majorDiseaseInsurance',
label: '元'
},
{
code: 'majorDiseaseInsurance2',
label: '元'
},
{
code: 'mildillnessInsurance',
label: '元'
},
{
code: 'deathInsurance',
label: '元'
},
{
code: 'deathInsurance_L',
label: '元'
},
{
code: 'deathInsurance_M',
label: '元'
},
{
code: 'deathInsurance_H',
label: '元'
},
{
code: 'highDisabilityExemptionPremium',
label: '元'
},
{
code: 'deathExemptionPremium',
label: '元'
},
{
code: 'accidentalDeathInsurance',
label: '元'
},
{
code: 'accidentalDisabilityInsurance',
label: '元'
},
{
code: 'medicalInsuranceForAccidentalInjury',
label: '元'
},
{
code: 'incidentalInjuryHospitalizationAllowanceInsurance',
label: '元'
},
{
code: 'insurancePremiumForBedsInHospital',
label: '元'
},
{
code: 'inpatientSurgeryInsurance',
label: '元'
},
{
code: 'inpatientCancerRadiotherapyAndChemotherapyExpensesInsurance',
label: '元'
},
{
code: 'insuranceForOtherHospitalizationExpenses',
label: '元'
},
{
code: 'insuranceForSpecificCardiovascularAndCerebrovascularDiseases',
label: '元'
},
{
code: 'insuranceForCertainCardiovascularAndCerebrovascularMajorDiseases',
label: '元'
},
{
code: 'cashValue',
label: '元'
},
{
code: 'survival',
label: '元'
},
{
code: 'survival_T',
label: '元'
},
{
code: 'totalSurvival',
label: '元'
},
{
code: 'expireSurvival',
label: '元'
},
{
code: 'birthdayGold',
label: '元'
},
{
code: 'middleDiseaseInsurance',
label: '元'
},
{
code: 'appntADDCExemptionPremium',
label: '元'
},
{
code: 'majorMiddleMildDiseaseInsuranceExemptionPremium',
label: '元'
},
{
code: 'majorTMiddleMildDiseaseInsuranceExemptionPremium',
label: '元'
},
{
code: 'survival_L',
label: '元'
},
{
code: 'survival_M',
label: '元'
},
{
code: 'survival_H',
label: '元'
},
{
code: 'seneralMedicalInsurance',
label: '元'
},
{
code: 'malignantTumorMedicalInsurance',
label: '元'
},
{
code: 'malignantTumorInsurance',
label: '元'
},
{
code: 'specificMalignantTumorCareFor',
label: '元'
},
{
code: 'strokeSequelaInsurance',
label: '元'
},
{
code: 'highSchoolEducationFund',
label: '元'
},
{
code: 'universityEducationFund',
label: '元'
},
{
code: 'entrepreneurshipGold',
label: '元'
},
{
code: 'marriageGold',
label: '元'
},
{
code: 'theInitialCost',
label: '元'
},
{
code: 'continueToReward',
label: '元'
},
{
code: 'policyAccountValue_L',
label: '元'
},
{
code: 'policyAccountValue_M',
label: '元'
},
{
code: 'policyAccountValue_H',
label: '元'
},
{
code: 'enterPolicyAccountValue',
label: '元'
},
{
code: 'endowmentAnnuity_years',
label: '元'
},
{
code: 'endowmentAnnuity_month',
label: '元'
},
{
code: 'endowmentAnnuity_L',
label: '元'
},
{
code: 'endowmentAnnuity_M',
label: '元'
},
{
code: 'endowmentAnnuity_H',
label: '元'
},
{
code: 'pensionPaymentDate',
label: ''
},
{
code: 'theCumulativeEndowmentAnnuity_L',
label: '元'
},
{
code: 'theCumulativeEndowmentAnnuity_M',
label: '元'
},
{
code: 'theCumulativeEndowmentAnnuity_H',
label: '元'
},
{
code: 'cashValueFormula_L',
label: '元'
},
{
code: 'cashValueFormula_M',
label: '元'
},
{
code: 'cashValueFormula_H',
label: '元'
},
{
code: 'thePremium',
label: '元'
},
{
code: 'terminalIllnessBenefits',
label: '元'
},
{
code: 'years',
label: ''
},
{
code: 'transport_A',
label: '元'
},
{
code: 'transport_B',
label: '元'
},
{
code: 'transport_C',
label: '元'
},
{
code: 'transport_D',
label: '元'
},
{
code: 'transport_F',
label: '元'
},
{
code: 'totalSuvInterest_L',
label: '元'
},
{
code: 'totalSuvInterest_M',
label: '元'
},
{
code: 'totalSuvInterest_H',
label: '元'
},
{
code: 'remitPremRate',
label: ''
},
{
code: 'inpatientCare',
label: '元'
},
{
code: 'hospitalizationBenefit',
label: '元'
},
{
code: 'malignantTumor',
label: '元'
}
]
}

View File

@@ -62,7 +62,10 @@ let survey = [
//'/customer/question/getTableId', // id 查询 -- ok
'/customer/question/getAgentInfo' // 代理人详情
]
let whiteList = ['/customer/agent/getCustomersList', ...proposal, ...sale, ...agentEnter, ...claims, ...survey]
let manpower = [
'/customer/answer/queryList' //DISC性格分析
]
let whiteList = ['/customer/agent/getCustomersList', ...proposal, ...sale, ...agentEnter, ...claims, ...survey, ...manpower]
// 创建axios实例
const service = axios.create({

View File

@@ -90,7 +90,16 @@ Validator.extend('age', {
return value > 17 && /^\d{1,3}$/.test(value)
}
})
//被保人年龄不得小于18周岁
//年龄
Validator.extend('maxAge', {
getMessage: () => '年龄不得大于100周岁',
validate: value => {
return value <= 100 && /^\d{1,3}$/.test(value)
}
})
//被保险人年龄不得小于18周岁
Validator.extend('appntAge', {
getMessage: () => '年龄不得小于18周岁',
validate: value => {
@@ -169,3 +178,34 @@ Validator.extend('avoirdupois', {
return /^[0-9]+([.]{1}[0-9]{1})?$/.test(value) && value > 0.1
}
})
//同业公司
Validator.extend('sameCompany', {
getMessage: () => '同业公司长度不超过120个字符不支持特殊字符',
validate: value => {
return /^[0-9a-zA-Z\.\s\u4e00-\u9fa5]{1,120}$/.test(value)
}
})
//从业年限
Validator.extend('workYears', {
getMessage: () => '从业年限仅支持阿拉伯数字,最多精确到一位小数',
validate: value => {
return /^[0-9]+([.]{1}[0-9]{1})?$/.test(value) && value > 0
}
})
//最大长度120字符
Validator.extend('max120', {
getMessage: () => '输入内容不得超过120哥字符',
validate: value => {
return value.length < 121
}
})
//名字
Validator.extend('manpowerName', {
getMessage: () => '请输入正确的姓名',
validate: value => {
// return /^[\u4e00-\u9fa5·]{1,15}$/.test(value)
return /^[a-zA-Z\.\s\u4e00-\u9fa5]{2,120}$/.test(value)
}
})

29
src/assets/sass/nbs.scss Normal file
View File

@@ -0,0 +1,29 @@
@mixin container {
box-sizing: border-box;
min-height: 100vh;
padding-bottom: 50px;
background: #fff;
}
.nbs-del,
.nbs-add {
height: 32px;
width: 347px;
margin: 10px auto 0 auto;
line-height: 32px;
}
.nbs-del {
border: 1px solid #f2f2f2;
background-color: #f2f2f2;
font-size: 20px;
text-align: right;
/deep/ i {
position: relative;
top: 6px;
right: 5px;
}
}
.nbs-add {
border: 1px solid #e3e3e3;
text-align: center;
font-size: 14px;
}

View File

@@ -29,6 +29,12 @@ export default {
return new Date('2040-12-31')
}
},
minDate: {
type: Date,
default: () => {
return new Date('1900-01-01')
}
},
disabled: {
type: Boolean,
default: false
@@ -77,8 +83,8 @@ export default {
currentDate: beforeDate.getBeforeYear(30), //当前时间的30年前
showDataPicker: false,
data: '', //时间插件绑定的值
date: '', //field显示的值
minDate: new Date('1900-01-01') //因为VANT组件默认是十年前
date: '' //field显示的值
//minDate: new Date('1900-01-01') //因为VANT组件默认是十年前
}
},
components: {

View File

@@ -0,0 +1,67 @@
<template>
<div>
<van-cell-group>
<van-cell :title="ActivityLogInfo.name" title-class="ml10" :is-link="isEdit" value-class="text-left" @click="toEdit">
<van-icon slot="icon" :name="ActivityLogInfo.avatarUrl || defaultAcatarUrl" style="line-height: inherit;" size="22" />
<span class="mr20">{{ ActivityLogInfo.age }}</span>
<span>{{ ActivityLogInfo.type == 0 ? '同业' : '白板' }}</span>
<van-icon slot="right-icon" name="edit" style="line-height: inherit;" :color="isEdit ? '#ee0a24' : 'transparent'" size="24" />
</van-cell>
</van-cell-group>
</div>
</template>
<script>
import formatDate from '@/assets/js/utils/date-utils'
import { Cell, CellGroup, Image } from 'vant'
export default {
components: {
[Cell.name]: Cell,
[CellGroup.name]: CellGroup,
[Image.name]: Image
},
props: {
ActivityLogInfo: {
type: Object,
required: true,
default: () => {
return {
recordCode: '',
name: '王辉',
// avatarUrl: 'https://img.yzcdn.cn/vant/cat.jpeg',
age: '35岁',
type: '同业',
recordDate: ''
}
}
}
},
data() {
return {
defaultAcatarUrl: 'https://b.yzcdn.cn/vant/icon-demo-1126.png'
}
},
methods: {
toEdit() {
this.$jump({
flag: 'h5',
extra: {
url: location.origin + `/#/manpower/ActivityLog/Edit?code=${this.ActivityLogInfo.recordCode}&isEdit=${this.isEdit ? '0' : '1'}`,
forbidSwipeBack: '1',
needRefresh: '1'
},
routerInfo: { path: `/manpower/ActivityLog/Edit?code=${this.ActivityLogInfo.recordCode}&isEdit=${this.isEdit ? '0' : '1'}` }
})
}
},
computed: {
isEdit() {
if (this.ActivityLogInfo.recordDate === formatDate.formatDate().split(' ')[0]) {
return true
} else {
return false
}
}
}
}
</script>

View File

@@ -0,0 +1,74 @@
<!-- 导航 元素 -->
<template>
<!-- <div class="nav-item"> -->
<van-cell is-link class="relative" @click="rout(config)">
<template slot="title">
<van-icon v-if="config.icon" color="#ee0a24" class="t-cell-icon" size="6.4vw" :name="config.icon" />
<img v-else class="t-cell-icon" :src="config.src" alt="config" />
<span class="custom-title c-gray-base"> {{ config.title }}</span>
</template>
</van-cell>
<!-- </div> -->
</template>
<script>
import { Cell } from 'vant'
export default {
name: 'NavItem',
components: {
[Cell.name]: Cell
},
props: {
config: {
type: Object,
required: true,
default: function() {
return {
title: '默认title',
path: '/404',
src: 'http://localhost:8080/favicon.ico'
}
}
}
},
data() {
return {}
},
created() {},
methods: {
rout(config) {
if (!config.share) {
let path = config.path
this.$jump({
flag: 'h5',
extra: {
url: location.origin + `/#${path}`,
needRefresh: '1'
},
routerInfo: { path: path }
})
} else {
// eslint-disable-next-line no-undef
EWebBridge.webCallAppInJs('bridge', {
flag: 'share',
extra: config.shareConfig
})
// weixinShare(config.shareConfig)
}
}
}
}
</script>
<style lang="scss" scoped>
// .nav-item {
.t-cell-icon {
position: absolute;
width: 6.4vw;
height: 6.4vw;
}
.custom-title {
margin-left: 8.4vw;
}
// }
</style>

View File

@@ -0,0 +1,52 @@
<template>
<van-cell :title="talentPoolInfo.name" title-class="ml10" is-link value-class="text-left" @click="edit(talentPoolInfo.personnelCode)">
<van-icon slot="icon" :name="talentPoolInfo.avatarUrl || defaultAcatarUrl" style="line-height: inherit;" size="24" />
<span>{{ talentPoolInfo.sameCompany }}</span>
<van-icon slot="right-icon" name="edit" style="line-height: inherit;" color="#ee0a24" size="24" />
</van-cell>
</template>
<script>
import { Cell, CellGroup, Image } from 'vant'
export default {
components: {
[Cell.name]: Cell,
[CellGroup.name]: CellGroup,
[Image.name]: Image
},
props: {
talentPoolInfo: {
type: Object,
required: true,
default: () => {
return {
name: '王辉',
sameCompany: '中国人寿'
}
}
}
},
data() {
return {
defaultAcatarUrl: 'https://b.yzcdn.cn/vant/icon-demo-1126.png'
}
},
methods: {
edit(personnelCode) {
if (personnelCode) {
localStorage.setItem('personnelCode', personnelCode)
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/manpower/talentPool/Edit',
needRefresh: '1'
},
routerInfo: {
path: '/manpower/talentPool/Edit'
}
})
}
}
}
}
</script>

View File

@@ -0,0 +1,64 @@
<!-- 头部用户信息 -->
<template>
<div class="user-info flex p15 bg-head align-items-e">
<img class="w40" src="../../../assets/images/bnf_avatar.png" />
<div class="add-list flex1 ml10">
<p class="fs16 font-bold">{{ userInfo.name }}</p>
<div class="">工号 | {{ userInfo.jobNo }}</div>
</div>
</div>
</template>
<script>
import { getAgentInfo } from '@/api/ebiz/my/my.js'
export default {
name: 'UserInfoHeader',
data() {
return {
userInfo: '', // 代理人信息
activeNames: ['1']
}
},
created() {
this.getInfo()
},
methods: {
async getInfo() {
// 获取代理人信息
let userInfo = localStorage.getItem('userInfo')
if (userInfo) {
this.userInfo = JSON.parse(userInfo)
} else {
const res = await getAgentInfo({})
if (res.result == 0) {
this.userInfo = res
localStorage.setItem('agentCode', res.jobNo)
localStorage.setItem('userInfo', JSON.stringify(res))
} else {
this.$toast(res.resultMessage)
}
}
}
},
components: {}
}
</script>
<style lang="scss" scoped>
.user-info {
background-image: url('~@/assets/images/headerBg.png');
background-size: cover;
color: white;
height: 80px;
.send-main {
border-bottom: 10px solid #f5f5f5;
}
.add-list {
line-height: 22px;
}
.font-bold {
font-weight: bold;
}
}
</style>

View File

@@ -46,7 +46,7 @@ export default {
// imgfront: this.$assetsUrl + 'images/u6071.png',
// 是否可以点击完成
isDisabled: true,
// 是投保人还是被保人扫描 0是投保人 1是被保人
// 是投保人还是被保人扫描 0是投保人 1是被保
// cardScanningType: '',
// 是否成功扫描
state: ''

View File

@@ -74,7 +74,7 @@ export default {
imgBack: this.$assetsUrl + 'images/idCardBack.png',
// 相机图片
srcCamera: this.$assetsUrl + 'images/camera_copy.png',
// 是否是投保人还是被保人扫描
// 是否是投保人还是被保人扫描
scanFromInsured: '',
state: '',
stateBack: '',

View File

@@ -65,6 +65,14 @@ export default {
this.$refs.file.dispatchEvent(new MouseEvent('click'))
},
addImg(e) {
this.$toast.loading({
// 持续展示 toast
duration: 0,
// 禁用背景点击s
forbidClick: true,
loadingType: 'spinner',
message: '加载中……'
})
let that = this
this.file = this.$refs.file.files[0]
var reader = new FileReader()

View File

@@ -11,7 +11,7 @@ let apiDomain, imgDomain, assetsUrl, mainUrl, payUrl, zssqUrl // 保融支付的
console.log('环境:', process.env.VUE_APP_FLAG)
switch (process.env.VUE_APP_FLAG) {
case 'dev':
apiDomain = 'http://139.199.50.151:7000/api/v1' // 国富api
apiDomain = 'http://139.199.50.151:7000/api/v1' // 国富api ///api/v1
imgDomain = 'http://211.159.248.123:7012/updown' // dev
// 静态服务资源
assetsUrl = 'http://139.199.50.151:8000/app/'

17
src/config/manpower.js Normal file
View File

@@ -0,0 +1,17 @@
// 人力发展
let mockBaseUrl = 'http://rap2api.taobao.org/app/mock/247074'
export default {
// 例子
'/demo/url': mockBaseUrl + '/demo/url',
// 查询日志统计周报
'/agent/activityRecord/queryWeekly': mockBaseUrl + '/agent/activityRecord/queryWeekly',
// 查询日志页面人才库列表
'/agent/personnel/queryListFirst': mockBaseUrl + '/agent/personnel/queryListFirst',
// 查询日志页面增员列表
'/agent/activityRecord/queryList': mockBaseUrl + '/agent/activityRecord/queryList',
// 日志详情查询
'/agent/activityRecord/queryDetail': mockBaseUrl + '/agent/activityRecord/queryDetail',
// 新增日志
'/agent/activityRecord/saveOrUpdate': mockBaseUrl + '/agent/activityRecord/saveOrUpdate'
}

View File

@@ -11,6 +11,7 @@ import product from './product'
import serve from './serve'
import common from './common'
import survey from './survey'
import manpower from './manpower'
const mockBaseUrl = 'http://rap2api.taobao.org/app/mock'
let baseObj = {
@@ -18,6 +19,6 @@ let baseObj = {
'/user/info': mockBaseUrl + '/223948/info',
'/user/logout': mockBaseUrl + '/223948/logout'
}
Object.assign(baseObj, proposal, sale, customer, my, product, serve, common, survey)
Object.assign(baseObj, proposal, sale, customer, my, product, serve, common, survey, manpower)
export default baseObj

View File

@@ -133,6 +133,11 @@ export default {
// }
// return str
//摘自国富群:这个在报文转换的时候,核心返回“—”的时候,直接返回空。 @于维琦(于维琦) 前端如果保额为空,直接展示“—”@皮伟(皮伟) 你跟她碰一下怎么改
if (moneyStr === null) {
return '—'
}
let str = ''
if (flag) {
str = (moneyStr + '').replace(/\d{1,3}(?=(\d{3})+$)/g, '$&,')

View File

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

198
src/router/ebiz/manpower.js Normal file
View File

@@ -0,0 +1,198 @@
//人力发展 定义相关组件
const Navigation = () => import('@/views/ebiz/manpower/Navigation')
const PersonalCenter = () => import('@/views/ebiz/manpower/PersonalCenter')
const IncreaseStaffTools = () => import('@/views/ebiz/manpower/IncreaseStaffTools')
const CompanyIntroduction = () => import('@/views/ebiz/manpower/increaseStaffTools/CompanyIntroduction')
const PolicyOptions = () => import('@/views/ebiz/manpower/increaseStaffTools/PolicyOptions')
const PolicyOptionsPdfShare = () => import('@/views/ebiz/manpower/increaseStaffTools/PdfShare')
const Training = () => import('@/views/ebiz/manpower/Training')
const ActiveManagement = () => import('@/views/ebiz/manpower/ActiveManagement')
const TalentPoolList = () => import('@/views/ebiz/manpower/talentPool/List')
const TalentPoolAdd = () => import('@/views/ebiz/manpower/talentPool/Add')
const TalentPoolEdit = () => import('@/views/ebiz/manpower/talentPool/Edit')
const ActivityLogList = () => import('@/views/ebiz/manpower/activityLog/List')
const ActivityLogEdit = () => import('@/views/ebiz/manpower/activityLog/Edit')
const DiscAnalysisList = () => import('@/views/ebiz/manpower/discAnalysis/List')
const DiscAnalysisQuestion = () => import('@/views/ebiz/manpower/discAnalysis/Question')
const DiscAnalysisResult = () => import('@/views/ebiz/manpower/discAnalysis/Result')
const DiscAnalysisShare = () => import('@/views/ebiz/manpower/discAnalysis/Share')
export default [
{
// 人力发展
path: '/manpower/Navigation',
name: 'Navigation',
component: Navigation,
meta: {
title: '人力发展',
index: 1
}
},
{
// 个人中心
path: '/manpower/PersonalCenter',
name: 'PersonalCenter',
component: PersonalCenter,
meta: {
title: '人力发展',
index: 2
}
},
{
// 增员工具
path: '/manpower/IncreaseStaffTools',
name: 'IncreaseStaffTools',
component: IncreaseStaffTools,
meta: {
title: '增员工具',
index: 3
}
},
{
// 公司介绍
path: '/manpower/increaseStaffTools/CompanyIntroduction',
name: 'CompanyIntroduction',
component: CompanyIntroduction,
meta: {
title: '公司介绍',
index: 100
}
},
{
// 政策方案
path: '/manpower/increaseStaffTools/PolicyOptions',
name: 'PolicyOptions',
component: PolicyOptions,
meta: {
title: '政策方案',
index: 100
}
},
{
// 政策方案展示Pdf
path: '/manpower/increaseStaffTools/PdfShare',
name: 'PolicyOptionsPdfShare',
component: PolicyOptionsPdfShare,
meta: {
title: '政策方案',
index: 100
}
},
{
// 培训上岗
path: '/manpower/Training',
name: 'Training',
component: Training,
meta: {
title: '培训上岗',
index: 100
}
},
{
// 活动量管理
path: '/manpower/ActiveManagement',
name: 'ActiveManagement',
component: ActiveManagement,
meta: {
title: '活动量管理',
index: 100
}
},
{
// 人才库
path: '/manpower/TalentPool/',
name: 'TalentPoolList',
component: TalentPoolList,
meta: {
title: '人才库',
index: 101
}
},
{
// 人才库-新增人才
path: '/manpower/TalentPool/Add',
name: 'TalentPoolAdd',
component: TalentPoolAdd,
meta: {
title: '基本信息',
index: 102
}
},
{
// 人才库-修改人才
path: '/manpower/TalentPool/Edit',
name: 'TalentPoolEdit',
component: TalentPoolEdit,
meta: {
title: '基本信息',
index: 103
}
},
{
// 当日增员活动日志
path: '/manpower/ActivityLog/List',
name: 'ActivityLogList',
component: ActivityLogList,
meta: {
title: '当日增员活动日志',
index: 100
}
},
{
// 日志详情
path: '/manpower/ActivityLog/Edit',
name: 'ActivityLogEdit',
component: ActivityLogEdit,
meta: {
title: '日志详情',
index: 100
}
},
{
// DISC性格分析
path: '/manpower/DiscAnalysis/List',
name: 'DiscAnalysisList',
component: DiscAnalysisList,
meta: {
title: 'DISC性格分析',
index: 200
}
},
{
// DISC性格分析结果
path: '/manpower/DiscAnalysis/Result',
name: 'DiscAnalysisResult',
component: DiscAnalysisResult,
meta: {
title: 'DISC性格分析结果',
index: 201
}
},
{
// DISC性格分析 分享
path: '/manpower/DiscAnalysis/Share',
name: 'DiscAnalysisShare',
component: DiscAnalysisShare,
meta: {
title: 'DISC性格分析',
index: 202
}
},
{
// DISC性格分析结果 -做题
path: '/manpower/DiscAnalysis/Question',
name: 'DiscAnalysisQuestion',
component: DiscAnalysisQuestion,
meta: {
title: 'DISC性格分析',
index: 203
}
}
]

102
src/router/ebiz/nbs.js Normal file
View File

@@ -0,0 +1,102 @@
let nbsList = () => import('@/views/ebiz/nbs/List')
let nbsNav = () => import('@/views/ebiz/nbs/Nav')
let nbsChart = () => import('@/views/ebiz/nbs/Chart')
let nbsResult = () => import('@/views/ebiz/nbs/Result')
let nbsCrewList = () => import('@/views/ebiz/nbs/CrewList')
let nbsBase = () => import('@/views/ebiz/nbs/Base')
let nbsNecessary = () => import('@/views/ebiz/nbs/Necessary')
let nbsPrepared = () => import('@/views/ebiz/nbs/Prepared')
let nbsDetail = () => import('@/views/ebiz/nbs/Detail')
let nbsPDF = () => import('@/views/ebiz/nbs/PDF')
export default [
{
path: '/nbs/list',
name: 'nbsList',
component: nbsList,
meta: {
title: 'NBS智能分析',
index: 1
}
},
{
path: '/nbs/nav/:id?',
name: 'nbsNav',
component: nbsNav,
meta: {
title: 'NBS智能分析',
index: 2
}
},
{
path: '/nbs/chart',
name: 'nbsChart',
component: nbsChart,
meta: {
title: 'NBS智能分析统计',
index: 3
}
},
{
path: '/nbs/result/:id/:half/:nbsState',
name: 'nbsResult',
component: nbsResult,
meta: {
title: 'NBS智能分析结果',
index: 4
}
},
{
path: '/nbs/crew-list/:code',
name: 'nbsCrewList',
component: nbsCrewList,
meta: {
title: '客户清单',
index: 5
}
},
{
path: '/nbs/base',
name: 'nbsBase',
component: nbsBase,
meta: {
title: '基本资料',
index: 6
}
},
{
path: '/nbs/necessary',
name: 'nbsNecessary',
component: nbsNecessary,
meta: {
title: '应备费用',
index: 7
}
},
{
path: '/nbs/prepared',
name: 'nbsPrepared',
component: nbsPrepared,
meta: {
title: '已备费用',
index: 8
}
},
{
path: '/nbs/detail/:id/:state',
name: 'nbsDetail',
component: nbsDetail,
meta: {
title: '资料',
index: 9
}
},
{
path: '/nbs/pdf/:content',
name: 'nbsPDF',
component: nbsPDF,
meta: {
title: 'NBS智能分析报告',
index: 10
}
}
]

View File

@@ -6,7 +6,8 @@ const insuredPerson = () => import('@/views/ebiz/proposal/InsuredPerson')
const exhibition = () => import('@/views/ebiz/proposal/Exhibition')
const companyProfile = () => import('@/views/ebiz/proposal/CompanyProfile')
const pdf = () => import('@/views/ebiz/proposal/PDF')
const proposalInfo = () => import('@/views/ebiz/proposal/ProposalInfo')
const caluePdf = () => import('@/views/ebiz/proposal/CaluePDF')
export default [
{
path: '/proposal/list',
@@ -31,7 +32,7 @@ export default [
name: 'ChooseInsuredPerson',
component: chooseInsuredPerson,
meta: {
title: '选择被保人'
title: '选择被保人'
}
},
{
@@ -43,13 +44,21 @@ export default [
index: 1
}
},
{
path: '/proposal/proposalInfo',
name: 'proposalInfo',
component: proposalInfo,
meta: {
title: '建议书预览',
index: 1
}
},
{
path: '/proposal/insuredPerson',
name: 'InsuredPerson',
component: insuredPerson,
meta: {
title: '被保人信息',
title: '被保人信息',
index: 1
}
},
@@ -68,5 +77,13 @@ export default [
meta: {
title: 'PDF预览'
}
},
{
path: '/proposal/caluePdf',
name: 'caluePdf',
component: caluePdf,
meta: {
title: '条款PDF查看'
}
}
]

View File

@@ -59,7 +59,7 @@ export default [
name: 'insuredPerson',
component: insuredPerson,
meta: {
title: '被保人信息',
title: '被保人信息',
index: 1
}
},

View File

@@ -10,13 +10,13 @@ export default new Vuex.Store({
app
},
state: {
pageFlag: '', //理赔申请-区分被保人/申请人页面flag
pageFlag: '', //理赔申请-区分被保人/申请人页面flag
agentEnterApplyMobil: '', //自助入司-新的被增员人填好的基础信息里的电话号码
agentEnterApplyIdNo: '', //自助入司-新的被增员人填好的基础信息里的证件号码
refusalCause: '' //自助入司-查看审批流程-审批拒绝的原因
},
mutations: {
//更新 理赔申请-区分被保人/申请人页面flag
//更新 理赔申请-区分被保人/申请人页面flag
updatePageFlag(state, val) {
state.pageFlag = val
},

View File

@@ -28,6 +28,8 @@
<li><router-link to="/agentEenter/agentEenterBasicInfor">自助入司</router-link></li>
<li><router-link to="/agentEenter/approve/ApproveList">入司审批列表</router-link></li>
<li><router-link to="/survey/surveyList">问卷调查</router-link></li>
<li><router-link to="/nbs/list">nbs列表</router-link></li>
<li><router-link to="/manpower/DiscAnalysis/List">DISC性格分析</router-link></li>
</ul>
</li>
</ul>

View File

@@ -151,7 +151,7 @@ export default {
index: '-1'
},
routerInfo: {
type:2,
type: 2,
index: -1,
path: '/agentEenter/agentEenterBasicFamily'
}
@@ -189,11 +189,11 @@ export default {
this.fileListBank05.push({ url: config.imgDomain + `/returnImageStream?a=b.jpg&imgPath=${item.rgssUrl}` })
break
}
if(item.imageInfoType == '1' && item.subBusinessType == '3'){
if (item.imageInfoType == '1' && item.subBusinessType == '3') {
// 申请人身份证
this.fileListBank01.push({ url: config.imgDomain + `/returnImageStream?a=b.jpg&imgPath=${item.rgssUrl}` })
}
if(item.imageInfoType == '1' && item.subBusinessType == '4'){
if (item.imageInfoType == '1' && item.subBusinessType == '4') {
// 担保人身份证
this.fileListBank06.push({ url: config.imgDomain + `/returnImageStream?a=b.jpg&imgPath=${item.rgssUrl}` })
}
@@ -212,18 +212,22 @@ export default {
this.fileListBank01.map((item, index, array) => {
if (item.content == file.content) {
array.splice(index, 1)
this.deleteImg(file, 'fileListBank01')
} else {
return
}
})
} else if (detail.name == 'fileListBank03') {
this.fileListBank03 = []
this.deleteImg(file, 'fileListBank03')
} else if (detail.name == 'fileListBank04') {
this.fileListBank04 = []
this.deleteImg(file, 'fileListBank04')
} else if (detail.name == 'fileListBank05') {
this.fileListBank05.map((item, index, array) => {
if (item.content == file.content) {
array.splice(index, 1)
this.deleteImg(file, 'fileListBank05')
} else {
return
}
@@ -232,12 +236,12 @@ export default {
this.fileListBank06.map((item, index, array) => {
if (item.content == file.content) {
array.splice(index, 1)
this.deleteImg(file, 'fileListBank06')
} else {
return
}
})
}
this.deleteImg(file)
})
},
dataURLtoFile(dataurl, filename) {
@@ -254,8 +258,10 @@ export default {
},
afterRead(file) {
let that = this
console.log(file)
that.file = file.content
that.imgName = Math.floor(Math.random() * 100).toString() + new Date().getTime() + file.file.name //为图片名加随机数 与时间戳
file.name = that.imgName
that.uploadImg()
},
uploadImg() {
@@ -268,36 +274,43 @@ export default {
})
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()
let imageInfoType = ''
let subBusinessType = ''
let name = ''
if (that.type == 'fileListBank01') {
//身份证正面
name = 'fileListBank01'
imageInfoType = '1'
subBusinessType = '3'
} else if (that.type == 'fileListBank03') {
//学历
name = 'fileListBank03'
imageInfoType = '12'
subBusinessType = '3'
} else if (that.type == 'fileListBank04') {
//免冠
name = 'fileListBank04'
imageInfoType = '13'
subBusinessType = '3'
} else if (that.type == 'fileListBank05') {
//银行卡
name = 'fileListBank05'
imageInfoType = '3'
subBusinessType = '3'
} else if (that.type == 'fileListBank06') {
//担保人
name = 'fileListBank06'
imageInfoType = '1'
subBusinessType = '4'
}
let obj = {
name: name,
imageInfoType: imageInfoType,
subBusinessType: subBusinessType,
fileName: that.imgName,
@@ -308,16 +321,20 @@ export default {
})
},
// 删除图片
deleteImg(file) {
deleteImg(file, nameList) {
let that = this
//图片上传的
if (file.file) {
that.list.map((item, index, array) => {
if (item.fileName.indexOf(file.file.name) == -1) {
return
} else {
if (item.fileName == file.name && nameList == item.name) {
array.splice(index, 1)
}
// if (item.fileName.indexOf(file.file.name) == -1) {
// return
// } else if (item.fileName == file.file.name && nameList == item.name) {
// array.splice(index, 1)
// return false
// }
})
} else {
//图片返显的
@@ -343,11 +360,15 @@ export default {
loadingType: 'spinner',
message: '加载中……'
})
this.list.map(i => {
delete i.name
})
let data = {
// userModel: { //线上去掉
// mobile: '13000000000'
// },
entryType: 'CUSTOMER_MEDIA',
ebizMediaDtoLst: that.list
}
saveOrUpdateInfo(data).then(res => {

View File

@@ -42,7 +42,7 @@ export function selectComp(that, index, type = '') {
//投保人
localStorage.scanFromInsured = 'true'
} else if (type == '2') {
//被保人
//被保
localStorage.scanFromInsured = 'false'
};
[that.isScan, title] = [true, '身份证扫描']
@@ -83,7 +83,7 @@ function closeBtn(that) {
/**
*
* @param {*} that 上下文
* @param {String} type 1 投保人; 2 被保人; 3 受益人
* @param {String} type 1 投保人; 2 被保人; 3 受益人
*/
export function appCallBack(that, type) {
return function () {
@@ -93,7 +93,7 @@ export function appCallBack(that, type) {
title = '投保人信息'
break
case '2':
title = '被保人信息'
title = '被保人信息'
break
case '3':
title = '指定受益人信息'
@@ -129,7 +129,7 @@ export function chooseOccupation(that, type) {
title = '投保人信息'
break
case '2':
title = '被保人信息'
title = '被保人信息'
break
case '3':
title = '指定受益人信息'
@@ -151,7 +151,7 @@ export function chooseOccupation(that, type) {
* @param {*} that 上下文
* @param {*} pickerType 弹框类型
* @param {*} valueKey 弹框编号
* @param {*} type 1 投保人; 2 被保人; 3 受益人
* @param {*} type 1 投保人; 2 被保人; 3 受益人
*/
export function toSelect(that, pickerType, valueKey, type) {
//pickerType 1、民族 2、证件类型 3、文化程度 4、有无社保(弃用) 5、税收居民身份 6、婚姻状况 7、在职情况
@@ -204,7 +204,7 @@ export function toSelect(that, pickerType, valueKey, type) {
*
* @param {*} that 上下文
* @param {*} value 值
* @param {*} type 1 投保人 2 被保人 3 受益人
* @param {*} type 1 投保人 2 被保人 3 受益人
*/
export function onConfirm(that, value, type) {
that.popupShow = false
@@ -324,7 +324,7 @@ export function onConfirm(that, value, type) {
}
break
case '3': {
//如果受益人是被保人本人
//如果受益人是被保人本人
if (value.id == 1) {
//获取投保人数据
getOrderDetail({
@@ -332,7 +332,7 @@ export function onConfirm(that, value, type) {
}).then(res => {
if (res.result == 0) {
that.isInsured = true
//获取被保人信息
//获取被保人信息
let insuredInfo = res.orderDTO.insuredDTOs[0]
for (let key in that.userInfo) {
that.userInfo[key] = insuredInfo[key]
@@ -505,7 +505,7 @@ export function onDateConfirm(that, val, type) {
*
* @param {*} that 上下文
* @param {*} data 客户列表数据
* @param {*} type 1 投保人; 2 被保人; 3 受益人
* @param {*} type 1 投保人; 2 被保人; 3 受益人
*/
export function chooseCustomer(that, data, type) {
let title
@@ -514,7 +514,7 @@ export function chooseCustomer(that, data, type) {
title = '投保人信息'
break
case '2':
title = '被保人信息'
title = '被保人信息'
break
case '3':
title = '指定受益人信息'
@@ -615,7 +615,7 @@ export function chooseCustomer(that, data, type) {
/**
*
* @param {*} that 上下文
* @param {*} type 1 投保人; 2 被保人; 3 受益人
* @param {*} type 1 投保人; 2 被保人; 3 受益人
*/
export function nextStep(that, type) {
//表单校验, 成功跳转
@@ -657,7 +657,7 @@ export function infoUpdate(that, type) {
let flag
switch (type) {
case '1': {
//取出local中的投被保人信息
//取出local中的投被保人信息
let saleInsuredInfo = JSON.parse(localStorage.saleInsuredInfo)
//如果 性别, 出生日期, 有无社保, 职业 发生变化
if (that.userInfo.sex != saleInsuredInfo.sex || that.userInfo.birthday != saleInsuredInfo.birthday) {
@@ -666,7 +666,7 @@ export function infoUpdate(that, type) {
}
break
case '2': {
//取出local中的被保人信息
//取出local中的被保人信息
let saleInsuredPersonInfo = JSON.parse(localStorage.saleInsuredPersonInfo)
//如果 性别, 出生日期, 有无社保, 职业 发生变化
if (
@@ -707,11 +707,11 @@ export function infoUpdate(that, type) {
/**
*
* @param {*} that 上下文
* @param {*} type 1 投保人 2 被保人
* @param {*} type 1 投保人 2 被保
*/
export function save(that, type, str) {
let params = {
// 投被保人入参不同
// 投被保人入参不同
orderType: type == '1' ? 'APPNT_ORDER' : 'INSURED_ORDER',
orderDTO: {
orderInfoDTO: {
@@ -727,7 +727,7 @@ export function save(that, type, str) {
if (type == '2' && that.userInfo.mediaDTOS == '') {
delete that.userInfo.mediaDTOS
}
// 投被保人入参不同
// 投被保人入参不同
type == '1' ? (params.orderDTO.appntDTO = that.userInfo) : (params.orderDTO.insuredDTOs = [that.userInfo])
saveOrUpdateOrderInfo(params).then(res => {
if (res.result == 0) {
@@ -738,7 +738,7 @@ export function save(that, type, str) {
that.countDown = 60
that.codeDisabled = false
// let url
// 投被保人跳转路径不同
// 投被保人跳转路径不同
if (type == '1') {
that.$jump({
flag: 'h5',
@@ -815,7 +815,7 @@ export function sureArea(that, area, type, flag = false) {
*
* @param {*} that 上下文
* @param {*} data 扫描数据
* @param {*} type 1 投保人 2 被保人
* @param {*} type 1 投保人 2 被保
*/
export function getIdentityInfo(that, data, type) {
if (data.name && data.name != '待识别') {
@@ -829,7 +829,7 @@ export function getIdentityInfo(that, data, type) {
}
that.isScan = false
that.bankisScan = false
let title = type == '1' ? '投保人信息' : '被保人信息'
let title = type == '1' ? '投保人信息' : '被保人信息'
that.$jump({
flag: 'navigation',
extra: {
@@ -882,7 +882,7 @@ export function getRelatedData(that, val) {
/**
*
* @param {*} that 上下文
* @param {*} type 1 投保人 2 被保人
* @param {*} type 1 投保人 2 被保
*/
export function getCode(that, type) {
if (that.userInfo.mobile == '') {

View File

@@ -244,43 +244,6 @@ export default {
} else {
self.save()
}
} else if (this.userInfo.idType == '2') {
//户口本
if (this.userInfo.idNo.length != 18) {
this.$toast('户口本的证件号码长度应等于18位')
} else {
self.save()
}
} else if (this.userInfo.idType == '3') {
//出生证
if (this.userInfo.idNo.length < 3) {
this.$toast('出生证须大于等于3个字符')
} else {
self.save()
}
} else if (this.userInfo.idType == '4') {
//护照
if (this.userInfo.idNo.length < 3) {
this.$toast('护照须大于等于3个字符')
} else {
self.save()
}
//证件是港澳居民通行证
} else if (this.userInfo.idType == '5') {
if (this.userInfo.idNo.length != 9) {
this.$toast('证件类型为港澳居民通行证的证件号码须为9位')
} else if (!/^(H|M)[0-9]{8}$/.test(this.userInfo.idNo)) {
this.$toast('证件类型为港澳居民通行证的,证件号码首位字母为"H"/"M",证件号码第2位至第9位为阿拉伯数字')
} else {
self.save()
}
//证件是台湾居民通行证
} else if (this.userInfo.idType == '6') {
if (this.userInfo.idNo.length != 8) {
this.$toast('证件类型为台湾居民通行证的证件号码须为8位数字')
} else {
self.save()
}
} else {
self.save()
}

View File

@@ -110,7 +110,7 @@ export default {
return
}
} else {
//校验主合同的被保人寿险职业等级
//校验主合同的被保人寿险职业等级
if (riskRules.lifeGradeLimit(resultData, this)) {
return
}
@@ -122,6 +122,7 @@ export default {
let currentProductInfo = {
calFactorLst,
isMainRisk: 1,
hint: resultData.hint,
riskType: resultData.riskType,
riskName: this.result.riskName,
productCode: this.result.productCode,
@@ -166,7 +167,11 @@ export default {
item['amt'] = factor['amt']
}
}
item.columns.push({ text: factor.showContent, value: factor[item.code], flag: factor[item.code + 'Flag'], amt: factor['amt'] })
let itemColumns = { text: factor.showContent, value: factor[item.code], flag: factor[item.code + 'Flag'], amt: factor['amt'] }
if (factor.medical !== undefined) {
itemColumns.medical = factor.medical
}
item.columns.push(itemColumns)
})
} else if (item.type == 1) {
//按年龄选择
@@ -187,7 +192,7 @@ export default {
},
//豁免险影响
remitLimit(resultData) {
//isRemit 0是豁免险 1非豁免险 remitType 0投保人 1被保人 relationToAppnt 投被关系
//isRemit 0是豁免险 1非豁免险 remitType 0投保人 1被保人 relationToAppnt 投被关系
let isRemit = resultData.productTrialInfoDTO.isRemit
if (isRemit == 1) return false
let remitType = resultData.productTrialInfoDTO.remitType

View File

@@ -77,7 +77,7 @@
:show-minus="false"
class="ml10 mr10"
@focus="focusStep"
@blur="blurStep(dutyItem)"
@blur="blurStep(dutyItem, index)"
@change="
dutyStepperChange(
item.calFactorLst[riskFactorIndex].rules[dutyItemIndex].defaultDutyAmt,
@@ -163,7 +163,7 @@
:show-minus="false"
class="ml10 mr10"
@focus="focusStep"
@blur="blurStep(dutyItem)"
@blur="blurStep(dutyItem, index)"
@change="
dutyStepperChange(
item.calFactorLst[riskFactorIndex].rules[dutyItemIndex].defaultDutyAmt,
@@ -216,7 +216,7 @@
class="ml10 mr10"
:disabled="dutyItem.changeWithMainRisk === true ? 'disabled' : ''"
@focus="focusStep"
@blur="blurStep(dutyItem)"
@blur="blurStep(dutyItem, index)"
@change="
dutyStepperChange(
item.calFactorLst[riskFactorIndex].rules[dutyItemIndex].defaultDutyAmt,
@@ -246,7 +246,16 @@
<!-- 只有万能险且只有建议书才展示 -->
<van-field class="pv10" v-if="item.hasPredictTransferPrem === '0'" v-model="item.predictTransferPrem" label="预计转入保费" placeholder="请输入" />
<div class="flex justify-content-s pv10 border-bottom" v-if="isRelated && isFrom != 'proposal'">
<van-field v-model="policyNo" clearable label="关联保单" name="关联保单号" maxlength="20" placeholder="请输入保单号/投保单号" />
<van-field
v-model="policyNo"
clearable
label="关联保单"
name="关联保单号"
maxlength="380"
type="textarea"
autosize
placeholder="请录入保单号或者投保单号,如果关联多个保单,请用\隔开"
/>
</div>
<div class="flex justify-content-s pv10 border-bottom prem">
<span
@@ -255,7 +264,7 @@
>首期保费</span
>
<span style="font-weight:bold" v-else>保额</span>
<span class="fee red" v-if="trialList && trialList.length > 0">{{ trialList[index].prem.toFixed(2) | moneyFormat }}</span>
<span class="fee red" v-if="trialList && trialList.length > 0">{{ trialList[index].showPrem.toFixed(2) | moneyFormat }}</span>
</div>
</div>
<div class="bottom-btn bg-white">
@@ -307,6 +316,20 @@ const dutyRules = {
msg: '意外住院津贴日额最低基本保险金额为10元/天超过最低基本保险金额为10元/天整数倍最高不得超过200元/天'
}
}
const dutyGFRS_A0004Rules = {
320205: {
mainRisk: 'GFRS_M0005',
msg: '住院医疗提示金额只能是0.5、1、1.5、2',
msg_1: '附加到国富人寿国富民惠医疗保险2020版最高基本保额不超过1万元。',
msg_2: '住院医疗提示金额只能是0.5、1',
},
320206: {
msg: '住院津贴提示:投保可选责任时,可选责任最低投保 50 元,且应为 10 元的整数倍'
},
320207: {
msg: '恶性肿瘤提示:投保可选责任时,可选责任最低投保 50 元,且应为 10 元的整数倍'
}
}
const DUTY_DEFAULT_MUTIPLE = 1000
const DUTY_DEFAULT_MIN = 10000
@@ -377,7 +400,7 @@ export default {
if (localStorage.saleInsuredInfo) {
this.saleInsuredInfo = JSON.parse(localStorage.saleInsuredInfo)
}
//获取被保人信息
//获取被保人信息
if (localStorage.saleInsuredPersonInfo) {
this.saleInsuredPersonInfo = JSON.parse(localStorage.saleInsuredPersonInfo)
}
@@ -407,54 +430,48 @@ export default {
// }
// })
// }
//保存险种编号
//保存主险险种编号
if (item.isMainRisk == 0) {
this.mainRiskCode = item.mainRiskCode
}
})
if(this.mainRiskCode == 'GFRS_M0005'){
this.chooseProducts.map(item => {
if(item.productCode == 'GFRS_A0004'){
item.calFactorLst.map( item2 => {
if(item2.code == 'dutyGroup'){
item2.rules.map(item3 => {
console.log(item3);
if(item3.duty == '320205'){
item3.maxDutyAmt = "1"
}
})
}
})
}
})
}
//GFRS_M0016需要展示免赔额和赔付比例并需要根据是否有社保调整数值
// let mainRiskCode = chooseProducts[0].mainRiskCode
this.chooseProducts.map(item => {
if (item.mainRiskCode === 'GFRS_M0016') {
// eslint-disable-next-line no-unused-vars
this.dogetLimitAndGetRate().then(res => {
if (this.chooseProducts[0].influences && this.chooseProducts[0].influences.length > 0) {
this.influences = this.chooseProducts[0].influences
this.chooseProducts[0].influences.forEach(item => {
this.influenceAddRiskCodes.push(item.productCode)
})
}
this.mainRiskInfluenceAddRisk()
//初始化数据试算
this.getTrial()
})
},
//特殊处理 GFRS_M0016 GFRS_A0004 GFRS_A0005 赔付比例处理
async dogetLimitAndGetRate() {
const orderNo = localStorage.getItem('orderNo')
let detailPromise = this.isFrom === 'proposal' ? new Promise(r => r(localStorage.getItem('proposalMedical'))) : getOrderDetail({ orderNo })
detailPromise.then(res => {
let isMedical = null
if (this.isFrom === 'proposal') {
isMedical = res === '1'
} else {
isMedical = res.orderDTO.insuredDTOs[0].medical === '0'
}
//根据社保写死两个字段 赔付比例和免赔额
item.calFactorLst.map(i => {
//免赔额
if (i.code === 'getLimit') {
const text = isMedical ? '0元意外医疗' : '100元意外医疗'
const value = isMedical ? '0' : '100'
//保存数据
this.medicalInfo = this.medicalInfo || {}
this.medicalInfo.getLimit = text
i.showContent = text
i.getLimit = value
i.columns = [{ text, value }]
}
//赔付比例
if (i.code === 'getRate') {
const text = isMedical ? '80%(意外医疗)' : '70%(意外医疗)'
const value = isMedical ? '0.8' : '0.7'
//保存数据
this.medicalInfo = this.medicalInfo || {}
this.medicalInfo.getRate = text
i.showContent = text
i.getRate = value
i.columns = [{ text, value }]
}
})
this.$forceUpdate()
})
} else {
let detailPromise = this.isFrom === 'proposal' ? localStorage.proposalMedical : await getOrderDetail({ orderNo })
this.chooseProducts.map(item => {
if (!(item.mainRiskCode === 'GFRS_M0016' || item.productCode === 'GFRS_A0004' || item.productCode === 'GFRS_A0005')) {
//其他产品删掉两个字段
let calFactorLst = item.calFactorLst
for (let i = calFactorLst.length - 1; i >= 0; i--) {
@@ -463,42 +480,68 @@ export default {
calFactorLst.splice(i, 1)
}
}
return
}
if (item.mainRiskCode === 'GFRS_M0016' || item.productCode === 'GFRS_A0004' || item.productCode === 'GFRS_A0005' ) {
let isMedical = null
if (this.isFrom === 'proposal') {
isMedical = detailPromise == '1'
} else {
isMedical = detailPromise.orderDTO.insuredDTOs[0].medical == '0'
}
// 赔付比例和免赔额
item.calFactorLst.map(i => {
if (i.code === 'getLimit') {
let tempColumns = i.columns.filter(itemC => {
return itemC.medical == Math.abs(isMedical - 1).toString()
})
if (tempColumns.length !== 0) {
i.columns = tempColumns
}
i.getLimit = i.columns[0].value
i.showContent = i.columns[0].text
}
//赔付比例
if (i.code === 'getRate') {
let tempColumns = i.columns.filter(itemC => {
return itemC.medical == Math.abs(isMedical - 1).toString()
})
if (tempColumns.length !== 0) {
i.columns = tempColumns
}
i.getRate = i.columns[0].value
i.showContent = i.columns[0].text
}
})
// this.influenceAddRiskCodes
if (this.chooseProducts[0].influences && this.chooseProducts[0].influences.length > 0) {
this.influences = this.chooseProducts[0].influences
this.chooseProducts[0].influences.forEach(item => {
this.influenceAddRiskCodes.push(item.productCode)
})
this.$forceUpdate()
} else if(item.productCode === 'GFRS_A0005'){
// GFRS_A0005 未处理
}
this.mainRiskInfluenceAddRisk()
//初始化数据试算
this.getTrial()
})
},
// 责任保额份数变化
dutyStepperChange(value, productIndex, calFactorIndex, dutyItemIndex, isChecked, min, max) {
//这个险种使用其他验证方式
if (this.mainRiskCode === 'GFRS_M0016') return
if (this.chooseProducts[productIndex].productCode === 'GFRS_M0016') return
// 004险种其他验证方式
if (this.chooseProducts[productIndex].productCode === 'GFRS_A0004') return
if (this.chooseProducts[productIndex].productCode === 'GFRS_A0003') {
this.getTrial()
return
}
let currentEle = this.chooseProducts[productIndex].calFactorLst[calFactorIndex].rules[dutyItemIndex]
let showHint = this.chooseProducts[productIndex].hint
if (value < min || value > max) {
this.$toast(localStorage.hint)
this.$toast(showHint)
} else {
if ((Number(value) * 10000) % (Number(currentEle.limit) * 10000) != 0) {
Dialog.alert({
message: localStorage.hint
message: showHint
}).then(() => {
currentEle.defaultDutyAmt = currentEle.minDutyAmt
})
// this.$toast(localStorage.hint)
// this.$toast(showHint)
} else {
// this.mainRiskInfluenceAddRisk()
// currentEle['amt'] = Number(defalutValue) * Number(currentEle.moneyUnit)
@@ -593,15 +636,20 @@ export default {
].rules[dutyItemIndex]['necess']
return false
}
this.valiAndSend(dutyItem)
this.valiAndSend(dutyItem, productIndex)
},
valiAndSend(dutyItem) {
valiAndSend(dutyItem, productIndex) {
//验证责任
let validateRiskCode = this.chooseProducts[productIndex].productCode
let showHint = this.chooseProducts[productIndex].hint
let inputValue = dutyItem.defaultDutyAmt,
duty = dutyItem.duty
if (this.mainRiskCode === 'GFRS_M0016' && !this.valiDuty(inputValue, duty)) {
if (validateRiskCode === 'GFRS_M0016' && !this.valiDuty(inputValue, duty)) {
//验证不通过
return
} else if (validateRiskCode === 'GFRS_A0004' && !this.valiA0004Duty(inputValue, showHint, dutyItem)) {
//验证不通过 险种为GFRS_A0004 责任编码为320205
return
} else {
this.mainRiskInfluenceAddRisk()
this.getTrial()
@@ -611,13 +659,13 @@ export default {
focusStep() {
this.nextStepFlag = true
},
blurStep(dutyItem) {
blurStep(dutyItem, productIndex) {
this.nextStepFlag = false
//失去焦点时做验证
if (dutyItem.necess) {
//勾选时才做验证
this.valiAndSend(dutyItem)
this.valiAndSend(dutyItem, productIndex)
}
},
//险种GFRS_M0016的责任的验证规则
@@ -637,6 +685,50 @@ export default {
}
}
},
//险种 GFRS_A0004 险种验证规则
valiA0004Duty(value, showHint, currentEle) {
/* if (!(currentEle.necess == true)) {
this.nextStepFlag = false
return true
}*/
// 验证其他 最小50 其他为50 10 倍数
if (currentEle.duty == '320206' || currentEle.duty == '320207') {
let numberValue = Number(value) * 10000
if (numberValue % 10 != 0 || numberValue < 50) {
this.$toast(dutyGFRS_A0004Rules[currentEle.duty].msg)
this.nextStepFlag = true
return false
}
}
// 保额只能为5000 10000 15000 200000
if (currentEle.duty == '320205') {
if (this.mainRiskCode === dutyGFRS_A0004Rules[currentEle.duty]['mainRisk']) {
if (!(value == '0.5' || value == '1')) {
this.$toast(dutyGFRS_A0004Rules[currentEle.duty].msg_2)
this.nextStepFlag = true
return false
} else if(value-0 > 1){
this.$toast(dutyGFRS_A0004Rules[currentEle.duty].msg_1)
this.nextStepFlag = true
return false
}
} else {
if (!(value == '0.5' || value == '1' || value == '1.5' || value == '2')) {
this.$toast(dutyGFRS_A0004Rules[currentEle.duty].msg)
this.nextStepFlag = true
return false
}
}
this.nextStepFlag = false
return true
}
this.nextStepFlag = false
return true
},
/********start 通用规则、特殊规则处理 start******/
//通用规则1交费方式为一次交情无交费期限
hiddenPayEndYear(currentEle) {
@@ -676,7 +768,7 @@ export default {
let age = Number(this.saleInsuredPersonInfo.age)
for (let i = 0; i < currentEle.rules.length; i++) {
if (currentEle.rules[i].payEndYear == value && age > currentEle.rules[i].maxAge) {
this.$toast('被保人年龄不适合该交费期间!')
this.$toast('被保人年龄不适合该交费期间!')
return true
}
}
@@ -687,7 +779,7 @@ export default {
let age = Number(this.saleInsuredPersonInfo.age)
for (let i = 0; i < currentEle.rules.length; i++) {
if (currentEle.rules[i].insuYear == value && age > currentEle.rules[i].maxAge) {
this.$toast('被保人年龄不适合该保险期间!')
this.$toast('被保人年龄不适合该保险期间!')
return true
}
}
@@ -1013,15 +1105,27 @@ export default {
// trialInfo.duty = [{ dutyCode: trialInfo.duty }]
// }
//获取投被保生日、性别
let birthday, sex
let birthday, sex, occupationCode, occupationName
if (item.isRemit == '0' && item.remitType == '0') {
;[birthday, sex] = [this.saleInsuredInfo.birthday, this.saleInsuredInfo.sex]
;[birthday, sex, occupationCode, occupationName] = [
this.saleInsuredInfo.birthday,
this.saleInsuredInfo.sex,
this.saleInsuredInfo.occupationCode,
this.saleInsuredInfo.occupationName
]
} else {
;[birthday, sex] = [this.saleInsuredPersonInfo.birthday, this.saleInsuredPersonInfo.sex]
;[birthday, sex, occupationCode, occupationName] = [
this.saleInsuredPersonInfo.birthday,
this.saleInsuredPersonInfo.sex,
this.saleInsuredPersonInfo.occupationCode,
this.saleInsuredPersonInfo.occupationName
]
}
trialInfo = Object.assign(trialInfo, {
birthday,
sex,
occupationCode,
occupationName,
platformType: 'app',
productCode: item.productCode,
medical: JSON.parse(localStorage.getItem('saleInsuredPersonInfo')).medical
@@ -1071,18 +1175,19 @@ export default {
: this.chooseProducts[productIndex].calFactorLst[calFactorIndex]
//改动原因:孝心保产品有对年龄的特殊要求
//添加判断,是否是孝心保产品
let showHint = this.chooseProducts[productIndex].hint
let productCode = localStorage.trialList == '' ? '' : JSON.parse(localStorage.trialList)[0].productCode
if (productCode == 'GFRS_M0014') {
//被保人年龄如果在50-65区间
//被保人年龄如果在50-65区间
if (this.saleInsuredPersonInfo.age >= 50 && this.saleInsuredPersonInfo.age <= 65) {
//使用rules规则里的第二条控制保额份数
if (Number(defalutValue) < Number(riskFactor.rules[1].minPrem) || Number(defalutValue) > Number(riskFactor.rules[1].maxPrem)) {
this.$toast(localStorage.hint)
this.$toast(showHint)
this.nextStepFlag = true
} else {
if ((Number(defalutValue) * 10000) % (Number(currentEle.limit) * 10000) != 0) {
// this.defalutAmt = currentEle.rules[productIndex].displayAmount
this.$toast(localStorage.hint)
this.$toast(showHint)
this.nextStepFlag = true
} else {
this.mainRiskInfluenceAddRisk()
@@ -1090,16 +1195,16 @@ export default {
this.getTrial()
}
}
//被保人年龄如果在66-75之间
//被保人年龄如果在66-75之间
} else if (this.saleInsuredPersonInfo.age >= 66 && this.saleInsuredPersonInfo.age <= 75) {
//使用rules规则里的第一条控制保额份数
if (Number(defalutValue) < Number(riskFactor.rules[0].minPrem) || Number(defalutValue) > Number(riskFactor.rules[0].maxPrem)) {
this.$toast(localStorage.hint)
this.$toast(showHint)
this.nextStepFlag = true
} else {
if ((Number(defalutValue) * 10000) % (Number(currentEle.limit) * 10000) != 0) {
// this.defalutAmt = currentEle.rules[productIndex].displayAmount
this.$toast(localStorage.hint)
this.$toast(showHint)
this.nextStepFlag = true
} else {
this.mainRiskInfluenceAddRisk()
@@ -1144,12 +1249,12 @@ export default {
}
} else {
if (Number(defalutValue) < Number(min) || Number(defalutValue) > Number(max)) {
this.$toast(localStorage.hint)
this.$toast(showHint)
this.nextStepFlag = true
} else {
if ((Number(defalutValue) * 10000) % (Number(currentEle.limit) * 10000) != 0) {
// defalutValue = currentEle.rules[productIndex].displayAmount
this.$toast(localStorage.hint)
this.$toast(showHint)
this.nextStepFlag = true
} else {
this.mainRiskInfluenceAddRisk()
@@ -1181,6 +1286,32 @@ export default {
}
}
//GFRS_A0004需要验证责任
for (let m = 0; m < this.chooseProducts.length; m++) {
if (this.chooseProducts[m].productCode == 'GFRS_A0004') {
let showHint = this.chooseProducts[m].hint
let calFactorLst = this.chooseProducts[m].calFactorLst
for (let i = 0; i < calFactorLst.length; i++) {
if (calFactorLst[i].code === 'dutyGroup') {
let duties = calFactorLst[i].rules
for (let j = 0; j < duties.length; j++) {
let item = duties[j]
if (!this.valiA0004Duty(item.defaultDutyAmt, showHint, item)) {
return
}
}
}
}
}
}
// 验证格式
if (this.isRelated && this.isFrom != 'proposal' && this.policyNo) {
let vl = /^[0-9\\]+$/.test(this.policyNo)
if (!vl) {
return this.$toast('关联保单的格式不正确')
}
}
//组装险种提交数据
let [mainRiskCode, riskDTOLst] = ['', []]
let rollInResult = '' //校验预计转入保费结果
@@ -1276,6 +1407,10 @@ export default {
}
if (resultData.result == 0) {
//电投
if (localStorage.isFrom == 'sale' && resultData.deleteFlag == '0') {
localStorage.salePageFlag = '4'
}
//建议书
if (localStorage.isFrom == 'proposal' && resultData.content.id) {
this.saleInsuredPersonInfo.insuredId = resultData.content.id

View File

@@ -134,7 +134,7 @@ export default {
return
}
} else {
//校验主合同被保人寿险职业等级
//校验主合同被保人寿险职业等级
if (riskRules.lifeGradeLimit(resultData, this)) {
return
}
@@ -156,6 +156,7 @@ export default {
calFactorLst,
hasAddtionRisk,
isMainRisk: 0,
hint: resultData.hint,
riskType: resultData.riskType,
riskName: this.result.riskName,
productCode: this.result.riskProductCode,
@@ -171,6 +172,7 @@ export default {
calFactorLst,
hasAddtionRisk,
isMainRisk: 0,
hint: resultData.hint,
riskType: resultData.riskType,
riskName: this.result.riskName,
productCode: this.result.riskProductCode,
@@ -219,7 +221,11 @@ export default {
item[item.code] = factor[item.code]
}
}
item.columns.push({ text: factor.showContent, value: factor[item.code], flag: factor[item.code + 'Flag'] })
let itemColumns = { text: factor.showContent, value: factor[item.code], flag: factor[item.code + 'Flag'] }
if (factor.medical !== undefined) {
itemColumns.medical = factor.medical
}
item.columns.push(itemColumns)
})
} else if (item.type == 1) {
//按年龄选择

View File

@@ -179,7 +179,7 @@ export default {
this.isShow = true
})
.catch(() => {
this.$toast('删除失败!')
/*this.$toast('删除失败!')*/
})
},
async delProduct(index) {

View File

@@ -1,5 +1,5 @@
export default {
//投、被保人年龄对险种的限制
//投、被保人年龄对险种的限制
ageLimit(resultData, vm, isApplicant) {
let age, tips
if (isApplicant) {
@@ -7,7 +7,7 @@ export default {
tips = '投保人年龄不适合此款险种,请选择其他险种!'
} else {
age = this.getSaleInsuredPersonInfo().age
tips = '被保人年龄不适合此款险种,请选择其他险种!'
tips = '被保人年龄不适合此款险种,请选择其他险种!'
}
let minAge = resultData.productTrialInfoDTO.ageRange && resultData.productTrialInfoDTO.ageRange.minAge
let maxAge = resultData.productTrialInfoDTO.ageRange && resultData.productTrialInfoDTO.ageRange.maxAge;
@@ -24,7 +24,7 @@ export default {
let socialInsurance = resultData.productInsuredDTO.socialInsurance
if (socialInsurance == 0) return false
if (currentMedical != socialInsurance) {
vm.$toast('被保人社保情况不适合此款险种,请选择其他险种!')
vm.$toast('被保人社保情况不适合此款险种,请选择其他险种!')
return true
}
return false
@@ -62,7 +62,7 @@ export default {
}
return false
},
//获取被保人信息
//获取被保人信息
getSaleInsuredPersonInfo() {
return localStorage.saleInsuredPersonInfo && JSON.parse(localStorage.saleInsuredPersonInfo)
},

View File

@@ -0,0 +1,229 @@
<!-- 活动量管理 -->
<template>
<div class="pb40">
<van-collapse v-model="weeklyNames">
<van-collapse-item title="活动量统计周报" title-class="fs16 fwb" name="1">
<van-grid :column-num="2">
<van-grid-item>
<p class="fs14">周白板面谈数量</p>
<p class="fs14 mt20 fwb">{{ weeklyInfo.whiteboard }}</p>
</van-grid-item>
<van-grid-item>
<p class="fs14">周同业面谈数量</p>
<p class="fs14 mt20 fwb">{{ weeklyInfo.sameTrade }}</p>
</van-grid-item>
</van-grid>
</van-collapse-item>
</van-collapse>
<!-- 人才库 -->
<div class="bg-white">
<van-collapse v-model="talentPoolCollapse" v-if="talentPoolList.length > 0">
<van-collapse-item name="1" title-class="fs16 fwb">
<div slot="title" class="flex justify-content-s align-items-c">
人才库
<van-icon class="mr10" name="plus" @click.stop="addTalentPool" />
</div>
<van-cell-group>
<TalentPoolItem v-for="talentPoolInfo in talentPoolList" :key="talentPoolInfo.personnelCode" :talentPoolInfo="talentPoolInfo"></TalentPoolItem>
</van-cell-group>
<p v-if="showMoreTalentPool" class="p15 text-right red" @click="toListTalentPool">查看全部 >></p>
</van-collapse-item>
</van-collapse>
<template v-else>
<van-cell class="fs16 fwb">
<div slot="title" class="flex justify-content-s align-items-c">
人才库
</div>
</van-cell>
<van-cell>
<template slot="title">
<div class="text-center"><van-icon name="add-square" size="50" color="#ee0a24" @click="addTalentPool" /></div>
</template>
</van-cell>
</template>
</div>
<!-- 当日增员活动日志 -->
<div class="bg-white">
<div class="p15" v-if="recordList.length == 0">
<p class="fs16 fwb">当日增员活动日志</p>
<div class="text-center van-hairline--top"><van-icon name="add-square" size="50" color="#ee0a24" @click="toEdit" /></div>
</div>
<van-collapse v-model="recordNames" v-else>
<van-collapse-item name="1" title-class="fs16 fwb">
<div slot="title" class="flex justify-content-s align-items-c">当日增员活动日志 <van-icon class="mr10" name="plus" @click.stop="toEdit" /></div>
<ActivityLogItem :ActivityLogInfo="info" v-for="(info, index) in recordList" :key="index"></ActivityLogItem>
<p v-if="showMore" class="p15 text-right red" @click="toList">查看全部 >></p>
</van-collapse-item>
</van-collapse>
</div>
</div>
</template>
<script>
import formatDate from '@/assets/js/utils/date-utils'
import { Collapse, CollapseItem, Grid, GridItem, Cell, CellGroup } from 'vant'
import TalentPoolItem from '@/components/ebiz/manpower/TalentPoolItem'
import ActivityLogItem from '@/components/ebiz/manpower/ActivityLogItem'
import { getAgentPersonnelListFirst, queryWeekly, queryRecordList } from '@/api/ebiz/manpower/manpower'
export default {
components: {
[Collapse.name]: Collapse,
[CollapseItem.name]: CollapseItem,
[Grid.name]: Grid,
[GridItem.name]: GridItem,
[Cell.name]: Cell,
[CellGroup.name]: CellGroup,
TalentPoolItem,
ActivityLogItem
},
data() {
return {
weeklyNames: ['1'],
personnelNames: ['1'],
recordNames: ['1'],
talentPoolInfo: {
name: '王辉',
sameCompany: '中国人寿'
},
ActivityLogInfo: {
recordCode: '',
name: '王辉',
// avatarUrl: 'https://img.yzcdn.cn/vant/cat.jpeg',
age: '35岁',
type: '同业',
recordDate: formatDate.formatDate().split(' ')[0]
},
// 日志统计周报信息
weeklyInfo: {
whiteboard: '', // 白板
sameTrade: '' // 同业
},
// 人才列表
showMoreTalentPool: false,
talentPoolCollapse: ['1'],
talentPoolList: [],
// 日志列表
showMore: false,
// 增员日志列表
recordList: []
}
},
mounted() {
this.queryWeekly()
this.getAgentPersonnelListFirst()
this.queryRecordList()
},
methods: {
// 获取日志统计周报
queryWeekly() {
queryWeekly({})
.then(res => {
console.log(res)
if (res.result == 0) {
this.weeklyInfo = res.content.weekly
} else {
this.$toast(res.resultMessage)
}
})
.catch(err => {
console.log(err)
})
},
// 查询增员日志列表
queryRecordList() {
let data = {
recordDate: ''
}
queryRecordList(data)
.then(res => {
if (res.result == 0) {
let data = res.content.records
if (data.length > 5) {
this.showMore = true
data = data.slice(0, 5)
} else {
this.showMore = false
}
this.recordList = data
} else {
this.$toast(res.resultMessage)
}
})
.catch(err => {
console.log(err)
})
},
toList() {
this.$jump({
flag: 'h5',
extra: {
url: location.origin + `/#/manpower/ActivityLog/List`,
forbidSwipeBack: '1',
needRefresh: '1'
},
routerInfo: { path: '/manpower/ActivityLog/List' }
})
},
toEdit() {
this.$jump({
flag: 'h5',
extra: {
url: location.origin + `/#/manpower/ActivityLog/Edit?isEdit=0`,
forbidSwipeBack: '1',
needRefresh: '1'
},
routerInfo: { path: '/manpower/ActivityLog/Edit?isEdit=0' }
})
},
addTalentPool() {
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/manpower/talentPool/Add',
needRefresh: '1'
},
routerInfo: {
path: '/manpower/talentPool/Add'
}
})
},
toListTalentPool() {
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/manpower/talentPool/',
needRefresh: '1'
},
routerInfo: {
path: '/manpower/talentPool/'
}
})
},
getAgentPersonnelListFirst() {
getAgentPersonnelListFirst()
.then(res => {
if (res.result == 0) {
let data = res.content.personnels
if (data.length > 5) {
this.showMoreTalentPool = true
data = data.slice(0, 5)
} else {
this.showMoreTalentPool = false
}
this.talentPoolList = data
} else {
this.$toast(res.resultMessage)
}
})
.catch(() => {})
}
}
}
</script>
<style lang="scss" scoped>
.red {
color: #ee0a24 !important;
}
</style>

View File

@@ -0,0 +1,58 @@
<!-- 增员工具 -->
<template>
<div>
<UserInfoHeader />
<van-cell-group>
<NavItem v-for="(item, index) of navList" :key="index" :config="item" />
</van-cell-group>
</div>
</template>
<script>
import UserInfoHeader from '@/components/ebiz/manpower/UserInfoHeader'
import NavItem from '@/components/ebiz/manpower/NavItem'
import { CellGroup } from 'vant'
export default {
name: 'IncreaseStaffTools',
components: {
[UserInfoHeader.name]: UserInfoHeader,
[NavItem.name]: NavItem,
[CellGroup.name]: CellGroup
},
data() {
return {
active: 0,
navList: [
{
title: '公司介绍',
icon: 'hotel-o',
path: '/manpower/increaseStaffTools/CompanyIntroduction'
},
{
title: '政策方案',
icon: 'orders-o',
path: '/manpower/increaseStaffTools/PolicyOptions'
},
{
title: '产品信息',
icon: 'bookmark-o',
path: '/product/productList'
},
{
title: 'DISC性格分析',
icon: 'newspaper-o',
path: '/manpower/DiscAnalysis/List'
}
// {
// title: '培训体系',
// src: 'http://localhost:8080/favicon.ico',
// path: '/'
// }
]
}
},
methods: {}
}
</script>
<style lang="scss" scoped></style>

View File

@@ -0,0 +1,52 @@
<template>
<div>
<UserInfoHeader />
<van-cell-group>
<NavItem v-for="(item, index) of navList" :key="index" :config="item" />
</van-cell-group>
</div>
</template>
<script>
import UserInfoHeader from '@/components/ebiz/manpower/UserInfoHeader'
import NavItem from '@/components/ebiz/manpower/NavItem'
import { CellGroup } from 'vant'
export default {
name: 'Navigation',
components: {
[UserInfoHeader.name]: UserInfoHeader,
[NavItem.name]: NavItem,
[CellGroup.name]: CellGroup
},
data() {
return {
active: 0,
navList: [
{
title: '个人中心',
icon: 'user-o',
path: '/manpower/PersonalCenter'
},
{
title: '增员工具',
icon: 'friends-o',
path: '/manpower/IncreaseStaffTools'
},
{
title: '活动量管理',
icon: 'todo-list-o',
path: '/manpower/ActiveManagement'
},
{
title: '培训上岗',
icon: 'records',
path: '/manpower/Training'
}
]
}
},
methods: {}
}
</script>
<style lang="scss" scoped></style>

View File

@@ -0,0 +1,198 @@
<template>
<div class="personal-center-main" v-if="success">
<van-cell-group class="pl15 mt10">
<van-cell title="姓名" :value="agentInfo.name" />
<van-cell title="入职职级" :value="agentInfo.entryGrade" />
<van-cell title="现任职级" :value="agentInfo.presentGrade" />
<van-cell title="入职时间" :value="agentInfo.entryTime" />
<van-cell title="现任职级时间" :value="agentInfo.presentGradeTime" />
</van-cell-group>
<van-tabs v-model="active" class="mt10" sticky>
<van-tab title="团队人力架构">
<van-cell-group class="pl15">
<van-cell title="直辖组人力" :value="teamInfo.jurisdictionGroupNum" />
<van-cell title="直辖部人力" :value="teamInfo.jurisdictionDepartNum" />
<van-cell title="直辖部主管数" :value="teamInfo.jurisdictionGroupManagerNum" />
<van-cell title="大直辖人力" :value="teamInfo.majorJurisdictionNum" />
<van-cell title="直接增员人数" :value="teamInfo.directReinforceNum" />
<van-cell title="直接育成主管数量" :value="teamInfo.directBredManagerNum" />
<van-cell title="直接育成部门数量" :value="teamInfo.directBredDepartNum" />
<van-cell title="全辖团队人力" :value="teamInfo.allTeamNum" />
</van-cell-group>
</van-tab>
<van-tab title="实时新增数据">
<van-grid :border="true" :column-num="2" class="p15">
<van-grid-item>
当月个人新增
<span class="c-gray-darker fwb mt20">{{ realAddDataInfo.currentMonthPersonalAdd }}</span>
</van-grid-item>
<van-grid-item>
直辖组新增
<span class="c-gray-darker fwb mt20">{{ realAddDataInfo.jurisdictionGroupAdd }}</span>
</van-grid-item>
<van-grid-item>
直辖部新增
<span class="c-gray-darker fwb mt20">{{ realAddDataInfo.jurisdictionDepartAdd }}</span>
</van-grid-item>
<van-grid-item>
大直辖新增
<span class="c-gray-darker fwb mt20">{{ realAddDataInfo.majorJurisdictionAdd }}</span>
</van-grid-item>
</van-grid>
</van-tab>
<van-tab title="人力架构">
<van-collapse v-model="activeNames" accordion>
<van-collapse-item v-for="(item, index) of frameworkInfoLstAdmin" :name="index" :key="index">
<div slot="title">
<span class="tagJOB">{{ item.gradeEnglishName }}</span>
{{ item.agentName }} ({{ item.manageStaffNum }})
</div>
<van-grid :border="true" :column-num="2" class="p15">
<van-grid-item>
当月个人新增
<span class="c-gray-darker fwb mt20">{{ item.personalRealAddDataInfo.currentMonthPersonalAdd }}</span>
</van-grid-item>
<van-grid-item>
直辖组新增
<span class="c-gray-darker fwb mt20">{{ item.personalRealAddDataInfo.jurisdictionGroupAdd }}</span>
</van-grid-item>
<van-grid-item>
直辖部新增
<span class="c-gray-darker fwb mt20">{{ item.personalRealAddDataInfo.jurisdictionDepartAdd }}</span>
</van-grid-item>
<van-grid-item>
大直辖新增
<span class="c-gray-darker fwb mt20">{{ item.personalRealAddDataInfo.majorJurisdictionAdd }}</span>
</van-grid-item>
</van-grid>
</van-collapse-item>
</van-collapse>
<van-cell-group class="">
<van-cell v-for="(item, index) of frameworkInfoLstNotAdmin" :key="index">
<div slot="title">
<span class="tagJOB">{{ item.gradeEnglishName }}</span>
<span class="name">{{ item.agentName }}</span>
</div>
</van-cell>
</van-cell-group>
</van-tab>
</van-tabs>
</div>
</template>
<script>
const isAdmin = {
BD: true,
SBM: true,
BM: true,
SAS: true,
AS: true,
CM: false,
CA: false
}
import { Cell, CellGroup, Tab, Tabs, Grid, GridItem, Collapse, CollapseItem } from 'vant'
import { getPersonalInfo } from '@/api/ebiz/manpower/manpower'
export default {
name: 'PersonalCenter',
components: {
[Cell.name]: Cell,
[CellGroup.name]: CellGroup,
[Tab.name]: Tab,
[Tabs.name]: Tabs,
[Grid.name]: Grid,
[GridItem.name]: GridItem,
[Collapse.name]: Collapse,
[CollapseItem.name]: CollapseItem
},
data() {
return {
activeNames: [],
active: '',
success: false,
agentInfo: null,
realAddDataInfo: null,
frameworkInfoLst: null,
teamInfo: null
}
},
computed: {
frameworkInfoLstAdmin: function() {
if (this.frameworkInfoLst) {
return this.frameworkInfoLst.filter(item => {
return isAdmin[item.gradeEnglishName]
})
}
return []
},
frameworkInfoLstNotAdmin: function() {
if (this.frameworkInfoLst) {
return this.frameworkInfoLst.filter(item => {
return !isAdmin[item.gradeEnglishName]
})
}
return []
}
},
watch: {},
created() {
getPersonalInfo({
agentCode: localStorage.getItem('agentCode')
})
.then(res => {
if (res.result == 0) {
for (let key of Object.keys(res.content)) {
this[key] = res.content[key]
}
this.success = true
} else {
this.$toast(res.resultMessage)
}
})
.catch(() => {})
},
mounted() {},
methods: {}
}
</script>
<style scoped="scoped" lang="scss">
.personal-center-main {
/deep/.van-cell:not(:last-child)::after {
position: absolute;
box-sizing: border-box;
content: ' ';
pointer-events: none;
right: 0;
bottom: 0;
left: 0;
border-bottom: 1px solid #dadada;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
}
/deep/ .van-cell__value {
text-align: left !important;
}
/deep/.van-collapse-item__title {
padding-left: 60px;
}
.tagJOB {
display: inline-block;
position: absolute;
width: 30px;
height: 30px;
line-height: 30px;
font-size: 3vw;
left: 20px;
top: 7px;
text-align: center;
border-radius: 999px;
background-color: #5ca7de;
color: #fff;
}
.name {
padding-left: 45px;
}
}
</style>

View File

@@ -0,0 +1,64 @@
<template>
<div>
<UserInfoHeader />
<van-cell-group>
<NavItem v-for="(item, index) of navList" :key="index" :config="item" />
</van-cell-group>
</div>
</template>
<script>
import UserInfoHeader from '@/components/ebiz/manpower/UserInfoHeader'
import NavItem from '@/components/ebiz/manpower/NavItem'
import { CellGroup } from 'vant'
import { getTokenForUserModel } from '@/api/ebiz/manpower/manpower'
export default {
name: 'Navigation',
components: {
[UserInfoHeader.name]: UserInfoHeader,
[NavItem.name]: NavItem,
[CellGroup.name]: CellGroup
},
data() {
return {
active: 0,
navList: [
{
title: '增员分享',
icon: 'cluster-o',
path: '/',
share: true,
shareConfig: null
},
{
title: '增员审批',
icon: 'comment-o',
path: '/agentEenter/approve/ApproveList'
}
]
}
},
created() {
this.getInfo()
},
methods: {
async getInfo() {
const res = await getTokenForUserModel()
if (res.result == 0) {
this.navList[0].shareConfig = {
title: res.title,
url: res.url,
content: res.content,
img: res.icon
}
} else {
this.$toast(res.resultMessage)
}
}
}
}
</script>
<style lang="scss" scoped></style>

View File

@@ -0,0 +1,255 @@
<!-- 活动日志-修改日志 -->
<template>
<div>
<van-cell-group>
<van-field readonly v-model="recordInfo.recordDate" label="日期" />
<van-field
:readonly="isDisable"
required
v-model="recordInfo.name"
label="姓名"
placeholder="请输入姓名"
v-validate="'required|manpowerName'"
data-vv-name="姓名"
/>
<van-field
:readonly="isDisable"
required
v-model="recordInfo.age"
type="digit"
label="年龄"
placeholder="请输入年龄"
v-validate="'required|onlyNumber|onlyInteger|maxAge'"
data-vv-name="年龄"
/>
<select-radio :disabled="isDisable" :radios="typeArr" label="类型" name="类型" :value.sync="recordInfo.type" :required="true"></select-radio>
<van-field
:readonly="isDisable"
required
v-model="recordInfo.interviewNum"
type="digit"
label="面谈次数"
placeholder="请输入面谈次数"
v-validate="'required|onlyNumber|onlyInteger'"
data-vv-name="面谈次数"
/>
<van-field
required
readonly
v-model="logResult"
label="面谈结果"
placeholder="请选择面谈结果"
@click="handleRsult"
v-validate="'required'"
data-vv-name="面谈结果"
/>
<van-field
required
readonly
v-model="logOccupation"
label="过往职业"
placeholder="请选择过往职业"
@click="handleOccupation"
v-validate="'required'"
data-vv-name="过往职业"
/>
</van-cell-group>
<van-button type="danger" class="bottom-btn" size="large" v-no-more-click="1000" v-if="isEdit == 0" @click="subInfo">保存</van-button>
<van-popup v-model="showResultArr" position="bottom" :style="{ height: '30%' }">
<van-picker show-toolbar :columns="resultArr" @cancel="showResultArr = false" @confirm="selectResult" />
</van-popup>
<van-popup v-model="showOccupationArr" position="bottom" :style="{ height: '30%' }">
<van-picker show-toolbar :columns="occupationArr" @cancel="showOccupationArr = false" @confirm="selectOccupation" />
</van-popup>
</div>
</template>
<script>
import formatDate from '@/assets/js/utils/date-utils'
import { Field, CellGroup, Popup, Picker, Cell, Button } from 'vant'
import { queryRecordDetail, saveRecord } from '@/api/ebiz/manpower/manpower'
import SelectRadio from '@/components/ebiz/SelectRadio'
export default {
components: {
[Cell.name]: Cell,
[Field.name]: Field,
[CellGroup.name]: CellGroup,
[Button.name]: Button,
[Popup.name]: Popup,
[Picker.name]: Picker,
[SelectRadio.name]: SelectRadio
},
data() {
return {
recordInfo: {
recordDate: formatDate.formatDate().split(' ')[0],
name: '',
age: '',
type: 0,
interviewNum: '', // 面试次数
interviewResult: '', // 面谈结果
pastOccu: '' // 过往职业
},
recordCode: '',
isEdit: '',
isDisable: '',
// 面试结果
showResultArr: false,
// 职业选择
showOccupationArr: false,
typeArr: [
{
label: '同业',
value: '0'
},
{
label: '白板',
value: '1'
}
],
resultArr: [
{ id: '0', text: '不加盟' },
{ id: '1', text: '考虑中' },
{ id: '2', text: '进班了解' },
{ id: '3', text: '同意加盟' }
],
occupationArr: [
{ id: '001', text: '一般内勤职员' },
{ id: '002', text: '其他金融行业' },
{ id: '003', text: '家庭主妇' },
{ id: '004', text: '自由职业' },
{ id: '005', text: '离退休人员' },
{ id: '006', text: '个体经营者' },
{ id: '007', text: '销售' },
{ id: '008', text: '公务员' },
{ id: '009', text: '保险外勤' },
{ id: '010', text: '保险内勤' },
{ id: '011', text: '其他' }
]
}
},
mounted() {
this.recordCode = this.$route.query.code || ''
this.isEdit = this.$route.query.isEdit
this.isDisable = this.isEdit == '1'
this.queryRecordDetail()
},
computed: {
logResult() {
if (this.recordInfo.interviewResult) {
return this.resultArr.find(ele => ele.id === this.recordInfo.interviewResult).text
} else {
return ''
}
},
logOccupation() {
if (this.recordInfo.pastOccu) {
return this.occupationArr.find(ele => ele.id === this.recordInfo.pastOccu).text
} else {
return ''
}
}
},
methods: {
queryRecordDetail() {
if (!this.recordCode) {
return false
}
let data = {
recordCode: this.recordCode
}
queryRecordDetail(data)
.then(res => {
console.log(res)
if (res.result == 0) {
this.recordInfo = res.content.record
} else {
this.$toast(res.resultMessage)
}
})
.catch(err => {
console.log(err)
})
},
subInfo() {
this.$validator.validateAll().then(result => {
if (result) {
let data = {
recordCode: this.recordCode,
name: this.recordInfo.name,
age: this.recordInfo.age,
type: this.recordInfo.type || '0',
interviewNum: this.recordInfo.interviewNum,
interviewResult: this.recordInfo.interviewResult,
pastOccu: this.recordInfo.pastOccu
}
console.log(data)
saveRecord(data)
.then(res => {
console.log(res)
if (res.result == 0) {
this.$jump({
flag: 'goBack',
extra: {
refresh: '1',
index: '-1',
forbidSwipeBack: '1'
},
routerInfo: {
type: 2
}
})
} else {
this.$toast(res.resultMessage)
}
})
.catch(err => {
console.log(err)
})
} else {
this.$toast(this.errors.all()[0])
}
})
},
slectType(type) {
this.recordInfo.type = type.id
},
handleRsult() {
if (this.isDisable) {
return false
}
this.showResultArr = true
},
handleOccupation() {
if (this.isDisable) {
return false
}
this.showOccupationArr = true
},
selectResult(val) {
this.recordInfo.interviewResult = val.id
this.showResultArr = false
},
selectOccupation(val) {
this.recordInfo.pastOccu = val.id
this.showOccupationArr = false
}
}
}
</script>
<style lang="scss" scoped>
::v-deep .van-cell__title {
max-width: 90px;
}
.type-tag {
// display: inline-block;
width: 40px;
height: 16px;
border: 1px solid gray;
border-radius: 4px;
}
.select-tag {
background: #1989fa;
color: white;
border: none;
}
</style>

View File

@@ -0,0 +1,105 @@
<!-- 活动日志-日志列表 -->
<template>
<div class="pb60">
<div class="p15 flex justify-content-s align-items-c">
<p>
<span v-if="isToday" class="fwb">今天</span>
<span v-else class="blue" @click="backToday">回到今天</span>
</p>
<p @click="openCalendar">{{ showTime }}</p>
</div>
<ActivityLogItem :ActivityLogInfo="item" v-for="(item, index) in recordList" :key="index"></ActivityLogItem>
<!-- <div class="bottom-btn text-center">
<van-icon name="add-square" size="50" color="#ee0a24" @click="toEdit" />
</div> -->
<van-button type="danger" class="bottom-btn" size="large" @click="toEdit" v-no-more-click="1000">新增</van-button>
<van-popup v-model="showDateTime" position="bottom" :style="{ height: '30%' }">
<van-datetime-picker v-model="selectTime" type="date" :max-date="maxDate" @confirm="confirm" @cancel="cancel" />
</van-popup>
</div>
</template>
<script>
import formatDate from '@/assets/js/utils/date-utils'
import { DatetimePicker, Popup } from 'vant'
import ActivityLogItem from '@/components/ebiz/manpower/ActivityLogItem'
import { queryRecordList } from '@/api/ebiz/manpower/manpower'
export default {
components: {
[DatetimePicker.name]: DatetimePicker,
[Popup.name]: Popup,
ActivityLogItem
},
data() {
return {
isToday: true,
showTime: `< ${formatDate.formatDate().split(' ')[0]} >`,
todayTime: `< ${formatDate.formatDate().split(' ')[0]} >`,
selectTime: new Date(),
maxDate: new Date(),
showDateTime: false,
ActivityLogInfo: {
name: '王辉',
// avatarUrl: 'https://img.yzcdn.cn/vant/cat.jpeg',
age: '35岁',
flag: '同业',
recordDate: ''
},
recordList: []
}
},
mounted() {
this.queryRecordList(formatDate.formatDate().split(' ')[0])
},
methods: {
queryRecordList(date) {
let data = {
recordDate: date
}
queryRecordList(data)
.then(res => {
console.log(res)
if (res.result == 0) {
this.recordList = res.content.records
} else {
this.$toast(res.resultMessage)
}
})
.catch(err => {
console.log(err)
})
},
toEdit() {
this.$jump({
flag: 'h5',
extra: {
url: location.origin + `/#/manpower/ActivityLog/Edit?isEdit=0`,
forbidSwipeBack: '1'
},
routerInfo: { path: '/manpower/ActivityLog/Edit?isEdit=0' }
})
},
openCalendar() {
this.showDateTime = true
},
confirm(val) {
this.showTime = `< ${formatDate.formatDate(val).split(' ')[0]} >`
this.ActivityLogInfo.recordDate = formatDate.formatDate(val).split(' ')[0]
if (this.showTime !== this.todayTime) {
this.isToday = false
}
this.queryRecordList(formatDate.formatDate(val).split(' ')[0])
this.showDateTime = false
},
cancel() {
this.showDateTime = false
},
backToday() {
this.showTime = this.todayTime
this.ActivityLogInfo.recordDate = formatDate.formatDate().split(' ')[0]
this.isToday = true
this.queryRecordList(formatDate.formatDate().split(' ')[0])
}
}
}
</script>

View File

@@ -0,0 +1,201 @@
<!-- DISC性格分析 - 统计列表 -->
<template>
<div class="discAnalysis-list">
<van-sticky>
<div class="top-table" sticky style="background:#fff">
<van-row type="flex" align="center">
<van-col class="order" span="2">序号</van-col>
<van-col class="subTime" span="6">提交时间</van-col>
<van-col class="name" span="6">手机号</van-col>
<van-col class="name" span="5">客户姓名</van-col>
<van-col class="button" span="5"></van-col>
</van-row>
</div>
</van-sticky>
<van-list
v-model="loading"
:immediate-check="false"
:finished="finished"
:finished-text="finishedText"
error-text="请求失败点击重新加载"
:error.sync="error"
@load="loadMore"
>
<div v-if="isSuccess">
<div v-if="answerList.length > 0" class="pb80">
<div class="main-table" v-for="(item, index) in answerList" :key="index">
<van-row type="flex" align="center">
<van-col class="order" span="2">{{ index + 1 }}</van-col>
<van-col class="subTime" span="6">{{ item.answerDate }}</van-col>
<van-col class="name" span="6">{{ item.mobile }}</van-col>
<van-col class="name" span="5">{{ item.customerName }}</van-col>
<van-col class="button" span="5">
<van-button type="danger" round size="small" class="mr5" @click="result(item)" v-no-more-click="1000">查看结果</van-button>
</van-col>
</van-row>
</div>
</div>
<div v-else class="text-center">
<img class="mt40" src="@/assets/images/pic_page-non.png" />
<div class="fs17 mt40">暂无数据</div>
</div>
<div class=" pb20 pr20 pl20 bottom-div">
<van-button type="danger" @click="share" style="width:90%" v-no-more-click="1000">分享给客户</van-button>
</div>
</div>
</van-list>
</div>
</template>
<script>
import { Sticky, Row, Col, List } from 'vant'
import { discAnalysisList } from '@/api/ebiz/manpower/manpower'
import { weixinShare } from '@/assets/js/utils/wxShare.js'
export default {
name: '',
filters: {},
data() {
return {
loading: false,
finished: false,
currentPage: 1, //当前页数
error: false,
finishedText: '',
pageSize: 15, //每页数据条数
isSuccess: false,
answerList: [] //答卷列表
}
},
watch: {},
created() {},
mounted() {
document.body.style.backgroundColor = '#fff'
localStorage.setItem('DISC-answerList', '')
this.loadMore()
weixinShare({
title: `“客观的认识自己,正确的规划自己”`,
imgUrl: this.$assetsUrl + 'images/logo.png',
desc: '国富为您量身定制的保险产品,请查收'
})
},
beforeRouteLeave(to, from, next) {
document.body.style.backgroundColor = ''
next()
},
methods: {
//分页用
loadMore() {
let pageInfo = {
pageNum: this.currentPage,
pageSize: this.pageSize
}
this.getDiscAnalysisList(pageInfo)
},
//获取DISC统计列表数据
getDiscAnalysisList(pageInfo) {
let params = {
...pageInfo,
...{
agentCode: '',
tableCode: 'GFRS-DISC'
}
}
discAnalysisList(params).then(res => {
if (res.result == '0') {
this.isSuccess = true
this.currentPage++
this.loading = false
if (res.content == null) {
this.finished = true
this.loading = false
this.finishedText = ''
return
}
let answerList = res.content.answerList.list
this.answerList = this.answerList.concat(answerList)
if (answerList.length == 0) {
this.finishedText = ''
} else {
this.finishedText = '已经全部加载'
}
if (this.answerList.length == 0) {
this.isSuccess = false
}
this.loading = false
if (res.content.nextPage == 0) {
//当下一页为0时 表示全部数据加载完毕
this.finished = true
}
} else {
this.finished = true
this.loading = false
this.finishedText = res.resultMessage
}
})
},
//微信分享
share() {
let url = location.origin + '/#/manpower/DiscAnalysis/Share?token=' + localStorage.getItem('token') + '&shareTime=' + new Date().getTime()
// console.log(url)
// eslint-disable-next-line no-undef
EWebBridge.webCallAppInJs('bridge', {
flag: 'share',
extra: {
title: `“客观的认识自己,正确的规划自己”`,
content: `您有一份DISC性格测试表待完成`,
url: url,
img: this.$assetsUrl + 'images/logo.png'
}
})
},
result(detail) {
localStorage.setItem('DISC-answerList', JSON.stringify(detail.answerDetail))
let url = `/manpower/DiscAnalysis/Result`
this.$jump({
flag: 'h5',
extra: {
url: location.origin + `/#${url}`
},
routerInfo: { path: url }
})
}
},
components: {
[Sticky.name]: Sticky,
[Row.name]: Row,
[List.name]: List,
[Col.name]: Col
}
}
</script>
<style scoped="scoped" lang="scss">
.top-table,
.main-table {
// margin: 10px 0;
padding: 0 10px;
}
.van-col {
height: 51px;
font-size: 13px;
font-weight: 400;
color: rgba(0, 0, 0, 1);
line-height: 51px;
text-align: center;
}
.top-table .van-col {
font-size: 14px;
}
.main-table .van-col {
border-bottom: 1px solid #e7e7e7;
}
.bottom-div {
position: fixed;
left: 0;
bottom: 0;
width: 100%;
z-index: 999;
background: #fff;
}
</style>

View File

@@ -0,0 +1,210 @@
<!-- DISC性格分析 - 问卷答题页面 -->
<template>
<div class="container pb50">
<van-field v-model="formData.customerName" class="mt10" required clearable label="姓名" name="姓名" placeholder="请输入" v-validate="'required|manpowerName'" />
<van-field
v-model="formData.mobile"
clearable
required
label="手机号码"
name="手机号码"
placeholder="请输入"
maxlength="11"
type="tel"
v-validate="'required|mobile'"
/>
<div :class="index>0?'mt10':''" v-for="(qesObj, index) of questions" :key="index">
<van-cell-group>
<van-cell class="noline">
<template slot="title">
<span class="qTitle fs15">{{qesObj.title}}</span>
<van-button class="ml10 prt-3" round plain size="mini" type="info">{{qesObj.tag}}</van-button>
</template>
</van-cell>
</van-cell-group>
<template v-if="index ===0">
<van-radio-group v-model="answerList[qItem.quCode]" v-for="(qItem, qIndex) of qesObj.questions" :class="qIndex>0?'mt10':''" :key="qIndex">
<van-cell-group>
<van-cell class="noline" title-class="qTitle fs15" :title="(qIndex+1)+'. '+ qItem.quTitle"></van-cell>
<van-cell v-for="(qAns, qAIndex) of qItem.qaAnswerInfoResponseDTOList" :key="qAIndex" title-class="ml10 c-gray-dark fs14" :title="qAns.anContent" clickable @click="changeAns(qItem.quCode,qAns.anMessage)">
<template #icon>
<van-radio :name="qAns.anMessage" />
</template>
</van-cell>
</van-cell-group>
</van-radio-group>
</template>
<template v-else>
<van-row type="flex" v-for="(qItem, qIndex) of qesObj.questions" :class="qIndex>0?'mt10':''" :key="qIndex">
<van-col class="bg-white">
<van-cell class="noline pr0" title-class="qTitle fs15" :title="(qIndex+11)+'. '+ qItem.quTitle"></van-cell>
</van-col>
<van-col>
<van-radio-group v-model="answerList[qItem.quCode]" >
<van-cell-group>
<van-cell v-for="(qAns, qAIndex) of qItem.qaAnswerInfoResponseDTOList" :key="qAIndex" title-class="ml10 c-gray-dark fs14" :title="qAns.anContent" clickable @click="changeAns(qItem.quCode,qAns.anMessage)">
<template #icon>
<van-radio :name="qAns.anMessage" />
</template>
</van-cell>
</van-cell-group>
</van-radio-group>
</van-col>
</van-row>
</template>
<van-button type="danger" class="bottom-btn" size="large" @click="save" v-no-more-click="1000">提交</van-button>
</div>
</div>
</template>
<script>
import { Field, Radio, RadioGroup, Cell, CellGroup, Col, Row } from 'vant'
import formatDate from '@/assets/js/utils/date-utils'
// import { } from '@/api/ebiz/manpower/manpower'
import { answerDetail, answerSubmit } from '@/api/ebiz/manpower/manpower'
export default {
name: '',
filters: {},
data() {
return {
formData: {
customerName: '',
mobile: '',
tableCode: '',
shareTime: '',
tableCode: 'GFRS-DISC',
answerList:[]
},
answerList:{},
questions: [],
data4res: {}
}
},
watch: {},
created() {
this.init()
},
mounted() {},
methods: {
init() {
let shareTimeStamp = this.$route.query.shareTime -0;
if(this.$route.query.token){
localStorage.token = this.$route.query.token;
}
console.log(shareTimeStamp);
this.formData.shareTime = formatDate.formatDate(new Date(shareTimeStamp));
answerDetail({
qnCode: 'GFRS-DISC'
})
.then(res => {
if (res.result == 0) {
res.content.questions.forEach(item => {
this.answerList[item.quCode] = ""
})
this.questions = [
{
title: '第一部分:请就您在“生活中”的状态选择最接近自己的一个描述',
tag: '单选',
type: 'radio',
questions: res.content.questions.slice(0, 10)
},
{
title: '第二部分:请就您在“工作中”的状态选择最接近自己的一个描述',
tag: '单选',
type: 'radio',
questions: res.content.questions.slice(10, 20)
}
]
} else {
this.$toast(res.resultMessage)
}
})
.catch(err => {})
},
changeAns(ans, value){
this.answerList[ans] = value;
this.$forceUpdate()
},
save(){
this.$validator.validateAll()
.then(result => {
if (result) {
this.formData.answerList = []
this.data4res = {}
for(let key in this.answerList){
let tempQuContent= this.answerList[key]
if(!tempQuContent){
return this.$toast("请完成问卷后提交")
}
this.formData.answerList.push({
quCode : key,
quContent : tempQuContent
})
if(this.data4res[tempQuContent]){
this.data4res[tempQuContent] = this.data4res[tempQuContent]+1
}else{
this.data4res[tempQuContent] = 1
}
}
answerSubmit(this.formData)
.then(res => {
if (res.result == 0) {
localStorage["DISC-answerList"] = JSON.stringify(this.data4res)
this.$jump({
flag: 'h5',
extra: {
url: location.origin + `/#/manpower/DiscAnalysis/Result`,
forbidSwipeBack: '1',
needRefresh: '1'
},
routerInfo: { path: `/manpower/DiscAnalysis/Result` }
})
} else {
this.$toast(res.resultMessage)
}
})
.catch(err => err)
} else {
this.$toast(this.errors.all()[0])
}
})
}
},
components: {
[Field.name]: Field,
[Radio.name]: Radio,
[RadioGroup.name]: RadioGroup,
[Cell.name]: Cell,
[CellGroup.name]: CellGroup,
[Col.name]: Col,
[Row.name]: Row
}
}
</script>
<style scoped="scoped" lang="scss">
.container {
.van-cell:not(:last-child)::after {
margin-left: 30px;
}
.noline:not(:last-child)::after {
border: none !important;
}
.qTitle {
color: #333440;
font-weight: 500;
line-height: 22px;
}
.prt-3 {
position: relative;
top: -3px;
}
}
</style>

View File

@@ -0,0 +1,112 @@
<!-- DISC性格分析 - DISC性格分析结果 -->
<template>
<div class="container">
<div class="box mt66vw ml10 mr10 p30 fs16 c-gray-darker">
<van-row class="h40">
<van-col span="24" class="text-center">DISC性格分析结果</van-col>
</van-row>
<template v-for="(value,key,index) in answerList">
<van-row class="h40" :key="key">
<van-col span="12">
<span class="circular mr10" :class="'circular'+index%4" ></span>
{{key}}
</van-col>
<van-col span="12" class="text-right">{{value}}</van-col>
</van-row>
<van-divider :key="key" />
</template>
<!-- <van-row class="h40">
<van-col span="12"> <span class="circular mr10"></span> title</van-col>
<van-col span="12" class="text-right">value</van-col>
</van-row> -->
</div>
</div>
</template>
<script>
import { Row, Col, Divider } from 'vant'
export default {
name: '',
filters: {},
data() {
return {
answerList: {}
}
},
watch: {},
created() {
this.init()
},
mounted() {},
methods: {
init() {
let answerList = {
"D" : 0,
"I" : 0,
"S" : 0,
"C" : 0,
}
Object.assign(answerList,JSON.parse(localStorage["DISC-answerList"]))
// localStorage.answerList = JSON.stringify(tmp)
if(this.$route.query.token){
localStorage.token = this.$route.query.token;
}
this.answerList = answerList
}
},
components: {
[Row.name]: Row,
[Col.name]: Col,
[Divider.name]: Divider
}
}
</script>
<style scoped="scoped" lang="scss">
.container {
position: absolute;
width: 100%;
height: inherit;
background-image: url('../../../../assets/images/discBg.png');
background-size: 100% auto;
background-repeat: no-repeat;
background-color: #0827a9;
.mt66vw {
margin-top: 66vw;
}
.box {
width: auto;
// height: 300px;
background-image: url('../../../../assets/images/discResBorder.png');
background-size: 100% 100%;
background-repeat: no-repeat;
}
.circular {
display: inline-block;
width: 8px;
height: 8px;
background: #FF651A;
border-radius: 50%;
}
.circular0{
background: #FF651A;
}
.circular1{
background: #FACE01;
}
.circular2{
background: #46D591;
}
.circular3{
background: #12DAEC;
}
.h40 {
line-height: 40px;
height: 40px;
}
}
</style>

View File

@@ -0,0 +1,51 @@
<!-- DISC性格分析 - 分享后打开图片展示页 -->
<template>
<div class="DISCtopBg">
<img style="width: 100%;" src="@/assets/images/DISCtop.png" />
<img style="width: 52%;position: absolute;bottom: 3.6%;left: 24%;" src="@/assets/images/DISCbtn.png" @click="toTest" />
</div>
</template>
<script>
// import { } from 'vant'
// import { } from '@/api/ebiz/manpower/manpower'
export default {
name: '',
filters: {},
data() {
return {}
},
watch: {},
created() {},
mounted() {},
methods: {
//去做测试,跳转到测试答题页面
toTest() {
let token = this.$route.query.token
let shareTime = this.$route.query.shareTime
let url = `/manpower/DiscAnalysis/Question?token=${token}&shareTime=${shareTime}`
this.$jump({
flag: 'h5',
extra: {
url: location.origin + `/#${url}`
},
routerInfo: { path: url }
})
}
},
components: {
// [Field.name]: Field,
}
}
</script>
<style scoped="scoped" lang="scss">
.DISCtopBg{
background-image: url('../../../../assets/images/DISCtopBg.png');
background-size: 100% auto;
background-repeat: repeat-y;
position: absolute;
height: inherit;
}
</style>

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 547 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 295 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 890 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 851 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 936 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 897 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 338 KiB

View File

@@ -0,0 +1,150 @@
<!-- 公司介绍 -->
<template>
<div class="p15 bg-white">
<p class="fs18 fwb">公司介绍</p>
<van-image width="100%" height="150" :src="img1" class="mt15" />
<p class="fs14 indent">
国富人寿保险股份有限公司由广西投资集团有限公司广州唯品会信息科技有限公司吉安新年广告传媒有限公司北京信中利投资股份有限公司湖北三峡华翔集团有限公司广西日报传媒集团有限公司上海恒大建材市场管理股份有限公司广西名都生态科技发展有限公司等8家公司共同发起创立公司注册地在我国面向东盟开放合作的前沿城市南宁
</p>
<p class="fs14 indent">
国富人寿将秉持老有所养病有所医红利共享国富民安的核心理念让更多的人过上有尊严的健康快乐的生活作为企业使命树立并践行简单专注诚信激情关爱领先的价值观专注于客户体验研发满足客户需求的产品为客户提供有温度的服务依法合规稳健经营立足广西深耕广西面向全国更好地回馈社会回报股东与时俱进超越自我
</p>
<p class="fs18 fwb">国富大事件</p>
<p class="fs14">1国富人寿连续五个季度获得A类风险综合评级</p>
<p class="fs14">2国富人寿荣获第九届中国公益节社会责任行业典范奖</p>
<van-image width="100%" :src="img2" class="mt15" />
<p class="fs14">3第十三届金蝉奖颁奖盛典举行 国富人寿获2019年度成长力保险公司</p>
<van-image width="100%" :src="img3" class="mt15" />
<p class="fs14">42019南宁国际马拉松燃情开跑国富人寿圆满完成赛事保障工作</p>
<van-image width="100%" :src="img4" class="mt15" />
<p class="fs14">5国富人寿总经理储良出席第五届中国-东盟保险合作与发展论坛并作主题发言</p>
<van-image width="100%" :src="img5" class="mt15" />
<p class="fs14">6广西广播电视台报道国富人寿为企业复工复产捐赠保险</p>
<van-image width="100%" :src="img6" class="mt15" />
<p class="fs14">7共同战 勇做表率丨国富人寿党总支为都安县捐赠医用隔离衣600套</p>
<van-image width="100%" :src="img7" class="mt15" />
<p class="fs14">8为广西医护人员追加近450亿保险保障 国富人寿支持抗疫再升级</p>
<van-image width="100%" :src="img8" class="mt15" />
<p class="fs14">9国富有爱 有安心 国富人寿为支持南宁企业复工复产捐赠包含新冠肺炎身故责任的保险</p>
<van-image width="100%" :src="img9" class="mt15" />
<p class="fs14">10国富人寿为全体签约代理人及其亲属提供每人20万元专属保障</p>
<van-image width="100%" :src="img10" class="mt15" />
<p class="fs14">
112019年10月17日国富人寿在广西品牌节评选活动中荣获广西杰出品牌称号是12家获评杰出品牌企业中唯一一家保险公司标志着国富人寿在广西保险市场上崭露头角
</p>
<van-image width="100%" :src="img11" class="mt15" />
<p class="fs14">
12为广西人量身定制开发的八桂无忧重大疾病保险产品荣获中国保险报评选的2018年度健康保险产品和行业主流媒体颁发的2019十佳商业健康保险推荐产品称号
</p>
<van-image width="100%" :src="img12" class="mt15" />
<p class="fs14">13热烈祝贺公司2020年期交保费超亿元同比2019年全年成长235%</p>
<van-image width="100%" :src="img13" class="mt15" />
<p class="fs14">
142019
6月18日国富人寿经主动排查获悉百色市乐业县百坭村第一书记黄文秀在6月16日途经凌云时遭遇山洪不幸遇难而黄文秀正在公司扶贫攻坚驻村第一书记赠险名单之列获悉情况后国富人寿总分公司联动立即启动理赔应急预案开启理赔绿色通道于6月19日收齐理赔资料后当天结案赔付将20万元理赔金送到家属手上
</p>
</div>
</template>
<script>
import { Image } from 'vant'
import { getShareKey, saveShareRecord } from '@/api/ebiz/manpower/manpower'
export default {
components: {
[Image.name]: Image
},
data() {
return {
img1: require('../image/1.png'),
img2: require('../image/2.png'),
img3: require('../image/3.png'),
img4: require('../image/4.png'),
img5: require('../image/5.png'),
img6: require('../image/6.png'),
img7: require('../image/7.png'),
img8: require('../image/8.png'),
img9: require('../image/9.png'),
img10: require('../image/10.png'),
img11: require('../image/11.png'),
img12: require('../image/12.png'),
img13: require('../image/13.png'),
redisKey: ''
}
},
mounted() {
this.redisKey = this.$route.query.redisKey
if (this.redisKey) {
this.saveShareRecord('1')
localStorage.setItem('token', this.$route.query.token)
} else {
this.getShareKey()
}
setTimeout(() => {
// 右上角的显示
this.$jump({
flag: 'webview_right_button',
extra: {
btns: [
{
img: this.$assetsUrl + 'images/share@3x.png'
}
]
}
})
}, 1000)
window['appCallBack'] = this.appCallBack
},
methods: {
appCallBack(data) {
if (data.trigger == 'right_button_click') {
this.saveShareRecord('0')
let token = window.localStorage.getItem('token')
// eslint-disable-next-line no-undef
EWebBridge.webCallAppInJs('bridge', {
flag: 'share',
extra: {
title: '国富人寿保险股份有限公司',
content: '公司介绍',
url: `${location.origin}/#/manpower/increaseStaffTools/CompanyIntroduction?redisKey=${this.redisKey}&token=${token}`,
img: this.$assetsUrl + 'images/logo.png'
}
})
}
},
getShareKey() {
let data = {
linkType: '0001',
url: `${location.origin}/#/manpower/increaseStaffTools/CompanyIntroduction`
}
getShareKey(data)
.then(res => {
console.log(res)
if (res.result == 0) {
this.redisKey = res.content
} else {
this.$toast(res.resultMessage)
}
})
.catch(err => {
console.log(err)
})
},
saveShareRecord(flag) {
let data = {
linkType: '0001',
flag: flag,
redisKey: this.redisKey
}
saveShareRecord(data)
}
}
}
</script>
<style lang="scss" scoped>
.indent {
text-indent: 24px;
}
p {
line-height: 28px;
}
</style>

View File

@@ -0,0 +1,108 @@
<template>
<div>
<iframe :src="src + pdfUrl" style="width:100vw;height:100vh"></iframe>
</div>
</template>
<script>
import { getShareKey, saveShareRecord } from '@/api/ebiz/manpower/manpower'
export default {
data() {
return {
// src: 'http://47.96.143.111/pdfjs/web/viewer.html?file=http://47.96.143.111:8000/app/images/jsSDK.pdf'
pdfUrl: '',
src: location.origin + '/pdfjs/web/viewer.html?file=',
shareContent: '',
redisKey: ''
}
},
created() {
setTimeout(() => {
// 右上角的显示
this.$jump({
flag: 'webview_right_button',
extra: {
btns: [
{
img: this.$assetsUrl + 'images/share@3x.png'
}
]
}
})
}, 1000)
window['appCallBack'] = this.appCallBack
},
mounted() {
this.init()
this.redisKey = this.$route.query.redisKey
if (this.redisKey) {
this.saveShareRecord('1')
localStorage.setItem('token', this.$route.query.token)
} else {
this.getShareKey()
}
},
methods: {
init() {
let num = this.$route.query.pdf
switch (num) {
case '0':
this.pdfUrl = this.$assetsUrl + 'personnel/recruitment.pdf'
this.shareContent = '个险渠道2020年聘才方案'
document.title = '个险渠道2020年聘才方案'
break
case '1':
this.pdfUrl = this.$assetsUrl + 'personnel/allowance.pdf'
this.shareContent = '个险渠道筹备津贴方案'
document.title = '个险渠道筹备津贴方案'
break
}
},
// 原生点击右上角按钮事件
appCallBack(data) {
if (data.trigger == 'right_button_click') {
this.saveShareRecord('0')
let pdf = this.$route.query.pdf
let token = window.localStorage.getItem('token')
// eslint-disable-next-line no-undef
EWebBridge.webCallAppInJs('bridge', {
flag: 'share',
extra: {
title: '国富人寿欢迎您!',
content: this.shareContent,
url: `${location.origin}/#/manpower/increaseStaffTools/PdfShare?pdf=${pdf}&redisKey=${this.redisKey}&token=${token}`,
img: this.$assetsUrl + 'images/logo.png'
}
})
}
},
getShareKey() {
let data = {
linkType: '0002',
url: `${location.origin}/pdfjs/web/viewer.html?file=${this.pdfUrl}`
}
getShareKey(data)
.then(res => {
console.log(res)
if (res.result == 0) {
this.redisKey = res.content
} else {
this.$toast(res.resultMessage)
}
})
.catch(err => {
console.log(err)
})
},
saveShareRecord(flag) {
let data = {
linkType: '0002',
flag: flag,
redisKey: this.redisKey
}
saveShareRecord(data)
}
}
}
</script>

View File

@@ -0,0 +1,32 @@
<!-- 政策方案 -->
<template>
<div>
<van-cell-group>
<van-cell value="个险渠道2020年聘才方案" is-link @click="toPdf(0)" />
<van-cell value="个险渠道筹备津贴方案" is-link @click="toPdf(1)" />
</van-cell-group>
</div>
</template>
<script>
import { Cell, CellGroup } from 'vant'
export default {
components: {
[Cell.name]: Cell,
[CellGroup.name]: CellGroup
},
methods: {
toPdf(num) {
console.log(num)
this.$jump({
flag: 'h5',
extra: {
url: location.origin + `/#/manpower/increaseStaffTools/PdfShare?pdf=${num}`,
forbidSwipeBack: '1'
},
routerInfo: { path: `/manpower/increaseStaffTools/PdfShare?pdf=${num}` }
})
}
}
}
</script>

View File

@@ -0,0 +1 @@
<!-- 产品信息 -->

View File

@@ -0,0 +1 @@
<!-- 培训体系 -->

View File

@@ -0,0 +1,2 @@
//验证
export function demo(par) {}

View File

@@ -0,0 +1,157 @@
<!-- 人才库-新增人才 -->
<template>
<div class="container">
<van-field v-model="formData.name" required clearable label="姓名" name="姓名" placeholder="请输入" v-validate="'required|manpowerName'" />
<van-field v-model="formData.mobile" clearable label="手机号码" name="手机号码" placeholder="请输入" maxlength="11" type="tel" v-validate="'mobile'" />
<select-radio :radios="isSame" label="是否同业" name="是否同业" :value.sync="formData.isSame" :required="true"></select-radio>
<!-- 异业公司 要求填写 -->
<template v-if="formData.isSame == '1'">
<van-field
:value="formData.pastOccu | idToText('talentPoolPastOccu')"
readonly
required
label="过往职业"
name="过往职业"
right-icon="arrow"
placeholder="请选择"
@click="toSelect('pastOccu')"
/>
</template>
<!-- 异业公司 要求填写 end-->
<!-- 同业公司 要求填写 -->
<template v-if="formData.isSame == '0'">
<van-field v-model="formData.sameCompany" required clearable label="同业公司" name="同业公司" placeholder="请输入" v-validate="'required|sameCompany'" />
<select-radio
:radios="gradeType"
label="岗位类型"
name="岗位类型"
:value.sync="formData.gradeType"
:required="true"
v-validate="'required'"
></select-radio>
<van-field v-model="formData.grade" required clearable label="职级/岗位" name="职级/岗位" placeholder="请输入" v-validate="'required|max120'" />
<van-field v-model="formData.workYears" required clearable label="从业年限" name="从业年限" placeholder="请输入" v-validate="'required|workYears'" />
</template>
<!-- 同业公司 要求填写 end -->
<van-field
:value="formData.status | idToText('talentPoolStatus')"
readonly
required
label="状态"
name="状态"
right-icon="arrow"
placeholder="请选择"
@click="toSelect('status')"
/>
<van-button type="danger" class="bottom-btn" size="large" @click="save">保存</van-button>
<van-popup v-model="popupShow" position="bottom"><van-picker show-toolbar :columns="columns" @confirm="onConfirm" @cancel="popupShow = false"/></van-popup>
</div>
</template>
<script>
import { Field, CellGroup, Cell, Popup, Picker } from 'vant'
import filter from '@/filters/index'
import DataDictionary from '@/assets/js/utils/data-dictionary'
import SelectRadio from '@/components/ebiz/SelectRadio'
import { saveAgentPersonnel } from '@/api/ebiz/manpower/manpower'
export default {
name: 'TalentPoolAdd',
components: {
[Field.name]: Field,
[CellGroup.name]: CellGroup,
[Cell.name]: Cell,
[Popup.name]: Popup,
[Picker.name]: Picker,
[SelectRadio.name]: SelectRadio
},
filters: {
idToText: filter.idToText
},
data() {
return {
selected: '',
popupShow: false,
formData: {
name: '',
mobile: '',
isSame: '0',
pastOccu: '01',
sameCompany: '',
gradeType: '0',
grade: '',
workYears: '',
status: 0
},
gradeType: [
{
label: '内勤',
value: '0'
},
{
label: '外勤',
value: '1'
}
],
isSame: [
{
label: '是',
value: '0'
},
{
label: '否',
value: '1'
}
],
columns: null
}
},
watch: {},
created() {},
mounted() {},
methods: {
toSelect(name) {
this.selected = name
this.popupShow = true
switch (name) {
case 'pastOccu':
this.columns = DataDictionary.talentPoolPastOccu
break
case 'status':
this.columns = DataDictionary.talentPoolStatus
break
default:
break
}
},
onConfirm(value) {
this.popupShow = false
this.formData[this.selected] = value.id
},
save() {
this.$validator.validateAll().then(result => {
if (result) {
saveAgentPersonnel(this.formData)
.then(res => {
if (res.result == 0) {
//eslint-disable-next-line
EWebBridge.webCallAppInJs('goBack', {
refresh: '1',
index: '-1'
})
} else {
this.$toast(res.resultMessage)
}
})
.catch(() => {})
} else {
this.$toast(this.errors.all()[0])
}
})
}
}
}
</script>
<style scoped="scoped" lang="scss"></style>

View File

@@ -0,0 +1,170 @@
<!-- 人才库-修改人才 -->
<template>
<div class="container" v-show="show">
<van-field v-model="formData.name" required clearable label="姓名" name="姓名" placeholder="请输入" v-validate="'required|manpowerName'" />
<van-field v-model="formData.mobile" clearable label="手机号码" name="手机号码" placeholder="请输入" maxlength="11" type="tel" v-validate="'mobile'" />
<select-radio :disabled="true" :radios="isSame" label="是否同业" name="是否同业" :value.sync="formData.isSame" :required="true"></select-radio>
<!-- 异业公司 要求填写 -->
<template v-if="formData.isSame == '1'">
<van-field
:value="formData.pastOccu | idToText('talentPoolPastOccu')"
readonly
required
label="过往职业"
name="过往职业"
right-icon="arrow"
placeholder="请选择"
@click="toSelect('pastOccu')"
/>
</template>
<!-- 异业公司 要求填写 end-->
<!-- 同业公司 要求填写 -->
<template v-if="formData.isSame == '0'">
<van-field v-model="formData.sameCompany" required clearable label="同业公司" name="同业公司" placeholder="请输入" v-validate="'required|sameCompany'" />
<select-radio
:radios="gradeType"
label="岗位类型"
name="岗位类型"
:value.sync="formData.gradeType"
:required="true"
v-validate="'required'"
></select-radio>
<van-field v-model="formData.grade" required clearable label="职级/岗位" name="职级/岗位" placeholder="请输入" v-validate="'required|max120'" />
<van-field v-model="formData.workYears" required clearable label="从业年限" name="从业年限" placeholder="请输入" v-validate="'required|workYears'" />
</template>
<!-- 同业公司 要求填写 end -->
<van-field
:value="formData.status | idToText('talentPoolStatus')"
readonly
required
label="状态"
name="状态"
right-icon="arrow"
placeholder="请选择"
@click="toSelect('status')"
/>
<van-button type="danger" class="bottom-btn" size="large" @click="save">保存</van-button>
<van-popup v-model="popupShow" position="bottom"><van-picker show-toolbar :columns="columns" @confirm="onConfirm" @cancel="popupShow = false"/></van-popup>
</div>
</template>
<script>
import { Field, CellGroup, Cell, Popup, Picker } from 'vant'
import filter from '@/filters/index'
import DataDictionary from '@/assets/js/utils/data-dictionary'
import SelectRadio from '@/components/ebiz/SelectRadio'
import { getAgentPersonnelDetail, saveAgentPersonnel } from '@/api/ebiz/manpower/manpower'
export default {
name: 'TalentPoolAdd',
components: {
[Field.name]: Field,
[CellGroup.name]: CellGroup,
[Cell.name]: Cell,
[Popup.name]: Popup,
[Picker.name]: Picker,
[SelectRadio.name]: SelectRadio
},
filters: {
idToText: filter.idToText
},
data() {
return {
show: false,
selected: '',
popupShow: false,
formData: {
name: '',
mobile: '',
isSame: '0',
pastOccu: '01',
sameCompany: '',
gradeType: '0',
grade: '',
workYears: '',
status: 0
},
gradeType: [
{
label: '内勤',
value: '0'
},
{
label: '外勤',
value: '1'
}
],
isSame: [
{
label: '是',
value: '0'
},
{
label: '否',
value: '1'
}
],
columns: null
}
},
watch: {},
created() {
const personnelCode = localStorage.getItem('personnelCode')
getAgentPersonnelDetail({ personnelCode: personnelCode })
.then(res => {
if (res.result == 0) {
this.formData = res.content.personnel
this.show = true
} else {
this.$toast(res.resultMessage)
}
})
.catch(() => {})
},
mounted() {},
methods: {
toSelect(name) {
this.selected = name
this.popupShow = true
switch (name) {
case 'pastOccu':
this.columns = DataDictionary.talentPoolPastOccu
break
case 'status':
this.columns = DataDictionary.talentPoolStatus
break
default:
break
}
},
onConfirm(value) {
this.popupShow = false
this.formData[this.selected] = value.id
},
save() {
this.$validator.validateAll().then(result => {
if (result) {
saveAgentPersonnel(this.formData)
.then(res => {
if (res.result == 0) {
//eslint-disable-next-line
EWebBridge.webCallAppInJs('goBack', {
refresh: '1',
index: '-1'
})
} else {
this.$toast(res.resultMessage)
}
})
.catch(() => {})
} else {
this.$toast(this.errors.all()[0])
}
})
}
}
}
</script>
<style scoped="scoped" lang="scss"></style>

View File

@@ -0,0 +1,101 @@
<!-- 人才库-人才列表 -->
<template>
<div class="container">
<van-search placeholder="请输入要查询人的姓名" v-model="searchName" @change="searchList" @keyup.enter="searchList" />
<div v-if="hasTalentPoolList" class="mb60">
<van-index-bar :index-list="indexList">
<div v-for="(item, key) in talentPoolList" :key="key" class="bg-white mb10 mr20">
<van-index-anchor :index="key" class="border-gb" />
<van-cell-group>
<TalentPoolItem v-for="talentPoolInfo in item" :key="talentPoolInfo.personnelCode" :talentPoolInfo="talentPoolInfo"> </TalentPoolItem>
</van-cell-group>
</div>
</van-index-bar>
</div>
<div v-else class="text-center">
<img class="mt40" src="@/assets/images/pic_page-non.png" />
<div class="fs17 mt40">暂无数据</div>
</div>
<van-button type="danger" class="bottom-btn" size="large" @click="add" v-no-more-click="1000">新增</van-button>
</div>
</template>
<script>
import { Search, Cell, IndexBar, IndexAnchor, Popup, Button, Tag, CellGroup } from 'vant'
import TalentPoolItem from '@/components/ebiz/manpower/TalentPoolItem'
import { getAgentPersonnelList } from '@/api/ebiz/manpower/manpower'
export default {
name: 'TalentPoolList',
components: {
[Search.name]: Search,
[Cell.name]: Cell,
[CellGroup.name]: CellGroup,
[IndexBar.name]: IndexBar,
[IndexAnchor.name]: IndexAnchor,
[Popup.name]: Popup,
[Button.name]: Button,
[Tag.name]: Tag,
TalentPoolItem
},
data() {
return {
hasTalentPoolList: false,
searchName: '',
indexList: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '#'],
talentPoolList: {}
}
},
watch: {},
created() {
this.searchList()
},
mounted() {},
methods: {
searchList() {
this.hasTalentPoolList = false
getAgentPersonnelList({ name: this.searchName })
.then(res => {
if (res.result == 0) {
if (Object.keys(res.content.personnels).length == 0) {
return false
}
const data = res.content.personnels
this.talentPoolList = {}
for (let item of this.indexList) {
if (data[item]) {
this.talentPoolList[item] = data[item]
}
}
this.hasTalentPoolList = true
}
})
.catch(() => {})
},
add() {
this.$jump({
flag: 'h5',
extra: {
url: location.origin + '/#/manpower/talentPool/Add'
},
routerInfo: {
path: '/manpower/talentPool/Add'
}
})
}
}
}
</script>
<style scoped="scoped" lang="scss">
.container {
.van-search__content {
background: #fff !important;
border-radius: 10px;
}
.van-search {
background: none !important;
}
}
</style>

Some files were not shown because too many files have changed in this diff Show More