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

本文主要是介绍【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

这篇关于【Vue基础-实践】数据可视化大屏设计(林月明螺蛳粉文化公司单量数据大屏)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/350947

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

【 html+css 绚丽Loading 】000046 三才归元阵

前言:哈喽,大家好,今天给大家分享html+css 绚丽Loading!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 📚一、效果📚二、信息💡1.简介:💡2.外观描述:💡3.使用方式:💡4.战斗方式:💡5.提升:💡6.传说: 📚三、源代码,上代码,可以直接复制使用🎥效果🗂️目录✍️

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd