位置: IT常识 - 正文

VUE3.2 + vue-echarts + DataV 数据可视化大屏(项目)

编辑:rootadmin
VUE3.2 + vue-echarts + DataV 数据可视化大屏(项目) 1 开发背景

推荐整理分享VUE3.2 + vue-echarts + DataV 数据可视化大屏(项目),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

如今信息化高速发展,各式各样的数据层出不穷,如何能够掌握相应的数据并将数据整合,再通过可视化的方式呈现到客户的眼前,如何能过一眼望去就对整个公司的运行和及时发现可能存在的隐患,数据可视化是一个不可忽视的部分。利用好数据可视化,辅佐公司高层更好的进行决策和预警。

2 技术构成总览:构成:

web 标准简单来说可以分为结构、表现和行为。

结构方面使用html5 标签尽量采用语义化的标签,少用div这种无语义的标签

表现方面使用less,less比css更有逻辑性,是css的预处理器,扩充了css

行为方面使用vue3.2,vue3.2的语法糖使代码更加简便可读,可以省略很多步骤,但是vue3.2的reactive解构会失去响应式,使用ref又要加.value,有点繁琐

可视化数据图表方面使用vue-echarts,vue-echarts能够使用更少的代码去完成图表

数据传输方面使用axios,axios比ajax更适合现在前端的MVVM的浪潮

装饰和边框方面,使用DataV,DataV里面有很多炫酷的边框、装饰和功能,随拿随用,但是存在很多兼容性问题

布局方面,采用总体采用flex布局和rem实现,将不同部分划分为不同的组件.vue,例如按图表划分成不同组件,便于后期维护,也便于复用。另外,整体设计为响应式,确保在PC端不同 的分辨率下保证可读性

3 整体项目3.1 预览

main.js:

import { createApp } from 'vue'import App from './App.vue'import axios from 'axios'import * as echarts from 'echarts'import ECharts from 'vue-echarts'import 'lib-flexible/flexible.js'import dataV from '@jiaminghi/data-view'const app = createApp(App)app.config.globalProperties.$http = axiosapp.config.globalProperties.echarts = echartsapp.use(dataV)app.component('v-chart', ECharts)app.mount('#app')

项目预览地址:http://47.106.144.95/

3.2 分析

大概分为header、centre、footer部分,分别对应上面文件结构图的header、centre、footer文件夹

header部分主要是标题,导航(未完成)。

centre部分又分为三个大块,左 中 右,左右部分又可以划分为四个组件,这四个组件可以随时替换,中间部分分为:雷达车间AVG运行动图 和 带数字翻牌器的数据统计

footer部分主要是横幅走马灯,播报信息或者欢迎词

4 代码部分4.1 header部分<script setup>import { onMounted, ref } from "vue";function getTime() {return new Date().toLocaleString();}var datetime = ref(new Date().toLocaleString())onMounted(() => {datetime.value = getTime();setInterval(() => {datetime.value = getTime();}, 1000)})</script>

其中:

获取当前时间,并每秒计时,利用响应式实现时间流动

4.2 centre部分4.2.1左右部分划分的四个组件,采用插槽的方式,最大程度复用宽高样式app.vue中

使用ItemPage.vue保证插入图表宽高复用

ItemPage.vue4.2.2 图表组件水波图:template中

其中:

dv-border-box-11 是DataV的边框组件

v-chart是vue-echart中的标签,其中的属性option和echarts用法一样,使用vue的reactive将option响应式之后将option绑定到v-chart中(可能会有响应式失效的问题);autoresize是图表根据父元素宽高进行响应式更新;

script中

其中:

echarts-liquidfill是echarts的水波图,将series中的type设置为liquidFill即可

将option使用reactive响应式赋值

多折线图:template中:script中:

其中:

多折线图的日期为最近的七日,用计算属性稍微加工一下即可

问题:

堆叠折线图复制官网数据代码,y轴数据错乱

解决办法:

series每一组数据的stack: “Total”去掉或者设置成不同的值

