【Vue基础-实践】数据可视化大屏设计(林月明螺蛳粉文化公司单量数据大屏)

目录

一、知识整理

1、页面自适应

2、下载插件px to rem & rpx

3、关于padding与margin

4、下载echarts

5、下载axios

6、experss官网接口创建

7、创建路由

8、api接口创建

9、设置基准路径

 10、跨域设置

11、图表设置

 12、地图数据引用

13、设置地图效果

二、文件说明

三、效果展示

四、问题解决

1、在页面自适应下载阿里团队插件时遇问题https fetch GET 200

2、中途ctrl+C结束了正在加载的内容,再次下载时报错up to date in 2m

3、node index.js时报8888端口被占用

4、检查浏览器时,报错uncaught (in promise)Error:Initialize failed: invalid dom...

5、【未解决】无法自适应缩放

6、【未解决】有chartData而非chartThree

7、玫瑰图未显示数据和名称

8、【未解决】端口号自动依次递增问题

9、项目打包

五、链接分享


一、知识整理

1、页面自适应

下载阿里团队插件

 npm install --save lib-flexible

打开lib-flexible.js文件,修改如下:

 //修改,最小值400 最大值2560if (width / dpr < 400) {width = 400 * dpr;}else if(width / dpr > 2560){width = 2560 * dpr;}//设置成24份,1920px设计稿 1rem就是80px(1920/80=24)var rem = width / 24;docEl.style.fontSize = rem + 'px';flexible.rem = win.rem = rem;

当页面大小变化时,浏览器检查数据会随之改变

2、下载插件px to rem & rpx

可以自动甲酸rem与px的转化值

3、关于padding与margin

//左侧:中间:右侧=3:5:3
//以下为中间区域样式.itemCenter{flex:5;height: 10.5rpx;border: 1px solid  rgb(183, 255, 0);padding: 0.125rem;margin: .25rem;}

代码运行效果如下(图1):

    

( padding: 0.125rem;margin: 0.25rem;)( padding: 0.125rem;margin: 1.25rem;)

   

( padding: 1.125rem;margin: 1.25rem;)( padding: 1.125rem;margin: 0.25rem;)

4、下载echarts

npm install --save echarts

在vue3中使用provide/inject依赖注入,替代vue2中在原型链上挂载的一些属性。
app.vue中使用provide来给后代们提供数据:

