vue使用echarts画可视化大屏

news2024/11/18 10:54:51

画出来的页面效果如下:
在这里插入图片描述

一、布局

整体使用element-ui的layout布局,即el-row+el-col,便于自适应
在这里插入图片描述

二、配置跨域

首先创建个vue.config.js的文件

module.exports = {
  lintOnSave: false,
  devServer: {
    proxy: { //配置跨域
      '/': {
        target: '', //填写请求的目标地址
        changOrigin: true, //允许跨域
        pathRewrite: {
          '^/': '/' //请求的时候使用这个api就可以
        }
      }
    }
  }
}

然后vue里面使用axios进行调用接口,需要引入axios

npm install --save axios vue-axios

main.js里面全局引入

import axios from 'axios';
Vue.prototype.$axios = axios;

在这里插入图片描述

三、让列表滚动起来

从页面可以看到列表的内容是上下滚动的
可以使用轮播图,不过我使用的是vue的一个插件 vue-seamless-scroll 这是官网,有兴趣的可以点击去看看,很有趣vue-seamless-scroll 官网

安装

npm install vue-seamless-scroll --save

引入

import vueSeamlessScroll from "vue-seamless-scroll";

注册

components: {
    vueSeamlessScroll
  },

配置

classOption() {
      return {
        step: 0.3, // 数值越大速度滚动越快
        limitMoveNum: 2, // 开始无缝滚动的数据量 this.dataList.length
        hoverStop: true, // 是否开启鼠标悬停stop
        direction: 1, // 0向下 1向上 2向左 3向右
        openWatch: true, // 开启数据实时监控刷新dom
        singleHeight: 0, // 单步运动停止的高度(默认值0是无缝不停止的滚动) direction => 0/1
        singleWidth: 0, // 单步运动停止的宽度(默认值0是无缝不停止的滚动) direction => 2/3
        waitTime: 0, // 单步运动停止的时间(默认值1000ms)
      };
    },

使用

<vue-seamless-scroll :data="listData" class="seamless-warp">
	<el-row :gutter="0" class="wx_bottom" v-for="(item,index) in feedBackSheetList" :key="index">
   		<el-col :span="19">{{item.content}}</el-col>
       	<el-col :span="5">{{item.createTime}}</el-col>
    </el-row>
</vue-seamless-scroll>

css

.wx_seamless_warp{
  height: 125px;
  overflow: hidden;//溢出隐藏
  width:100%;//
}

在这里插入图片描述

四、给外层的边框的四个角套上背景图片

在这里插入图片描述
首先准备四张图片
r1
在这里插入图片描述
r2
在这里插入图片描述
r3
在这里插入图片描述
r4
在这里插入图片描述
其实也简单,就是最外层是一个有宽高的div1,然后里面再套一个div2,div2的宽高等于div1,div2根据背景图片的定位到四个角即可
在这里插入图片描述

五、使用echarts绘制柱状图、饼图、折线图、环形图

1.折线图
在这里插入图片描述
首先写个标签,定义一个id名,然后设置宽度和高度

   <div id="main" style="width: 100%;height: 180px;"></div>

初始化数据并对图表样式进行调整

getData(data){
      let myChart = this.$echarts.init(document.getElementById('main'));
      let xData=[];
      let yData=[];
      //对拿到的数据进行遍历,分别赋值给x轴和y轴
      if(data.length>0){
        for( let i=0;i<data.length;i++){
          xData.unshift(this.getDay(data[i].days));
          yData.unshift(data[i].quantity);
        }
      }
      myChart.setOption({
        //图表位置
        grid: {
          top: '10%',
          left: '10%',
          right: '10%',
          bottom: '10%',
          containLabel: true
        },
        //鼠标悬浮时的弹窗
        tooltip: {
          trigger: 'item',
        },
        //x轴相关
        xAxis: {
          data: xData,//x轴数据
          axisLine: {//x轴线的颜色以及宽度
            show: false,
            lineStyle: {
              color: "#122B30",
              width: 1,
              type: "solid"
            },
          },
          axisLabel: {//x轴文字的配置
            show: true,
            color: "#B1DCF7",
          }
        },
        yAxis: {
          axisLabel: {//y轴文字的配置
            show: true,
            color: "#B1DCF7",
          },
          splitLine: {
            lineStyle: {
              // type: 'dashed',
               // 设置背景横线
              color: "#122B30",
            }
          },
        },
        series: [
          {
            barWidth: 10,
            barMaxWidth: 20,
            barMinWidth: 5,
            itemStyle: {
              borderWidth: 1,
              color:'#E99960',
            },
            type: 'line',//图表类型为折线
            //smooth:true,//若是true则为平滑的曲线
            data: yData//y轴数据
          }
        ]
      });
    },

