Vue3+Data-V实现可视化大屏页面布局

目录

一、前言

二、环境准备

1.Vue3安装npm create vue@latest

2.Data-V配置

项目Data-v安装

 main.js中注册Data-v到全局

​编辑可使用按需引入

3.测试 

三、导航栏路由跳转配置

1.子组件mainNav组件准备

2.父组件准备导航栏参数传递

3.子组件接收父组件参数

4.导航栏参数

5.导航栏路由配置

 6.实现导航栏

四、data-v组件布局首页

五、实现页面图

六、总结

七、代码仓库


一、前言

  随着数据可视化技术的快速发展,越来越多的企业和开发者开始关注如何将复杂的数据以直观的方式展现出来。大屏可视化作为一种高效的信息传达方式,广泛应用于商业展示、数据分析和决策支持等场景。

   在本文中,我们将探讨如何利用 Vue 3 和 Data-V 框架来创建一个可视化的大屏页面布局。Vue 3 作为一个灵活高效的前端框架,提供了强大的组件化能力,便于开发者构建复杂的用户界面。而 Data-V 则是一个专为数据可视化设计的组件库,提供了丰富的图表和可视化组件,能够帮助我们快速实现数据的可视化展示。

二、环境准备

1.Vue3安装npm create vue@latest

创建一个vue项目

npm create vue@latest

 选择项目配置

启动项目

$ cd <your-project-name>

$ npm install

$ npm run dev  

2.Data-V配置

项目Data-v安装

npm install @kjgl77/datav-vue3

 main.js中注册Data-v到全局

import DataVVue3 from '@kjgl77/datav-vue3'

可使用按需引入

import { borderBox1 } from '@kjgl77/datav-vue3'

Vue.use(borderBox1)

3.测试 

进入官网Loading加载 | DataV测试loading组件

组件中测试

测试成功

三、导航栏路由跳转配置

1.子组件mainNav组件准备

<template>
	<ElMenu mode="horizontal" :active-name="currentActiveNav" @select="tolink">
		<ul class="main-nav-item">
			<li class="ivu-menu-item" v-for="item in nav" :key="item.name"
				:class="{ 'ivu-menu-item-active': currentActiveNav === item.name }">
				<a @click.prevent="tolink(item.name)">{{ item.meta.title }}</a>
			</li>
		</ul>
	</ElMenu>
</template>

2.父组件准备导航栏参数传递

 <!-- 导航栏区域 -->
                <main-nav :nav="nav" :activeNav="activeNav" class="main-nav" />

 父组件中父传子nav

<script setup>
import { ref } from 'vue';
import mainNav from '../../component/other/mainNav.vue';
//激活的导航栏
const activeNav = ref('goosesleep');
// 定于导航栏
const nav = ref([
    { name: 'goosesleep', link: '/goosesleep', meta: { title: '鹅舍' } },
    { name: 'gooseborn', link: '/gooseborn', meta: { title: '孵化室' } },
    { name: 'gooseson', link: '/gooseson', meta: { title: '家系栏' } },
    { name: 'gooseweather', link: '/gooseweather', meta: { title: '脱温室' } }
]);
</script>

3.子组件接收父组件参数

<script setup>
import { useRouter } from 'vue-router';
import { ref } from 'vue';
const props = defineProps({
	nav: {
		type: Array,
		default: () => []
	},
	activeNav: {
		type: String,
		required: true
	}
});
const currentActiveNav = ref(props.activeNav); // 使用 ref 来管理激活的导航项
const router = useRouter();

const tolink = (name) => {
	currentActiveNav.value = name; // 更新激活的导航项
	router.push({ name });//路由切换

};
</script>

 子组件样式

<style lang="scss" scoped>
/* 可以在此添加样式 */
.main-nav-item {

	height: 4rem;
	line-height: 2rem;
	padding: 0; // 确保无内边距
	margin-top: 1rem; // 确保无外边距
	list-style: none; // 移除默认列表样式

	.ivu-menu-item {
		position: absolute;
		color: #fff;
		overflow-y: hidden;
		overflow-x: visible;
		background: url('../../assets/img/images/nav_bg.png') no-repeat center;

		background-size: 100% 100%;
		border: none;
		padding: 0 3rem;
		font-size: 1.4rem;

		&:hover,
		&.ivu-menu-item-active {
			border-width: 1px;
			color: #fff;
			border: none;
			background: url('../../assets/img/images/nav_bg_cur.png') no-repeat center;
			background-size: 100% 100%;
			cursor: pointer;
			/* 设置鼠标样式为小手 */
		}

		/* 位置设置 */
		&:nth-of-type(1) {
			left: 1rem;
		}

		&:nth-of-type(2) {
			left: 15rem;
		}

		&:nth-of-type(3) {
			right: 15rem;
		}

		&:nth-of-type(4) {
			right: 1rem;
		}

	}
}
</style>

