vue3中echarts的使用

news2024/11/29 19:31:41

效果:

 代码:

<div class="outcharbox">
                <a-row :gutter="10">
                    <a-col :span="8" v-for=" (item, index) in linesobjdata" :key="item.MonitorItemId">
                        <monitoringItemsChart :colorIndex="index" :obj="item.obj"
                            @openModal="openModal(item.MonitorItemId, item.obj)">
                            <linecharts :id="`linechart1${item.MonitorItemId}`" :dataObj="item" v-if="!item.Empty" />
                            <a-empty v-else :image="Empty.PRESENTED_IMAGE_SIMPLE" />
                        </monitoringItemsChart>
                    </a-col>
                </a-row>
            </div>

 monitoringItemsChart组件:

<template>
    <div class="item-outbox">
        <div class="item-outbox-upbox">
            <div class="item-titlebox">
                <span class="item-title" :style="{ background: titlecolorList[colorIndex] }"> {{ obj.title ? obj.title :
                    '--'
                }}</span>
                <span class="item-opendetail" @click="openModal"><right-circle-outlined /></span>
            </div>
            <div class="item-valuebox">
                <div>
                    <span class="item-value"> {{ obj.value ? obj.value : '--' }}</span>
                    <span> {{obj.value ? obj?.unit :''}}</span>
                </div>
                <div class="itemmaxminbox">
                    <span class="item-maxbox"><span class="item-Max">Max</span><span class="item-maxvalue">{{ obj?.max ?
                        obj?.max : '--' }}</span></span>
                    <span><span class="item-Max">Min</span><span class="item-minvalue">{{ obj?.min ? obj?.min : '--'
                    }}</span></span>
                </div>
            </div>
        </div>
        <div class="item-outbox-downbox">
            <slot></slot>
        </div>
    </div>
</template>
<script setup>
import { reactive, ref, watch, toRefs } from "vue";
const props = defineProps({
    obj: {
        type: Object,
        default: () => ({
            title: '',
            max: '',
            min: '',
            value: '',
            time: '',
            unit: ''
        })


    },

    title: {
        type: String,
        default: '监控项',

    },
    maxmin: {
        type: Boolean,
        default: true
    },
    max: {
        type: Number,
        default: 100.56,
    },
    min: {
        type: Number,
        default: 100.56,
    },
    value: {
        type: Number,
        default: 100.5,
    },
    time: {
        type: String,
        default: '2023-07-05 17:00:00'
    },
    colorIndex: {
        type: Number,
        default: 0
    }

})
const emits = defineEmits([
    "openModal"
]);
const openModal = () => {
    emits("openModal");
}

let titlecolorList = ['#dff3fd', '#ffeadf', '#e1e2ff', '#e6fadd', '#fff6d6', '#e4f9f4', '#fedff0', '#f5e2fc', '#ebebeb']
</script>

<style lang="less" scoped>
.item-outbox {
    // background: #00a0e9;
    padding: 5px 0;
    margin-bottom: 10px;
    height: 27.2vh;
    min-height: 200px;
    min-width: 267px;
    border: 1px solid #dddddd;

    .item-outbox-upbox {
        height: 80px;
        border-bottom: 1px solid #dddddd;

        .item-valuebox,
        .item-titlebox {
            display: flex;
            justify-content: space-between;
            padding-right: 15px;
            padding-top: 5px;
        }

        .item-title {
            background-color: #dff3fd;
            font-size: 16px;
            padding: 2px 15px;
            border-top-right-radius: 15px;
            border-bottom-right-radius: 15px;
            color: #333;

        }

        .item-opendetail {
            color: #686868;
            font-size: 16px;
        }

        .item-valuebox {
            padding: 5px 15px;

            .item-value {
                font-size: 24px;
                color: #000000;
                font-weight: 700;
                padding-right: 5px;
            }

            .itemmaxminbox {
                margin-top: 13px;
            }

            .item-maxbox {
                margin-right: 15px;
            }

            .item-Max {
                margin-right: 10px;
            }

            .item-maxvalue {
                color: #ff3d3d
            }

            .item-minvalue {
                color: #25b51d
            }
        }

    }

    .item-outbox-downbox {
        min-height: 120px;
        height: calc(27.2vh - 80px);
        display: flex;
        align-items: center;

        :deep(.ant-empty-normal p) {
            margin-bottom: 0
        }

        :deep(.ant-empty-normal) {
            margin: 0;
            width: 100%;
        }
    }

}