2.横向柱状图
在这里插入图片描述

getData2(data1,data2,data3){
      let myChart = this.$echarts.init(document.getElementById('main2'));
      myChart.setOption({
        tooltip: {
          trigger: 'item',
        },
        grid: {
          top: '10%',
          left: '10%',
          right: '10%',
          bottom: '10%',
          containLabel: true
        },
        xAxis: {
          show: true,
          axisLabel: {
            formatter: '{value}',
            show: true
          },
          splitLine: { show: false },
          axisLine: {
            show: true
          },
          axisTick: {
            show: false // 刻度线
          },
        },
        yAxis: {
          type: 'category',
          inverse: true, // 倒叙
          axisLabel: {
            color: '#fff',
            formatter: (val) => {
              return `${val}`;
            }
          },
          axisLine: {
            show: true // 轴线
          },
          axisTick: {
            show: false // 刻度线
          },
          data: ['已到期', '即将到期', '总数量']
        },
        series: [
          {
            type: 'bar',
            barWidth: 15,
            barMaxWidth: 20,
            barMinWidth: 5,
            label: {
              show: true,	//是否展示
              position: 'right', //在上方显示
              fontSize : '12',
              color: '#898A8E'
            },
            color:'#77CBC1',
            itemStyle: {
              borderRadius: [0, 10, 10, 0],
              borderWidth: 1,
            },
            data: [data1,data2,data3]
          }
        ]
      });
    },

3.环形图
在这里插入图片描述

getData3(data1,data2){
      let myChart = this.$echarts.init(document.getElementById('main3'));
      let option = {
        tooltip: {
          trigger: 'item',
          formatter: "{b}: {c} ({d}%)",
        },
        grid: {
          top: '10%',
          left: '10%',
          right: '10%',
          bottom: '10%',
          containLabel: true
        },
        color:['#40B4D2','#F7B500'],
        series: [
          {
            type: 'pie',
            radius: ['30%', '55%'],
            labelLine: {
              length: 5,
            },
            label: {
              formatter: "{b} {c}",
              borderWidth: 20,
              borderRadius: 4,
              rich: {
                b: {
                  color: "#fff",
                  fontSize: 12,
                },
                per: {
                  fontSize: 12,
                  padding: [2, 4],
                  borderRadius: 2
                }
              }
            },
            data: [
              { value: data1, name: '未租',label: { color: "#40B4D2" }},
              { value: data2, name: '已租',label: { color: "#F7B500" }},
            ],
          }
        ]
      };
      myChart.setOption(option)
    },

4.饼图
在这里插入图片描述

getData5(data1,data2){
      let myChart = this.$echarts.init(document.getElementById('main5'));
      let option = {
        tooltip: {
          trigger: 'item',
          formatter: "{b}: {c} ({d}%)",
        },
        grid: {
          top: '10%',
          left: '10%',
          right: '10%',
          bottom: '10%',
          containLabel: true
        },
        color:['#8B34FF','#F7B500'],
        series: [
          {
            type: 'pie',
            radius: '50%',
            labelLine: {
              length: 5,
            },
            label: {
              formatter: "{b} {c}",
              borderWidth: 20,
              borderRadius: 4,
              rich: {
                b: {
                  color: "#fff",
                  fontSize: 12,
                },
                per: {
                  fontSize: 12,
                  padding: [2, 4],
                  borderRadius: 2
                }
              }
            },
            data: [
              { value: data1, name: '已分配',label: { color: "#8B34FF" } },
              { value: data2, name: '未分配',label: { color: "#F7B500" } },
            ],
          }
        ]
      };
      myChart.setOption(option)
    },

5.柱状图
在这里插入图片描述

