基于vue+element-plus+echarts编写动态绘图页面

我们都知道网页的echarts可以画图,但是很多情况下都需要编码实现绘图逻辑,如果有一个前端页面可以让我输入数据然后动态生成图表的话那么该多好,其实这个需求不难实现,先看效果。

整体页面分为左右两个部分,其中左边的部分用来编辑数据,右边的部分用来显示图表,左边上半部分用来编辑插入数据和生成表格,下半部分用来展示数据。

总体的思路就是使用一个数据维护数据,然后在插入和删除数据的时候都是修改这个数组,完整的代码如下所示

<template>
  <el-container>
    <div class="container">
      <div class="left-grid">
        <el-card>
          <el-row>
            <el-form>
              <el-form-item label="横坐标">
                <el-input v-model="input_axis"></el-input>
              </el-form-item>
              <el-form-item label="纵坐标">
                <el-input v-model="input_series"></el-input>
              </el-form-item>
              <el-form-item>
                <el-button type="primary" @click="insertData"
                  >插入数据</el-button
                >
              </el-form-item>
              <el-form-item>
                <el-button type="primary" size="medium" @click="create_axis"
                  >点击生成表格</el-button
                >
              </el-form-item>
            </el-form>
          </el-row>
        </el-card>
        <el-card>
          <el-row>
            <el-table
              :data="table_data"
              :show-header="true"
              :max-height="350"
              stripe
            >
              <el-table-column type="index" label="序号" width="100%">
              </el-table-column>
              <el-table-column prop="axis" label="横坐标"></el-table-column>
              <el-table-column prop="series" label="纵坐标"></el-table-column>
              <el-table-column label="操作">
                <template #default="{ row }">
                  <el-button type="danger" @click="deleteItemByIndex(row)"
                    >删除</el-button
                  >
                </template>
              </el-table-column>
            </el-table>
          </el-row>
        </el-card>
      </div>
      <div class="right-grid" ref="myChart"></div>
    </div>
  </el-container>
</template>

<script>
import { getCurrentInstance } from "vue";
export default {
  data() {
    return {
      table_data: [
        { axis: "衬衫", series: 5 },
        { axis: "羊毛衫", series: 20 },
        { axis: "雪纺衫", series: 36 },
        { axis: "裤子", series: 10 },
        { axis: "高跟鞋", series: 10 },
        { axis: "袜子", series: 20 },
      ],
      echarts: getCurrentInstance().appContext.config.globalProperties.$echarts,
      input_axis: "",
      input_series: 0,
    };
  },
  mounted() {},
  methods: {
    create_axis() {
      //3.初始化实例对象 echarts.init(dom容器)
      var data_xAxis = [];
      var data_series = [];
      var data_legend = ["销量"];
      for (var i = 0; i < this.table_data.length; i++) {
        data_xAxis.push(this.table_data[i].axis);
        data_series.push(this.table_data[i].series);
      }
      var dom = this.$refs["myChart"]; // 获取dom节点
      var myChart = this.echarts.init(dom);
      //4.指定配置项和数据
      var option = {
        title: {
          text: "echart入门示例",
        },
        tooltip: {},
        legend: {
          data: data_legend,
        },
        xAxis: {
          data: data_xAxis,
        },
        yAxis: {},
        series: [
          {
            name: "销量",
            type: "bar",
            data: data_series,
          },
        ],
      };
      //5.将配置项设置给echarts实例对象,使用刚指定的配置项和数据显示图表。
      myChart.setOption(option);
    },
    deleteItemByIndex(row) {
      var index = this.table_data.findIndex((item) => item.id == row.id);
      this.table_data.splice(index, 1);
    },
    insertData() {
      this.table_data.push({
        axis: this.input_axis,
        series: this.input_series,
      });
    },
  },
};
</script>

<style scoped>
.container {
  display: grid;
  grid-template-columns: 35% 65%;
  width: 100%;
  height: 80vh;
}

.left-grid {
  background-color: #f0f0f0;
  border-radius: 2%;
  padding: 20px;
  height: 100%;
}

.right-grid {
  background-color: #e9d7df;
  border-radius: 2%;
  padding: 20px;
  height: 100%;
}

.grid-content1 {
  background-color: rgb(44, 143, 121);

  border-radius: 4px;

  height: 100vh;

  width: 35vw;
}

.grid-content2 {
  background-color: rgb(44, 143, 121);

  border-radius: 4px;

  height: 100vh;

  width: 65vw;
}

.bg-purple {
  background: #7e2970;
}
.bg-purple-light {
  background: #071c4d;
}
</style>

这边需要提一下在vue3中echarts的引入和使用