象形柱图(已完成但是未展示出来的组件)(特殊的象形柱图):展示:template都一样,以下不展示script中:<script setup>import { reactive } from "vue"const maxData = 2000;const IMG = "image://" + require('@/assets/img/people.png')//背景图const option = reactive({tooltip: {},xAxis: {max: maxData,splitLine: { show: false },offset: 10,axisLine: {lineStyle: {color: '#999'}},// axisLabel: {// margin: 10// }},yAxis: {data: ['A1车间', 'B1车间', 'Waterpik', '皓醒湾车间', '苏打水车间'],inverse: true,axisTick: { show: false },axisLine: { show: false },axisLabel: {// margin: 10,color: '#fff',fontSize: 16}},grid: {top: 'center',height: 250,left: 100,right: 60},series: [{type: 'pictorialBar',symbol: IMG,symbolRepeat: 'fixed',symbolMargin: '5%',symbolClip: true,symbolSize: 30,symbolBoundingData: maxData,data: [891, 1220, 660, 1670, 500],markLine: {symbol: 'none',label: {formatter: 'max: {c}',position: 'start'},lineStyle: {color: 'green',type: 'dotted',opacity: 0.2,width: 2},},z: 10},{type: 'pictorialBar',itemStyle: {opacity: 0.2},Size: 18,animationDuration: 0,symbolRepeat: 'fixed',symbolMargin: '5%',symbol: IMG,// symbol: 'diamond',symbolSize: 30,symbolBoundingData: maxData,data: [891, 1220, 660, 1670, 200],z: 5}]})</script>动态轮播表:template中:

其中:

dv-scroll-board 为DataV的轮播表组件,config为script中配置的轮播表配置

问题:

dv-scroll-board配置config中加入表头时出现问题,表中数据会塌陷,宽度为0不显示

解决办法:

自制表头

script中:

具体配置信息可以参考dataV官网

数字翻牌器:父组件(规定样式,获取初始值,实时获取改变后的值,将值传给子)

template中:

其中:

VUE3.2 + vue-echarts + DataV 数据可视化大屏(项目)

将num父传子,使用props传值,使用v-model使其响应式

title变化不大,因此没有赋值响应式

script中:

其中:

初始值是死数据,后期可以转变为axios获取,再用ref赋值

在onMounted中挂载一个定时器,模拟数据更新

在onUnmounted中卸载定时器,避免不必要的浪费

由于vue3.2中没有this获取全局变量,使用getCurrentInstance()获取currentInstance,再通过.appContext.config.globalProperties获取全局属性

子组件

template中

其中:

通过props.title获取父传值

dv-digital-flop是dataV中的数字翻牌器功能,将配置好的config配置进config即可

script中:

其中:

使用defineProps接收父传过来的值,并用type规定类型,设置默认值

将num配置到config中

用watch监听num,实现当props.num改变,动态改变config的值

问题:

当num改变时,config改变,但是页面没有变化,响应式失效

解决办法:

使用watch解构赋值

雷达图+动态小车地图template中:

其中:

dv-decoration-12为dataV的雷达图,在此用作背景

script中:<script setup>import { getCurrentInstance, ref } from 'vue';import * as echarts from 'echarts'import svgtest from '@/assets/img/3.svg'const currentInstance = getCurrentInstance()const { $http } = currentInstance.appContext.config.globalPropertiesvar option = ref({})$http.get(svgtest).then(res => {echarts.registerMap('zhusuchejian', {svg: res.data})option.value = ({tooltip: {},geo: {map: 'zhusuchejian',layoutSize: '150%',zoom: 1.2,},series: [{name: 'Route',type: 'lines',coordinateSystem: 'geo',geoIndex: 0,emphasis: {label: {show: false}},polyline: true,lineStyle: {color: '#c46e54',width: 0},effect: {show: true,period: 8,trailLength: 0,symbolSize: [12, 30],symbol:'path://M87.1667 3.8333L80.5.5h-60l-6.6667 3.3333L.5 70.5v130l10 10h80l10 -10v-130zM15.5 190.5l15 -20h40l15 20zm75 -65l-15 5v35l15 15zm-80 0l15 5v35l-15 15zm65 0l15 -5v-40l-15 20zm-50 0l-15 -5v-40l15 20zm 65,-55 -15,25 c -15,-5 -35,-5 -50,0 l -15,-25 c 25,-15 55,-15 80,0 z'},z: 100,data: [{effect: {color: '#a10000',constantSpeed: 100,delay: 0},coords: [[30, 200],[790, 200],[790, 50],[460, 50],]},{effect: {color: '#00067d',constantSpeed: 80,delay: 0},coords: [[30, 430],[790, 430],[790, 50],[460, 50],]},{effect: {color: '#997405',constantSpeed: 60,delay: 0},coords: [[30, 485],[790, 485],[790, 50],[460, 50],]},{effect: {color: '#997405',constantSpeed: 60,delay: 0},coords: [[30, 710],[790, 710],[790, 50],[460, 50],]},{effect: {color: '#997405',constantSpeed: 60,delay: 0},coords: [[30, 770],[790, 770],[790, 50],[460, 50],]},{effect: {color: '#997405',constantSpeed: 60,delay: 0},coords: [[30, 990],[790, 990],[790, 50],[460, 50],]}]}]});})</script>

其中:

$http为将axios全局配置的别名

registerMap中放做好的svg图

雷达图设置图层靠后实现背景

问题:

svg不能直接导入使用

解决办法:

导入后使用axios获取

还有一些组件没有放上来,但是代码和上面的差不多柱状图饼状图

等等就不在赘述。

4.3 footer部分template中:

其中:

使用ref标记横幅走马灯的部分

script中:

其中:

vue3.2中没有this.$ref直接在script中用ref响应式赋值一个同名的slogan即可找到标记ref的template

问题:

直接调用方法sloganMove无效,因为vue3.2中setup中为oncreate的生命周期内,此时html还未渲染完成,找不到相应的slogan的属性

解决办法:

将sloganMove放入onMounted中,挂在完成后操作

5 结语

代码十分粗糙简陋所以暂未发布到github,等后期技术积累起来完善功能后再发布。

写博客不易,有兴趣的话点个赞。

作为一个前端小白,第一次独立完成vue+echarts项目,内容还很粗糙,技术也很浅薄,有很多问题和不理解的地方,如有不对的地方,欢迎指正。

欢迎评论 💬点赞👍🏻 收藏 📂加关注+

本文链接地址:https://www.jiuchutong.com/zhishi/298398.html 转载请保留说明!

上一篇:【Go Web开发】Web初识、RESTful架构和RESTful API详解、Gin框架的安装和简单使用(go开发web项目)