getData7(data){
      let myChart = this.$echarts.init(document.getElementById('main7'));
      let xData=[];
      let yData=[];
      if(data.length>0){
        for( let i=0;i<data.length;i++){
          xData.unshift(this.getH(data[i].time));
          yData.unshift(data[i].quantity);
        }
      }
      let option = {
        tooltip: {
          trigger: 'item'
        },
        grid: {
          top: '10%',
          left: '10%',
          right: '10%',
          bottom: '10%',
          containLabel: true
        },
        xAxis: {
          // data: ['07:00', '09:00', '11:00', '13:00', '15:00', '17:00','19:00']
          data:xData,
          axisLine: {//x轴线的颜色以及宽度
            show: true,
            lineStyle: {
              color: "#122B30",
              width: 1,
              type: "solid"
            },
          },
          axisLabel: {//x轴文字的配置
            show: true,
            color: "#B1DCF7",
          },
          axisTick:{
            show:false
          }
        },
        yAxis: {
          axisLine: {
            show: true // 轴线
          },
          axisTick: {
            show: false // 刻度线
          },
          axisLabel: {//y轴文字的配置
            show: true,
            color: "#B1DCF7",
          },
          splitLine: {
            lineStyle: {
              type: 'dashed',
              color: "#122B30",
            }
          },
        },
        series: [
          {
            barWidth: 15,
            barMaxWidth: 20,
            barMinWidth: 5,
            itemStyle: {
              borderWidth: 1,
              color: this.$echarts.graphic.LinearGradient(0, 1, 0, 0, [
              { offset: 0, color: 'rgba(50, 229, 255, 1)' },
              { offset: 1, color: 'rgba(50, 229, 255, 0)' }
            ]),
            },
            type: 'bar',
            data: yData
          }
        ]
      };
      myChart.setOption(option)
    },

六、eCharts图表中a b c d代表的含义

其中变量a、b、c在不同图表类型下代表数据含义为:

折线(区域)图、柱状(条形)图: a(系列名称),b(类目值),c(数值), d(无)

散点图(气泡)图 : a(系列名称),b(数据名称),c(数值数组), d(无)

饼图、雷达图 : a(系列名称),b(数据项名称),c(数值), d(百分比)

弦图 : a(系列名称),b(项1名称),c(项1-项2值),d(项2名称) e(2-项1)

力导向图 :
节点 : a(类目名称),b(节点名称),c(节点值)
 : a(系列名称),b(源名称-目标名称),c(边权重), d(如果为true的话则数据来源是边)

七、点击iframe标签时禁止跳转

在这里插入图片描述
页面上有需要显示当前时间天气
时间好写,写一个定时器就可以了,显示天气的话我是使用的iframe标签
1.显示年月日星期,我是在created钩子函数里面写了个定时器,离开页面时再清除定时器

created(){
    //定时刷新当前时间
    let currentDate=setInterval(()=>{
        let date = new Date()
        let day = date.getDay() //  获取星期
        switch (day) { //  格式化
          case 0:
            day = "星期日"
            break
          case 1:
            day = "星期一"
            break
          case 2:
            day = "星期二"
            break
          case 3:
            day = "星期三"
            break
          case 4:
            day = "星期四"
            break
          case 5:
            day = "星期五"
            break
          case 6:
            day = "星期六"
            break
        }
        let Str=date.getFullYear() + '年' +
        (date.getMonth() + 1).toString().padStart(2,"0") + '月' + 
        date.getDate().toString().padStart(2,"0") + '号'+' '+day
        this.nowDate=Str;
      },1000)
      // 离开当前页面时销毁定时器
      this.$once('hook:beforeDestroy', () => {
        clearInterval(currentDate);
        currentDate = null;
      })
  },

2.显示天气

<iframe width="65" height="24" frameborder="0" scrolling="no" hspace="0"
 src="https://i.tianqi.com/?c=code&a=getcode&id=34&py=suzhou&icon=1&color=ffffff"
></iframe>

但是iframe在点击时会进行页面的跳转,这样不好,所以点击iframe标签时需要禁止跳转,目前找到两个方法,
(一)给iframe加 security="restricted" sandbox="allow-same-origin allow-scripts"

