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

news2024/11/24 15:00:30

目录

一、知识整理

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 最大值2560
        if (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(){
        //测试使用echarts
        let $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(){
        //测试使用echarts
        let $echarts=inject("echarts")      
        //测试使用axios
        let $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.coloradmin.cn/o/1174041.html

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

相关文章

【MySQL】数据库MySQL基础知识与操作

作者主页&#xff1a;paper jie_博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《MySQL》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力)打造&a…

聊一聊关于手机Charge IC的电流流向

关于手机Charge&#xff0c;小白在以前的文章很少讲&#xff0c;一是这部分东西太多&#xff0c;过于复杂。二是总感觉写起来欠缺点什么。但后来想一想&#xff0c;本是抱着互相学习来写文章的心理态度&#xff0c;还是决定尝试写一些。 关于今天要讲的关于手机Charge的内容&a…

软件测试具体人员分工

最近看了点敏捷测试的东西&#xff0c;看得比较模糊。一方面是因为没有见真实的环境与流程&#xff0c;也许它跟本就没有固定的模式与流程&#xff0c;它就像告诉人们要“勇敢”“努力”。有的人在勇敢的面对生活&#xff0c;有些人在勇敢的挑战自我&#xff0c;有些人在勇敢的…

SLAM从入门到精通(被忽视的基础图像处理)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 工业上用激光slam的多&#xff0c;用视觉slam的少&#xff0c;这是大家都知道的常识。毕竟对于工业来说&#xff0c;健壮和稳定是我们必须要考虑的…

电脑文件批量重命名攻略:高效操作技巧助您轻松完成任务

在日常使用电脑时&#xff0c;我们经常需要对文件进行重命名。当文件数量众多时&#xff0c;手动重命名既耗时又容易出错。此时&#xff0c;借助一些实用技巧&#xff0c;我们可以轻松地完成电脑文件的批量重命名。本文将提供一份全面的电脑文件批量重命名攻略&#xff0c;帮助…

k8s之service五种负载均衡byte的区别

1&#xff0c;什么是Service&#xff1f; 1.1 Service的概念​ 在k8s中&#xff0c;service 是一个固定接入层&#xff0c;客户端可以通过访问 service 的 ip 和端口访问到 service 关联的后端pod&#xff0c;这个 service 工作依赖于在 kubernetes 集群之上部署的一个附件&a…

产品实习笔记——会员体系 积分体系

文章目录 引入会员体系1. 业务逻辑产品化2. 产品逻辑可视化2.1 成长值&#xff1a;会员等级的判断机制2.1.1 成长值的获得2.1.1 成长值的消耗 2.2 会员等级区间划分2.3 成长值风控体系2.4 会员权益2.4.1 普通会员权益2.4.2 阶梯式会员权益 积分体系有赞商城&#xff08;会员体系…

YOLOv8-Seg改进:动态稀疏注意力(BiLevelRoutingAttention) | CVPR2023

🚀🚀🚀本文改进:动态稀疏注意力(BiLevelRoutingAttention),实现更灵活的计算分配和内容感知,使其具备动态的查询感知稀疏性,引入到YOLOv8-Seg任务中,1)与C2f结合实现二次创新;2)注意力机制使用; 🚀🚀🚀BiLevelRoutingAttention 亲测在番薯破损分割任务…

听GPT 讲Rust源代码--library/std(16)

题图来自 EVALUATION OF RUST USAGE IN SPACE APPLICATIONS BY DEVELOPING BSP AND RTOS TARGETING SAMV71[1] File: rust/library/std/src/sync/mpmc/select.rs 在Rust标准库中&#xff0c;rust/library/std/src/sync/mpmc/select.rs文件的作用是实现一个多生产者多消费者的选…

Java-Hbase介绍

1.1. 概念 base 是分布式、面向列的开源数据库&#xff08;其实准确的说是面向列族&#xff09;。HDFS 为 Hbase 提供可靠的 底层数据存储服务&#xff0c;MapReduce 为 Hbase 提供高性能的计算能力&#xff0c;Zookeeper 为 Hbase 提供 稳定服务和 Failover 机制&#xff0c…

如何远程访问WAMP搭建的内网Web站点?

花生壳是由贝锐自主研发的域名解析工具&#xff0c;可帮助用户实现外网访问到局域网内搭建的各类办公系统。以发布网站服务为例&#xff0c;下面就给大家演示下如何通过花生壳实现外网访问WAMP站点。 1. 搭建WAMP站点 &#xff08;1&#xff09;首先&#xff0c;用户需在本地…

leetcode-经典面/笔试题目

1.消失的数字 面试题 17.04. 消失的数字 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/missing-number-lcci/ 这个题目当然有好几种解法&#xff0c;这里我推荐一种比较优秀的思路&#xff0c;也就是单身狗思路&#xff1a;异或。 异或的特点是相异…

(免费领源码)小程序+spring boot+masql校园志愿者管理系统99213-计算机毕业设计项目选题推荐

摘 要 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;校园志愿者管理系统被用户普遍使用&#xff0c;为方便用户…

JavaScript的作用域和作用域链

作用域 ● 作用域&#xff08;Scoping&#xff09;&#xff1a;我们程序中变量的组织和访问方式。"变量存在在哪里&#xff1f;“或者"我们可以在哪里访问某个变量&#xff0c;以及在哪里不能访问&#xff1f;” ● 词法作用域&#xff08;Lexical scoping&#xff…

torch.cumprod实现累乘计算

cumprod取自“cumulative product”的缩写&#xff0c;即“累计乘法”。 数学公式为&#xff1a; y i x 1 x 2 x 3 . . . x i y_ix_1\times{x_2}\times{x_3}\times{...}\times{x_i} yi​x1​x2​x3​...xi​ 官方链接&#xff1a;torch.cumprod 用法&#xff1a; impo…

计算机网络第4章-IPv4

IPv4数据报格式 IPv4数据报格式如下图所示 其中&#xff0c;有如下的关键字段需要特别注意&#xff1a; 版本&#xff08;号&#xff09;&#xff1a; 版本字段共4比特&#xff0c;规定了数据报的IP协议版本。通过查看版本号吗&#xff0c;路由器能确定如何解释IP数据报的剩…

apache-tomcat-9.0.29 安装配置教程

链接&#xff1a;https://pan.baidu.com/s/100buXYpn8w8xjI2KdvHk2Q?pwd2mwc 提取码&#xff1a;2mwc 1.将压缩包解压到指定文件夹下 2.进入bin文件夹下 3.找到setclasspath.bat文件 4.推荐用notepad打开文件&#xff0c;并做如下配置&#xff08;可解决tomcat启动闪退问题&…

No Presto metadata available for docker-ce-stable

Linux CentOS中执行Docker一键安装脚本报错&#xff1a; No Presto metadata available for docker-ce-stable 执行以下命令可以解决&#xff0c;整个过程比较耗费时间&#xff0c;请耐心等待。 yum install docker-ce -y

reactor(百万并发服务器) - 2

这是连续剧般的文章&#xff0c;请关注&#xff0c;持续更新中... 系列文章: http://t.csdnimg.cn/Os83Qhttp://t.csdnimg.cn/Os83Q这篇文章将我们的reactro转变成http服务器... HTTP HTTP介绍 HTTP是一个基于TCP通信协议的基础上的应用层协议。接下来我们需要解析HTTP请求消息…

【一、http】go的http基本请求方法

1、http的基本请求 package mainimport ("bytes""fmt""io""net/http""net/url" )func post(){r, err : http.Post("http://httpbin.org/post", "", nil)if err ! nil {fmt.Println("ss")}de…