下一篇:VUE 中项目启动没有问题,代码中 script 标签有蓝色波浪线标注(vue项目启动过程)

  • 闲鱼怎么取消芝麻信用授权(闲鱼怎么取消芝麻应用授权)

    闲鱼怎么取消芝麻信用授权(闲鱼怎么取消芝麻应用授权)

  • va与ips区别(va 和ips的区别)

    va与ips区别(va 和ips的区别)

  • qq资料卡点赞怎么变多(qq资料卡点赞怎么买)

    qq资料卡点赞怎么变多(qq资料卡点赞怎么买)

  • QQ群怎么统计单身人数的(qq群如何统计聊天数量)

    QQ群怎么统计单身人数的(qq群如何统计聊天数量)

  • 微软是啥(微软是啥意思有什么作用)

    微软是啥(微软是啥意思有什么作用)

  • 华为手机怎样添加桌面天气和时间(华为手机怎样添加联系人)

    华为手机怎样添加桌面天气和时间(华为手机怎样添加联系人)

  • 苹果耗电快正常吗(苹果耗电很快)

    苹果耗电快正常吗(苹果耗电很快)

  • 是不是所有的手机都可以开空调(是不是所有的手机都可以投屏)

    是不是所有的手机都可以开空调(是不是所有的手机都可以投屏)

  • 微信卸载了怎么登录(微信卸载了怎么恢复原来的微信)

    微信卸载了怎么登录(微信卸载了怎么恢复原来的微信)

  • 小米手环2变暗还有救吗(小米手环2变暗了还有什么用途)

    小米手环2变暗还有救吗(小米手环2变暗了还有什么用途)

  • surface触控笔点屏幕没反应(surface触控笔点击屏幕没反应)

    surface触控笔点屏幕没反应(surface触控笔点击屏幕没反应)

  • 荣耀手机怎么设置时间(荣耀手机怎么设置锁屏壁纸)

    荣耀手机怎么设置时间(荣耀手机怎么设置锁屏壁纸)

  • iphone11可以用pencil吗(Iphone11可以用2.4A充电器吗)

    iphone11可以用pencil吗(Iphone11可以用2.4A充电器吗)

  • 华为mate30防水怎么样(华为手机mate30防水)

    华为mate30防水怎么样(华为手机mate30防水)

  • 小米6x啥时候更新miui11(小米6x啥时候更新)

    小米6x啥时候更新miui11(小米6x啥时候更新)

  • iphone照片导出(iphone照片导出至电脑window)

    iphone照片导出(iphone照片导出至电脑window)

  • 小米9支持18w快充吗(小米9最快支持多少w)

    小米9支持18w快充吗(小米9最快支持多少w)

  • iPhone11pro怎么恢复被删照片(苹果11pro还原)

    iPhone11pro怎么恢复被删照片(苹果11pro还原)

  • 电脑长时间不动黑屏怎么取消(电脑长时间不动就黑屏怎么办)

    电脑长时间不动黑屏怎么取消(电脑长时间不动就黑屏怎么办)

  • 手机吃鸡能不能投屏(手机吃鸡能不能换区)

    手机吃鸡能不能投屏(手机吃鸡能不能换区)

  • 手机克隆只能华为用吗(手机克隆是不是只能克隆到华为手机)

    手机克隆只能华为用吗(手机克隆是不是只能克隆到华为手机)

  • 华为手机浮窗在哪里打开和关闭(华为手机浮窗在哪里取消)

    华为手机浮窗在哪里打开和关闭(华为手机浮窗在哪里取消)

  • 如何开启微信运动步数(如何开启微信运动记录步数)

    如何开启微信运动步数(如何开启微信运动记录步数)

  • 手机浮窗怎么去掉(手机屏幕上的浮窗怎么取消)

    手机浮窗怎么去掉(手机屏幕上的浮窗怎么取消)

  • 内存条怎么看型号(内存条怎么看型号PC4)

    内存条怎么看型号(内存条怎么看型号PC4)

  • 虎杖的养殖方法(虎杖的养殖方法和用量)

    虎杖的养殖方法(虎杖的养殖方法和用量)

  • 简述YOLOv8与YOLOv5的区别(yolov3与yolov2)

    简述YOLOv8与YOLOv5的区别(yolov3与yolov2)

  • 外国企业无偿援助的进口设备
  • 政府收回土地补偿款是否缴纳土地增值税
  • 个人免征税额
  • 进口关税怎么做分录
  • 行政事业单位购买固定资产的流程
  • 上月社保未扣款怎么回事
  • 教育培训学校怎么翻译
  • 公司买大米怎么做账
  • 资产减值损失结转到哪个科目
  • 销售货物产生的运费如何开票
  • 计提和缴纳企业所得税分录
  • 会计核算制度包括哪些准则
  • 有形动产租赁简易征收适用哪些业务
  • 计提出口关税会计分录
  • 行业协会需要办理税务登记证吗
  • 附追索权的应收债权出售的会计处理
  • 私车公用税务政策性文件
  • 企业出租屋顶不需要缴税!
  • 以货抵债会计处理
  • 公司买回来做样衣的服装怎么做会计分录?
  • 借支报销流程
  • 抵扣发票勾选到哪个科目
  • 1697509029
  • 起诉销售
  • 苹果键盘快捷键怎么用
  • 专用发票红字发票怎么开
  • 华为鸿蒙系统怎么看安卓版本
  • 研发费用加计扣除优惠明细表
  • mac截图如何保存到照片
  • win10纯净版下载联想驱动
  • 虚拟机怎么安装gcc
  • 工资薪金与劳务报酬的区别有哪些
  • macOS Catalina10.15.4值得升级吗 macOS Catalina10.15.4更新了什么
  • 增值税发票红字发票怎么开具
  • 在php中,字符串有哪些表示形式
  • 企业收到的保险理赔款会计分录
  • Sandilands省级森林中被白霜覆盖的番红花,加拿大曼尼托巴 (© Jaynes Gallery/Danita Delimont)
  • 独立核算的基金是会计主体吗
  • phpinfo()中Loaded Configuration File(none)的解决方法
  • 自动驾驶感知决策控制
  • maven jni
  • 图像分割csdn
  • 前端 大前端
  • 建筑企业其他应付款
  • 调用系统服务出错原因
  • 全年一次性奖金单独计税还是并入
  • 中标违约保证金怎么算
  • 客户少给了钱怎么要
  • wordpress限制下载次数
  • mac的配置
  • sql报数字溢出
  • 国税实名认证手机号如何解绑
  • 资产负债表和利润表的区别
  • 进项税大于销项税怎么结转
  • 固定资产转让损失怎么算
  • 税金及附加减半征收金额按哪个
  • mysql复制粘贴
  • 辞退福利的会计分录怎么写
  • 中标费用入什么科目
  • 销售发生亏损如何记账
  • 工会账户收到经费的会计科目
  • 专用发票冲红有时间有时间限制吗
  • 营业费用包括哪些?
  • 当你想弥补想还清
  • 房产税什么时候开始征收2023
  • 一般纳税人加工费怎么做账
  • 预览版与正式版
  • windows10 rs2
  • xp操作系统还能用吗
  • 安装win7系统后无法引导启动
  • window打开
  • preorder遍历
  • ghost32命令参数
  • android数据存储总结
  • jquery foreach循环
  • android:fragment
  • python对比go
  • 税务巡视组一般检查什么
  • 税控盘登陆失败
  • 各国进口汽车综合税率表
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设