多个Echart遍历生成 / 词图云

devtools/2024/12/21 23:02:29/

echart官网

安装

如果版本报错推荐安装以下版本
npm install echarts@4.8.0 --savenpm uninstall echarts//这个是卸载命令以下安装成功后是局部引入:

多个Echart遍历生成

vue3+echart
单个页面多个图表循环渲染展示:

在这里插入图片描述

<template><div class="main"><div class="section"><div class="section" v-for="(chartOption, index) in chartOptions" :key="index"><div :ref="el => chartRefs[index] = el" style="width:1400px;height: 400px"></div></div><!-- 隐藏表格 --><!-- <div  class="table-section"><el-dialog v-model="showTable" title="" width="500" align-center><el-table :data="tableData" style="width: 100%" ><el-table-column prop="name" label="名称" /><el-table-column prop="value" label="值" /><el-table-column  label="编辑" ><template #default="scope"><el-button type="primary" @click="btnView(scope.row)">查看</el-button></template></el-table-column></el-table></el-dialog></div> --></div></div>
</template><script lang='ts'>
import { ref, reactive, toRefs, onUnmounted, onMounted } from "vue";
import { useRouter, useRoute } from "vue-router"; //引入路由
import * as echarts from "echarts";
export default {name: "",setup() {let router = useRouter(),route = useRoute();// 图标数据const chartOptions: any = [{title: [{left: "left",text: "违规命中统计",}],legend: {data: ['违规规则', 'Union Ads']},xAxis: {type: "category",data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],},yAxis: {type: "value",},series: [{ name: '违规规则',data: [120, 200, 150, 80, 70, 110, 130],type: "bar",itemStyle: {color: "#23e3fb", },},],tooltip: {// 这里暂时不设置 formatter}},{title: [{left: "left",text: "违规门店统计",}],legend: {data: ['违规门店', 'Union Ads']},tooltip: {// 这里暂时不设置 formatter},xAxis: {type: "category",data: ["1", "2", "3", "4", "5", "6", "7"],},yAxis: {type: "value",},series: [{data: [120, 200, 150, 80, 70, 110, 130],type: "bar",name: '违规门店',itemStyle: {color: "#23e3fb", },},],},{title: [{left: "left",text: "违规坐席统计",}],legend: {data: ['违规坐席', 'Union Ads']},tooltip: {// 这里暂时不设置 formatter},xAxis: {type: "category",data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],},yAxis: {type: "value",},series: [{data: [120, 200, 150, 80, 70, 110, 130],type: "bar",name:'违规坐席'},],},];const data: any = reactive({});const chartRefs = ref<HTMLDivElement[]>([]);const charts = ref<echarts.ECharts[]>([]);onMounted(() => {chartOptions.forEach((option, index) => {if (chartRefs.value[index]) {const chart = echarts.init(chartRefs.value[index]);const finalOption = {...option,tooltip: {...option.tooltip,}};chart.setOption(finalOption);charts.value[index] = chart;}});});onUnmounted(() => {charts.value.forEach(chart => {if (chart) {chart.dispose();}});});const refData = toRefs(data);return {...refData,chartOptions,chartRefs,};},
};
</script><style lang="scss" scoped>
</style>

点击单个图表可显示弹框

点击图表单个柱状图显示对应的表格弹框操作

在这里插入图片描述

<template><div class="main"><div class="section"><div class="section" v-for="(chartOption, index) in chartOptions" :key="index"><div :ref="el => chartRefs[index] = el" style="width:1400px;height: 400px"></div></div><!-- 隐藏表格 --><div  class="table-section"><el-dialog v-model="showTable" title="" width="500" align-center><el-table :data="tableData" style="width: 100%" ><el-table-column prop="name" label="名称" /><el-table-column prop="value" label="值" /><el-table-column  label="编辑" ><template #default="scope"><el-button type="primary" @click="btnView(scope.row)">查看</el-button></template></el-table-column></el-table></el-dialog></div></div></div>
</template>
<script lang='ts'>
import { ref, reactive, toRefs, onUnmounted, onMounted } from "vue";
import { useRouter, useRoute } from "vue-router"; //引入路由
import * as echarts from "echarts";
export default {name: "",setup() {let router = useRouter(),route = useRoute();// 图标数据const chartOptions: any = [{title: [{left: "left",text: "违规命中统计",}],legend: {data: ['违规规则', 'Union Ads']},xAxis: {type: "category",data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],},yAxis: {type: "value",},series: [{ name: '违规规则',data: [120, 200, 150, 80, 70, 110, 130],type: "bar",itemStyle: {color: "#23e3fb", },},],tooltip: {// 这里暂时不设置 formatter}},{title: [{left: "left",text: "违规门店统计",}],legend: {data: ['违规门店', 'Union Ads']},tooltip: {// 这里暂时不设置 formatter},xAxis: {type: "category",data: ["1", "2", "3", "4", "5", "6", "7"],},yAxis: {type: "value",},series: [{data: [120, 200, 150, 80, 70, 110, 130],type: "bar",name: '违规门店',itemStyle: {color: "#23e3fb", },},],},{title: [{left: "left",text: "违规坐席统计",}],legend: {data: ['违规坐席', 'Union Ads']},tooltip: {// 这里暂时不设置 formatter},xAxis: {type: "category",data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],},yAxis: {type: "value",},series: [{data: [120, 200, 150, 80, 70, 110, 130],type: "bar",name:'违规坐席'},],},];const initParams = (params: any) => {let tooltipContent = '';const bullet = '<span style="display: inline-block; width: 10px; height: 10px; background-color:#23e3fb; border-radius: 50%; margin-right: 5px;"></span>';if (Array.isArray(params)) {// 多个数据项params.forEach((param) => {tooltipContent += `${param.seriesName}<br/>${bullet}${param.name} &nbsp; ${param.value}<br/>`;});} else {// 单个数据项tooltipContent += `${params.seriesName}<br/>${bullet}${params.name} &nbsp; ${params.value}<br/>`;}return tooltipContent;};const data: any = reactive({// chartOptions:chartOptions,//也可在这里赋值使用(也可定义并暴露出去)showTable:false,//点击图标显示弹框表格tableData:[]=[],//弹框表格数据});const chartRefs = ref<HTMLDivElement[]>([]);const charts = ref<echarts.ECharts[]>([]);const handleChartClick = (params: any) => {data.showTable = true;data.tableData = [{ name: params.seriesName, value: params.value },{ name: '日期', value: params.name },// 可以根据需要添加更多字段];};onMounted(() => {chartOptions.forEach((option, index) => {if (chartRefs.value[index]) {const chart = echarts.init(chartRefs.value[index]);const finalOption = {...option,tooltip: {...option.tooltip,formatter: initParams}};chart.setOption(finalOption);chart.on('click', handleChartClick);charts.value[index] = chart;}});});onUnmounted(() => {charts.value.forEach(chart => {if (chart) {chart.dispose();}});});const refData = toRefs(data);return {...refData,chartOptions,chartRefs,initParams};},
};
</script><style lang="scss" scoped>
</style>

词图云


http://www.ppmy.cn/devtools/144202.html

相关文章

作业Day4: 链表函数封装 ; 思维导图

目录 作业&#xff1a;实现链表剩下的操作&#xff1a; 任意位置删除 按位置修改 按值查找返回地址 反转 销毁 运行结果 思维导图 作业&#xff1a;实现链表剩下的操作&#xff1a; 1>任意位置删除 2>按位置修改 3>按值查找返回地址 4>反转 5>销毁 任意…

metagpt中ActionNode的用法

目录 整体流程1. 基础组件&#xff1a;2. SIMPLE_THINK_NODE 和 SIMPLE_CHECK_NODE&#xff1a;3. THINK_NODES 类&#xff1a;4. ThinkAction 类&#xff1a;5. SimplePrint 类&#xff1a;6. Printer 类&#xff1a;7. main 函数&#xff1a;总结&#xff1a;主要执行流程&am…

04、Vue与Ajax

4.1 发送AJAX异步请求的方式 发送AJAX异步请求的常见方式包括&#xff1a; 4.1.1. 原生方式 使用浏览器内置的JS对象XMLHttpRequest const xhr new XMLHttpRequest() xhr.open() xhr.send() xhr.onreadystatechange function(){} 4.1.2. 原生方式 使用浏览器内置的JS函…

基于阿里云日志服务的程序优化策略与实践

背景 我们的服务端程序日志现已全面迁移至阿里云&#xff0c;这一举措极大地便利了我们通过阿里云的日志工具来深入洞察接口的调用状况。 content是个json对象&#xff0c;request和path是content对象下的字段。我的需求是统计每个请求一分钟调用次数。以此为依据考虑优化的方…

RTC实时时钟

BKP&#xff08;备份寄存器&#xff09; 1. 什么是BKP&#xff1f; 备份寄存器是42个16位的寄存器&#xff0c;可用来存储84个字节的用户应用程序数据。他们处在备份域里&#xff0c;当VDD电 源被切断&#xff0c;他们仍然由VBAT维持供电。当系统在待机模式下被唤醒&#xff…

RabbitMQ个人理解与基本使用

目录 一. 作用&#xff1a; 二. RabbitMQ的5中队列模式&#xff1a; 1. 简单模式 2. Work模式 3. 发布/订阅模式 4. 路由模式 5. 主题模式 三. 消息持久化&#xff1a; 消息过期时间 ACK应答 四. 同步接收和异步接收&#xff1a; 应用场景 五. 基本使用 &#xff…

css代码加密

CSS代码加密是一种手段&#xff0c;目的是保护CSS代码不被轻易查看或修改。然而&#xff0c;需要注意的是&#xff0c;这种加密并不是绝对安全的&#xff0c;因为它可以被解密。以下是一种简单的CSS加密方法&#xff0c;使用了简单的替换加密&#xff1a; function encryptCSS…

全脐点曲面当且仅当平面或者球面的一部分

S 是全脐点曲面当且仅当 S 是平面或者球面的一部分。 S_\text{ 是全脐点曲面当且仅当 }{S_\text{ 是平面或者球面的一部分。}} S 是全脐点曲面当且仅当 ​S 是平面或者球面的一部分。​ 证&#xff1a; 充分性显然&#xff0c;下证必要性。 若 r ( u , v ) r(u,v) r(u,v)是…