</style>

 

 linecharts组件:

<template>
  <div :id="id" style="height: 90%; width: 100%"></div>
</template>
<script setup>
import { onBeforeUnmount, watch, nextTick, ref, unref } from "vue";
// import dayjs from 'dayjs';
import { init } from "echarts";
const { id, title, dataObj } = defineProps({
  id: {
    type: String,
    default: "",
  },
  title: {
    type: String,
    default: "",
  },
  dataObj: {
    type: Object,
    default: () => ({
      xname: [],
      avg: [],
      max: [],
      min: [],
    }),
  },
});
let colorList = [
  "#5087ec",
  "#68bbc4",
  "#58a55c",
  "#dee124",
  "#e124b0",
  "#5d12a3",
  "#ed1a2d",
  "#39d3d3",
];
let charElc = null;
const initChart = (data) => {
  const eledom = document.getElementById(id);
  if (charElc === null) {
    charElc = init(eledom);
  }
  let option = {
    legend: {
      data: ["AVG", "MAX", "MIN"],
      orient: "horizontal",
      x: "left",
      padding: [0, 30, 10, 28],
      textStyle: {
        fontSize: 10,
      },
      itemHeight: 10,
      itemWidth: 22,
    },
    title: {
      text: title,
      left: "left",
      textStyle: {
        color: "white",
      },
    },
    tooltip: {
      trigger: "axis",
      formatter: function (params) {
        let str = params[0].name + `<br/>`;

        params.map((item, index) => {
          if (index !== 1) {
            str =
              str +
              item.marker +
              "  " +
              item.seriesName +
              ` <span>&nbsp;</span>` +
              item.value +
              " " +
              dataObj?.obj?.unit +
              `<br/>`;
          } else {
            str =
              str +
              item.marker +
              "  " +
              item.seriesName +
              " " +
              item.value +
              " " +
              dataObj?.obj?.unit +
              `<br/>`;
          }
        });
        return str;
      },
    },
    grid: {
      left: "6%",
      right: "6%",
      bottom: "3%",
      top: "18%",
      containLabel: true,
    },

    xAxis: {
      // yAxis: {
      type: "category",
      boundaryGap: true,
      // data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],
      data: dataObj?.xname,
      // axisLabel: {//x轴字体
      //     // textStyle: { color: 'rgba(255,255,255,.8)' }
      //     // color: 'white'
      // },
      // axisLine: {//x轴线
      //     show: true,
      //     // lineStyle: { color: '#7384a1' }
      // },
      // nameLocation: 'end',   //X轴标题位置(选项有:end,start,center)
      // nameTextStyle: {        //X轴标题
      //     color: 'yellow',    //字体颜色
      //     fontSize: 14,       //字体大小
      //     padding: 5          //padding用来调整位置
      // },
    },
    yAxis: {
      // xAxis: {
      type: "value",
      axisLabel: {
        // textStyle: { color: 'whitet' }
        // color: 'white'
      },
      axisLine: {
        show: false, //Y轴线
        // lineStyle: { color: '#7384a1' }
      },
      splitLine: {
        //网格线
        // lineStyle: { color: '#7384a1' },
        // show: false
      },
    },
    color: colorList,
    series: [
      {
        name: "AVG",
        type: "line",
        // stack: 'Total',
        // data: [12, 13, 10, 13, 9, 12, 13, 10, 13, 9, 10, 13],
        data: dataObj?.avg,
        smooth: true,

        // itemStyle: {

        //     color: params => colorList[params.dataIndex]

        // }
      },
      {
        name: "MAX",
        type: "line",
        // stack: 'Total',
        // data: [12, 13, 10, 13, 9, 12, 13, 10, 13, 9, 10, 13],
        data: dataObj?.max,
        smooth: true,

        // itemStyle: {

        //     color: params => colorList[params.dataIndex]

        // }
      },
      {
        name: "MIN",
        type: "line",
        // stack: 'Total',
        // data: [5,13, 9, 10, 13, 13, 15,  13,13, 9, 12, 10, ],
        data: dataObj?.min,
        smooth: true,

        // itemStyle: {

        //     color: params => colorList[params.dataIndex]

        // }
      },
    ],
  };
  charElc.setOption(option);
  window.addEventListener("resize", () => {
    charElc.resize();
  });
  return charElc;
};