<iframe width="65" height="24" frameborder="0" scrolling="no" hspace="0"
security="restricted" sandbox="allow-same-origin allow-scripts"
src="https://i.tianqi.com/?c=code&a=getcode&id=34&py=suzhou&icon=1&color=ffffff"
></iframe>

在这里插入图片描述
(二)给iframe标签加 style="pointer-events:none;"

<iframe width="65" height="24" frameborder="0" scrolling="no" hspace="0"
style="pointer-events:none;"
src="https://i.tianqi.com/?c=code&a=getcode&id=34&py=suzhou&icon=1&color=ffffff"
></iframe>

没有报错,所以最终选择了法二
嗯,这个项目涉及到的目前就这么多

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

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

相关文章

Python——matplotlib绘图可视化知识点整理

无论你工作在什么项目上&#xff0c;IPython都是值得推荐的。利用ipython --pylab&#xff0c;可以进入PyLab模式&#xff0c;已经导入了matplotlib库与相关软件包&#xff08;例如Numpy和Scipy)&#xff0c;额可以直接使用相关库的功能。 本文作为学习过程中对matplotlib一些…

Oracle Blogs上的Flashback文章

Oracle Database und Temporal Validity Temporal Validity和Flashback的区别&#xff1f;两者通常配合使用。 延伸阅读&#xff1a;Oracle 数据库和时间有效性 时间有效性也称为 Flashback Time Travel。 显示不可见的列&#xff1a; set colinvisible on desc <table_…

PyQt5开发环境搭建 1.3 Python语法练习

第一组练习1阅读理解。输入红色框框中命令。说出文中大致意思。&#xff08;限30个字&#xff09;解&#xff1a;点击运行之后会跳到一个网站https://xkcd.com/353/练习2建立如下py文件并运行&#xff0c;贴出在Eric6下运行输出结果&#xff08;注意文件名中的bkjtest用自己的姓…

NSSCTF Round#7部分wp

