Echarts折线图两条折线叠加--与后端接口对接

实现效果:

点击对比前:显示一条折线信息,折线信息为后端传递值

点击对比后:显示两条折线信息,折线信息为后端传递值

实现步骤:

1.setCharts.js中:将两个折线数据分别写

let seriesOne = {
    name: "",
    type: "line",
    stack: "Total",
    symbol: "none", //拐点样式
    areaStyle: {
        normal: {
            //颜色渐变函数 前四个参数分别表示四个位置依次为左、下、右、上
            color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
                    offset: 0,
                    color: "rgba(80,141,255,0.39)"
                },
                {
                    offset: 0.34,
                    color: "rgba(56,155,255,0.25)"
                },
                {
                    offset: 1,
                    color: "rgba(38,197,254,0.00)"
                }
            ])
        }
    },
    lineStyle: {
        color: "#5086eb"
    },
    emphasis: {
        focus: "series"
    },
    data: []
};
let seriesTwo = {
    name: "",
    type: "line",
    stack: "Total",
    symbol: "none", //拐点样式
    areaStyle: {
        normal: {
            //颜色渐变函数 前四个参数分别表示四个位置依次为左、下、右、上
            color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
                    offset: 0,
                    color: "rgba(98, 145, 237,0.39)"
                },
                {
                    offset: 0.34,
                    color: "rgba(56,155,255,0.25)"
                },
                {
                    offset: 1,
                    color: "rgba(216, 228, 250,0.00)"
                }
            ])
        }
    },
    lineStyle: {
        color: "#67bbff"
    },
    emphasis: {
        focus: "series"
    },
    data: []
};
//历史访问量折线图
function inithistoryChart(name, xAxis, seriesone, xAxisTwo, seriestwo) {
    if (!document.getElementById("historyChart")) return;
    //历史访问量折线图数据

    seriesOne.name = name;
    seriesOne.data = seriesone;
    let seriess = [seriesOne];
    let xaixs = [{
        type: "category",
        boundaryGap: true,
        data: xAxis
    }];

    if (seriestwo && xAxisTwo) {
        seriesTwo.name = name;
        seriesTwo.data = seriestwo;
        seriess.push(seriesTwo);
        xaixs.push({
            type: "category",
            boundaryGap: true,
            data: xAxisTwo
        });
    }

    let historyChartOption = {
        grid: {
            top: "30px",
            left: "10px",
            containLabel: true
        },
        xAxis: xaixs,
        yAxis: [{
            type: "value",
            axisLine: { show: false },
            axisTick: { show: false }
        }],
        series: seriess
    };

    let historyChart = echarts.init(document.getElementById("historyChart"));
    historyChart.setOption(historyChartOption, true);
}
export {
    inithistoryChart
};

2.vue文件中:

tempalte中:

<div class="content-top-right">
            <LittleTitle name="历史访问量" />
            <div class="history-top">
              <el-radio-group
                v-model="historyDataType"
                class="history-top-type"
              >
                <el-radio-button label="1">今天</el-radio-button>
                <el-radio-button label="7">七天</el-radio-button>
                <el-radio-button label="30">30天</el-radio-button>
                <el-radio-button label="0">自定义</el-radio-button>
              </el-radio-group>
              <div class="date-select">
                <el-date-picker
                  v-model="dateValueOne"
                  type="daterange"
                  align="right"
                  unlink-panels
                  range-separator="~"
                  start-placeholder="开始日期"
                  end-placeholder="结束日期"
                  :disabled="dateIsAbled"
                  @change="changeDate"
                >
                </el-date-picker>
              </div>
              <el-checkbox v-model="contrast" @change="changeCheckbox"
                >对比</el-checkbox
              >
              <div class="date-select">
                <el-date-picker
                  v-model="dateValueTwo"
                  type="daterange"
                  align="right"
                  unlink-panels
                  v-if="contrast"
                  range-separator="~"
                  start-placeholder="开始日期"
                  end-placeholder="结束日期"
                  @change="queryPlatformStatisticsCom"
                >
                </el-date-picker>
              </div>
            </div>
            <div class="history-bottom">
              <div class="history-left" v-if="!contrast">
                <div class="history-left-box">
                  <div class="history-box-title">历史访问</div>
                  <div class="history-box-time">
                    {{ formatDate(dateValueOne[0]) }}-{{
                      formatDate(dateValueOne[1])
                    }}
                  </div>
                  <div class="box-style">
                    <div class="box-style-one"></div>
                    <div class="box-style-two"></div>
                  </div>
                  <div class="history-box-data">
                    {{ historyVisitData.data.visitNumb }}
                  </div>
                </div>
              </div>
              <div class="history-left" v-if="contrast">
                <div class="history-left-one">
                  <div class="box-title">历史访问</div>
                  <div class="box-time">
                    {{ formatDate(dateValueOne[0]) }}-{{
                      formatDate(dateValueOne[1])
                    }}
                  </div>
                  <div class="box-style">
                    <div class="box-style-one"></div>
                    <div class="box-style-two"></div>
                  </div>
                  <div class="box-data">
                    {{ historyVisitData.data.visitNumb }}
                  </div>
                </div>
                <div class="history-left-one">
                  <div class="box-title">历史访问</div>
                  <div class="box-time" v-if="showDateTwo">
                    {{ formatDate(dateValueTwo[0]) }}-{{
                      formatDate(dateValueTwo[1])
                    }}
                  </div>
                  <div class="box-style">
                    <div class="box-style-one"></div>
                    <div class="box-style-two"></div>
                  </div>
                  <div class="box-data">
                    {{ historyVisitData.data.visitNumbCom }}
                  </div>
                </div>
              </div>
              <div class="history-chart" id="historyChart"></div>
            </div>
          </div>

