283 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			Vue
		
	
	
	
			
		
		
	
	
			283 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			Vue
		
	
	
	
 | 
						||
<template>
 | 
						||
    <div class="width-auto">
 | 
						||
        <view class="titleF">
 | 
						||
            <view class="title">
 | 
						||
              {{'月度新增业绩对比'}}
 | 
						||
            </view>
 | 
						||
            <picker :range="selMounthList" :value="index" range-key="label" @change="bindPickerChange">
 | 
						||
                <view class="mClass">
 | 
						||
                    <view>{{whatMounth}}月</view>
 | 
						||
                    <u-icon name="arrow-down" color="#999"></u-icon>
 | 
						||
                </view>
 | 
						||
    
 | 
						||
            </picker>
 | 
						||
    
 | 
						||
        </view>
 | 
						||
        <div class="flex-s">
 | 
						||
            <div id="mounthData" style="width: 700rpx;height: 600rpx;" :style="myChartStyle"></div>
 | 
						||
        </div>
 | 
						||
    </div>
 | 
						||
</template>
 | 
						||
 | 
						||
<script>
 | 
						||
import * as echarts from "echarts";
 | 
						||
 | 
						||
import * as api from '@/config/activity.js'
 | 
						||
export default {
 | 
						||
    data() {
 | 
						||
        return {
 | 
						||
            index: 0,
 | 
						||
            myChartStyle: {
 | 
						||
                float: "center",
 | 
						||
                width: "690rpx",
 | 
						||
                height: "750rpx",
 | 
						||
                paddingTop: "0",
 | 
						||
            },
 | 
						||
            selMounthList: [{
 | 
						||
                value: 1,
 | 
						||
                label: '1月',
 | 
						||
            }, ],
 | 
						||
 | 
						||
            whatMounth: '',
 | 
						||
            mounthList: [{
 | 
						||
                    value: 1,
 | 
						||
                    label: '1月',
 | 
						||
                },
 | 
						||
                {
 | 
						||
                    value: 2,
 | 
						||
                    label: '2月',
 | 
						||
                },
 | 
						||
                {
 | 
						||
                    value: 3,
 | 
						||
                    label: '3月',
 | 
						||
                },
 | 
						||
                {
 | 
						||
                    value: 4,
 | 
						||
                    label: '4月',
 | 
						||
                },
 | 
						||
                {
 | 
						||
                    value: 5,
 | 
						||
                    label: '5月',
 | 
						||
                },
 | 
						||
                {
 | 
						||
                    value: 6,
 | 
						||
                    label: '6月',
 | 
						||
                },
 | 
						||
                {
 | 
						||
                    value: 7,
 | 
						||
                    label: '7月',
 | 
						||
                },
 | 
						||
                {
 | 
						||
                    value: 8,
 | 
						||
                    label: '8月',
 | 
						||
                },
 | 
						||
                {
 | 
						||
                    value: 9,
 | 
						||
                    label: '9月',
 | 
						||
                },
 | 
						||
                {
 | 
						||
                    value: 10,
 | 
						||
                    label: '10月',
 | 
						||
                },
 | 
						||
                {
 | 
						||
                    value: 11,
 | 
						||
                    label: '11月',
 | 
						||
                },
 | 
						||
                {
 | 
						||
                    value: 12,
 | 
						||
                    label: '12月',
 | 
						||
                },
 | 
						||
            ],
 | 
						||
            // margin: "20px",
 | 
						||
            //
 | 
						||
        }
 | 
						||
    },
 | 
						||
    mounted() {
 | 
						||
        this.getMounth()
 | 
						||
        this.upDateCover()
 | 
						||
        // this.drawChart()
 | 
						||
    },
 | 
						||
    methods: {
 | 
						||
        bindPickerChange(e) {
 | 
						||
            this.whatMounth = e.detail.value + 1
 | 
						||
            setTimeout(() => {
 | 
						||
                this.upDateCover()
 | 
						||
            }, 50)
 | 
						||
        },
 | 
						||
        // 获取当前月
 | 
						||
        getMounth() {
 | 
						||
            this.whatMounth = new Date().getMonth() + 1
 | 
						||
            let selMounth = []
 | 
						||
            this.mounthList.forEach((item) => {
 | 
						||
                if (item.value <= this.whatMounth) {
 | 
						||
                    selMounth.push(item)
 | 
						||
                }
 | 
						||
            })
 | 
						||
            this.selMounthList = selMounth
 | 
						||
        },
 | 
						||
        upDateCover() {
 | 
						||
            api
 | 
						||
                .achieveContrast({
 | 
						||
                    monthType: this.whatMounth || this.time
 | 
						||
                })
 | 
						||
                .then((res) => {
 | 
						||
                    let arr1 = res.data.map((item) => {
 | 
						||
                        return item.date
 | 
						||
                    })
 | 
						||
                    let arr2 = res.data.map((item) => {
 | 
						||
                        return item.aNewPv
 | 
						||
                    })
 | 
						||
                    let arr3 = res.data.map((item) => {
 | 
						||
                        return item.bNewPv
 | 
						||
                    })
 | 
						||
                    this.drawChart(arr1, arr2, arr3)
 | 
						||
                })
 | 
						||
        },
 | 
						||
        drawChart(arr1, arr2, arr3) {
 | 
						||
            // 基于准备好的dom,初始化echarts实例  这个和上面的main对应
 | 
						||
            var myChart = echarts.init(document.getElementById("mounthData"));
 | 
						||
            // 指定图表的配置项和数据
 | 
						||
            let option = {
 | 
						||
                title: {
 | 
						||
                    text: '',
 | 
						||
                    subtext: '业绩(万)',
 | 
						||
                },
 | 
						||
                tooltip: {},
 | 
						||
                legend: {
 | 
						||
                    top: 'bottom',
 | 
						||
                    bottom: '5%',
 | 
						||
                    data: ['左区', '右区'],
 | 
						||
                },
 | 
						||
                xAxis: {
 | 
						||
                    data: arr1,
 | 
						||
                    axisTick: {
 | 
						||
                        show: false,
 | 
						||
                    },
 | 
						||
                },
 | 
						||
                yAxis: {
 | 
						||
                    splitLine: {
 | 
						||
                        show: true,
 | 
						||
                        lineStyle: {
 | 
						||
                            type: 'dashed',
 | 
						||
                        },
 | 
						||
                    },
 | 
						||
                },
 | 
						||
                series: [{
 | 
						||
                        name: '左区',
 | 
						||
                        type: 'bar',
 | 
						||
                        data: arr2,
 | 
						||
                        itemStyle: {
 | 
						||
                            normal: {
 | 
						||
                                barBorderRadius: [10, 10, 0, 0],
 | 
						||
                                color: '#FE4C4B',
 | 
						||
                            },
 | 
						||
                        },
 | 
						||
                    },
 | 
						||
                    {
 | 
						||
                        name: '右区',
 | 
						||
                        type: 'bar',
 | 
						||
                        data: arr3,
 | 
						||
                        itemStyle: {
 | 
						||
                            normal: {
 | 
						||
                                barBorderRadius: [10, 10, 0, 0],
 | 
						||
                                color: '#FFAE36',
 | 
						||
                            },
 | 
						||
                        },
 | 
						||
                    },
 | 
						||
                ],
 | 
						||
            }
 | 
						||
            // 使用刚指定的配置项和数据显示图表。
 | 
						||
            myChart.setOption(option)
 | 
						||
        },
 | 
						||
    },
 | 
						||
}
 | 
						||