4.导航栏参数

//激活的导航栏
const activeNav = ref('goosesleep');
// 定于导航栏
const nav = ref([
    { name: 'goosesleep', link: '/goosesleep', meta: { title: '鹅舍' } },
    { name: 'gooseborn', link: '/gooseborn', meta: { title: '孵化室' } },
    { name: 'gooseson', link: '/gooseson', meta: { title: '家系栏' } },
    { name: 'gooseweather', link: '/gooseweather', meta: { title: '脱温室' } }
]);

5.导航栏路由配置

 routes: [
    {
      path: '/',
      name: 'main',
      component: () => import('@/views/LayOut/HomeView.vue'),
      // 配置子路由
      children: [{
        path: '/gooseborn',
        name: 'gooseborn',
        component: () => import('@/views/GooseBorn/index.vue')
      },
      {

        path: '/goosesleep',
        name: 'goosesleep',
        component: () => import('@/views/GooseSleep/index.vue')
      },
      {

        path: '/gooseson',
        name: 'gooseson',
        component: () => import('@/views/GooseSon/index.vue')
      },
      {

        path: '/gooseweather',
        name: 'gooseweather',
        component: () => import('@/views/GooseWeather/index.vue')
      },
      {
        path: '', // 当访问 /goose 时重定向
        redirect: 'goosesleep' // 重定向到子路由 gooseborn
      }
      ]
    },
    {
      path: "/login",
      name: 'login',
      component: () => import('@/views/Login/LoginPage.vue')
    }
  ]

 6.实现导航栏

四、data-v组件布局首页

<script setup>

</script>
<template>
  <div class="main-container">
    <!-- 左侧数据显示 -->
    <el-row class="main-left">
      <!-- 左侧区域 -->
      <el-col :span="6">
        <div class="grid-content ep-bg-purple">
          <dv-border-box-1>dv-border-box-1</dv-border-box-1>
        </div>
        <div class="grid-content ep-bg-purple">
          <dv-border-box-1>dv-border-box-1</dv-border-box-1>
        </div>
        <div class="grid-content ep-bg-purple">
          <dv-border-box-1>dv-border-box-1</dv-border-box-1>
        </div>
      </el-col>

      <!-- 中间区域 -->
      <el-col :span="12">
        <div class="grid-content ep-bg-purple-light" style="height: 66.7%">
          <dv-border-box-1>dv-border-box-1</dv-border-box-1>
        </div>
        <div class="grid-content ep-bg-purple" style="height: 33.3%"><dv-border-box-1>dv-border-box-1</dv-border-box-1>
        </div>
      </el-col>

      <!-- 右侧区域 -->
      <el-col :span="6">
        <div class="grid-content ep-bg-purple-light"><dv-border-box-1>dv-border-box-1</dv-border-box-1></div>
        <div class="grid-content ep-bg-purple-light"><dv-border-box-1>dv-border-box-1</dv-border-box-1></div>
        <div class="grid-content ep-bg-purple-light"><dv-border-box-1>dv-border-box-1</dv-border-box-1></div>
      </el-col>
    </el-row>
  </div>
</template>

<style lang="scss" scoped>
.main-container {
  width: 100%;
  height: 85%;
  color: white;
  font-size: 20px;
  font-weight: bold;
}

.main-left {
  height: 85%;
  width: 100%;
}

.el-row {
  margin-bottom: 20px;
}

.el-row:last-child {
  margin-bottom: 0;
}

.el-col {
  border-radius: 4px;
}

.grid-content {
  border-radius: 4px;
  display: flex;
  justify-content: center;
  align-items: center;
  color: white;
  /* 文字颜色 */
}

.ep-bg-purple {
  background-color: none;
  /* 深紫色背景 */
  height: 33.3%;
}