<script>
//1、引用proivde
import {provide} from "vue"
//2、引用echarts
import * as echarts from "echarts"
export default{setup(){provide("echarts",echarts)//第一个参数是名字 第二个参数是传递的内容},
}
</script>

在想使用的组件中使用inject来接收。
在view下的homePage.vue测试:

//引用inject
import {inject} from "vue"export default{components:{ItemPage,ItemOne,ItemTwo,ItemThree,ItemFour},setup(){//测试使用echartslet $echarts=inject("echarts")console.log($echarts)}
}
</script>

 

5、下载axios

npm install --save axios

 同上4,在vue3中使用provide/inject依赖注入,在想使用的组件中使用inject来测试接收。

6、experss官网接口创建

7、创建路由


创建文件夹LYMServer,新建router目录,存放one~four四个js文件,其中one.js文件代码如下,其他三个文件内容类似:

//存放路由的文件
let express=require("express")
let router=express.Router()
//设置路由
router.get("/data",(req,res)=>{res.send({msg:"我是one的路由地址"})
})
//暴露路由
module.exports=router;

 在LYMServer目录下新建index.js文件关联以上四个文件

index.js文件代码如下:

let express=require("express")
let app=express();
//引用路由文件
let chartOne=require("./router/one")
let chartTwo=require("./router/two")
let chartThree=require("./router/three")
let chartFour=require("./router/four")//使用中间件来配置路由
app.use("/one",chartOne)
app.use("/two",chartTwo)
app.use("/three",chartThree)
app.use("/four",chartFour)app.listen(8888)

 输入指令node index.js,打开浏览器搜素localhost:8888/one/data 

8、api接口创建

新建mock文件夹,在文件夹中创建四个json文件,其中one.json文件数据如下:

{"chartData":[{"title":"A牌螺狮粉","num":1000},{"title":"B牌螺狮粉","num":2000},{"title":"C牌螺狮粉","num":3000},{"title":"D牌螺狮粉","num":2500},{"title":"E牌螺狮粉","num":1500}]
}

若想引用该数据,在one.js中修改代码,如下,其他三个js文件同理:

终端重启指令 node index.js后,再刷新浏览器,展示效果如下:

9、设置基准路径

在APP.vue文件中

//设置基准路径
axios.defaults.baseURL="http://localhost:8888"

 这样itemOne.vue文件可以改写如下

     async function getState(){let oneData=await $http({url:"/one/data"});console.log(oneData.data.chartData)}

 10、跨域设置

在后端index.js中设置,设置后记得重启后端


//设置跨域
app.use(function(req,res,next){res.header('Access-Control-Allow-Origin','*');res.header('Access-Control-Allow-Headers','Content-Type,Content-Length, Authorization, Accept,X-Requested-with , yourHeaderFeild');res.header('Access-Control-Allow-Methods','PUT,POST,GET, DELETE,OPTIONS');

11、图表设置

myChart.setOption({grid:{top:"10%",left:"5%",right:"10%",bottom:"10%",containLabel:true},xAxis:{type:"value"},yAxis:{type:"category",data:xdata},//略
})

 12、地图数据引用

<template><div class="map"></div>
</template>
<script>
import axios from "axios";
import {onMounted,reactive} from "vue";
export default {   setup(){let mapData=reactive({});async function getState(){mapData=await axios.get("http://localhost:8081/map/china.json")}onMounted(()=>{getState().then(()=>{console.log("map",mapData)})})return {getState,mapData}}
}
</script>
<style>
.map{width:100%;height:100%;
}
</style>

13、设置地图效果

 myChart.setOption({geo:{map:"china",itemStyle:{areaColor:"#006e54",//萌葱色                borderColor:"#dccb18",//绿黄色"shadowColor:"#dbd0e6",//白藤色"                        shadowBlur:30,emphasis:{//点中某个省份,将隐藏其他省份focus:'self'}}}})

14、坐标轴

                 xAxis:{type:"category",data:data.data.chartData.chartData.day,axisLabel:{color:'#fff'}},yAxis:{type:"value",axisLabel:{color:'#fff'}}

15、图形上的标签设置

                        label:{//图形上显示文本标签formatter:"螺蛳粉",show:true,position:"inside",textStyle:{fontWeight:"bolder",fontSize:"8",color:"black",textBorderColor:"#dbd0e6",//文字描边,颜色textBorderWidth:1,//文字描边,宽度//textShadowColor:"#dbd0e6",// textShadowBlur:2,//文字本身的阴影长度// textShadowOffsetX:2,//文字本身的阴影 X 偏移// textShadowOffsetY:1//文字本身的阴影 Y 偏移},},

二、文件说明


后端主要放数据,前端主要做页面组件(通过路由引用后端数据),在homePage.vue中统一引用做的前端组件,如下:

<template><div><header><h1>林月明螺蛳粉文化公司单量数据大屏</h1></header><!--大容器--><section class="container"><!--左容器--><section class="itemLeft"><!--使用组件--><ItemPage><ItemOne></ItemOne></ItemPage>                   <ItemPage><ItemTwo></ItemTwo></ItemPage>                  </section><!--中容器--><section class="itemCenter"><h2></h2><MapPage/></section><!--右容器--><section class="itemRight"><!--使用组件--><ItemPage><ItemThree></ItemThree></ItemPage><ItemPage><ItemFour></ItemFour></ItemPage></section></section></div>
</template>
<script>
//引用组件
import ItemPage from "@/components/itemPage.vue"import ItemOne from "@/components/itemOne.vue"
import ItemTwo from "@/components/itemTwo.vue"
import ItemThree from "@/components/itemThree.vue"
import ItemFour from "@/components/itemFour.vue"
import MapPage from "@/components/mapPage.vue"
//引用inject
import {inject} from "vue"export default{components:{ItemPage,ItemOne,ItemTwo,ItemThree,ItemFour,MapPage},setup(){//测试使用echartslet $echarts=inject("echarts")      //测试使用axioslet $http=inject("axios")console.log($echarts)console.log($http)}
}
</script>
<style lang="less">header{height: 1.5rem;width: 100%;background-color: rgba(191, 255, 0, 0.2);//标题的文字样式h1{font-size: 0.75rem;color: #fff;text-align: center;line-height: 1.5rem;}}// 大容器样式进行设置.container{//最大最小宽度min-width: 1200px;max-width: 2048px;margin: 0 auto;//盒子上10px 左右10px 下0//若使用rem,页面会根据html根节点大小改变而改变padding: .125rem .125rem 0;//height: 500px;background-color: rgba(191, 255, 0, 0.5);//父容器设置display: flex;//设置左中右占比.itemLeft,.itemRight{flex:3;}.itemCenter{flex:5;height: 10.5rem;border: 1px solid  rgb(183, 255, 0);//外边距padding: 0.125rem;//内边距margin: 0.25rem;}}
</style>

三、效果展示

个人项目 ,非真实数据

四、问题解决

1、在页面自适应下载阿里团队插件时遇问题https fetch GET 200

解决方法:网速慢加载中多等待几分钟,或下载镜像

https://blog.csdn.net/m0_52861000/article/details/132413783

https://blog.csdn.net/m0_52861000/article/details/132412681?

2、中途ctrl+C结束了正在加载的内容,再次下载时报错up to date in 2m

解决方法:输入以下指令重新生成package.json

npm init 

注:如果重新加载还是报一样的错误,关掉项目再打开,再重新加载试试

3、node index.js时报8888端口被占用

解决方法:https://blog.csdn.net/u_ndefine_d/article/details/119774531

1)cmd查看端口被占用的程序号

netstat -aon|findstr "8888",查到当前占用的任务PID号为25280

2)ctrl+shift+esc 查到任务情况,结束该任务进程

3)再次输入node index.js时没有报端口被占用的错误了

4、检查浏览器时,报错uncaught (in promise)Error:Initialize failed: invalid dom...

解决方法:测试数据请求的数据,需先把itemOne.vue文件中echarts相关的注释掉,否则会报错

<template><div><h2>图表1</h2><div class="oneChart">图表容器</div></div>
</template>
<script>
//引用inject获取全局echarts
import {inject,onMounted} from "vue"export default {setup(){//得到echarts对象//let $echarts=inject("echarts")let $http=inject("axios")async function getState(){let oneData=await $http({url:"http://localhost:8888/one/data"});console.log(oneData)}onMounted(()=>{//调用请求getState()//测试数据请求的数据,需先把下面的注释掉,否则会报错// let myChart=$echarts.init(document.getElementById("oneChart"));// myChart.setOption({//     xAixs:{//         type:"value"//     },//     yAxis:{//         type:"category"//     },//     series:[//         {//             type:"bar"//         }//     ]// })})return{getState}}}
</script>
<style>
h2{/*48像素*/height: 0.6rem;color: #fff;line-height: 0.6rem;text-align: center;font-size: 0.25rem;
}
.chart{/*高度*/height: 4.5rem;background-color:rgba(191, 255, 0, 0.3);
}
</style>

 注释掉后,再重启npm run serve后,打开浏览器检查,可以获取到数据

5、【未解决】无法自适应缩放

当缩放页面时,组件中的图形、文字等未能自适应缩放,但是顶部主标题可以自适应缩放,目前还在找原因,可能是代码没写对或写错位置或漏写了。 

6、【未解决】有chartData而非chartThree

图3(玫瑰图)在浏览器检查数据获取时来源不是像老师那样显示chartThree而是chartData,以为是three相关设置没有处理好,查了下one的也是chartData而非chartOne,不清楚为什么。


//引用路由文件
let chartOne=require("./router/one")
let chartTwo=require("./router/two")
let chartThree=require("./router/three")
let chartFour=require("./router/four")//使用中间件来配置路由
app.use("/one",chartOne)
app.use("/two",chartTwo)
app.use("/three",chartThree)
app.use("/four",chartFour)

 

7、玫瑰图未显示数据和名称

 
解决方法:详情见https://blog.csdn.net/qq_42294095/article/details/134193340?spm=1001.2014.3001.5502
数据json文件中,注意value在前name在后!如下:

{"chartData":[{"value":1000,"name":"A牌"},{"value":2000,"name":"B牌"},{"value":3000,"name":"C牌"},{"value":2500,"name":"D牌"},{"value":1500,"name":"E牌"}]
}

8、【未解决】端口号自动依次递增问题

为什么npm run serve启动项目时,端口号已经从8080、8081、8082、8083依次变了,后面时候还会继续递增吗?为什么会有这样的变化?

9、项目打包

还没来得及打包项目,跟着视频继续学习中,可能以后会分享,欢迎指正...
感谢B站上千锋教育的老师!模仿您教的项目来实践林月明螺蛳粉文化公司单量数据大屏(数据我自己乱编的)。
虽然视频教程中不乏大佬评论太过小儿科,但于我而言,确实没学之前真不懂到底怎么实现可视化。自己仍处在小白阶段,唯多学多做,不断积累成长吧!毕竟,哪位大牛不是从1+1学起。

五、链接分享

1、express官网https://www.expressjs.com.cn/

2、echarts官网https://echarts.apache.org

3、千锋教育https://www.bilibili.com/video/BV14u411D7qK/?spm_id_from=333.999.0.0&vd_source=841fee104972680a6cac4dbdbf144b50

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

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

相关文章

3D高斯泼溅(Splatting)简明教程

在线工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 3D场景编辑器 3D 高斯泼溅&#xff08;Splatting&#xff09;是用于实时辐射场渲染的 3D 高斯分布描述的一种光栅化技术&#xff0c;它允许实时渲染从小图像样…

wandb 安装本地部署使用教程

1、官网注册 wandb.ai是一个为机器学习开发者提供的开发工具平台&#xff0c;可以帮助用户跟踪实验&#xff0c;管理和版本数据&#xff0c;以及与团队协作&#xff0c;从而更专注于构建最佳模型。 wandb官网&#xff1a; https://wandb.ai 首先我们打开官网注册号自己的账号并…

[自动化运维工具] Ansible的简单介绍与常用模块详解

文章目录 1. Ansible概述1.1 简介1.2 Ansible的特性1.3 Ansible的组件构成1.4 Ansible的工作原理 2. Ansible环境部署2.1 前置准备2.2 安装ansible2.3 查看基本信息2.4 配置远程主机清单 3. Ansible的常用模块3.1 ansible的基础命令格式3.2 Command模块3.2.1 基本格式和常用参数…

通过51单片机控制28byj48步进电机按角度正反转旋转

一、前言 本项目基于STC89C52单片机&#xff0c;通过控制28BYJ-48步进电机实现按角度正反转旋转的功能。28BYJ-48步进电机是一种常用的电机&#xff0c;精准定位和高扭矩输出&#xff0c;适用于许多小型的自动化系统和机械装置。 在这个项目中&#xff0c;使用STC89C52单片机…

跟着Nature Communications学作图:纹理柱状图+添加显著性标签!

&#x1f4cb;文章目录 复现图片设置工作路径和加载相关R包读取数据集数据可视化计算均值和标准差方差分析组间t-test 图a可视化过程图b可视化过程合并图ab 跟着「Nature Communications」学作图&#xff0c;今天主要通过复刻NC文章中的一张主图来巩固先前分享过的知识点&#…

Git同时配置Gitee和GitHub

Git同时配置Gitee和GitHub 一、删除原先ssh密钥二、生成密钥 这里的同时配置是针对于之前配置过单个gitee或者github而言的&#xff0c;如果需要看git从安装开始的配置&#xff0c;则可以看这一篇文章 git安装配置教程 一、删除原先ssh密钥 在C盘下用户/用户名/.ssh文件下找到…

ESP32S3入手体验测试

ESP32S3入手体验测试 &#x1f516;所入手的型号是YD-ESP32-S3 N16R8,该款和乐鑫官方推出的ESP32-S3-DevKitC-1配置差不多。 &#x1f388;乐鑫官方介绍&#xff1a;ESP32-S3-DevKitC-1 v1.1 &#x1f530;两者采用的模组&#xff1a;ESP32-S3-WROOM-1 和ESP32-S3-WROOM-1U模组…

“Java与Redis的默契舞曲:优雅地连接与存储数据“

文章目录 引言1. Java连接上Redis2. Java对Redis进行存储数据2.1 存储set类型数据2.2 存储hash类型数据2.3 存储list类型数据 总结 引言 在现代软件开发中&#xff0c;数据存储和处理是至关重要的一环。Java作为一门强大的编程语言&#xff0c;与Redis这个高性能的内存数据库相…

2023-11 | 短视频批量下载/爬取某个用户的所有视频 | Python

这里以鞠婧祎的个人主页为demo https://www.douyin.com/user/MS4wLjABAAAACV5Em110SiusElwKlIpUd-MRSi8rBYyg0NfpPrqZmykHY8wLPQ8O4pv3wPL6A-oz 【2023-11-4 23:02:52 星期六】可能后面随着XX的调整, 方法不再适用, 请注意 找到接口 找到https://www.douyin.com/aweme/v1/web/…

C++ map 的使用

下面的是关于 map 的介绍。来自 map - C Reference (cplusplus.com) 的翻译&#xff0c;您可以看也可以不看哈&#xff01; map 是关联容器&#xff0c;它按照特定的次序(按照 key 来比较)存储由键值 key 和值 value组合而成的元素。在 map 中&#xff0c;键值 key 通常用于排序…

linux 创建git项目并提交到gitee(保姆式教程)

01、git安装与初始化设置 mhzzjmhzzj-virtual-machine:~/work/skynetStudy$ apt install mhzzjmhzzj-virtual-machine:~/work/skynetStudy$ git config --global user.name "用户名" mhzzjmhzzj-virtual-machine:~/work/skynetStudy$ git config --global user.ema…

Python自定义函数练习(持续更新中~)

1.计算矩阵的面积和周长&#xff1a; class Rectangle:def __init__(self, width, height):self.width widthself.height heightdef area(self):return self.width * self.heightdef perimeter(self):return 2 * (self.width self.height)if __name__ "__main__"…

AtCoder Beginner Contest 327 G. Many Good Tuple Problems(带标号二分图计数+有区别小球放入有区别盒子)

题目 一个长为n(n<30)的原始序列x&#xff0c;x[i]可以取值0或1 一个长为m(m<1e9)的点对序列(s,t)&#xff0c; s序列第i项和t的第i项&#xff0c;均可以取值[1,n]&#xff0c; 如果构造好s和t后&#xff0c;对任意都存在01序列x使得&#xff0c; 则称这个序列是合法…

【RabbitMQ】 RabbitMQ 消息的延迟 —— 深入探索 RabbitMQ 的死信交换机,消息的 TTL 以及延迟队列

文章目录 一、死信交换机1.1 什么是死信和死信交换机1.2 死信交换机和死信队列的创建方式 二、消息的 TTL2.1 什么是消息的 TTL2.2 基于死信交换机和 TTL 实现消息的延迟 三、基于 DelayExchang 插件实现延迟队列3.1 安装 DelayExchang 插件3.2 DelayExchang 实现消息延迟的原理…

perl列表创建、追加、删除

简介 perl 列表追加元素 主要是通过push和unshift函数来实现。其中&#xff0c;push是追加到列表尾&#xff0c;unshift是追加到列表头。 perl列表删除元素 主要是通过pop和shift函数来实现。其中&#xff0c;pop是从列表尾删除一个元素&#xff0c; shift是从列表头删除一…

6大场景,玩转ChatGPT!

文章目录 一、故事叙述提问举例 二、产品描述提问举例 三、报告撰写提问举例 四、邮件和信件撰写提问举例 五、新间稿和公告撰写提问举例 六、学术论文和专业文章撰写提问举例 本文是在GPT3.5版本下演示的 我们知道AI技术不仅能够自动生成文章和内容&#xff0c;还可以根据我们…

【大数据】NiFi 中的重要术语

NiFi 中的重要术语 1.Flow Controller2.Processor3.Connection4.Controller Service5.Process Group6.FlowFile 那些一个个黑匣子称为 Processor&#xff0c;它们通过称为 Connection 的队列交换名为 FlowFile 的信息块。最后&#xff0c;FlowFile Controller 负责管理这些组件…

XSAN数据恢复-存储空间架构迁移时误格式化存储系统的XSAN数据恢复案例

XSAN数据恢复环境&#xff1a; 昆腾存储&#xff0c;MAC OS操作系统&#xff0c;存放视频类数据&#xff08;MXF、MOV等格式文件&#xff09;。 XSAN故障&检测&#xff1a; 将存储空间从XSAN架构迁移到STORNEXT架构后&#xff0c;存储空间中数据全部丢失。 故障存储中一共…

蓝桥杯官网填空题(方格计数)

题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 如下图所示&#xff0c;在二维平面上有无数个 11 的小方格。 我们以某个小方格的一个顶点为圆心画一个半径为 50000 的圆。 你能计算出这个圆里有多少个完整的小方…

Azure 机器学习 - 设置 AutoML 训练时序预测模型

目录 一、环境准备二、训练和验证数据三、配置试验支持的模型配置设置特征化步骤自定义特征化 四、可选配置频率和目标数据聚合启用深度学习目标滚动窗口聚合短时序处理非稳定时序检测和处理 五、运行试验六、用最佳模型进行预测用滚动预测评估模型精度预测未来 七、大规模预测…