</script>
 | 
						||
 | 
						||
<style scoped lang="scss">
 | 
						||
.width-auto {
 | 
						||
    width: 100%;
 | 
						||
    position: relative;
 | 
						||
    height: 950rpx;
 | 
						||
    background-color: #fff;
 | 
						||
    width: 690rpx;
 | 
						||
    border-radius: 20rpx;
 | 
						||
    margin: 20rpx auto;
 | 
						||
}
 | 
						||
 | 
						||
.title {
 | 
						||
    
 | 
						||
    height: 80rpx;
 | 
						||
    line-height: 80rpx;
 | 
						||
    
 | 
						||
    margin-top: 10rpx;
 | 
						||
}
 | 
						||
 | 
						||
::v-deep .el-select .el-input .el-select__caret {
 | 
						||
    color: #333;
 | 
						||
}
 | 
						||
 | 
						||
.lines {
 | 
						||
    width: 2px;
 | 
						||
    height: 470px;
 | 
						||
    opacity: 1;
 | 
						||
    background: #979797;
 | 
						||
    position: absolute;
 | 
						||
    bottom: 50px;
 | 
						||
    left: 50%;
 | 
						||
    margin-left: -110px;
 | 
						||
}
 | 
						||
 | 
						||
.right-lines {
 | 
						||
    position: absolute;
 | 
						||
    right: 80px;
 | 
						||
    top: 140px;
 | 
						||
    color: #999;
 | 
						||
    font-size: 12px;
 | 
						||
}
 | 
						||
 | 
						||
.item-s {
 | 
						||
    padding-bottom: 10px;
 | 
						||
    display: flex;
 | 
						||
    line-height: 24px;
 | 
						||
}
 | 
						||
 | 
						||
.bg-color {
 | 
						||
    width: 40px;
 | 
						||
    height: 22px;
 | 
						||
    border-radius: 2px;
 | 
						||
    margin-left: 5px;
 | 
						||
}
 | 
						||
 | 
						||
.flex-s {
 | 
						||
    // display: flex;
 | 
						||
    // justify-content: center;
 | 
						||
    // align-items: center;
 | 
						||
    // width: 700px;
 | 
						||
    padding: 0 20rpx;
 | 
						||
}
 | 
						||
 | 
						||
.styles {
 | 
						||
    position: absolute;
 | 
						||
    right: -30px;
 | 
						||
    z-index: 111;
 | 
						||
    top: 60px;
 | 
						||
    /*background: rgba(0,0,0,0.05);*/
 | 
						||
    /*border-radius: 4px 4px 4px 4px;*/
 | 
						||
}
 | 
						||
 | 
						||
::v-deep .el-select .el-input__inner {
 | 
						||
    border: none;
 | 
						||
    background: rgba(0, 0, 0, 0.05);
 | 
						||
}
 | 
						||
.titleF{
 | 
						||
  display: flex;
 | 
						||
  border-bottom: 10rpx solid #f3f3f3;
 | 
						||
  align-items: center;
 | 
						||
  justify-content: space-between;
 | 
						||
  padding: 20rpx 30rpx;
 | 
						||
}
 | 
						||
.mClass {
 | 
						||
    display: flex;
 | 
						||
}
 | 
						||
</style> |