Commit 4e640bae by puhui999

CRM: 新增商机赢单转化率分析

parent 014d1f8c
...@@ -134,81 +134,109 @@ watch( ...@@ -134,81 +134,109 @@ watch(
) )
/** 柱状图配置:纵向 */ /** 柱状图配置:纵向 */
const echartsOption = reactive<EChartsOption>({ const echartsOption = reactive<EChartsOption>({
color: ['#6ca2ff', '#6ac9d7', '#ff7474'],
tooltip: {
trigger: 'axis',
axisPointer: {
// 坐标轴指示器,坐标轴触发有效
type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
}
},
legend: {
data: ['赢单转化率', '商机总数', '赢单商机数'],
bottom: '0px',
itemWidth: 14
},
grid: { grid: {
left: 30, top: '40px',
right: 30, // 让 X 轴右侧显示完整 left: '40px',
bottom: 20, right: '40px',
containLabel: true bottom: '40px',
containLabel: true,
borderColor: '#fff'
}, },
legend: {}, xAxis: [
series: [
{
name: '商机总数',
type: 'bar',
yAxisIndex: 0,
data: []
},
{
name: '赢单商机数',
type: 'bar',
yAxisIndex: 1,
data: []
},
{ {
name: '赢单转化率', type: 'category',
type: 'bar', data: [],
yAxisIndex: 2, axisTick: {
data: [] alignWithLabel: true,
} lineStyle: { width: 0 }
],
toolbox: {
feature: {
dataZoom: {
xAxisIndex: false // 数据区域缩放:Y 轴不缩放
}, },
brush: { axisLabel: {
type: ['lineX', 'clear'] // 区域缩放按钮、还原按钮 color: '#BDBDBD'
}, },
saveAsImage: { show: true, name: '商机转化率分析' } // 保存为图片 /** 坐标轴轴线相关设置 */
} axisLine: {
}, lineStyle: { color: '#BDBDBD' }
tooltip: { },
trigger: 'axis', splitLine: {
axisPointer: { show: false
type: 'shadow' }
} }
}, ],
yAxis: [ yAxis: [
{ {
type: 'value', type: 'value',
name: '商机总数', name: '赢单转化率',
min: 0, axisTick: {
minInterval: 1 // 显示整数刻度 alignWithLabel: true,
}, lineStyle: { width: 0 }
{ },
type: 'value', axisLabel: {
name: '赢单商机数', color: '#BDBDBD',
min: 0, formatter: '{value}%'
minInterval: 1 // 显示整数刻度 },
/** 坐标轴轴线相关设置 */
axisLine: {
lineStyle: { color: '#BDBDBD' }
},
splitLine: {
show: false
}
}, },
{ {
type: 'value', type: 'value',
name: '赢单转化率', name: '商机数',
min: 0, axisTick: {
minInterval: 1, // 显示整数刻度 alignWithLabel: true,
lineStyle: { width: 0 }
},
axisLabel: {
color: '#BDBDBD',
formatter: '{value}个'
},
/** 坐标轴轴线相关设置 */
axisLine: {
lineStyle: { color: '#BDBDBD' }
},
splitLine: { splitLine: {
lineStyle: { show: false
type: 'dotted', // 右侧网格线虚化, 减少混乱
opacity: 0.7
}
} }
} }
], ],
xAxis: { series: [
type: 'category', {
name: '日期', name: '赢单转化率',
data: [] type: 'line',
} yAxisIndex: 0,
data: []
},
{
name: '商机总数',
type: 'bar',
yAxisIndex: 1,
barWidth: 15,
data: []
},
{
name: '赢单商机数',
type: 'bar',
yAxisIndex: 1,
barWidth: 15,
data: []
}
]
}) as EChartsOption }) as EChartsOption
/** 获取数据并填充图表 */ /** 获取数据并填充图表 */
...@@ -218,27 +246,28 @@ const fetchAndFill = async () => { ...@@ -218,27 +246,28 @@ const fetchAndFill = async () => {
props.queryParams props.queryParams
) )
// 2.1 更新 Echarts 数据 // 2.1 更新 Echarts 数据
if (echartsOption.xAxis && echartsOption.xAxis['data']) { if (echartsOption.xAxis && echartsOption.xAxis[0] && echartsOption.xAxis[0]['data']) {
echartsOption.xAxis['data'] = businessSummaryByDate.map( echartsOption.xAxis[0]['data'] = businessSummaryByDate.map(
(s: CrmStatisticsBusinessInversionRateSummaryByDateRespVO) => s.time (s: CrmStatisticsBusinessInversionRateSummaryByDateRespVO) => s.time
) )
} }
if (echartsOption.series && echartsOption.series[0] && echartsOption.series[0]['data']) { if (echartsOption.series && echartsOption.series[0] && echartsOption.series[0]['data']) {
echartsOption.series[0]['data'] = businessSummaryByDate.map( echartsOption.series[0]['data'] = businessSummaryByDate.map(
(s: CrmStatisticsBusinessInversionRateSummaryByDateRespVO) => s.businessCount (s: CrmStatisticsBusinessInversionRateSummaryByDateRespVO) =>
erpCalculatePercentage(s.businessWinCount, s.businessCount)
) )
} }
if (echartsOption.series && echartsOption.series[1] && echartsOption.series[1]['data']) { if (echartsOption.series && echartsOption.series[1] && echartsOption.series[1]['data']) {
echartsOption.series[1]['data'] = businessSummaryByDate.map( echartsOption.series[1]['data'] = businessSummaryByDate.map(
(s: CrmStatisticsBusinessInversionRateSummaryByDateRespVO) => s.businessWinCount (s: CrmStatisticsBusinessInversionRateSummaryByDateRespVO) => s.businessCount
) )
} }
if (echartsOption.series && echartsOption.series[2] && echartsOption.series[2]['data']) { if (echartsOption.series && echartsOption.series[2] && echartsOption.series[2]['data']) {
echartsOption.series[2]['data'] = businessSummaryByDate.map( echartsOption.series[2]['data'] = businessSummaryByDate.map(
(s: CrmStatisticsBusinessInversionRateSummaryByDateRespVO) => (s: CrmStatisticsBusinessInversionRateSummaryByDateRespVO) => s.businessWinCount
erpCalculatePercentage(s.businessWinCount, s.businessCount)
) )
} }
// 2.2 更新列表数据 // 2.2 更新列表数据
await getList() await getList()
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment