echarts封装组件,修改筛选条件重新渲染图标

以一个曲线图为例
曲线图例
父组件

<template>
  <AreaChart
	chartId="areaChart1"
    :echartData="weekCount"
    ref="areaChart1"
    :defaultProps="weekDefProps"
  ></AreaChart>
</template>

import AreaChart from "./components/areaChart.vue";

export default {
  name: "operationAnalysis",
  components: {   AreaChart },
  data() {
    return {
      // 图表的数据存放
      countList: {
        title: "近一年企业用户总数走势",
        echartData: [],
      },
      //图表自定义的属性值
      countDefProps: {
        name: "months",
        value: "num",
      }
    };
  },
  mounted() {
  //监听屏幕放大缩小确保图标自适应
    window.addEventListener("resize", () => { 
      this.$refs.areaChart1.myChart.resize();  
    });
    this.getData(); 
  },
  methods: {
  //获取后台的数据
    async getData() {
      const res = await companyData({ deptId: this.commandId });
      if (res.code !== 200) return this.msgError(res.msg); 
      const {   countList  } = res.data;
      this.countList.echartData = countList; //第一张面积 
      //countList: [{months: "2021-11", num: 1}, {months: "2021-12", num: 4}]
    }, 
  },
};
</script>

子组件

<template>
  <div class="chart-container">
    <div :id="chartId" style="width: 100%; height: 359px"></div>
  </div>
</template>