Web ec_RCE 源码: <!-- A EZ RCE IN REALWORLD _ FROM CHINA.TW --> <!-- By 探姬 --> <?PHPif(!isset($_POST["action"]) && !isset($_POST["data"]))show_source(__FILE__);putenv(LANGzh_TW.utf8); $action $_POST["a…

layui遇到的一些问题

目录一、layui nav 菜单栏默认收缩二、layui 数据表格 单元格 颜色设置三、layui表格没有数据的时候&#xff0c;表头没有横向滚动条四、layui layer.open 弹窗全屏显示五、layui表格通过点击tr改变这一行的颜色六、 layer.open弹框弹出后父页面滚动问题七、LayUI下拉框中取值和…

Cuba勒索软件深度分析及防护建议

0 1. Cuba勒索软件的部署方式 Cuba勒索软件家族于2019年12月首次浮出水面。此后&#xff0c;该勒索软件家族背后的攻击者改变了策略和工具&#xff0c;成为2022年成为更普遍的威胁。该勒索软件历来通过Hancitor分发&#xff0c;通常通过恶意附件传递。 Hancitor也被称为Chani…

C++001-对比编程语言C++和python

文章目录C001-对比编程语言C和python编程语言发展史计算机 ENIAC机器语言&#xff1a;汇编语言&#xff1a;高级语言&#xff1a;机器汇编高级语言对比C语言与汇编不同高级语言的应用场景C和python语法对比Print Hello WorldPrint Hello 10 timesCreate a procedureCheck if li…

Kotlin的5种单例模式

前言最近在学习Kotlin这门语言&#xff0c;在项目开发中&#xff0c;运用到了单例模式。因为其表达方式与Java是不同的。所以对不同单例模式的实现进行了分别探讨。主要单例模式实现如下&#xff1a;饿汉式懒汉式线程安全的懒汉式双重校验锁式静态内部类式PS:该篇文章不讨论单例…

Windows并发测试工具

Apache安装目录cmd用ab并发测试工具&#xff0c;请求10次&#xff0c;并发为5ab -n 10 -c 5 http://www.ysbm.com/api.php/task/testBingfa

安装kali linuxnmap使用(一)

安装环境 vmware17 kali linux 怎么安装可以查看这个博主的文章 这么说你需要重置root密码 sudo passwd root 或者你打出node -v但是kali linux没有nodejs,则会询问你是否需要安装。开玩笑,你可以使用sudo 指令来获取权限(第一次输入需要你的密码) nmap 这是kali linux自带…

沁恒CH32V307单片机入门(02):官方库与工程模板介绍

文章目录目的官方库工程模板使用例程总结目的 现在开发单片机大多数时候都是面向库开发的&#xff0c;这里将简单介绍下CH32V307的官方库。 在开发过程中新建项目时通常会从某些模板开始&#xff0c;模板包含了库和初始化代码等内容&#xff0c;有一定的组织好的目录结构&…

【C++】模板

模板一、非类型模板参数二、模板的特化2.1 函数模板的特化2.2 类模板的特化2.2.1 全特化2.2.2 偏特化三、模板的分离编译一、非类型模板参数 模板参数分为类型形参与非类型形参。 类型形参&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之类的参数类型名称…

为什么 Go 不支持 []T 转换为 []interface

在 Go 中&#xff0c;如果 interface{} 作为函数参数的话&#xff0c;是可以传任意参数的&#xff0c;然后通过类型断言来转换。 举个例子&#xff1a; package mainimport "fmt"func foo(v interface{}) {if v1, ok1 : v.(string); ok1 {fmt.Println(v1)} else if…

【测试设计】使用jenkins 插件Allure生成自动化测试报告

前言 以前做自动化测试的时候一直用的HTMLTestRunner来生成测试报告&#xff0c;后来也尝试过用Python的PyH模块自己构建测试报告&#xff0c;在后来看到了RobotFramework的测试报告&#xff0c;感觉之前用的测试报告都太简陋&#xff0c;它才是测试报告应该有的样子。也就是在…

【01Studio MaixPy AI K210】25.云训练模型文件

采集数据 根据它云训练平台的要求&#xff0c;它要求的图片格式必须是224*224的&#xff08;重点之重点&#xff09;&#xff0c;所以可以利用K210跑脚本直接采集数据。 数据采集脚本 main.py实验名称&#xff1a;照相机 说明&#xff1a;通过按键拍照并在LCD上显示&#xff08…

windows自建免费无限的开源图片识别公式转换为Latex

一、准备 python3.9.6下载 在最开始勾选添加环境变量 https://www.python.org/ftp/python/3.9.6/python-3.9.6-amd64.exe 验证&#xff0c;右键终端&#xff08;管理员&#xff09;&#xff0c;输入&#xff1a;python --version安装Anaconda https://mirrors.bfsu.edu.cn/ana…

算法拾遗二十五之暴力递归到动态规划三

算法拾遗二十五之暴力递归到动态规划三最长回文子串返回象棋从一个位置到另一个位置的方法有多少种返回咖啡机从开始到干净的最短时间最长回文子串 测试链接&#xff1a;https://leetcode.cn/problems/longest-palindromic-subsequence/ 子序列&#xff1a;是可以不连续的 子…

kafka基本概念、springboot整合kafka、kafka常见问题

kafka基本概念 Kafka是一种高吞吐量、分布式、基于发布/订阅的消息系统。 基本概念&#xff1a; broker&#xff1a;就是一个kafka服务&#xff0c;可以有多个broker形成集群 toptic&#xff1a;每个broker里面可以有若干个toptic&#xff08;类似于标签&#xff0c;将消息分…

从Bug中学习--Bug根因分析法

从Bug中学习--Bug根因分析法 目录&#xff1a;导读 1、认识Bug 2、Bug的发现 3、Bug的产生 4、Bug的改进 5、总结 一提起测试&#xff0c;大多数人很容易就会联想到Bug。的确&#xff0c;测试的日常工作离不开Bug&#xff0c;测试工作很重要的一部分就是发现Bug。但是&#xf…

Coraza:一款功能强大的企业级OWASP Web应用程序防火墙

关于Coraza Coraza是一款功能强大的企业级OWASP Web应用程序防火墙框架&#xff0c;该工具基于Golang开发&#xff0c;不仅支持Modsecurity的Seclang语言&#xff0c;而且能够100%兼容OWASP核心规则集。 该工具完全开源&#xff0c;任何开发人员都可以根据自己的需求轻松完成…