.ep-bg-purple-light {
  background-color: none;
  /* 浅紫色背景 */
  height: 33.3%;
}
</style>

五、实现页面图

六、总结

还没想好自己思考~欢迎交流讨论!

七、代码仓库

GooseHouse: 基于数字孪生的前端可视化项目

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python 使用 LSTM 进行情感分析:处理文本序列数据的指南

使用 LSTM 进行情感分析&#xff1a;处理文本序列数据的指南 长短期记忆网络&#xff08;LSTM&#xff09;是一种适合处理序列数据的深度学习模型&#xff0c;广泛应用于情感分析、语音识别、文本生成等领域。它通过在训练过程中“记住”过去的数据特征来理解和预测序列数据的…

树莓派5实时时钟(RTC)

树莓派5板载一个实时时钟模块。它可以通过 USB-C 电源插口右侧板上的 J5(BAT) 插口进行电池供电。如果没有互联网连接来通过 NTP 获取时间&#xff0c;RTC 可能会很有用。 可以设置唤醒警报&#xff0c;将树莓派5切换到非常低功耗的状态&#xff08;大约3mA&#xff09;。当到达…

保姆级教程!!教你通过【Pycharm远程】连接服务器运行项目代码

小罗碎碎念 这篇文章主要解决一个问题——我有服务器&#xff0c;但是不知道怎么拿来写代码&#xff0c;跑深度学习项目。确实&#xff0c;玩深度学习的成本比较高&#xff0c;无论是前期的学习成本&#xff0c;还是你需要具备的硬件成本&#xff0c;都是拦路虎。小罗没有办法…

Chrome与夸克的安全性对比

在当今数字化时代&#xff0c;浏览器的安全性对于用户来说至关重要。Chrome和夸克作为两款流行的浏览器&#xff0c;各有其特点和优势。本文将对这两款浏览器的安全性进行详细对比&#xff0c;帮助用户更好地了解它们之间的差异。&#xff08;本文由https://www.chromegw.com/的…

ZFC in LEAN 之 前集(Pre-set)

前集&#xff08;Pre-set&#xff09;的概念是相对于集合&#xff08;Set&#xff09;&#xff0c;由数学家 Bishop 提出的。Bishop 认为定义一个集合需要三个步骤&#xff1a; 1. 定义该集合的元素是如何构建的&#xff08;Construction&#xff09;。 2. 定义集合中的两元素的…

libaom 源码分析:AV1帧内预测 CfL 模式

CfL预测模式原理 从亮度到色度CfL 是一种色度帧内预测模式&#xff0c;通过建立共位重建亮度采样的线性函数来模拟色度采样&#xff1b;对于不同的色度采样格式&#xff08;例如4:2:0和4:2:2&#xff09;&#xff0c;可能需要对重建的亮度像素进行子采样&#xff0c;以匹配色度…

C++核心编程和桌面应用开发 第十八天(一元/二元谓词 内建函数对象 算术/关系/逻辑仿函数 函数适配器/取反适配器/函数指针适配器/成员函数适配器)

目录 1.函数对象 1.1函数对象特点 2.谓词 2.1一元谓词 2.2二元谓词 3.内建函数对象 3.1算术仿函数 3.2关系仿函数 3.3逻辑仿函数 4.函数适配器 5.取反适配器 5.1一元取反适配器 5.2二元取反适配器 6.函数指针适配器 7.成员函数适配器 1.函数对象 概念&#xff…

Java后端面试内容总结

先讲项目背景&#xff0c;再讲技术栈模块划分&#xff0c; 讲业务的时候可以先讲一般再特殊 为什么用这个&#xff0c;好处是什么&#xff0c;应用场景 Debug发现问题/日志发现问题. QPS TPS 项目单元测试&#xff0c;代码的变更覆盖率达到80%&#xff0c;项目的复用性高…

P3-2.【结构化程序设计】第二节——知识要点:多分支选择语句

讲解视频&#xff1a; P3-2.【结构化程序设计】第二节——知识要点&#xff1a;多分支选择语句 知识要点&#xff1a;多分支选择语句 一、任务分析 已知某公司员工的保底薪水为500&#xff0c;某月销售商品的利润profit(整数)与利润提成的关系如下(单位&#xff1a;元)&#…

关于Android Studio Koala Feature Drop | 2024.1.2下载不了插件的解决办法