首先需要使用npm在项目中引入echarts,npm install echarts --save

然后在main.js中引入echarts并且添加到vue的环境变量中

import { createApp } from "vue";
import App from "./App.vue";
import router from "./router";
import store from "./store";
import ElementPlus from "element-plus";
import "element-plus/dist/index.css";
import * as echarts from "echarts";

const app = createApp(App);
app.use(store).use(router).use(ElementPlus).use(echarts);

app.config.globalProperties.$echarts = echarts;
app.mount("#app");

在使用的时候使用 getCurrentInstance().appContext.config.globalProperties.$echarts 进行引入

说实话,感觉做出这个页面还是挺有用的,我们需要绘制图表的时候直接编辑数据就可以了,不需要从代码层面做修改了。

按照这个思路后续可以支持更多种数据,以及绘制更多种类的图表,实现一个小的图表绘制工具哈哈。

其实我们还可以做一点优化,就是在插入和删除数据之后马上更新图表,这样用户体验似乎还能更好一点

优化后的效果是这样的

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

android 保活的一种有效的方法

android 保活的一种有效的方法 为什么要保活 说起程序的保活,其实很多人都觉得,要在手机上进行保活,确实是想做一些小动作,其实有些正常的场景也是需要我们进行保活的,这样可以增强我们的用户体验。保活就是使得程序常驻内存,这种程序不容易被杀,或者在被杀以后还能完…

提高工作效率的宝藏网站和宝藏工具(高级版)

一、参考资料 亲测&#xff1a;你这些网站都不知道&#xff0c;哪来时间去摸鱼&#xff1f; 提高工作效率的宝藏网站和宝藏工具&#xff08;基础版&#xff09; 二、好用的网站 HelloGitHub - 开源项目平台 HelloGitHub 是一个分享有趣、 入门级开源项目的平台。 希望大家能…

TCP/IP协议:最流行的电子邮件协议SMTP(简单邮件传输协议)详解

SMTP 是一种电子邮件协议&#xff0c;用于通过互联网从一个电子邮件帐户向另一个电子邮件帐户发送电子邮件。它是TCP/IP协议应用层的一部分。作为一种电子邮件协议&#xff0c;它建立了不同电子邮件客户端和帐户之间轻松信息交换的规则。这样&#xff0c;简单邮件传输协议就可以…

电磁建模的分布式并行计算技术

本文提出了一种新的分布式并行电磁建模技术&#xff0c;以加快电磁结构的神经网络建模过程。现有的电磁建模技术通常需要反复改变微波器件的参数&#xff0c;驱动电磁模拟器以获得足够的训练和测试样本。随着电磁建模问题复杂性的增加&#xff0c;由于单台计算机的性能有限&…

QQ空间上传一次 500张限制突破记录

手机又好多照片了&#xff0c;用手机上传耽误时间&#xff0c;就导出到电脑了&#xff0c;上传到qq空间去。 结果发现不开通黄钻无法上传原图&#xff0c;那就开通吧&#xff01; 开通了黄钻&#xff0c;居然不能一次上传超过 500 张&#xff0c;开通有何用&#xff1f; 五千…

【C++那些事儿】类与对象(3)

君兮_的个人主页 即使走的再远&#xff0c;也勿忘启程时的初心 C/C 游戏开发 Hello,米娜桑们&#xff0c;这里是君兮_&#xff0c;我之前看过一套书叫做《明朝那些事儿》&#xff0c;把本来枯燥的历史讲的生动有趣。而C作为一门接近底层的语言&#xff0c;无疑是抽象且难度颇…

C++知识点总结(7):玩转高精度除法

一、复习高低精度 一个数分为两种类型&#xff1a; 1. 高精度数&#xff0c;即一个长度特别长的数&#xff0c;使用 long long 也无法存储的一类数字。 2. 低精度数&#xff0c;即一个普通的数&#xff0c;可以使用 long long 来存储。 由于高精度除法比较简单&#xff0c;…

记录一些免费的 API接口

主要记录一些日常开发中可以使用到的一些免费api接口&#xff0c;目前包括 ip地址查询、天气查询 通过 IP 查询地址 ip-api (不支持 https) &#x1f4a1; api接口文档 &#x1f579; 调用接口 $ curl http://ip-api.com/json&#x1f4dd; 返回信息&#xff08;位置信息&…

带你用uniapp从零开发一个仿小米商场_2.创建空白项目及公共样式引入

创建空白项目 打开uniapp 点击新建->项目 如下, 是编辑你项目的名字的地方是你项目存放地址,可以点击浏览器去文件管理里面选地址是模板选择,这里选择默认模板就好是一些其他选择比如uvue能让你项目在编译成软件时运行更快,unicloud能让你用js写后端,且直接就是云开发,g…