watch(
  [dataObj],
  ([currData]) => {
    if (currData) {
      nextTick(() => {
        initChart(currData);
      });
    }
  },
  {
    deep: true,
    immediate: true,
  }
);

onBeforeUnmount(() => {
  // clearInterval(timer);
  window.removeEventListener("resize", () => charElc?.resize());
  charElc?.dispose();
});
defineExpose({
  initChart,
});
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/768884.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

49天精通Java,第40天,jd-gui反编译class文件,解决jd-gui中文乱码问题

目录 专栏导读一、添加局部变量二、反编译class文件三、解决乱码问题四、产品经理就业实战1、内容简介2、作者简介 专栏导读 本专栏收录于《49天精通Java从入门到就业》&#xff0c;本专栏专门针对零基础和需要进阶提升的同学所准备的一套完整教学&#xff0c;从0开始&#xf…

【SQL应知应会】表分区(四)• MySQL版

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 本文收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习&#xff0c;有基础也有进阶&#xff0c;有MySQL也有Oracle 分区表 • MySQL版 前言一、分区表1.非分区表2.分区…

系统学习Linux-SSH远程服务(二)

概念 安全外壳协议&#xff0c;提供安全可靠的远程连接 特点 ssh是工作在传输层和应用层的协议 ssh提供了一组管理命令 ssh 远程登陆 scp 远程拷贝 sftp 远程上传下载 ssh-copy-id ssh keygen 生成 提供了多种身份验证机制 身份验证机制 密码验证 需要提供密码 密…

vue element select下拉框回显展示数字

vue element select下拉框回显展示数字 问题截图&#xff1a; 下拉框显示数字可以从数据类型来分析错误&#xff0c;接收的数据类型是字符串&#xff0c;但是value是数字类型 <el-form-item prop"classifyLabelId" :label"$t(item.classifyLabelId)"…

051、事务设计之TiDB事务实现方式

事务在TiDB中的存储 分布式事务 提交的第一阶段&#xff0c;会用三个CF 来存放这些数据信息&#xff0c; 一类列簇对应一类键值对&#xff0c; 第一个CF(default)存放的是数据 的键值对。第二个存放的是锁信息。 第三个对应的是提交信息。 put<3_100,Frank> 3_100: prim…

LeetCode·每日一题·1851. 包含每个查询的最小区间·优先队列(小顶堆)

题目 示例 思路 离线查询&#xff1a; 输入的结果数组queries[]是无序的。如果我们按照输入的queries[]本身的顺序逐个查看&#xff0c;时间复杂度会比较高。 于是&#xff0c;我们将queries[]数组按照数值大小&#xff0c;由小到大逐个查询&#xff0c;这种方法称之为离线查询…

Go语言之接口(interface)

1.1 、多态的含义 在java里&#xff0c;多态是同一个行为具有不同表现形式或形态的能力&#xff0c;即对象多种表现形式的体现&#xff0c;就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定&#xff0c;而是在程序运行期间才确定&am…

T5模型: Transfer Text-to-Text Transformer(谷歌)

&#x1f525; T5由谷歌发表于2019&#xff0c;《Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer》&#xff0c;最终版本发布在&#xff1a;JMLR。 一句话总结T5: 大一统模型&#xff0c;seq2seq形式完成各类nlp任务&#xff0c;大数据集…

Docker 的前世今生:从社区到市场,从领域到技术应用的全方位分析

博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客&#x1f466;&#x1f3fb; 《java 面试题大全》 &#x1f369;惟余辈才疏学浅&#xff0c;临摹之作或有不妥之处&#xff0c;还请读者海涵指正。☕&#x1f36d; 《MYSQL从入门到精通》数据库是开发者必会基础之…

下载编译Chromium