解决 androidStudio Settings->Plugins下载插件&#xff0c;点击install后没反应&#xff0c;同时插件描述相关显示不出来 第一步&#xff1a; 第二步&#xff1a; 点击设置&#xff0c;勾选Auto-detect proxy settings&#xff0c;输入网址 https://plugins.jetbrains.com…

UE中查“资源包因何变脏”的方式

“脏”&#xff08;Dirty&#xff09;的意思 当用户对一个资源包&#xff08;关卡&#xff0c;或材质等美术资源&#xff09;做出了修改&#xff0c;变得与磁盘上存储的内容有差异时&#xff0c;UE会对其“标脏”&#xff08;Mark Dirty&#xff09;&#xff0c;显示为 * 符号…

leetcode 2710 移除字符串中的尾随零

1.题目要求: 2.题目代码: class Solution { public:string removeTrailingZeros(string num) {while(num[num.size() - 1] 0){num.pop_back();}return num;} };

Iceoryx2:高性能进程间通信框架(中间件)

文章目录 0. 引言1. 主要改进2. Iceoryx2 的架构3. C示例代码3.1 发布者示例&#xff08;publisher.cpp&#xff09;3.2 订阅者示例&#xff08;subscriber.cpp&#xff09; 4. 机制比较5. 架构比较6. Iceoryx vs Iceoryx2参考资料 0. 引言 Iceoryx2 是一个基于 Rust 实现的开…

10.30.2024刷华为OD

文章目录 HJ20 密码验证合格程序&#xff08;难过全部例子 list取数左开有闭 [0,3) &#xff09;HJ21 简单密码HJ22 汽水瓶 (数学游戏...)HJ23 (dic就是map&#xff0c;注意怎么用&#xff0c; 善用values()和keys()函数返回list)语法知识记录 (留意转换的字符怎么拼接) HJ20 密…

【问题记录】解决VMware虚拟机中鼠标侧键无法使用的问题

前言 有项目需要在Linux系统中开发&#xff0c;因为要测试Linux中相关功能&#xff0c;要用到shell&#xff0c;在Windows中开发太麻烦了&#xff0c;因此我选择使用UbuntuXfce4桌面来开发&#xff0c;这里我用到了Linux版本的IDEA&#xff0c;除了快捷键经常和系统快捷键冲突…

【337】基于springboot的校园失物招领系统

校园失物招领网站的设计与实现 摘要 近年来&#xff0c;信息化管理行业的不断兴起&#xff0c;使得人们的日常生活越来越离不开计算机和互联网技术。首先&#xff0c;根据收集到的用户需求分析&#xff0c;对设计系统有一个初步的认识与了解&#xff0c;确定校园失物招领网站…

彻底理解链表(LinkedList)结构

目录 比较操作结构封装单向链表实现面试题 循环链表实现 双向链表实现 链表&#xff08;Linked List&#xff09;是一种线性数据结构&#xff0c;由一组节点&#xff08;Node&#xff09;组成&#xff0c;每个节点包含两个部分&#xff1a;数据域&#xff08;存储数据&#xff…

使用Docker Compose搭建多服务应用

使用Docker Compose搭建多服务应用 Docker Compose简介 安装Docker Compose 在Linux上安装Docker Compose 在macOS上安装Docker Compose 在Windows上安装Docker Compose 创建项目结构 Flask应用 安装依赖 Dockerfile 配置Docker Compose 构建和运行应用 访问应用 高级配置 环…

LLaMA系列一直在假装开源...

伙伴们&#xff0c;很奇怪~ 关于LLM的开源与闭源模型的竞争又开始愈发激烈。 众所周知&#xff0c;开源模型以其开放性和社区驱动的特点受到一部分用户的青睐&#xff0c;而闭源模型则因其专业性和性能优化被广泛应用于商业领域。由于大模型最近2年的突然兴起&#xff0c;开源…

i2c与从设备通讯编程示例之开发板测试

编译elf1_cmd_i2c程序 &#xff08;一&#xff09;设置交叉编译环境 &#xff08;二&#xff09;查看elf1_cmd_i2c文件夹Makefile文件。查看当前编译规则&#xff0c;i2c_demo是编译整个工程&#xff0c;clean是清除工程。 &#xff08;三&#xff09;在03_elf1_cmd_i2c文件夹…