封装一个 Vue 3 流程线可视化组件

在这里插入图片描述

在这里插入图片描述

这个组件展示了一系列带有节点和箭头连接的流程线,并具备不同风险等级的样式和动画效果,非常适合大屏展示项目。

功能概述

这个流程线组件具备以下功能:

  • 动态渲染:根据传入的数据,组件可以自动生成节点和箭头。
  • 风险等级样式:不同的节点根据风险等级(1-3)呈现不同的视觉效果。
  • 炫酷的动画效果:节点和箭头自带动画效果,适合用于大屏可视化项目。
  • 灵活的数据传递:通过组件的 props 传递数据,支持动态更新。

接下来,我将带你一步步实现这个组件,并展示如何在项目中使用。

组件实现

1. 组件的基本结构

我们首先定义组件的基本模板和脚本部分。FlowLine 组件接受一个 data 参数,代表流程线的各个节点,并根据节点的 risk 属性渲染不同的样式。

<template><div class="flow-container"><div v-for="(line, index) in state" :key="index" class="flow-line"><div v-for="(node, nodeIndex) in line" :key="nodeIndex" class="node-wrapper"><div class="node" :class="getRiskClass(node.risk)">{{ node.label }}</div><div v-if="nodeIndex < line.length - 1" class="arrow-wrapper"><div class="arrow"></div></div></div></div></div>
</template><script setup>
import { ref, watch, defineProps } from 'vue';const state = ref([]);const props = defineProps({data: {type: Array,default: () => [],},
});function getRiskClass(risk) {if (risk === 1) return 'risk-1';if (risk === 2) return 'risk-2';if (risk === 3) return 'risk-3';return '';
}watch(() => props.data, (newData) => {if (newData && newData.length) {state.value = newData;} else {state.value = [];}
}, { deep: true });
</script>

解析

  • data 是一个二维数组,每一条数组表示一条流程线,节点通过 node 表示,risk 表示风险等级。
  • getRiskClass 根据节点的风险等级返回不同的 CSS 类名,用于控制样式。
2. 样式设计

组件的样式部分为节点和箭头设计了动态的动画效果,增加了大屏展示的视觉冲击力。不同的 risk 等级通过不同颜色和动画来区分。

.flow-container {display: flex;flex-direction: column;gap: 20px;
}.flow-line {display: flex;align-items: center;gap: 10px;
}.node-wrapper {position: relative;display: flex;align-items: center;
}.node {padding: 10px 20px;border-radius: 8px;background-color: rgba(0, 188, 212, 0.1);color: white;font-weight: bold;text-align: center;position: relative;border: 2px solid transparent;animation: glow 2s infinite alternate;
}.node::before {content: "";position: absolute;top: -2px;left: -2px;right: -2px;bottom: -2px;border-radius: 8px;border: 2px solid transparent;background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.5), transparent);animation: border-marquee 3s linear infinite, border-fade 2s infinite alternate;
}@keyframes glow {0% {box-shadow: 0 0 6px rgba(0, 188, 212, 0.5);}100% {box-shadow: 0 0 12px rgba(0, 188, 212, 1);}
}.risk-3::before {border-color: #19ef07;background: linear-gradient(90deg, transparent, rgba(42, 255, 23, 0.575), transparent);
}.risk-2::before {border-color: rgba(0, 188, 212, 1);background: linear-gradient(90deg, transparent, rgba(0, 188, 212, 0.5), transparent);
}.risk-1::before {border-color: #b71c1c;background: linear-gradient(90deg, transparent, rgba(183, 28, 28, 0.5), transparent);
}.arrow-wrapper {display: flex;align-items: center;justify-content: center;flex-grow: 1;
}.arrow {width: 50px;height: 2px;background-color: #00bcd4;position: relative;
}

解析

  • node 元素设置了光效和渐变动画,使其在大屏展示中更加引人注目。
  • arrow 元素为连接节点的箭头,使用了简单的样式和闪烁动画来模拟流动感。
  • risk 等级样式通过不同颜色来区分,增强了风险信息的可视化表现力。

如何在项目中使用

组件封装完成后,你可以在其他项目中非常简单地复用它。只需要将组件文件导入,并传入合适的 data 即可。

1. 引入组件

首先,将 FlowLine.vue 文件复制到你的项目的 components 文件夹中。然后在需要的页面中引入这个组件:

<template><FlowLine :data="flowData" />
</template><script setup>
import FlowLine from '@/components/FlowLine.vue';const flowData = [[{ label: '节点 1', risk: 1 },{ label: '节点 2', risk: 2 },{ label: '节点 3', risk: 3 }],[{ label: '节点 A', risk: 3 },{ label: '节点 B', risk: 2 }]
];
</script>
2. 数据结构

flowData 是一个二维数组,每个子数组代表一条流程线,数组中的每个对象代表一个节点,并包含 labelrisk 字段。label 是节点的显示文本,risk 是风险等级(1-3)。

总结

通过将这个流程线组件封装成一个独立的 Vue 3 组件,你可以在不同项目中轻松复用它,并根据需求动态更新显示的数据。组件不仅支持动态渲染,还具备动画效果和风险等级区分,特别适合用于大屏数据可视化展示。你可以根据项目的具体需求进一步调整样式和功能,使其更加灵活。

希望这篇博客对你封装和复用 Vue 组件有所帮助,期待你在项目中实现更多酷炫的效果!

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

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

相关文章

计算机网络(五) —— 自定义协议简单网络程序

目录 一&#xff0c;关于“协议” 1.1 结构化数据 1.2 序列化和反序列化 二&#xff0c;网络版计算器实现准备 2.1 套用旧头文件 2.2 封装sock API 三&#xff0c;自定义协议 3.1 关于自定义协议 3.2 实现序列化和反序列化 3.3 测试 三&#xff0c;服务器实现 3.1…

