Merge branch 'feature/GFRS-715【0402】人力发展-个人中心' into release/0407

# Conflicts:
#	src/assets/js/utils/validator.js
#	src/router/ebiz/index.js
This commit is contained in:
tian.guangyuan
2020-04-07 11:08:42 +08:00
42 changed files with 2267 additions and 3 deletions

View File

@@ -1,3 +1,3 @@
public
dist
node_modules
node_modules

View File

@@ -0,0 +1,108 @@
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
})
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

View File

@@ -2032,5 +2032,26 @@ 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: '01', text: '一般内勤职员' },
{ id: '02', text: '其他金融行业' },
{ id: '03', text: '家庭主妇' },
{ id: '04', text: '自由职业' },
{ id: '05', text: '离退休人员' },
{ id: '06', text: '个体经营者' },
{ id: '07', text: '销售' },
{ id: '08', text: '公务员' },
{ id: '11', text: '其他' }
]
}

View File

@@ -60,6 +60,15 @@ Validator.extend('age', {
return value > 17 && /^\d{1,3}$/.test(value)
}
})
//年龄
Validator.extend('maxAge', {
getMessage: () => '年龄不得大于100周岁',
validate: value => {
return value <= 100 && /^\d{1,3}$/.test(value)
}
})
//被保险人年龄不得小于18周岁
Validator.extend('appntAge', {
getMessage: () => '年龄不得小于18周岁',
@@ -138,4 +147,35 @@ Validator.extend('avoirdupois', {
validate: value => {
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)
}
})

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>

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

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

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

@@ -0,0 +1,152 @@
//人力发展 定义相关组件
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')
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
}
}
]

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,54 @@
<!-- 增员工具 -->
<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: '培训体系',
// 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,250 @@
<!-- 活动日志-修改日志 -->
<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|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'"
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>

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,145 @@
<!-- 公司介绍 -->
<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')
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')
// eslint-disable-next-line no-undef
EWebBridge.webCallAppInJs('bridge', {
flag: 'share',
extra: {
title: '国富人寿保险股份有限公司',
content: '公司介绍',
url: `${location.origin}/#/manpower/increaseStaffTools/CompanyIntroduction?redisKey=${this.redisKey}`,
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,103 @@
<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')
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
// 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}`,
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,5 @@
//验证
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>