import引入

import {
  initsurveyChart,
  initserverChart,
  initrealtimeChart,
  inithistoryChart
} from "./setChart";
import {
  getAllDataStatistics,
  queryAllServiceAndCount,
  queryPlatformStatistics,
  queryPlatform,
  getDataTotalVolumeAndNumber
} from "../../api/flowstatisticsApi";

data中return

      dateValueOne: ["", ""],
      contrast: false,
      dateValueTwo: ["", ""],
      historyVisitData: {
        data: { visitNumb: 0, visitNumbCom: 0 },
        xAxisData: [],
        seriesData: [],
        xAxisDataCom: [],
        seriesDataCom: []
      },

监听:

watch: {
    historyDataType: {
      handler: function(newV) {
        this.setDate(newV);
      },
      immediate: true//立即执行
    },
  },

方法:

// 设置日期 今天、7天、30天和自定义的切换
    setDate(type) {
      this.contrast = false;
      if (type == 1) {
        this.dateIsAbled = true;
        this.dateValueOne = [new Date(), new Date()];
      } else if (type == 7) {
        this.dateIsAbled = true;
        let date = new Date();
        this.dateValueOne = [
          new Date(date.getTime() - 24 * 60 * 60 * 1000 * 6),
          new Date()
        ];
      } else if (type == 30) {
        this.dateIsAbled = true;
        let date = new Date();
        this.dateValueOne = [
          new Date(date.getTime() - 24 * 60 * 60 * 1000 * 29),
          new Date()
        ];
      } else if (type == 0) {
        this.dateIsAbled = false;
      }
      if (type != 0) {
        this.getHistoryData(this.formatDate(this.dateValueOne[1]), type);
      }
    },
 //日期对比切换
    changeCheckbox() {
      if (!this.contrast) {
        this.showDateTwo = false;
        this.dateValueTwo = ["", ""];
        let days = this.getDaysBetween(
          this.dateValueOne[0],
          this.dateValueOne[1]
        );
        this.getHistoryData(this.formatDate(this.dateValueOne[1]), days);
        this.historyVisitData.data.visitNumbCom = 0;
      }
    },
//自定义日期
    changeDate() {
      if (this.contrast) {
        //对比
        this.queryPlatformStatisticsCom();
      } else {
        //非对比
        let days = this.getDaysBetween(
          this.dateValueOne[0],
          this.dateValueOne[1]
        );
        this.getHistoryData(this.formatDate(this.dateValueOne[1]), days);
      }
    },
    // 对比接口请求前判断天数是否相同
    queryPlatformStatisticsCom() {
      let scoped = this.getDaysBetween(
        this.dateValueOne[0],
        this.dateValueOne[1]
      );
      let scoped1 = this.getDaysBetween(
        this.dateValueTwo[0],
        this.dateValueTwo[1]
      );
      if (scoped != scoped1) {
        this.$message({
          message: "对比日期天数不匹配,请重新选择",
          type: "warning"
        });
        return false;
      }
      this.getHistoryContrastData(
        this.formatDate(this.dateValueTwo[1]),
        scoped1
      );
    },
    //计算两个日期之前相差几天
    getDaysBetween(startDay, endDay) {
      let startDate = Date.parse(startDay);
      let endDate = Date.parse(endDay);
      if (startDate == endDate) {
        return 1;
      }
      let days = (endDate - startDate) / (1 * 24 * 60 * 60 * 1000);
      return days + 1;
    },
//获取平台历史访问量数据
    getHistoryData(nowDate, scope) {
      this.historyVisitData.data.visitNumb = 0;
      this.historyVisitData.xAxisData = [];
      this.historyVisitData.seriesData = [];
      queryPlatformStatistics(nowDate, scope).then(res => {
        this.historyVisitData.data.visitNumb = res.data.visitNumb;
        res.historyData.forEach(item => {
          this.historyVisitData.xAxisData.push(item.time.endTime);
          this.historyVisitData.seriesData.push(item.visitNumb);
        });
        inithistoryChart(
          "历史访问量",
          this.historyVisitData.xAxisData,
          this.historyVisitData.seriesData,
          false,
          false
        );
      });
    },
    //获取平台历史对比访问量数据
    getHistoryContrastData(nowDate, scope) {
      this.historyVisitData.data.visitNumbCom = 0;
      this.historyVisitData.xAxisDataCom = [];
      this.historyVisitData.seriesDataCom = [];
      queryPlatformStatistics(nowDate, scope).then(res => {
        this.showDateTwo = true;
        this.historyVisitData.data.visitNumbCom = res.data.visitNumb;
        res.historyData.forEach(item => {
          this.historyVisitData.xAxisDataCom.push(item.time.endTime);
          this.historyVisitData.seriesDataCom.push(item.visitNumb);
        });

        inithistoryChart(
          "历史访问量",
          this.historyVisitData.xAxisData,
          this.historyVisitData.seriesData,
          this.historyVisitData.xAxisDataCom,
          this.historyVisitData.seriesDataCom
        );
      });
    },
 //格式化时间
    formatDate(nowDate) {
      var date = new Date(nowDate);
      var year = date.getFullYear();
      var month = date.getMonth() + 1;
      var day = date.getDate();
      if (month <= 9) {
        month = "0" + month;
      }
      if (day <= 9) {
        day = "0" + day;
      }
      return year + "-" + month + "-" + day;
    }

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值