交流充电桩与直流充电桩的区别

1、背景 直流充电桩的学名是非车载充电机&#xff0c;是相对于交流充电桩而言的。交流充电桩是采用传导方式为具备车载充电机的电动汽车提供交流电能的专用装置。 2、交流充电桩和直流充电桩 1.1、交流充电桩 交流充电桩包括单相和三相交流充电桩。 图一是交流充电桩原理框…

C语言—什么是数组名

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int arr[]{1,2,3,4};printf("%p\n",arr);printf("%p\n",&arr);printf("%p\n",*arr);return 0; } 结论&#xff1a;数组名是数组首元素地址&#xff08;下标为0的元素…

信息学奥赛一本通1331:【例1-2】后缀表达式的值

1331&#xff1a;【例1-2】后缀表达式的值 时间限制: 10 ms 内存限制: 65536 KB 提交数: 54713 通过数: 13547 【题目描述】 从键盘读入一个后缀表达式&#xff08;字符串&#xff09;&#xff0c;只含有0-9组成的运算数及加&#xff08;&#xff09;、减&#xf…

node.js解决输出中文乱码问题

个人简介 &#x1f468;&#x1f3fb;‍&#x1f4bb;个人主页&#xff1a;九黎aj &#x1f3c3;&#x1f3fb;‍♂️幸福源自奋斗,平凡造就不凡 &#x1f31f;如果文章对你有用&#xff0c;麻烦关注点赞收藏走一波&#xff0c;感谢支持&#xff01; &#x1f331;欢迎订阅我的…

基于uniapp+vue微信小程序的健康饮食管理系统 907m6

设计这个微信小程序系统能使用户实现不需出门就可以在手机或电脑前进行网上查询美食信息、 运动视频等功能。 本系统由用户和管理员两大模块组成。用户界面显示在应用程序中&#xff0c;管理员界面显示在后台服务中&#xff0c;通过小程序端与服务端间进行数据交互与数据传输实…

坚鹏:中国银联公司银行业前沿技术介绍及其数据分析方法实战培训

中国银联公司银行业前沿技术介绍及其数据分析方法实战培训圆满结束 ——借力数字化技术实现基于场景的精准化、场景化、智能化营销 中国银联公司&#xff08;China UnionPay&#xff09;成立于2002年3月&#xff0c;是经国务院同意&#xff0c;中国人民银行批准&#xff0c;在合…

开源语音大语言模型来了!阿里基于Qwen-Chat提出Qwen-Audio!

论文链接&#xff1a;https://arxiv.org/pdf/2311.07919.pdf 开源代码&#xff1a;https://github.com/QwenLM/Qwen-Audio 引言 大型语言模型&#xff08;LLMs&#xff09;由于其良好的知识保留能力、复杂的推理和解决问题能力&#xff0c;在通用人工智能&#xff08;AGI&am…

探索优雅的处理 JavaScript 类数组对象的技巧

一. 引言 在 JavaScript 编程中&#xff0c;我们经常遇到类数组对象&#xff0c;它们拥有类似数组的结构和行为&#xff0c;但却不具备真正的数组方法和属性。常见的类数组对象包括 DOM 集合、函数的 arguments 对象和字符串等。如果我们想对这些类数组对象进行操作和处理&…

【数据结构实验】图(一)Warshall算法(求解有向图的可达矩阵)

文章目录 1. 引言2. Warshall算法原理2.1 初始化可及矩阵2.2 迭代更新可及矩阵 3. 实验内容3.1 实验题目&#xff08;一&#xff09;输入要求&#xff08;二&#xff09;输出要求 3.2 算法实现 4. 实验结果 1. 引言 Warshall算法是一种用于求解有向图的可达矩阵的经典算法。该算…

服务器连接github

https://zhuanlan.zhihu.com/p/543490354 比着这个一步步做就行。 https://blog.l0v0.com/posts/94ffdbdf.html 上传文件可以看这个 注意&#xff1a; 密钥ssh-keygen设置好之后&#xff0c;以后就不用每次输入账号密码才能访问了。 otherwise&#xff0c;每次要输入账号密码。…

人工智能|机器学习——循环神经网络的简洁实现

循环神经网络的简洁实现 如何使用深度学习框架的高级API提供的函数更有效地实现相同的语言模型。 我们仍然从读取时光机器数据集开始。 import torch from torch import nn from torch.nn import functional as F from d2l import torch as d2lbatch_size, num_steps 32, 35 t…