<script>
export default {
  components: {},
  props: {
    chartId: { type: String, required: true },
    echartData: { type: Object, required: true, default: () => {} },
    defaultProps: {
      type: Object,
      default: () => {
        return { name: "name", value: "value" };
      },
    },
  },
  data() {
    return { myChart: null };
  },
  mounted() {
    // 基于准备好的dom,初始化echarts实例
    // 只初始化一次chart,数据改变后,watch会监听数据变化从而重新渲染,mychart还是第一次渲染的图表
    this.myChart = this.$echarts.init(document.getElementById(this.chartId));
  },
  
  //  🚩🚩🚩🚩🚩动态渲染echarts的关键
  watch: {
    //使用watch来监听数据的变化当数据更新时复制给相应的变量
    echartData: {
      handler(newVal, oldVal) {
        if (newVal.echartData.length > 0) {
          this.setOption();
        }
      },
      deep: true,
      immediate: true,
    },
  },
  

methods: {
    setOption() {
      let bgColor = "#fff";
      let color = ["#2368FD", "#36CE9E"];
      let xAxisData = this.echartData.echartData.map(
        (v) => v[this.defaultProps.name]
      );
      let yAxisData = this.echartData.echartData.map(
        (v) => v[this.defaultProps.value]
      );
      const hexToRgba = (hex, opacity) => {
        let rgbaColor = "";
        let reg = /^#[\da-f]{6}$/i;
        if (reg.test(hex)) {
          rgbaColor = `rgba(${parseInt("0x" + hex.slice(1, 3))},${parseInt(
            "0x" + hex.slice(3, 5)
          )},${parseInt("0x" + hex.slice(5, 7))},${opacity})`;
        }
        return rgbaColor;
      };
      let option = {
        backgroundColor: bgColor,
        color: color,
        title: {
          text: this.echartData.title,
          textStyle: {
            fontWeight: "normal",
          },
        }, 
        tooltip: {
          trigger: "axis",
          formatter: function (params) {
            let html = "";
            params.forEach((v) => {
              // console.log(v);
              html += `<div style="color: #666;font-size: 14px;line-height: 24px">
                ${v.name}
                <br>
                <span style="display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-color:${
                  color[v.componentIndex]
                };"></span>
                <span style="font-size: 16px">${v.value}</span>
                元`;
            });
            return html;
          },
          extraCssText:
            "background: #fff; border-radius: 0;box-shadow: 0 0 3px rgba(0, 0, 0, 0.2);color: #333;",
          axisPointer: {
            type: "line", 
          },
        },
        grid: {
          top: 100,
          left: 30,
          containLabel: true,
        },
        xAxis: [
          {
            type: "category",
            boundaryGap: false,
            axisLabel: {
              formatter: "{value}月",
              textStyle: {
                color: "#333",
              },
            },
            axisLine: {
              lineStyle: {
                color: "#D9D9D9",
              },
            },
            axisTick: {
              show: false,
            },
            data: xAxisData,
          },
        ],
        yAxis: [
          {
            type: "value",
            // name: "单位:万千瓦时",
            axisLabel: {
              textStyle: {
                color: "#666",
              },
            },
            nameTextStyle: {
              color: "#666",
              fontSize: 12,
              lineHeight: 40,
            },
            splitLine: {
              show: false,
            },
            axisLine: {
              lineStyle: {
                color: "#D9D9D9",
              },
            },
            axisTick: {
              show: false,
            },
          },
        ],
        series: [
          {
            name: "2018",
            type: "line",
            smooth: true,
            // showSymbol: false,/
            symbolSize: 0,
            zlevel: 3,
            lineStyle: {
              option: {
                color: color[0],
                shadowBlur: 3,
                shadowColor: hexToRgba(color[0], 0.5),
                shadowOffsetY: 8,
              },
            },
            areaStyle: {
              normal: {
                color: new this.$echarts.graphic.LinearGradient(
                  0,
                  0,
                  0,
                  1,
                  [
                    {
                      offset: 0,
                      color: hexToRgba(color[0], 1),
                    },
                    {
                      offset: 0.9,
                      color: hexToRgba("#ffffff", 0.5),
                    },
                    {
                      offset: 1,
                      color: "#fff",
                    },
                  ],
                  false
                ),
                shadowColor: hexToRgba(color[0], 0.1),
                shadowBlur: 10,
              },
            },
            data: yAxisData,
          },
        ],
      };
      // 使用刚指定的配置项和数据显示图表。
      this.myChart.setOption(option);
    },
  },
};
</script> 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: echarts bi 模板是一种基于Echarts的商业智能数据可视化模板。它为企业提供了一种直观、美观和高效的方式来展示和分析数据。 echarts bi 模板具有以下特点和优势: 1. 多种图表类型:模板内置了丰富的图表类型,包括折线图、柱状图、饼图、散点图等,可以根据数据的特点选择合适的图表类型,展示数据的关系和趋势。 2. 可定制性:模板提供了丰富的配置选项,可以根据需求自定义图表的样式、颜色、字体等,使图表更符合企业的品牌和风格。 3. 数据联动:模板支持多个图表之间的联动,可以通过点击或选取一个图表中的数据,实时更新其他相关的图表,帮助用户更全面地分析数据。 4. 数据过滤筛选:模板支持数据的过滤筛选,可以根据需要设置图表中显示的数据范围,帮助用户更精确地分析和展示数据。 5. 实时更新:模板可以与实时数据源连接,实现数据的自动更新和展示,保持数据的实时性和准确性。 通过使用echarts bi 模板,企业可以更直观和高效地了解和分析数据,帮助决策者做出科学的决策。同时,模板的灵活性和可定制性也能满足企业对于数据可视化的个性化需求。 ### 回答2: Echarts BI模板是一种基于ECharts数据可视化技术的商业智能模板。ECharts是一款开源的可视化图表库,提供了丰富的图表类型和强大的数据处理能力,可以帮助用户快速构建直观、美观的可视化图表,用于数据分析和决策支持。 Echarts BI模板通过预先设计好的图表模板和定义好的数据源,实现了数据的可视化和分析功能。用户只需要根据自己的数据和分析需求,将数据导入到模板中,就可以轻松生成各类图表,如折线图、柱状图、饼图等。 Echarts BI模板的主要特点有以下几个方面: 1. 高度可定制化:Echarts BI模板提供了丰富多样的图表样式和配置选项,用户可以根据自己的需求进行灵活的定制和调整。可以调整图表的颜色、样式、布局等,以及添加自定义的数据标签和提示信息,使图表更符合用户的审美和展示要求。 2. 强大的数据处理能力:Echarts BI模板内置了多种数据处理功能,可以对数据进行汇总、过滤、排序等操作,从而帮助用户更好地理解和分析数据。用户可以通过设置筛选条件、计算字段等来提取所需的数据,在图表中呈现出来。 3. 多维度分析:Echarts BI模板支持多维度的数据分析,可以对数据进行多维度的交叉分析和比较。用户可以在图表中设置不同的维度字段,以不同的方式组织和展示数据,从而找出数据中的规律和关联性。 4. 实时更新与共享:Echarts BI模板可以实现实时更新数据和共享分析结果的功能。用户可以将模板中的数据源与数据库或数据接口进行连接,实现实时数据的更新和展示。同时,用户还可以将分析结果以图表的形式导出,并分享给其他人进行查看和使用。 总之,Echarts BI模板是一种功能强大、灵活可定制的商业智能工具,可以帮助用户快速构建数据可视化图表,并进行数据分析和决策支持。通过利用Echarts BI模板,用户可以更加直观地了解和分析数据,从而做出更准确、科学的决策。 ### 回答3: ECharts是一个非常强大的数据可视化库。而ECharts BI模板则是基于ECharts的商业智能模板解决方案。 ECharts BI模板提供了一系列预定义的可视化模板和组件,能够快速构建各种商业智能报表和分析仪表盘。通过使用ECharts BI模板,用户可以方便地将数据转化为图表、表格、地图等可视化组件,以便更好地理解和分析数据。 ECharts BI模板具有以下特点: 1. 多种可视化模板:ECharts BI模板预置了多种常见的商业报表和仪表盘模板,如销售分析、资金监测、营销报告等。用户可以根据自己的需求选择并快速应用这些模板,不需从零开始设计报表。 2. 定制化设计ECharts BI模板提供了丰富的图表样式和配置选项,用户可以根据自己的需求进行自定义设计,例如调整图表的颜色、字体、标签显示等。 3. 数据联动:ECharts BI模板支持多个组件之间的数据联动,用户可以通过点击某个组件(如图表中的某个点)来联动其他组件,实现数据的互动呈现和深度分析。 4. 实时数据更新:ECharts BI模板支持实时数据更新,并能够灵活处理数据源的变化。用户可以设置数据的刷新频率,以保持数据的实时性。 总之,ECharts BI模板提供了一个高效、灵活和美观的方式来展示和分析数据。无论是个人用户还是企业用户,都可以从中受益并提升数据分析的效率和准确性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值