<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" ref="tableRef" :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" min-width="130" 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 { biCustomerTotalListAPI, biCustomerTotalAPI, biCustomerTotalListExportAPI } from '@/api/bi/customer' export default { /** 客户总量分析 */ name: 'CustomerTotalStatistics', mixins: [BaseMixin, SortMixin, SummaryMixin], data() { return { loading: false, axisOption: null, postParams: {}, // 筛选参数 dataIndex: null, list: [], axisList: [], fieldList: [ { field: 'realname', name: '员工姓名', sortable: true }, { field: 'customer_num', name: '新增客户数', sortable: true }, { field: 'deal_customer_num', name: '成交客户数', sortable: true }, { field: 'deal_customer_rate', name: '客户成交率(%)', sortable: true }, { field: 'contract_money', name: '合同总金额', sortable: true }, { field: 'receivables_money', name: '回款金额', sortable: true } ] } }, computed: { // 列表请求参数 listPostParams() { const params = { ...this.postParams } if (this.dataIndex !== undefined && this.dataIndex !== null) { const dataItem = this.axisList[this.dataIndex] delete params.type params.start_time = dataItem.type params.end_time = dataItem.type } return params } }, mounted() { this.initAxis() }, methods: { /** * 搜索点击 */ searchClick(params) { this.postParams = params this.getDataList() this.getRecordList() }, /** * 图表数据 */ getDataList() { this.loading = true biCustomerTotalAPI(this.postParams) .then(res => { this.loading = false const list = res.data || [] this.axisList = list const dealData = [] const numData = [] const legendData = [] for (let index = 0; index < list.length; index++) { const element = list[index] dealData.push(element.deal_customer_num) numData.push(element.customer_num) legendData.push(element.type) } this.axisOption.xAxis[0].data = legendData this.axisOption.series[0].data = dealData this.axisOption.series[1].data = numData this.chartObj.setOption(this.axisOption, true) }) .catch(() => { this.loading = false }) }, /** * 获取相关列表 */ getRecordList(dataIndex) { this.dataIndex = dataIndex this.list = [] this.loading = true biCustomerTotalListAPI(this.listPostParams) .then(res => { this.loading = false const data = res.data || {} this.list = data.list || [] this.getSummariesData(data.total) }) .catch(() => { this.loading = false }) }, /** 柱状图 */ initAxis() { this.chartObj = echarts.init(document.getElementById('axismain')) this.chartObj.on('click', params => { // seriesIndex 1:跟进客户数 2:跟进次数 dataIndex 具体的哪条数据 this.getRecordList(params.dataIndex) }) this.axisOption = { color: ['#6ca2ff', '#ff7474'], toolbox: this.toolbox, tooltip: { trigger: 'axis', axisPointer: { // 坐标轴指示器,坐标轴触发有效 type: 'shadow' // 默认为直线,可选为:'line' | 'shadow' } }, legend: { data: ['成交客户数', '新增客户数'], bottom: '0px', itemWidth: 14 }, grid: { top: '40px', left: '20px', right: '20px', 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 } } ], series: [ { name: '成交客户数', type: 'bar', yAxisIndex: 0, barMaxWidth: 15, data: [] }, { name: '新增客户数', type: 'bar', yAxisIndex: 0, barMaxWidth: 15, data: [] } ] } }, /** * 导出点击 */ exportClick() { this.requestExportInfo(biCustomerTotalListExportAPI, this.listPostParams, 'statistics') } } } </script> <style rel="stylesheet/scss" lang="scss" scoped> @import '../styles/detail.scss'; </style>