|
@@ -1,9 +1,12 @@
|
|
|
// 各模块文件存储占比
|
|
|
<template>
|
|
|
<div class="container normal-panel">
|
|
|
- <div >
|
|
|
+ <div>
|
|
|
<p class="title">销售漏斗图</p>
|
|
|
- <div id="containerFunnel"></div>
|
|
|
+ <div class="re-panel">
|
|
|
+ <div id="containerFunnel"></div>
|
|
|
+ </div>
|
|
|
+
|
|
|
</div>
|
|
|
<div>
|
|
|
<p class="title">表格数据</p>
|
|
@@ -40,7 +43,8 @@
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
-import { Funnel } from '@antv/g2plot';
|
|
|
+import { Funnel,G2 } from '@antv/g2plot';
|
|
|
+const G = G2.getEngine('canvas');
|
|
|
export default {
|
|
|
data () {
|
|
|
return {
|
|
@@ -51,16 +55,54 @@ export default {
|
|
|
},
|
|
|
methods:{
|
|
|
renderPie() {
|
|
|
+ const colorArray = ['#6395fa','#63daab','#657798','#f7c122','#7666fa','#75cbed'];
|
|
|
this.chartPie = new Funnel('containerFunnel', {
|
|
|
data: this.data,
|
|
|
- width:800,
|
|
|
+ maxSize:0.3,
|
|
|
xField: 'stagename',
|
|
|
yField: 'sequence1',
|
|
|
+ shape: 'pyramid',
|
|
|
dynamicHeight: false,
|
|
|
legend: false,
|
|
|
label: {
|
|
|
- formatter: (datum) => {
|
|
|
- return `${datum.stagename}:${datum.projectqty}`;
|
|
|
+ layout:"fixedOverlap",
|
|
|
+ position:'right',
|
|
|
+ offsetX:40,
|
|
|
+ content:(datum)=>{
|
|
|
+ const group = new G.Group({});
|
|
|
+ const content = ()=>{
|
|
|
+ if (this.tableData[0]) {
|
|
|
+ const text = `${datum.stagename} 当前项目数: ${datum.projectqty} 项目数: ${this.tableData[0].projectqty} 转化率: ${((datum[Funnel.CONVERSATION_FIELD][1] / datum[Funnel.CONVERSATION_FIELD][0]) * 100).toFixed(2)}% 总投资金额: ${datum.totalinvestment} 总计项目预算: ${datum.budgetary} 总预计签约金额: ${datum.signamount_due}`
|
|
|
+ const lines = text.split(' ');
|
|
|
+ return lines.join('\n');
|
|
|
+ }
|
|
|
+ };
|
|
|
+ const color = ()=>{
|
|
|
+ let clr = ''
|
|
|
+ this.tableData.some((e,index) =>{
|
|
|
+ if (e.stagename == datum.stagename) {
|
|
|
+ clr = colorArray[index]
|
|
|
+ }
|
|
|
+ })
|
|
|
+ if (clr == '') {
|
|
|
+ clr= '#666'
|
|
|
+ }
|
|
|
+ return clr
|
|
|
+ };
|
|
|
+ group.addShape({
|
|
|
+ type: 'text',
|
|
|
+ attrs: {
|
|
|
+ x: 30,
|
|
|
+ y: 0,
|
|
|
+ text: content(),
|
|
|
+ textAlign: 'left',
|
|
|
+ fontSize: 14,
|
|
|
+ textBaseline: 'top',
|
|
|
+ fill: color()
|
|
|
+ },
|
|
|
+ });
|
|
|
+ return group;
|
|
|
+
|
|
|
},
|
|
|
},
|
|
|
tooltip:{
|
|
@@ -79,16 +121,11 @@ export default {
|
|
|
return content;
|
|
|
},
|
|
|
},
|
|
|
- conversionTag: {
|
|
|
- offsetX: -40,
|
|
|
- offsetY:10,
|
|
|
- formatter: (datum) => {
|
|
|
- console.log(datum,'conversionTag')
|
|
|
- return `${datum.stagename} 项目数:${datum.projectqty} 转化率:${((datum[Funnel.CONVERSATION_FIELD][1] / datum[Funnel.CONVERSATION_FIELD][0]) * 100).toFixed(2)}%`;
|
|
|
- },
|
|
|
+ conversionTag: false,
|
|
|
+ funnelStyle: {
|
|
|
+ stroke: '#fff',
|
|
|
+ lineWidth: 3,
|
|
|
},
|
|
|
- // 关闭 conversionTag 转化率 展示
|
|
|
- // conversionTag: false,
|
|
|
});
|
|
|
this.chartPie.render();
|
|
|
this.getProportionOfFileModel()
|
|
@@ -118,10 +155,6 @@ export default {
|
|
|
<style>
|
|
|
</style>
|
|
|
<style scoped>
|
|
|
-#containerFunnel{
|
|
|
- width:1000px;
|
|
|
- margin: 0 auto;
|
|
|
-}
|
|
|
.title{
|
|
|
height: 20px;
|
|
|
line-height: 20px;
|