291 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Vue
		
	
	
	
			
		
		
	
	
			291 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Vue
		
	
	
	
 | 
						||
<template>
 | 
						||
    <div class="width-auto">
 | 
						||
        <view class="titleF">
 | 
						||
            <view class="title">
 | 
						||
              {{'活跃会员对比'}}
 | 
						||
            </view>
 | 
						||
            <picker :range="dateTypeList" :value="index" range-key="label" @change="bindPickerChange">
 | 
						||
                <view class="mClass">
 | 
						||
                    <view>{{dataName}}</view>
 | 
						||
                    <u-icon name="arrow-down" color="#999"></u-icon>
 | 
						||
                </view>
 | 
						||
            </picker>
 | 
						||
        </view>
 | 
						||
        <div class="flex-s">
 | 
						||
            <div id="mounthData2" 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 {
 | 
						||
          dataName:'',
 | 
						||
            index: 0,
 | 
						||
            myChartStyle: {
 | 
						||
                float: "center",
 | 
						||
                width: "690rpx",
 | 
						||
                height: "750rpx",
 | 
						||
                paddingTop: "0",
 | 
						||
            },
 | 
						||
            dateTypeList: [],
 | 
						||
            dateType: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.getDayType()
 | 
						||
        this.upDateCover()
 | 
						||
        // this.drawChart()
 | 
						||
    },
 | 
						||
    methods: {
 | 
						||
        bindPickerChange(e) {
 | 
						||
            this.dateType = e.detail.value +1
 | 
						||
            this.dateTypeList.forEach(item=>{
 | 
						||
              if(this.dateType == item.value){
 | 
						||
                this.dataName = item.label
 | 
						||
              }
 | 
						||
            })
 | 
						||
            setTimeout(() => {
 | 
						||
                this.upDateCover()
 | 
						||
            }, 50)
 | 
						||
        },
 | 
						||
        getDayType() {
 | 
						||
      api.getDayType().then((res) => {
 | 
						||
        this.dateTypeList = res.data
 | 
						||
        this.dataName = res.data[0].label
 | 
						||
      })
 | 
						||
    },
 | 
						||
        upDateCover() {
 | 
						||
          api
 | 
						||
        .getActiveMember({
 | 
						||
          dateType: this.dateType,
 | 
						||
        })
 | 
						||
        .then((res) => {
 | 
						||
          let arr1 = res.data.map((item) => {
 | 
						||
            return item.creationTime;
 | 
						||
          });
 | 
						||
          let arr2 = res.data.map((item) => {
 | 
						||
            return item.leftCoun;
 | 
						||
          });
 | 
						||
          let arr3 = res.data.map((item) => {
 | 
						||
            return item.rightCount;
 | 
						||
          });
 | 
						||
          this.drawChart(arr1, arr2, arr3);
 | 
						||
        });
 | 
						||
        },
 | 
						||
        drawChart(arr1, arr2, arr3) {
 | 
						||
      // 基于准备好的dom,初始化echarts实例  这个和上面的main对应
 | 
						||
      var myChart = echarts.init(document.getElementById("mounthData2"));
 | 
						||
      // 指定图表的配置项和数据
 | 
						||
      let option = {
 | 
						||
        title: {
 | 
						||
          text: "",
 | 
						||
          subtext: '人数',
 | 
						||
        },
 | 
						||
        tooltip: {},
 | 
						||
        legend: {
 | 
						||
          top: "bottom",
 | 
						||
          bottom: '5%',
 | 
						||
          data: ['左区', '右区'],
 | 
						||
        },
 | 
						||
        xAxis: {
 | 
						||
          data: arr1,
 | 
						||
          axisTick: {
 | 
						||
            show: false,
 | 
						||
          },
 | 
						||
          axisLabel: {
 | 
						||
            interval: 0,
 | 
						||
            // rotate: 45,
 | 
						||
            textStyle: {
 | 
						||
              color: "#000",
 | 
						||
              fontSize: "10",
 | 
						||
              itemSize: "",
 | 
						||
            },
 | 
						||
          },
 | 
						||
        },
 | 
						||
        yAxis: {
 | 
						||
          splitLine: {
 | 
						||
            show: true,
 | 
						||
            lineStyle: {
 | 
						||
              type: "dashed",
 | 
						||
            },
 | 
						||
          },
 | 
						||
        },
 | 
						||
        series: [
 | 
						||
          {
 | 
						||
            name: '左区',
 | 
						||
            type: "bar",
 | 
						||
            data: arr2,
 | 
						||
            itemStyle: {
 | 
						||
              normal: {
 | 
						||
                barBorderRadius: [4, 4, 0, 0],
 | 
						||
                color: "#34b934",
 | 
						||
              },
 | 
						||
            },
 | 
						||
            barWidth: "18px",
 | 
						||
          },
 | 
						||
          {
 | 
						||
            name: '右区',
 | 
						||
            type: "bar",
 | 
						||
            data: arr3,
 | 
						||
            itemStyle: {
 | 
						||
              normal: {
 | 
						||
                barBorderRadius: [4, 4, 0, 0],
 | 
						||
                color: "#FFAE36",
 | 
						||
              },
 | 
						||
            },
 | 
						||
            barWidth: "18px",
 | 
						||
          },
 | 
						||
        ],
 | 
						||
      };
 | 
						||
      // 使用刚指定的配置项和数据显示图表。
 | 
						||
      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> |