参考&#xff1a;Mac上本地编译Chrome浏览器踩坑笔记&#xff08;2021.02最新&#xff09; - 掘金 For Mac: 一、下载编译工具链&#xff1a;deptool git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git export PATH"$PATH:/Users/yumlu/co…

jib进行本地打包,并上传本地镜像仓库

使用 Jib 进行本地打包和上传到本地镜像仓库是一种方便的方式&#xff0c;而无需编写 Dockerfile。Jib 是一个开源的 Java 容器镜像构建工具&#xff0c;它可以直接将 Java 项目打包为镜像&#xff0c;并将其推送到容器镜像仓库。 gradle 进行jib的配置 import java.time.Zon…

第53步 深度学习图像识别:Bottleneck Transformer建模(Pytorch)

基于WIN10的64位系统演示 一、写在前面 &#xff08;1&#xff09;Bottleneck Transformer "Bottleneck Transformer"&#xff08;简称 "BotNet"&#xff09;是一种深度学习模型&#xff0c;在2021年由Google的研究人员在论文"Bottleneck Transfor…

MaxCompute与 Mysql 之单字段转多行

在实际数据处理中&#xff0c;可能会遇到行列转换的数据处理&#xff0c;在 MaxCompute 与 AnalyticDB MySQL 数据处理与转换 介绍过如多行转一行&#xff0c;本篇主要介绍将逗号分割的字段转成多行。 一、MaxCompute 实现方式 在MaxCompute中有TRANS_ARRAY函数&#xff0c;可…

显示一行或两行多出的文字用省略号代替

以上就是一行的效果&#xff0c;超出宽度就用...代替 .recommendContainer .scrollItem text{/* 单行文本溢出隐藏 省略号代替 */display: block;white-space: nowrap; /*溢出不换行*/overflow: hidden; /*溢出隐藏*/text-overflow: ellipsis; /*溢出的内容已...代替*/} 多…

watch中监听vuex中state改变监听不到

watch中监听vuex中state改变监听不到 https://blog.csdn.net/aliven1/article/details/100581529?utm_mediumdistribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-100581529-blog-122614448.t5_layer_targeting_sa&spm1001.2101.3001.4242…

软通动力与华秋达成生态共创合作,共同推动物联网硬件创新

7月11日&#xff0c;在2023慕尼黑上海电子展现场&#xff0c;软通动力信息技术(集团)股份有限公司(以下简称“软通动力”)与深圳华秋电子有限公司(以下简称“华秋”)签署了生态共创战略合作协议&#xff0c;共同推动物联网硬件生态繁荣发展。当前双方主要基于软通动力的产品及解…

从Vue2到Vue3【二】——Composition API(第二章)

系列文章目录 内容链接从Vue2到Vue3【零】Vue3简介及创建从Vue2到Vue3【一】Composition API&#xff08;第一章&#xff09; 文章目录 系列文章目录前言一、 生命周期二、hook三、toRef以及toRefs总结 前言 Vue3作为Vue.js框架的最新版本&#xff0c;引入了许多令人激动的新…

vue项目部署自动检测更新

前言 当我们重新部署前端项目的时候&#xff0c;如果用户一直停留在页面上并未刷新使用&#xff0c;会存在功能使用差异性的问题&#xff0c;因此&#xff0c;当前端部署项目后&#xff0c;需要提醒用户有去重新加载页面。 在以往解决方案中&#xff0c;不少人会使用websocke…

C#基础--委托

C#基础–委托 C#基础–委托 简单说它就是一个能把方法当参数传递的对象,而且还知道怎么调用这个方法,同时也是粒度更小的“接口”(约束了指向方法的签名) 一、什么是委托,委托的本质是什么? 跟方法有点类似,有参数,返回值,访问修饰符+ delegate public delegate void …

Python 算法基础篇:哈希表与散列函数

Python 算法基础篇&#xff1a;哈希表与散列函数 引用 1. 哈希表的概念2. 散列函数的概念 a ) 一致性 b ) 均匀性 c ) 高效性 3. 散列函数的实现4. 哈希表的实现5. 哈希表的冲突解决 a ) 链地址法 b ) 开放地址法 6. 实例演示实例&#xff1a;电话簿 总结 引用 哈希表是一种高…