mirror of
http://112.124.100.131/GFRS/ebiz-h5.git
synced 2025-12-11 03:56:44 +08:00
Merge branch 'feature/【GFRS-2145】e起陪访' into dev
# Conflicts: # src/assets/js/utils/request.js # src/main.js # src/router/ebiz/index.js
This commit is contained in:
65
src/api/ebiz/eqiVisit/eqiVisit.js
Normal file
65
src/api/ebiz/eqiVisit/eqiVisit.js
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
import request from '@/assets/js/utils/request'
|
||||||
|
import getUrl from '@/assets/js/utils/get-url'
|
||||||
|
|
||||||
|
// 陪访机构信息查询
|
||||||
|
export function getAccompanyComCode(data) {
|
||||||
|
return request({
|
||||||
|
url: getUrl('/agent/accompany/getAccompanyComCode', 1),
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 陪访代理人查询
|
||||||
|
export function getAccompanyPerson(data) {
|
||||||
|
return request({
|
||||||
|
url: getUrl('/agent/accompany/getAccompanyPerson', 1),
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 陪访记录查询
|
||||||
|
export function getAgentAccompanyRecordPage(data) {
|
||||||
|
return request({
|
||||||
|
url: getUrl('/agent/accompany/getAgentAccompanyRecordPage', 1),
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 陪访信息登记
|
||||||
|
export function saveAccompanyRecord(data) {
|
||||||
|
return request({
|
||||||
|
url: getUrl('/agent/accompany/saveAccompanyRecord', 1),
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 陪访记录详情查询
|
||||||
|
export function getAccompanyDetail(data) {
|
||||||
|
return request({
|
||||||
|
url: getUrl('/agent/accompany/getAccompanyDetail', 1),
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 积分记录查询
|
||||||
|
export function getRewardRecord(data) {
|
||||||
|
return request({
|
||||||
|
url: getUrl('/agent/reward/getRewardRecord', 1),
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 积分榜单查询
|
||||||
|
export function getAccompanyRank(data) {
|
||||||
|
return request({
|
||||||
|
url: getUrl('/agent/reward/getAccompanyRank', 1),
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
BIN
src/assets/images/empty.png
Normal file
BIN
src/assets/images/empty.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.9 KiB |
BIN
src/assets/images/success.png
Normal file
BIN
src/assets/images/success.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.6 KiB |
@@ -1831,6 +1831,13 @@ export default {
|
|||||||
{ id: 'A302', text: '高级营业部经理' },
|
{ id: 'A302', text: '高级营业部经理' },
|
||||||
{ id: 'A401', text: '业务总监' }
|
{ id: 'A401', text: '业务总监' }
|
||||||
],
|
],
|
||||||
|
// e起陪访: 陪访类型枚举
|
||||||
|
visitTypes: [
|
||||||
|
{ code: '01', text: '入职前陪访' },
|
||||||
|
{ code: '02', text: '新人首单' },
|
||||||
|
{ code: '03', text: '冲刺挑战' },
|
||||||
|
{ code: '04', text: '参与衔训' }
|
||||||
|
],
|
||||||
salarySource: [
|
salarySource: [
|
||||||
{
|
{
|
||||||
id: 1,
|
id: 1,
|
||||||
|
|||||||
@@ -101,6 +101,15 @@ let whitelist = ['/agent/white/getWhiteInfo']
|
|||||||
|
|
||||||
// 开门红
|
// 开门红
|
||||||
let goodStart = ['/data/performance/getComPerformance']
|
let goodStart = ['/data/performance/getComPerformance']
|
||||||
|
let eqiVisit = [
|
||||||
|
'/agent/accompany/getAccompanyComCode',
|
||||||
|
'/agent/accompany/getAccompanyPerson',
|
||||||
|
'/agent/accompany/getAgentAccompanyRecordPage',
|
||||||
|
'/agent/accompany/saveAccompanyRecord',
|
||||||
|
'/agent/accompany/getAccompanyDetail',
|
||||||
|
'/agent/reward/getRewardRecord',
|
||||||
|
'/agent/reward/getAccompanyRank'
|
||||||
|
]
|
||||||
|
|
||||||
let whiteList = [
|
let whiteList = [
|
||||||
'/customer/agent/getCustomersList',
|
'/customer/agent/getCustomersList',
|
||||||
@@ -116,7 +125,8 @@ let whiteList = [
|
|||||||
...performanceRanking,
|
...performanceRanking,
|
||||||
...hgb,
|
...hgb,
|
||||||
...whitelist,
|
...whitelist,
|
||||||
...goodStart
|
...goodStart,
|
||||||
|
...eqiVisit
|
||||||
]
|
]
|
||||||
|
|
||||||
// 创建axios实例
|
// 创建axios实例
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
height:auto;
|
height: auto;
|
||||||
max-height: 100%;
|
max-height: 100%;
|
||||||
-moz-osx-font-smoothing: grayscale;
|
-moz-osx-font-smoothing: grayscale;
|
||||||
-webkit-font-smoothing: antialiased;
|
-webkit-font-smoothing: antialiased;
|
||||||
@@ -20,7 +20,7 @@ body {
|
|||||||
}
|
}
|
||||||
|
|
||||||
html {
|
html {
|
||||||
height:auto;
|
height: auto;
|
||||||
max-height: 100%;
|
max-height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -33,6 +33,37 @@ a:hover {
|
|||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.thin-right,
|
||||||
|
.thin-bottom {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.thin-right::after {
|
||||||
|
content: ' ';
|
||||||
|
position: absolute;
|
||||||
|
width: 200%;
|
||||||
|
height: 200%;
|
||||||
|
border-right: 1px solid #edeff2;
|
||||||
|
transform-origin: top left;
|
||||||
|
transform: scale(0.5);
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.thin-bottom::after {
|
||||||
|
content: ' ';
|
||||||
|
position: absolute;
|
||||||
|
width: 200%;
|
||||||
|
height: 200%;
|
||||||
|
border-bottom: 1px solid #edeff2;
|
||||||
|
transform-origin: top left;
|
||||||
|
transform: scale(0.5);
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
// 宽度设置
|
// 宽度设置
|
||||||
@include set-width($width-list);
|
@include set-width($width-list);
|
||||||
// 宽度设置
|
// 宽度设置
|
||||||
|
|||||||
65
src/components/common/PopupSelector.vue
Normal file
65
src/components/common/PopupSelector.vue
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<van-cell-group @click.native="showPopup">
|
||||||
|
<van-field v-bind="$attrs" right-icon="arrow" :value="value" :required="required" :readonly="readonly" />
|
||||||
|
</van-cell-group>
|
||||||
|
<van-popup id="popup" :value="isShow" :position="position" @click-overlay="closePopup">
|
||||||
|
<slot :closePopup="closePopup">
|
||||||
|
<van-picker id="picker" show-toolbar :columns="columns" @confirm="onPickerConfirm" @cancel="closePopup" />
|
||||||
|
</slot>
|
||||||
|
</van-popup>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'PopupSelector',
|
||||||
|
props: {
|
||||||
|
value: {
|
||||||
|
type: String
|
||||||
|
},
|
||||||
|
position: {
|
||||||
|
type: String,
|
||||||
|
default: 'bottom'
|
||||||
|
},
|
||||||
|
columns: {
|
||||||
|
type: Array,
|
||||||
|
default() {
|
||||||
|
return ['暂无数据']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
required: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
readonly: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
isShow: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
showPopup() {
|
||||||
|
this.isShow = true
|
||||||
|
},
|
||||||
|
closePopup() {
|
||||||
|
this.isShow = false
|
||||||
|
},
|
||||||
|
onPickerConfirm(pickedValue) {
|
||||||
|
this.$emit('input', String(pickedValue))
|
||||||
|
this.closePopup()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
#app .van-picker__cancel,
|
||||||
|
#app .van-picker__confirm {
|
||||||
|
color: #1989fa;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
32
src/main.js
32
src/main.js
@@ -15,7 +15,30 @@ import md5 from 'js-md5'
|
|||||||
import cryptoJs from 'crypto-js'
|
import cryptoJs from 'crypto-js'
|
||||||
import cacheUtils from '@/assets/js/utils/cacheUtils'
|
import cacheUtils from '@/assets/js/utils/cacheUtils'
|
||||||
|
|
||||||
import { Cell, CellGroup, DatetimePicker, Popup, Picker, Col, Row, Tab, Tabs, NavBar, Toast, Button, Dialog, Icon, Lazyload } from 'vant'
|
import {
|
||||||
|
Cell,
|
||||||
|
CellGroup,
|
||||||
|
DatetimePicker,
|
||||||
|
Popup,
|
||||||
|
Picker,
|
||||||
|
Col,
|
||||||
|
Row,
|
||||||
|
Tab,
|
||||||
|
Tabs,
|
||||||
|
NavBar,
|
||||||
|
Toast,
|
||||||
|
Button,
|
||||||
|
Dialog,
|
||||||
|
Icon,
|
||||||
|
Lazyload,
|
||||||
|
Field,
|
||||||
|
Area,
|
||||||
|
Uploader,
|
||||||
|
PullRefresh,
|
||||||
|
List,
|
||||||
|
Image as VanImage,
|
||||||
|
Sticky
|
||||||
|
} from 'vant'
|
||||||
Vue.use(Cell)
|
Vue.use(Cell)
|
||||||
Vue.use(CellGroup)
|
Vue.use(CellGroup)
|
||||||
Vue.use(DatetimePicker)
|
Vue.use(DatetimePicker)
|
||||||
@@ -34,6 +57,13 @@ Vue.use(Dialog)
|
|||||||
Vue.use(Lazyload, {
|
Vue.use(Lazyload, {
|
||||||
lazyComponent: true
|
lazyComponent: true
|
||||||
})
|
})
|
||||||
|
Vue.use(Field)
|
||||||
|
Vue.use(Area)
|
||||||
|
Vue.use(Uploader)
|
||||||
|
Vue.use(PullRefresh)
|
||||||
|
Vue.use(List)
|
||||||
|
Vue.use(VanImage)
|
||||||
|
Vue.use(Sticky)
|
||||||
|
|
||||||
Vue.prototype.$assetsUrl = config.assetsUrl
|
Vue.prototype.$assetsUrl = config.assetsUrl
|
||||||
Vue.prototype.$assetsUpUrl = config.assetsUpUrl
|
Vue.prototype.$assetsUpUrl = config.assetsUpUrl
|
||||||
|
|||||||
68
src/router/ebiz/eqiVisit.js
Normal file
68
src/router/ebiz/eqiVisit.js
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
// e起陪访
|
||||||
|
const VisitInfoRegister = () => import('@/views/ebiz/eqiVisit/VisitInfoRegister')
|
||||||
|
const RegisterResult = () => import('@/views/ebiz/eqiVisit/RegisterResult')
|
||||||
|
const NewcomerList = () => import('@/views/ebiz/eqiVisit/NewcomerList')
|
||||||
|
const ScoreRanking = () => import('@/views/ebiz/eqiVisit/ScoreRanking')
|
||||||
|
const VisitHistory = () => import('@/views/ebiz/eqiVisit/VisitHistory')
|
||||||
|
const HistoryDetail = () => import('@/views/ebiz/eqiVisit/HistoryDetail')
|
||||||
|
const ScoreHistory = () => import('@/views/ebiz/eqiVisit/ScoreHistory')
|
||||||
|
|
||||||
|
export default [
|
||||||
|
{
|
||||||
|
path: '/eqiVisit/visitInfoRegister',
|
||||||
|
name: 'VisitInfoRegister',
|
||||||
|
component: VisitInfoRegister,
|
||||||
|
meta: {
|
||||||
|
title: '陪访信息登记'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/eqiVisit/registerResult',
|
||||||
|
name: 'RegisterResult',
|
||||||
|
component: RegisterResult,
|
||||||
|
meta: {
|
||||||
|
title: '提交结果'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/eqiVisit/newcomerList',
|
||||||
|
name: 'NewcomerList',
|
||||||
|
component: NewcomerList,
|
||||||
|
meta: {
|
||||||
|
title: '选择陪访对象'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/eqiVisit/scoreRanking',
|
||||||
|
name: 'ScoreRanking',
|
||||||
|
component: ScoreRanking,
|
||||||
|
meta: {
|
||||||
|
title: '积分榜'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/eqiVisit/visitHistory',
|
||||||
|
name: 'VisitHistory',
|
||||||
|
component: VisitHistory,
|
||||||
|
meta: {
|
||||||
|
title: '陪访记录'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/eqiVisit/historyDetail/:id',
|
||||||
|
name: 'VisitHistory',
|
||||||
|
component: HistoryDetail,
|
||||||
|
props: true,
|
||||||
|
meta: {
|
||||||
|
title: '陪访记录详情'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/eqiVisit/scoreHistory',
|
||||||
|
name: 'ScoreHistory',
|
||||||
|
component: ScoreHistory,
|
||||||
|
meta: {
|
||||||
|
title: '查询积分'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -29,6 +29,7 @@ import attendance from './attendance'
|
|||||||
import goodStart from './goodStart'
|
import goodStart from './goodStart'
|
||||||
import hgb from './hgb'
|
import hgb from './hgb'
|
||||||
import train from './train'
|
import train from './train'
|
||||||
|
import eqiVisit from './eqiVisit'
|
||||||
|
|
||||||
export default [
|
export default [
|
||||||
...proposal,
|
...proposal,
|
||||||
@@ -57,5 +58,6 @@ export default [
|
|||||||
...question,
|
...question,
|
||||||
...hgb,
|
...hgb,
|
||||||
...goodStart,
|
...goodStart,
|
||||||
...train
|
...train,
|
||||||
|
...eqiVisit
|
||||||
] //根据需要进行删减
|
] //根据需要进行删减
|
||||||
|
|||||||
110
src/views/ebiz/eqiVisit/HistoryDetail.vue
Normal file
110
src/views/ebiz/eqiVisit/HistoryDetail.vue
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
<template>
|
||||||
|
<div class="history-detail bg-white">
|
||||||
|
<p class="date pl20 pt5 pb5">2021-1-29</p>
|
||||||
|
<van-cell-group>
|
||||||
|
<van-field label-width="120" v-model="accompanyRecordDTO.agentName" label="陪访人" readonly />
|
||||||
|
</van-cell-group>
|
||||||
|
<van-cell-group>
|
||||||
|
<van-field label-width="120" v-model="accompanyRecordDTO.accompanyAgentName" label="陪访新人姓名" readonly />
|
||||||
|
</van-cell-group>
|
||||||
|
<van-cell-group>
|
||||||
|
<van-field label-width="120" v-model="accompanyRecordDTO.visitDuration" label="时长" readonly />
|
||||||
|
</van-cell-group>
|
||||||
|
<van-cell-group>
|
||||||
|
<van-field label-width="120" v-model="accompanyRecordDTO.visitName" label="客户姓名" readonly />
|
||||||
|
</van-cell-group>
|
||||||
|
<van-cell-group>
|
||||||
|
<van-field label-width="120" v-model="accompanyRecordDTO.visitAge" label="客户年龄" readonly />
|
||||||
|
</van-cell-group>
|
||||||
|
<van-cell-group>
|
||||||
|
<van-field label-width="120" v-model="homeLocation" label="地点" readonly />
|
||||||
|
</van-cell-group>
|
||||||
|
<van-cell-group>
|
||||||
|
<van-field label-width="120" v-model="accompanyRecordDTO.visitAddress" label="详细地址" readonly />
|
||||||
|
</van-cell-group>
|
||||||
|
<van-cell-group v-if="imgList.length">
|
||||||
|
<van-field label-width="120" label="现场照片" readonly />
|
||||||
|
</van-cell-group>
|
||||||
|
<div class="imgs pb30">
|
||||||
|
<van-grid :column-num="3" :border="false">
|
||||||
|
<van-grid-item v-for="(img, i) in imgList" :key="i" @click="prevImg(img)">
|
||||||
|
<van-image height="100" fit="cover" :src="img.url" />
|
||||||
|
</van-grid-item>
|
||||||
|
</van-grid>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { Grid, GridItem, ImagePreview } from 'vant'
|
||||||
|
import config from '@/config'
|
||||||
|
import { getAccompanyDetail } from '@/api/ebiz/eqiVisit/eqiVisit'
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
[Grid.name]: Grid,
|
||||||
|
[GridItem.name]: GridItem
|
||||||
|
},
|
||||||
|
props: ['id'],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
accompanyRecordDTO: {},
|
||||||
|
mediaDTOLst: []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
homeLocation() {
|
||||||
|
let detail = this.accompanyRecordDTO
|
||||||
|
if (!detail.visitProvinceName || !detail.visitCityName || !detail.visitAreaName) {
|
||||||
|
return ''
|
||||||
|
}
|
||||||
|
return `${detail.visitProvinceName} ${detail.visitCityName} ${detail.visitAreaName}`
|
||||||
|
},
|
||||||
|
imgList() {
|
||||||
|
return this.mediaDTOLst.map(img => {
|
||||||
|
return {
|
||||||
|
url: config.imgDomain + `/returnImageStream?a=b.jpg&imgPath=${encodeURIComponent(img.rgssUrl)}`
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.getHistoryDetail()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
prevImg(img) {
|
||||||
|
ImagePreview([img.url])
|
||||||
|
},
|
||||||
|
async getHistoryDetail() {
|
||||||
|
let res = await getAccompanyDetail({
|
||||||
|
accompanyRecordDTO: {
|
||||||
|
accompanyId: this.id
|
||||||
|
}
|
||||||
|
})
|
||||||
|
this.accompanyRecordDTO = res.content.accompanyRecordDTO
|
||||||
|
this.mediaDTOLst = res.content.mediaDTOLst ? res.content.mediaDTOLst : []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.history-detail {
|
||||||
|
min-height: 100vh;
|
||||||
|
.date {
|
||||||
|
font-size: 14px;
|
||||||
|
background-color: #ebebeb;
|
||||||
|
}
|
||||||
|
|
||||||
|
.imgs {
|
||||||
|
padding: 0 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.van-image {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .van-grid-item__content {
|
||||||
|
padding: 3px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
174
src/views/ebiz/eqiVisit/NewcomerList.vue
Normal file
174
src/views/ebiz/eqiVisit/NewcomerList.vue
Normal file
@@ -0,0 +1,174 @@
|
|||||||
|
<template>
|
||||||
|
<div class="bg-white newcomerlist">
|
||||||
|
<van-sticky>
|
||||||
|
<!-- 部 -->
|
||||||
|
<van-tabs v-model="deptIndex" :ellipsis="false" @change="onDeptChanged">
|
||||||
|
<van-tab v-for="(dept, i) in depts" :key="i" :title="dept.name" />
|
||||||
|
</van-tabs>
|
||||||
|
<!-- 组 -->
|
||||||
|
<van-tabs v-model="groupIndex" :ellipsis="false" @change="onGroupChanged">
|
||||||
|
<van-tab v-for="(group, i) in groups" :key="i" :title="group.name" />
|
||||||
|
</van-tabs>
|
||||||
|
</van-sticky>
|
||||||
|
<van-pull-refresh v-model="isLoading" @refresh="onRefresh">
|
||||||
|
<van-list v-model="loading" :finished="finished" finished-text="没有更多了" @load="getNewcomers" :immediate-check="false">
|
||||||
|
<div v-for="(item, i) in list" :key="i" class="van-hairline--bottom newcomer" @click="saveNewcomerInfo(item)">
|
||||||
|
<div class="avatar">
|
||||||
|
<img :src="avatar" />
|
||||||
|
</div>
|
||||||
|
<div class="info">
|
||||||
|
<p class="mb10 agentCode">工号: {{ item.agentCode }}</p>
|
||||||
|
<div class="detail">
|
||||||
|
<span>{{ item.name }}</span>
|
||||||
|
<span>{{ item.gender | genderFilter }}</span>
|
||||||
|
<span>{{ item.phone }}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</van-list>
|
||||||
|
</van-pull-refresh>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import avatar from '@/assets/images/bnf_avatar.png'
|
||||||
|
import { getAccompanyComCode, getAccompanyPerson } from '@/api/ebiz/eqiVisit/eqiVisit'
|
||||||
|
export default {
|
||||||
|
name: 'NewcomerList',
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
avatar,
|
||||||
|
// pull-refresh是否处于加载状态
|
||||||
|
isLoading: false,
|
||||||
|
list: [],
|
||||||
|
// List是否处于加载状态
|
||||||
|
loading: false,
|
||||||
|
// List是否加载完毕
|
||||||
|
finished: false,
|
||||||
|
// 已选部索引
|
||||||
|
deptIndex: 0,
|
||||||
|
// 可选部数据
|
||||||
|
depts: [],
|
||||||
|
// 已选组索引
|
||||||
|
groupIndex: 0,
|
||||||
|
// 可选组数据
|
||||||
|
groups: [],
|
||||||
|
pageSize: 10,
|
||||||
|
pageNum: 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
dept() {
|
||||||
|
return this.depts.find((item, index) => index === this.deptIndex)
|
||||||
|
},
|
||||||
|
groupCode() {
|
||||||
|
return this.groups.find((item, index) => index === this.groupIndex).groupCode
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async created() {
|
||||||
|
// 获取代理人可查看部
|
||||||
|
await this.getDepts()
|
||||||
|
// 设置初始组
|
||||||
|
this.groups = this.dept.subBranchGroupLst
|
||||||
|
await this.getNewcomers()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
async getDepts() {
|
||||||
|
let res = await getAccompanyComCode({})
|
||||||
|
if (res.result === '0') {
|
||||||
|
this.depts = [...res.content.branchInfoBeanList]
|
||||||
|
} else {
|
||||||
|
this.$toast(res.resultMessage)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 刷新组
|
||||||
|
async onRefresh() {
|
||||||
|
this.pageNum = 1
|
||||||
|
this.finished = false
|
||||||
|
await this.getNewcomers()
|
||||||
|
this.loading = false
|
||||||
|
this.isLoading = false
|
||||||
|
},
|
||||||
|
// 切换部
|
||||||
|
onDeptChanged() {
|
||||||
|
this.pageNum = 1
|
||||||
|
// groupIndex为0时切换部不会触发groupChange事件, 手动调一下接口
|
||||||
|
if (this.groupIndex === 0) {
|
||||||
|
this.getNewcomers()
|
||||||
|
} else {
|
||||||
|
this.groupIndex = 0
|
||||||
|
}
|
||||||
|
this.groups = this.dept.subBranchGroupLst
|
||||||
|
},
|
||||||
|
// 切换组
|
||||||
|
onGroupChanged() {
|
||||||
|
this.pageNum = 1
|
||||||
|
this.getNewcomers()
|
||||||
|
},
|
||||||
|
async getNewcomers() {
|
||||||
|
let res = await getAccompanyPerson({
|
||||||
|
groupCode: this.groupCode,
|
||||||
|
pageReqDTO: {
|
||||||
|
pageSize: this.pageSize,
|
||||||
|
pageNum: this.pageNum
|
||||||
|
}
|
||||||
|
})
|
||||||
|
this.pageNum++
|
||||||
|
this.finished = res.content.pageInfo.isLastPage
|
||||||
|
this.list = res.content.pageInfo.list
|
||||||
|
},
|
||||||
|
saveNewcomerInfo(newcomer) {
|
||||||
|
this.$CacheUtils.setLocItem('newcomer', JSON.stringify(newcomer))
|
||||||
|
this.$jump({
|
||||||
|
flag: 'h5',
|
||||||
|
extra: {
|
||||||
|
forbidSwipeBack: '1',
|
||||||
|
url: location.origin + `/#/eqiVisit/visitInfoRegister?edit=true`
|
||||||
|
},
|
||||||
|
routerInfo: { path: '/eqiVisit/visitInfoRegister?edit=true' }
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
filters: {
|
||||||
|
genderFilter(val) {
|
||||||
|
return val === 0 ? '男' : '女'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.newcomer {
|
||||||
|
display: flex;
|
||||||
|
padding: 10px 25px;
|
||||||
|
.avatar {
|
||||||
|
max-width: 50px;
|
||||||
|
margin-right: 10px;
|
||||||
|
img {
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.info {
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
.agentCode {
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.detail {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .van-tabs__line {
|
||||||
|
background-color: #1989fa !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.newcomerlist {
|
||||||
|
min-height: 100vh;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
116
src/views/ebiz/eqiVisit/RegisterResult.vue
Normal file
116
src/views/ebiz/eqiVisit/RegisterResult.vue
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
<template>
|
||||||
|
<div class="bg-white container">
|
||||||
|
<div class="wrapper">
|
||||||
|
<img class="mb30 icon" :src="img" />
|
||||||
|
<h1 class="blue mb30">恭喜完成陪访</h1>
|
||||||
|
<p class="blue mb30">奖励: +{{ singleScore }}积分</p>
|
||||||
|
<h2 class="blue mb30">累计积分{{ totalScore }}分</h2>
|
||||||
|
<div class="btns p30">
|
||||||
|
<van-button class="mr5" plain color="#199ed8" type="primary" @click="accompanyAgain">继续登记陪访</van-button>
|
||||||
|
<van-button class="ml5" plain color="#199ed8" type="primary" @click="toScoreRanking">积分榜</van-button>
|
||||||
|
<van-button color="#199ed8" type="primary" @click="quit">返回</van-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import img from '@/assets/images/success.png'
|
||||||
|
export default {
|
||||||
|
name: 'RegisterResult',
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
img
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
totalScore() {
|
||||||
|
return this.$route.query.total
|
||||||
|
},
|
||||||
|
singleScore() {
|
||||||
|
return this.$route.query.single
|
||||||
|
},
|
||||||
|
agentCode() {
|
||||||
|
return this.$route.query.agentCode
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.setLeftBtn()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
setLeftBtn() {
|
||||||
|
setTimeout(() => {
|
||||||
|
// eslint-disable-next-line no-undef
|
||||||
|
EWebBridge.webCallAppInJs('webview_left_button', {
|
||||||
|
img: this.$assetsUrl + 'images/del-close-btn@3x.png',
|
||||||
|
intercept: '1'
|
||||||
|
})
|
||||||
|
}, 1000)
|
||||||
|
window.appCallBack = this.appCallBack
|
||||||
|
},
|
||||||
|
appCallBack(data) {
|
||||||
|
if (data.trigger == 'left_button_click') {
|
||||||
|
this.quit()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
quit() {
|
||||||
|
// 跳转首页
|
||||||
|
this.$jump({
|
||||||
|
flag: 'home'
|
||||||
|
})
|
||||||
|
},
|
||||||
|
toScoreRanking() {
|
||||||
|
this.$jump({
|
||||||
|
flag: 'h5',
|
||||||
|
extra: {
|
||||||
|
forbidSwipeBack: '1',
|
||||||
|
url: location.origin + `/#/eqiVisit/scoreRanking?agentCode=${this.agentCode}`
|
||||||
|
},
|
||||||
|
routerInfo: { path: `/eqiVisit/scoreRanking?agentCode=${this.agentCode}` }
|
||||||
|
})
|
||||||
|
},
|
||||||
|
accompanyAgain() {
|
||||||
|
this.$jump({
|
||||||
|
flag: 'h5',
|
||||||
|
extra: {
|
||||||
|
forbidSwipeBack: '1',
|
||||||
|
url: location.origin + `/#/eqiVisit/visitInfoRegister`
|
||||||
|
},
|
||||||
|
routerInfo: { path: `/eqiVisit/visitInfoRegister` }
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.container {
|
||||||
|
text-align: center;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
height: 100vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
transform: scale(1.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
.blue {
|
||||||
|
color: #199ed8;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btns {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
.van-button:nth-of-type(1),
|
||||||
|
.van-button:nth-of-type(2) {
|
||||||
|
flex: 1;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.van-button:nth-of-type(3) {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
126
src/views/ebiz/eqiVisit/ScoreHistory.vue
Normal file
126
src/views/ebiz/eqiVisit/ScoreHistory.vue
Normal file
@@ -0,0 +1,126 @@
|
|||||||
|
<template>
|
||||||
|
<div ref="container" class="score-history bg-white">
|
||||||
|
<div v-for="(value, key) in list" :key="key">
|
||||||
|
<p class="year">{{ value.year }} 年</p>
|
||||||
|
<template v-for="v in value.data">
|
||||||
|
<div class="history-item pt10 pb10 pl20 pr20 van-hairline--bottom" :key="v.bussinessId">
|
||||||
|
<div class="col mb10">
|
||||||
|
<p>
|
||||||
|
<span>{{ v.accompanyAgentName }}</span> - <span>{{ v.recordInfo }}</span>
|
||||||
|
</p>
|
||||||
|
<p style="color: #008000;">+ {{ v.rewardCount }}</p>
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
<span>{{ v.recordDate }}</span>
|
||||||
|
<span>累计 {{ v.rewardAllCount }} 积分</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</div>
|
||||||
|
<p v-show="finished" class="finished p10">没有更多了</p>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { getRewardRecord } from '@/api/ebiz/eqiVisit/eqiVisit'
|
||||||
|
import dataDictionary from '@/assets/js/utils/data-dictionary'
|
||||||
|
|
||||||
|
let timer = null
|
||||||
|
export default {
|
||||||
|
name: 'ScoreHistory',
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
dataList: [],
|
||||||
|
pageNum: 1,
|
||||||
|
pageSize: 20,
|
||||||
|
finished: false,
|
||||||
|
dataMap: {},
|
||||||
|
visitTypes: dataDictionary.visitTypes
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
list() {
|
||||||
|
let years = []
|
||||||
|
for (let key in this.dataMap) {
|
||||||
|
years.push(Number(key))
|
||||||
|
}
|
||||||
|
years.sort((a, b) => b - a)
|
||||||
|
let result = []
|
||||||
|
years.forEach(value => {
|
||||||
|
result.push({ year: value, data: this.dataMap[value] })
|
||||||
|
})
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async created() {
|
||||||
|
await this.getScoreHistory()
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.$refs.container.onscroll = this.onscroll
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
onscroll() {
|
||||||
|
let sHeight = this.$refs.container.scrollHeight
|
||||||
|
let sTop = this.$refs.container.scrollTop
|
||||||
|
let dHeight = document.documentElement.scrollHeight
|
||||||
|
if (sHeight - sTop - dHeight <= 100) {
|
||||||
|
this.getScoreHistory()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async getScoreHistory() {
|
||||||
|
if (this.finished) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
clearTimeout(timer)
|
||||||
|
|
||||||
|
timer = setTimeout(async () => {
|
||||||
|
let res = await getRewardRecord({
|
||||||
|
pageReqDTO: {
|
||||||
|
pageSize: this.pageSize,
|
||||||
|
pageNum: this.pageNum
|
||||||
|
}
|
||||||
|
})
|
||||||
|
this.pageNum++
|
||||||
|
if (res.content.pageInfo.isLastPage) {
|
||||||
|
this.finished = true
|
||||||
|
}
|
||||||
|
let arrs = res.content.pageInfo.list
|
||||||
|
for (let item of arrs) {
|
||||||
|
let year = new Date(item.recordDate).getFullYear()
|
||||||
|
if (!this.dataMap.hasOwnProperty(year)) {
|
||||||
|
this.$set(this.dataMap, year, [])
|
||||||
|
this.dataMap[year].push(item)
|
||||||
|
} else {
|
||||||
|
this.dataMap[year].push(item)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, 200)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.score-history {
|
||||||
|
height: 100vh;
|
||||||
|
overflow: auto;
|
||||||
|
.year {
|
||||||
|
padding: 5px 10px;
|
||||||
|
background-color: #ebebeb;
|
||||||
|
}
|
||||||
|
.history-item {
|
||||||
|
.col {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
.col:nth-of-type(2) {
|
||||||
|
color: #999999;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.finished {
|
||||||
|
text-align: center;
|
||||||
|
color: #999999;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
147
src/views/ebiz/eqiVisit/ScoreRanking.vue
Normal file
147
src/views/ebiz/eqiVisit/ScoreRanking.vue
Normal file
@@ -0,0 +1,147 @@
|
|||||||
|
<template>
|
||||||
|
<van-pull-refresh v-model="isLoading" @refresh="onRefresh">
|
||||||
|
<div class="bg-white ranking">
|
||||||
|
<van-notice-bar :text="noticeText" wrapable />
|
||||||
|
<div class="table-wrapper" v-if="ranking.length">
|
||||||
|
<table class="van-hairline--surround">
|
||||||
|
<thead>
|
||||||
|
<th v-for="(th, i) in theads" :key="i">{{ th }}</th>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr class="thin-bottom">
|
||||||
|
<template v-if="inRanking">
|
||||||
|
<td class="thin-right thin-bottom" style="max-width: 2em; font-weight: bold;">{{ agentRank.rank }}</td>
|
||||||
|
<td class="thin-right thin-bottom" style="max-width: 3em; font-weight: bold;">{{ agentRank.agentName }}</td>
|
||||||
|
<td class="thin-right thin-bottom" style="max-width: 4em; font-weight: bold;">{{ agentRank.thirManageName }}</td>
|
||||||
|
<td class="thin-right thin-bottom" style="max-width: 2em; font-weight: bold;">{{ agentRank.applGrade }}</td>
|
||||||
|
<td class="thin-bottom" style="max-width: 2em; text-decoration: underline; font-weight: bold;" @click="jumpToDetail">
|
||||||
|
{{ agentRank.rewardCount }}
|
||||||
|
</td>
|
||||||
|
</template>
|
||||||
|
<td class="thin-bottom" v-else colspan="5">暂无积分</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr v-for="(rank, index) in ranking" :key="index">
|
||||||
|
<td class="thin-right thin-bottom" style="max-width: 2em;">{{ rank.rank }}</td>
|
||||||
|
<td class="thin-right thin-bottom" style="max-width: 3em;">{{ rank.agentName }}</td>
|
||||||
|
<td class="thin-right thin-bottom" style="max-width: 4em;">{{ rank.thirManageName }}</td>
|
||||||
|
<td class="thin-right thin-bottom" style="max-width: 2em;">{{ rank.applGrade }}</td>
|
||||||
|
<td class="thin-bottom" style="max-width: 2em;">{{ rank.rewardCount }}</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="empty pt150" v-else>
|
||||||
|
<p class="mb10">暂无排名</p>
|
||||||
|
<img :src="empty" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</van-pull-refresh>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { NoticeBar } from 'vant'
|
||||||
|
import empty from '@/assets/images/empty.png'
|
||||||
|
import { getAccompanyRank } from '@/api/ebiz/eqiVisit/eqiVisit'
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
[NoticeBar.name]: NoticeBar
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
empty,
|
||||||
|
agentRank: {},
|
||||||
|
inRanking: false,
|
||||||
|
isLoading: false,
|
||||||
|
theads: ['排名', '姓名', '所在机构', '职级', '积分'],
|
||||||
|
ranking: []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
noticeText() {
|
||||||
|
if (this.ranking.length) {
|
||||||
|
return '温馨提示: 每日凌晨更新前一日积分排行,下拉刷新最新排行'
|
||||||
|
} else {
|
||||||
|
return '温馨提示:当前暂无最新排名,赶紧去陪访吧!'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
agentCode() {
|
||||||
|
return this.$route.query.agentCode
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.queryRanking()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
async queryRanking() {
|
||||||
|
let res = await getAccompanyRank({ billboardStart: 0, billboardEnd: 20, agentCode: this.agentCode })
|
||||||
|
this.ranking = res.content.statisticsBeanList
|
||||||
|
if (res.content.agentStatisticsBean) {
|
||||||
|
this.agentRank = res.content.agentStatisticsBean
|
||||||
|
this.inRanking = true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async onRefresh() {
|
||||||
|
await this.queryRanking()
|
||||||
|
this.isLoading = false
|
||||||
|
},
|
||||||
|
jumpToDetail() {
|
||||||
|
console.log('object')
|
||||||
|
this.$jump({
|
||||||
|
flag: 'h5',
|
||||||
|
extra: {
|
||||||
|
forbidSwipeBack: '1',
|
||||||
|
url: location.origin + `/#/eqiVisit/scoreHistory`
|
||||||
|
},
|
||||||
|
routerInfo: { path: `/eqiVisit/scoreHistory` }
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.ranking {
|
||||||
|
min-height: 100vh;
|
||||||
|
.table-wrapper {
|
||||||
|
overflow: auto;
|
||||||
|
display: flex;
|
||||||
|
table {
|
||||||
|
flex: 1;
|
||||||
|
border-collapse: collapse;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
th {
|
||||||
|
white-space: nowrap;
|
||||||
|
padding: 15px 0;
|
||||||
|
background: #199ed8;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
tr {
|
||||||
|
td {
|
||||||
|
padding: 6px 0;
|
||||||
|
font-size: 14px;
|
||||||
|
word-break: break-all;
|
||||||
|
color: #199ed8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.empty {
|
||||||
|
text-align: center;
|
||||||
|
p {
|
||||||
|
font-size: 20px;
|
||||||
|
color: #999999;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.van-pull-refresh {
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.van-notice-bar {
|
||||||
|
background-color: #f6f6f6;
|
||||||
|
color: #199ed8;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
109
src/views/ebiz/eqiVisit/VisitHistory.vue
Normal file
109
src/views/ebiz/eqiVisit/VisitHistory.vue
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
<template>
|
||||||
|
<div class="history bg-white">
|
||||||
|
<div class="history-item p10 thin-bottom">
|
||||||
|
<div>陪访类型</div>
|
||||||
|
<div>被陪访人</div>
|
||||||
|
<div>日期</div>
|
||||||
|
</div>
|
||||||
|
<div class="divider" />
|
||||||
|
<van-list v-model="loading" :finished="finished" @load="getListData" finished-text="没有更多了...">
|
||||||
|
<div class="history-item p10 thin-bottom arrow" v-for="his in dataList" :key="his.accompanyId" @click="jumpToDetail(his.accompanyId)">
|
||||||
|
<div>{{ his.accompanyName }}</div>
|
||||||
|
<div>{{ his.accompanyAgentName }}</div>
|
||||||
|
<div class="time">
|
||||||
|
<span>{{ his.visitDate | dateFilter }}</span>
|
||||||
|
<van-icon name="arrow" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</van-list>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { getAgentAccompanyRecordPage } from '@/api/ebiz/eqiVisit/eqiVisit'
|
||||||
|
import dateUtil from '@/assets/js/utils/date-utils'
|
||||||
|
export default {
|
||||||
|
name: 'VisitHistory',
|
||||||
|
props: ['id'],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
loading: false,
|
||||||
|
finished: false,
|
||||||
|
dataList: [],
|
||||||
|
index: 5,
|
||||||
|
pageSize: 10,
|
||||||
|
pageNum: 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
async getListData() {
|
||||||
|
let res = await getAgentAccompanyRecordPage({
|
||||||
|
pageReqDTO: {
|
||||||
|
pageSize: this.pageSize,
|
||||||
|
pageNum: this.pageNum
|
||||||
|
}
|
||||||
|
})
|
||||||
|
this.pageNum++
|
||||||
|
if (res.content.pageInfo.isLastPage) {
|
||||||
|
this.finished = true
|
||||||
|
}
|
||||||
|
this.dataList.push(...res.content.pageInfo.list)
|
||||||
|
this.loading = false
|
||||||
|
},
|
||||||
|
jumpToDetail(id) {
|
||||||
|
this.$jump({
|
||||||
|
flag: 'h5',
|
||||||
|
extra: {
|
||||||
|
forbidSwipeBack: '1',
|
||||||
|
url: location.origin + `/#/eqiVisit/historyDetail/${id}`
|
||||||
|
},
|
||||||
|
routerInfo: { path: `/eqiVisit/historyDetail/${id}` }
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
filters: {
|
||||||
|
dateFilter(val) {
|
||||||
|
let time = new Date(Number(val))
|
||||||
|
return dateUtil.formatDate(time, 'yyyy-MM-dd')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
* {
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
.history {
|
||||||
|
min-height: 100vh;
|
||||||
|
.history-item {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-around;
|
||||||
|
align-items: center;
|
||||||
|
font-size: 16px;
|
||||||
|
div {
|
||||||
|
flex: 1;
|
||||||
|
height: 30px;
|
||||||
|
line-height: 30px;
|
||||||
|
text-align: center;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.time {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.divider {
|
||||||
|
height: 10px;
|
||||||
|
background-color: #ebebeb;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.van-icon {
|
||||||
|
position: absolute;
|
||||||
|
font-weight: bold;
|
||||||
|
top: 50%;
|
||||||
|
transform: translate(50%, -60%);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
320
src/views/ebiz/eqiVisit/VisitInfoRegister.vue
Normal file
320
src/views/ebiz/eqiVisit/VisitInfoRegister.vue
Normal file
@@ -0,0 +1,320 @@
|
|||||||
|
<template>
|
||||||
|
<div class="full-page bg-white">
|
||||||
|
<div class="form ml10 mr10">
|
||||||
|
<van-cell-group>
|
||||||
|
<van-field v-model="agentInfo.name" label="陪访人" readonly />
|
||||||
|
</van-cell-group>
|
||||||
|
<van-cell-group @click="selectNewcomer">
|
||||||
|
<van-field
|
||||||
|
right-icon="arrow"
|
||||||
|
v-model="newcomerInfo.name"
|
||||||
|
label="陪访新人姓名"
|
||||||
|
placeholder="请选择"
|
||||||
|
required
|
||||||
|
readonly
|
||||||
|
name="陪访新人姓名"
|
||||||
|
v-validate="'required'"
|
||||||
|
/>
|
||||||
|
</van-cell-group>
|
||||||
|
<PopupSelector
|
||||||
|
v-model="visitType"
|
||||||
|
label="陪访类型"
|
||||||
|
placeholder="请选择"
|
||||||
|
readonly
|
||||||
|
required
|
||||||
|
:columns="visitTypes"
|
||||||
|
name="陪访类型"
|
||||||
|
v-validate="'required'"
|
||||||
|
/>
|
||||||
|
<PopupSelector v-model="visitDate" label="日期" placeholder="请选择" readonly required name="日期" v-validate="'required'">
|
||||||
|
<template v-slot:default="{ closePopup }">
|
||||||
|
<van-datetime-picker v-model="currentDate" type="date" @confirm="onDateConfirm($event, closePopup)" @cancel="closePopup" />
|
||||||
|
</template>
|
||||||
|
</PopupSelector>
|
||||||
|
<PopupSelector v-model="visitDuration" label="时长(h)" placeholder="请选择" readonly required name="时长" v-validate="'required'">
|
||||||
|
<template v-slot:default="{ closePopup }">
|
||||||
|
<van-picker show-toolbar :columns="duration" @confirm="onDurationConfirm($event, closePopup)" @cancel="closePopup" />
|
||||||
|
</template>
|
||||||
|
</PopupSelector>
|
||||||
|
<van-cell-group>
|
||||||
|
<van-field v-model="visitName" label="客户姓名" placeholder="请输入" required name="客户姓名" v-validate="'required'" />
|
||||||
|
</van-cell-group>
|
||||||
|
<PopupSelector v-model="visitAge" :columns="ages" label="客户年龄" placeholder="请选择" readonly required name="客户年龄" v-validate="'required'" />
|
||||||
|
<PopupSelector v-model="areaName" label="地点" placeholder="请选择" readonly required name="地点" v-validate="'required'">
|
||||||
|
<template v-slot:default="{ closePopup }">
|
||||||
|
<van-area :area-list="areaList" value="450000" @confirm="onAreaConfirm($event, closePopup)" @cancel="closePopup" />
|
||||||
|
</template>
|
||||||
|
</PopupSelector>
|
||||||
|
<van-cell-group>
|
||||||
|
<van-field v-model="visitAddress" label="详细地址" placeholder="请输入" required clearable name="详细地址" v-validate="'required'" maxlength="200" />
|
||||||
|
</van-cell-group>
|
||||||
|
<p class="m10">现场照片(最多9张)</p>
|
||||||
|
<van-uploader class="m10" v-model="imageList" :after-read="uploadImg" :max-count="9" />
|
||||||
|
</div>
|
||||||
|
<van-button type="info" block v-no-more-click="2000" @click="submitInfo">提交</van-button>
|
||||||
|
|
||||||
|
<van-popup :value="isSearchMoreShow" position="bottom" @click-overlay="isSearchMoreShow = false">
|
||||||
|
<div class="action van-hairline--bottom" v-for="(action, i) in actions" :key="i" @click="jumpPage(action)">{{ action.title }}</div>
|
||||||
|
</van-popup>
|
||||||
|
|
||||||
|
<check-agent @checModelSuccessMethod="initThisPage" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import PopupSelector from '@/components/common/PopupSelector.vue'
|
||||||
|
import areaList from '@/assets/js/utils/areaForSale'
|
||||||
|
import getAreaName from '@/assets/js/utils/getAreaNameForSale'
|
||||||
|
import { uploadImg } from '@/api/ebiz/sale/sale'
|
||||||
|
import timeUtil from '@/assets/js/utils/date-utils'
|
||||||
|
import { getAgentInfo } from '@/api/ebiz/my/my'
|
||||||
|
import CheckAgent from '@/components/common/CheckAgent'
|
||||||
|
import { saveAccompanyRecord } from '@/api/ebiz/eqiVisit/eqiVisit'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'VisitInfoRegister',
|
||||||
|
components: {
|
||||||
|
PopupSelector,
|
||||||
|
[CheckAgent.name]: CheckAgent
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
newcomerInfo: {},
|
||||||
|
showFlag: true,
|
||||||
|
agentInfo: {},
|
||||||
|
imageList: [],
|
||||||
|
areaList,
|
||||||
|
newcomerName: '',
|
||||||
|
visitName: '',
|
||||||
|
visitAge: '',
|
||||||
|
areaName: '',
|
||||||
|
visitProvinceCode: '',
|
||||||
|
visitProvinceName: '',
|
||||||
|
visitCityCode: '',
|
||||||
|
visitCityName: '',
|
||||||
|
visitAreaCode: '',
|
||||||
|
visitAreaName: '',
|
||||||
|
visitAddress: '',
|
||||||
|
visitType: '',
|
||||||
|
visitTypes: ['入职前陪访', '新人首单', '冲刺挑战', '参与衔训'],
|
||||||
|
visitDate: '',
|
||||||
|
visitDuration: '',
|
||||||
|
show: false,
|
||||||
|
currentDate: new Date(),
|
||||||
|
isSearchMoreShow: false,
|
||||||
|
actions: [
|
||||||
|
{
|
||||||
|
title: '陪访记录',
|
||||||
|
to: '/eqiVisit/visitHistory'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '查询积分',
|
||||||
|
to: '/eqiVisit/scoreHistory'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '积分榜',
|
||||||
|
to: '/eqiVisit/scoreRanking'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '取消'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
// 陪访时长0.5-24
|
||||||
|
duration() {
|
||||||
|
let duration = []
|
||||||
|
for (let i = 0; i < 48; i++) {
|
||||||
|
duration.push(0.5 + i * 0.5)
|
||||||
|
}
|
||||||
|
return duration
|
||||||
|
},
|
||||||
|
// 客户年龄18-60
|
||||||
|
ages() {
|
||||||
|
let age = []
|
||||||
|
for (let i = 18; i <= 80; i++) {
|
||||||
|
age.push(i)
|
||||||
|
}
|
||||||
|
return age
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
initThisPage(showFlag) {
|
||||||
|
this.showFlag = showFlag
|
||||||
|
if (this.showFlag) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
this.init()
|
||||||
|
},
|
||||||
|
async init() {
|
||||||
|
// 拦截右上角按钮
|
||||||
|
this.setRightBtn()
|
||||||
|
// 获取代理人信息
|
||||||
|
await this.setAgentInfo({})
|
||||||
|
// 新增陪访记录时清空缓存数据, 编辑时从缓存取出数据回显
|
||||||
|
if (this.$route.query.edit) {
|
||||||
|
this.newcomerInfo = JSON.parse(this.$CacheUtils.getLocItem('newcomer'))
|
||||||
|
} else {
|
||||||
|
this.$CacheUtils.removeLocItem('newcomer')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async setAgentInfo() {
|
||||||
|
let res = await getAgentInfo({})
|
||||||
|
if (res.result === '0') {
|
||||||
|
this.agentInfo = res
|
||||||
|
} else {
|
||||||
|
this.$toast(res.resultMessage)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
selectNewcomer() {
|
||||||
|
this.$jump({
|
||||||
|
flag: 'h5',
|
||||||
|
extra: {
|
||||||
|
forbidSwipeBack: '1',
|
||||||
|
url: location.origin + `/#/eqiVisit/newcomerList`
|
||||||
|
},
|
||||||
|
routerInfo: { path: '/eqiVisit/newcomerList' }
|
||||||
|
})
|
||||||
|
},
|
||||||
|
setRightBtn() {
|
||||||
|
// setTimeout(() => {
|
||||||
|
// // eslint-disable-next-line no-undef
|
||||||
|
// EWebBridge.webCallAppInJs('webview_right_button', {
|
||||||
|
// btns: [
|
||||||
|
// {
|
||||||
|
// title: '查询更多'
|
||||||
|
// }
|
||||||
|
// ]
|
||||||
|
// })
|
||||||
|
// }, 1000)
|
||||||
|
window.appCallBack = this.appCallBack
|
||||||
|
},
|
||||||
|
appCallBack(data) {
|
||||||
|
if (data.trigger == 'right_button_click') {
|
||||||
|
this.isSearchMoreShow = true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async uploadImg(file) {
|
||||||
|
let data = new FormData()
|
||||||
|
data.append('imgPath', file.file)
|
||||||
|
this.$toast.loading({
|
||||||
|
duration: 0,
|
||||||
|
loadingType: 'spinner'
|
||||||
|
})
|
||||||
|
let res = await uploadImg(data)
|
||||||
|
this.$toast.clear()
|
||||||
|
if (res.result === '0') {
|
||||||
|
file.rgssUrl = res.path
|
||||||
|
} else {
|
||||||
|
this.imageList.splice(this.imageList.length - 1, 1)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onDateConfirm(data, fun) {
|
||||||
|
this.visitDate = timeUtil.formatDate(data, 'yyyy-MM-dd')
|
||||||
|
fun()
|
||||||
|
},
|
||||||
|
onAreaConfirm(data, fun) {
|
||||||
|
let [province, city, area] = [data[0], data[1], data[2]]
|
||||||
|
;[this.visitProvinceCode, this.visitCityCode, this.visitAreaCode] = [province.code, city.code, area.code]
|
||||||
|
;[this.visitProvinceName, this.visitCityName, this.visitAreaName] = [province.name, city.name, area.name]
|
||||||
|
this.areaName = getAreaName(data)
|
||||||
|
fun()
|
||||||
|
},
|
||||||
|
onDurationConfirm(data, fun) {
|
||||||
|
this.visitDuration = String(data)
|
||||||
|
fun()
|
||||||
|
},
|
||||||
|
async submitInfo() {
|
||||||
|
let res = await this.$validator.validate()
|
||||||
|
if (!res) {
|
||||||
|
return this.$toast(this.$validator.errors.all()[0])
|
||||||
|
}
|
||||||
|
// 保存陪访信息
|
||||||
|
let accompanyType = `0${this.visitTypes.findIndex(type => type === this.visitType) + 1}`
|
||||||
|
let param = {
|
||||||
|
accompanyRecordDTO: {
|
||||||
|
agentCode: this.agentInfo.jobNo,
|
||||||
|
agentName: this.agentInfo.name,
|
||||||
|
applGrade: this.agentInfo.agentGrade,
|
||||||
|
accompanyAgentCode: this.newcomerInfo.agentCode,
|
||||||
|
accompanyAgentName: this.newcomerInfo.name,
|
||||||
|
accompanyApplGrade: this.newcomerInfo.applGrade,
|
||||||
|
accompanyType,
|
||||||
|
accompanyName: this.visitType,
|
||||||
|
visitDate: this.visitDate,
|
||||||
|
visitDuration: this.visitDuration,
|
||||||
|
visitName: this.visitName,
|
||||||
|
visitAge: this.visitAge,
|
||||||
|
visitProvinceCode: this.visitProvinceCode,
|
||||||
|
visitProvinceName: this.visitProvinceName,
|
||||||
|
visitCityCode: this.visitCityCode,
|
||||||
|
visitCityName: this.visitCityName,
|
||||||
|
visitAreaCode: this.visitAreaCode,
|
||||||
|
visitAreaName: this.visitAreaName,
|
||||||
|
visitAddress: this.visitAddress
|
||||||
|
},
|
||||||
|
mediaDTOLst: this.imageList.map(img => ({ rgssUrl: img.rgssUrl }))
|
||||||
|
}
|
||||||
|
res = await saveAccompanyRecord(param)
|
||||||
|
if (res.result === '0') {
|
||||||
|
let { rewardCount, allRewardCount } = res.content
|
||||||
|
this.$jump({
|
||||||
|
flag: 'h5',
|
||||||
|
extra: {
|
||||||
|
forbidSwipeBack: '1',
|
||||||
|
url: location.origin + `/#/eqiVisit/registerResult?single=${rewardCount}&total=${allRewardCount}&agentCode=${this.agentInfo.jobNo}`
|
||||||
|
},
|
||||||
|
routerInfo: { path: `/eqiVisit/registerResult?single=${rewardCount}&total=${allRewardCount}&agentCode=${this.agentInfo.jobNo}` }
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
this.$toast(res.resultMessage)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
jumpPage(route) {
|
||||||
|
if (route.to) {
|
||||||
|
this.$jump({
|
||||||
|
flag: 'h5',
|
||||||
|
extra: {
|
||||||
|
forbidSwipeBack: '1',
|
||||||
|
url: location.origin + `/#${route.to}`
|
||||||
|
},
|
||||||
|
routerInfo: { path: route.to }
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
this.isSearchMoreShow = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.full-page {
|
||||||
|
width: 100vw;
|
||||||
|
height: 100vh;
|
||||||
|
position: fixed;
|
||||||
|
overflow: auto;
|
||||||
|
|
||||||
|
.form {
|
||||||
|
padding-bottom: 50px;
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.action {
|
||||||
|
text-align: center;
|
||||||
|
font-size: 16px;
|
||||||
|
padding: 12px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.van-button {
|
||||||
|
border-radius: 0;
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .van-tabs__line {
|
||||||
|
background-color: #1989fa !important;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
Reference in New Issue
Block a user