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

news2024/9/20 21:02:23

在这里插入图片描述

在这里插入图片描述

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

功能概述

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

  • 动态渲染:根据传入的数据,组件可以自动生成节点和箭头。
  • 风险等级样式:不同的节点根据风险等级(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.coloradmin.cn/o/2125088.html

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

相关文章

后端面试经典问题汇总

后端面试经典问题汇总 后端开发在现代互联网应用中扮演着关键角色&#xff0c;涉及的数据处理、业务逻辑和系统性能等方面在面试中常常会被深入考察。本文将总结一些后端面试中常见的经典问题&#xff0c;并给出简单的解答思路。 1. HTTP 协议 问题&#xff1a;请解释 HTTP …

Linux:五种IO模型

1&#xff1a;五种IO模型 1&#xff1a;阻塞IO 阻塞IO: 在内核将数据准备好之前,系统调用会一直等待.所有的套接字,默认 都是阻塞方式。 2&#xff1a;非阻塞 IO 非阻塞 IO: 如果内核还未将数据准备好, 系统调用仍然会直接返回, 并且返回EWOULDBLOCK 错误码。 非阻塞 IO 往往需…

Centos7.9部署Gitlab-ce-16.9

一、环境信息 软件/系统名称版本下载地址备注Centos77.9.2009https://mirrors.nju.edu.cn/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2009.isogitlab-cegitlab-ce-16.9.1https://mirror.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-16.9.1-ce.0.el7.x86_64.rpm…

4款免费录屏工具,哪款更实用?

作为一个经常需要录制教程和游戏视频的UP主&#xff0c;我尝试过市面上不少录屏工具。今天&#xff0c;我就来分享一下我使用过的四款软件录制全屏时的体验感受&#xff0c;看看哪款软件的表现更胜一筹。 一、福昕录屏大师 网址&#xff1a;https://www.foxitsoftware.cn/REC/…

配置 MinGW 以及使用 g++ 编译 C++ 程序

如何在 Windows 上安装和配置 MinGW 以及使用 g 编译 C 程序 (C语言&#xff08;gcc&#xff09;类似 ) 在Windows环境下&#xff0c;使用C进行编程需要一个编译器&#xff0c;而MinGW (Minimalist GNU for Windows) 是一个常用的C/C编译器工具集。对于编程新手来说&#xff0c…

SAP与赛美特MES系统集成案例

一、项目环境 上海某通信有限公司主要产品应用于图像传感器、 图像信号处理芯片、 低功耗芯片、 射频芯片。 为实现生产流程的自动化调度&#xff0c;减少人为干预的错误&#xff0c;保证流程的一致性和合规性&#xff0c;同时也简化操作流程&#xff0c;降低培训成本。&am…

护眼台灯对眼睛好吗?眼科医生推荐的台灯告诉你答案

作为一名家长&#xff0c;我深刻体会到保护孩子眼部健康的重要性。随着科技的迅猛发展&#xff0c;孩子们越来越多地接触并依赖电子设备&#xff0c;如平板电脑、手机和电视&#xff0c;长时间盯着屏幕已成为他们日常生活的一部分。然而&#xff0c;这些屏幕发出的蓝光及闪烁的…

等保测评前的准备工作:企业必知的五大步骤

信息安全等级保护&#xff08;等保&#xff09;测评是企业信息安全合规的重要环节&#xff0c;对于确保企业信息系统的安全性、稳定性和合规性具有重大意义。为了顺利通过等保测评&#xff0c;企业需要提前做好充分的准备。本文将从实战角度出发&#xff0c;详细介绍等保测评前…

2024年10款好用的图纸加密软件推荐|有效的图纸加密方法分享

在数字化时代&#xff0c;保护CAD图纸等设计文件的安全性是企业不可忽视的重要任务。随着技术的不断进步&#xff0c;各类图纸加密软件应运而生&#xff0c;为企业提供了强大的数据保护能力。本文将为您推荐2024年十款好用的图纸加密软件&#xff0c;并分享一些有效的图纸加密方…

GD32F4开发 -- FATFS文件系统

一、FATFS源码下载 FatFs - Generic FAT Filesystem Module (elm-chan.org) 二、移植 打开ffconf.h文件&#xff0c;找到对应宏并按照需求修改 FF_CODE_PAGE: #define FF_CODE_PAGE 936 //改为936以支持简体中文 /* This option specifies the OEM code page to be used on…

Find My资讯|国外外设品牌发布新型素皮护照套,支持苹果Find My功能

外设品牌 Satechi 发布一款采用苹果Find My技术的新型素皮护照套&#xff0c;售价为 59.99 美元。这款新型护照套除了可以存放护照外&#xff0c;还可存放银行卡、信用卡、身份证、登机牌等物品&#xff0c;其最大特性是采用了与苹果 AirTags 相同的技术&#xff0c;内置了可充…

YOLOv9改进策略【Neck】| 有效且轻量的动态上采样算子:DySample

一、本文介绍 本文记录的是利用DySample上采样对YOLOv9的颈部网络进行改进的方法研究。YOLOv9采用传统的最近邻插值的方法进行上采样可能无法有效地捕捉特征的细节和语义信息&#xff0c;从而影响模型在密集预测任务中的性能。DySample通过动态采样的方式进行上采样&#xff0…

Brave编译指南2024 Windows篇:安装depot_tools(三)

1.引言 在编译Brave浏览器的过程中&#xff0c;depot_tools是不可或缺的一部分。这是一组由Chromium项目提供的脚本和工具&#xff0c;用于获取、管理和更新Chromium及其衍生项目的源码。通过depot_tools&#xff0c;开发者可以方便地同步最新的源码版本&#xff0c;并进行项目…

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

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

基于HTML+JS+CSS+Echarts实现的设备环境监测可视化平台前端整套模板

效果图 基于HTMLJSCSSEcharts实现的设备环境监测可视化平台前端整套模板。可用过修改源码快速完成需求。 源码结构 下载地址

Shell实用功能及文件权限

1、使用命令“cat /etc/named.conf”设置为别名named&#xff0c;然后再取消别名。 设置别名&#xff1a;alias namedcat /etc/named.conf 取消别名&#xff1a;unalias named 2、使用echo命令和输出重定向创建文本文件/root/nn&#xff0c;内容是hello&#xff0c;然后再使用…

C++笔记---list

1. list的介绍 list其实就是就是我们所熟知的链表&#xff08;双向循环带头结点&#xff09;&#xff0c;但其是作为STL中的一个类模板而存在。 也就是说&#xff0c;list是可以用来存储任意类型数据的顺序表&#xff0c;既可以是内置类型&#xff0c;也可以是自定义类型&…

【目标检测数据集】工具钳子、剪刀、螺丝刀检测数据集3668张3类VOC+YOLO格式

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

安卓13系统导航方式分析以及安卓13修改默认方式为手势导航 android13修改导航方式

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.彩蛋1.前言 系统导航方式默认一般是按键的,如果要改成手势的话,我们来看看用户怎么修改的: 设置=>系统=>手势=>系统导航,在这里进行修改。我们来分析下这个流程,并且将其修改为…

Stage模型UIAbility组件【单任务列表/多任务列表】

什么是多线程 比如你在微信中聊天 突然打开一个小程序 然后查看手机进程 如果一个软件有多个那就是多进程 &#xff08;目前小编看下来 只有安卓有 苹果看不出来&#xff09; 进程之间是可以相互跳转的 UIAbility组件可以是单个任务列表或多个任务列表 启动页想用哪个就设置哪个…