分享一个基于微信小程序的医院挂号就诊一体化平台uniapp医院辅助挂号应用小程序设计(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

NVD系列语音芯片在报警器中通常应用在哪些场景中

语音芯片在各类场景中应用的最大作用就是进行语音提示和警报提示。本文将对NVD系列语音芯片应用在报警器中的场景。 1.提升电动车的安全性 当电动车遭受震动或异常移动时&#xff0c;报警器会感应到并触发报警装置&#xff0c;通常是通过发出高分贝的声音警报来吸引人们的注意…

苹果iOS/ iPadOS18 RC 版、17.7 RC版更新发布

iPhone 16 / Pro 系列新机发布后&#xff0c;苹果一同推出了 iOS 18 和 iPadOS 18 的 RC 版本&#xff0c;iOS 18 RC 的内部版本号为22A3354&#xff0c;本次更新距离上次发布 Beta/RC 间隔 12 天。 在 iOS 18 中&#xff0c;苹果给我们带来了 Apple Intelligence&#xff0c;这…

如何在内网中与阿里云服务器进行文件传输?[2024详细版]

随着云计算发展&#xff0c;企业和个人选择将数据存储在云端&#xff0c;以提高数据的安全性和可访问性。阿里云作为国内领先的云服务提供商之一&#xff0c;提供了多种云产品和服务。其中&#xff0c;云服务器ECS&#xff08;Elastic Compute Service&#xff09;因其灵活性和…

VBA CSV数据拆分

1. Range.TextToColumns函数 Option ExplicitSub txt2Col()ActiveSheet.Range("A2").CopyActiveSheet.PasteSelection.TextToColumns DataType:xlDelimited, _ConsecutiveDelimiter:True, Comma:True End Sub 2. 效果 执行前 cccccc 执行后效果​ cccc 3. 参照 更…

Selenium自动化测试面试题合集!

1、什么是自动化测试、自动化测试的优势是什么&#xff1f; 通过工具或脚本代替手工测试执行过程的测试都叫自动化测试。 自动化测试的优势&#xff1a; 1、减少回归测试成本 2、减少兼容性测试成本 3、提高测试反馈速度 4、提高测试覆盖率 5、让测试工程师做更有意义的…

【docker】基于docker-compose 安装elasticsearch + kibana + ik分词器(8.10.4版本)

记录下&#xff0c;使用 docker-compose 安装 Elasticsearch 和 Kibana&#xff0c;并配置 IK 分词器&#xff0c;你可以按照以下步骤进行。此过程适用于 Elasticsearch 和 Kibana 8.10.4 版本。 安装 首先&#xff0c;在你的工作目录下创建一个 docker-compose.yml 文件&…

智能语音交互:人工智能如何改变我们的沟通方式?

在科技飞速发展的今天&#xff0c;人工智能&#xff08;AI&#xff09;已经渗透到我们生活的方方面面。其中&#xff0c;智能语音交互作为AI技术的一个重要分支&#xff0c;正以前所未有的速度改变着我们的沟通方式。从智能家居的控制到办公自动化的应用&#xff0c;再到日常交…

SonicWall SSL VPN曝出高危漏洞,可能导致防火墙崩溃

近日&#xff0c;有黑客利用 SonicWall SonicOS 防火墙设备中的一个关键安全漏洞入侵受害者的网络。 这个不当访问控制漏洞被追踪为 CVE-2024-40766&#xff0c;影响到第 5 代、第 6 代和第 7 代防火墙。SonicWall于8月22日对其进行了修补&#xff0c;并警告称其只影响防火墙的…

通过卷积神经网络(CNN)识别和预测手写数字

一&#xff1a;卷积神经网络&#xff08;CNN&#xff09;和手写数字识别MNIST数据集的介绍 卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;简称CNN&#xff09;是一种深度学习模型&#xff0c;它在图像和视频识别、分类和分割任务中表现出色。CNN通过模仿…

005:VTK世界坐标系中的相机和物体

VTK医学图像处理---世界坐标系中的相机和物体 左侧是成像结果 右侧是世界坐标系中的相机与被观察物体 目录 VTK医学图像处理---世界坐标系中的相机和物体 简介 1 在三维空间中添加坐标系 2 世界坐标系中的相机 3 世界…

价值流的实践应用:驱动企业运营效率与数字化转型的全面指南

价值流如何在实践中变革企业运营 在当今复杂的商业环境下&#xff0c;企业正在快速迈向数字化和自动化。为了在日益竞争激烈的市场中保持竞争力&#xff0c;企业需要优化其业务架构、提高运营效率并增强客户体验。《价值流指南》由The Open Group发布的企业数字化转型专业参考…

xlsx插件实现excel表格数据导入并解析成table——js技能提升

之前写后台管理系统的时候&#xff0c;遇到一个需求&#xff0c;就是要上传文件&#xff0c;并解析成table预览到页面上&#xff0c;效果如下&#xff1a; 这样做的目的也是为了帮助用户确认导入的内容是否正确&#xff0c;方便核实。 下面介绍实现步骤&#xff1a; 解决步骤…

Nginx.conf没有server和location模块的解决方法

网上有些说法说自己在配置文件里面添加server和location模块&#xff0c;但是我发现好像可以不用&#xff0c;其实nginx的配置文件还是给了我们提示的&#xff0c;如图&#xff1a; 在最后一行其实引入了另一个配置文件&#xff0c;我们cd进去看一下有什么内容。输入ls命令发现…

vue的学习之路(Vue中组件(component )

注意&#xff1a;其中添加div的意义就是让template标签有一个根标签 &#xff0c;否则只展示“欢迎进入登录程序” 不加div效果图 &#xff08;2&#xff09;两种开发方式 第一种开发方式 //局部组件登录模板声明 let login { //具体局部组件名称 template:‘ 用户登录 ’…

新专利:作物生长期预测方法及装置

近日,国家知识产权局正式授权了一项由北京市农林科学院智能装备技术研究中心、江苏省农业科学院联合申请的发明专利"作物生长期预测方法及装置"(专利号:ZL 2024 1 0185298.1)。该专利由 于景鑫 、任妮、吕志远、李友丽、吴茜等发明人耗时多年潜心研发&#xff0c;犹如…

EasyPlayer.js网页H5 Web js播放器能力合集

最近遇到一个需求&#xff0c;要求做一款播放器&#xff0c;发现能力上跟EasyPlayer.js基本一致&#xff0c;满足要求&#xff1a; 需求 功性能 分类 需求描述 功能 预览 分屏模式 单分屏&#xff08;单屏/全屏&#xff09; 多分屏&#xff08;2*2&#xff09; 多分屏…

[数据集][目标检测]抽烟检测数据集VOC+YOLO格式22559张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;22559 标注数量(xml文件个数)&#xff1a;22559 标注数量(txt文件个数)&#xff1a;22559 标…

Oracle数据恢复—Oracle数据库误删除表数据如何恢复数据?

删除Oracle数据库数据一般有以下2种方式&#xff1a;delete、drop或truncate。下面针对这2种删除oracle数据库数据的方式探讨一下oracle数据库数据恢复方法&#xff08;不考虑全库备份和利用归档日志&#xff09;。 1、delete误删除的数据恢复方法。 利用oracle提供的闪回方法…