You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
wkcrm_web/src/views/bi/customer/CustomerPoolStatistics.vue

280 lines
7.0 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<div
v-loading="loading"
class="main-container">
<filtrate-handle-view
title="公海客户分析"
class="filtrate-bar"
module-type="customer"
@load="loading=true"
@change="searchClick"/>
<div class="content">
<div class="axis-content">
<div id="axismain"/>
</div>
<div class="table-content">
<div class="handle-bar">
<el-button
class="export-btn"
@click="exportClick">导出</el-button>
</div>
<el-table
v-if="showTable"
:data="list"
:summary-method="getSummaries"
height="400"
show-summary
stripe
border
highlight-current-row
@sort-change="({ prop, order }) => mixinSortFn(list, prop, order)">
<el-table-column
v-for="(item, index) in fieldList"
:key="index"
:prop="item.field"
:label="item.name"
sortable="custom"
align="center"
header-align="center"
show-overflow-tooltip/>
</el-table>
</div>
</div>
</div>
</template>
<script>
import BaseMixin from '../mixins/Base'
import SortMixin from '../mixins/Sort'
import SummaryMixin from '../mixins/Summary'
import echarts from 'echarts'
import {
biCustomerPoolAPI,
biCustomerPoolListAPI,
biCustomerPoolListExportAPI
} from '@/api/bi/customer'
export default {
/** 公海客户分析 */
name: 'CustomerPoolStatistics',
mixins: [BaseMixin, SortMixin, SummaryMixin],
data() {
return {
loading: false,
axisOption: null,
list: [],
postParams: {}, // 筛选参数
dataIndex: null,
axisList: [],
fieldList: [
{ field: 'realname', name: '姓名' },
{ field: 'username', name: '部门' },
{ field: 'receive', name: '公海池领取客户数' },
{ field: 'put_in', name: '进入公海客户数' }
]
}
},
computed: {
// 列表请求参数
listPostParams() {
const params = { ...this.postParams }
if (this.dataIndex !== undefined && this.dataIndex !== null) {
const dataItem = this.axisList[this.dataIndex]
delete params.type
params.startTime = dataItem.type
params.endTime = dataItem.type
}
return params
}
},
mounted() {
this.initAxis()
},
methods: {
/**
* 搜索点击
*/
searchClick(params) {
this.postParams = params
this.getDataList()
this.getRecordList()
},
/**
* 图表数据
*/
getDataList() {
this.loading = true
biCustomerPoolAPI(this.postParams)
.then(res => {
this.loading = false
this.axisList = res.data || []
const putCounts = []
const receiveCounts = []
const xAxis = []
for (let index = 0; index < res.data.length; index++) {
const element = res.data[index]
putCounts.push(element.put_in)
receiveCounts.push(element.receive)
xAxis.push(element.type)
}
this.axisOption.xAxis[0].data = xAxis
this.axisOption.series[0].data = putCounts
this.axisOption.series[1].data = receiveCounts
this.chartObj.setOption(this.axisOption, true)
})
.catch(() => {
this.loading = false
})
},
/**
* 获取相关列表
*/
getRecordList(dataIndex) {
this.dataIndex = dataIndex
this.list = []
this.loading = true
biCustomerPoolListAPI(this.listPostParams)
.then(res => {
this.loading = false
const data = res.data || {}
this.list = data.list || []
this.getSummariesData(data.total)
})
.catch(() => {
this.loading = false
})
},
/** 柱状图 */
initAxis() {
var chartObj = echarts.init(document.getElementById('axismain'))
var option = {
color: ['#6ca2ff', '#ff7474'],
toolbox: this.toolbox,
tooltip: {
trigger: 'axis',
axisPointer: {
// 坐标轴指示器,坐标轴触发有效
type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
}
},
legend: {
data: ['进入公海客户数', '公海池领取客户数'],
bottom: '0px',
itemWidth: 14
},
grid: {
top: '40px',
left: '30px',
right: '50px',
bottom: '40px',
containLabel: true,
borderColor: '#fff'
},
xAxis: [
{
type: 'category',
data: [],
axisTick: {
alignWithLabel: true,
lineStyle: { width: 0 }
},
axisLabel: {
color: '#333'
},
/** 坐标轴轴线相关设置 */
axisLine: {
lineStyle: { color: '#333' }
},
splitLine: {
show: false
}
}
],
yAxis: [
{
type: 'value',
name: '进入公海客户数',
axisTick: {
alignWithLabel: true,
lineStyle: { width: 0 }
},
axisLabel: {
color: '#333',
formatter: '{value}个'
},
/** 坐标轴轴线相关设置 */
axisLine: {
lineStyle: { color: '#333' }
},
splitLine: {
show: false
}
},
{
type: 'value',
name: '公海池领取客户数',
axisTick: {
alignWithLabel: true,
lineStyle: { width: 0 }
},
axisLabel: {
color: '#333',
formatter: '{value}次'
},
/** 坐标轴轴线相关设置 */
axisLine: {
lineStyle: { color: '#333' }
},
splitLine: {
show: false
}
}
],
series: [
{
name: '进入公海客户数',
type: 'bar',
yAxisIndex: 0,
barMaxWidth: 15,
data: []
},
{
name: '公海池领取客户数',
type: 'bar',
yAxisIndex: 1,
barMaxWidth: 15,
data: []
}
]
}
chartObj.setOption(option, true)
chartObj.on('click', params => {
// seriesIndex 1进入公海客户数 2:公海池领取客户数 dataIndex 具体的哪条数据
this.getRecordList(params.dataIndex)
})
this.axisOption = option
this.chartObj = chartObj
},
/**
* 导出点击
*/
exportClick() {
this.requestExportInfo(biCustomerPoolListExportAPI, this.listPostParams, 'poolList')
}
}
}
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
@import '../styles/detail.scss';
</style>