纯vue手写流程组件
前言
- 网上有很多的vue的流程组件,但是本人不喜欢很多冗余的代码,喜欢动手敲代码;
- 刚开始写的时候,确实没法下笔,最后一层一层剥离,总算实现了;
- 大家可以参考我写的代码,可以拿过去定制化修改(因为每个项目的UI风格不一样,更多是样式的不一样);
- 关于功能,多一些点击事件呀什么的,我相信对大家来说是问题不大的,难度的部分是怎么画出来;
- 下面的代码支持
vue2也支持vue3,只不过是选项式,反正都支持。不喜欢的,可以稍微改下script部分,改成组合式API就好了; - 对于其他框架
react等,只要是前端,百变不离其踪,重要的是思想,稍微改改就好了,JavaScript部分很少,改起来也方便。
代码
<!-- * @author kjprime* @description 流程组件-->
<template><div class="process-tree"><!-- 同一层级数据渲染,渲染到了同一行 --><divv-for="(item, index) in data":key="index"class="process-tree__row"><!-- 盒子--><divclass="process-tree__row__box":class="{// 左横线'line-left': index !== 0,// 右横线'line-right': index !== data.length - 1,}"><!-- 盒子里面的容器 --><divclass="process-tree__row__box--container":class="{// 向上竖线'line-bottom': item.children && item.children.length > 0,// 向下竖线'line-top': !isTreeRoot,}"><!-- 向下指向的三角形 --><divv-if="!isTreeRoot"class="process-tree__row__box--container__triangle"/><!-- 内容 --><div class="process-tree__row__box--container__content">{{ item.title }}</div></div></div><process-tree:data="item.children":isTreeRoot="false"/></div></div>
</template><script>
export default {name: "process-tree",props: {/*** @type {Array}* @default []* @example* [* {* title: "1",* children: []* }* ]* @description 数据*/data: {type: Array,default: () => [],},// 是否为数的root节点// 其实可以通过传父亲与子,通过对比是不是root就可以判断,但是感觉没有必要,直接通过prop可以解决。isTreeRoot: {type: Boolean,default: true,},},
};
</script><style lang="scss" scoped>
// 底部的线高度,也可以当作容器之间的间距
$line-bottom-length: 20px;
// 线粗细
$line-crude: 1px;
// 线颜色
$line-color: rgba(43, 163, 253);
// 盒子里面的容器的border粗细
$container-border-width: 1px;.process-tree {display: flex;&__row {&__box {display: flex;justify-content: center;position: relative;&--container {position: relative;display: flex;justify-content: center;background-color: #eafffc;border: $container-border-width solid $line-color;padding: 4px;margin: $line-bottom-length;color: #fff;&__triangle {position: absolute;border-left: 4.5px solid transparent;border-right: 4.5px solid transparent;border-top: 6px solid rgba(43, 163, 253, 0.7);top: -6px;}&__content {display: flex;flex-direction: column;justify-content: space-between;align-items: center;color: black;padding: 8px 40px;}}}}// 线样式@mixin line {content: "";display: block;height: $line-bottom-length;position: absolute;left: 0;right: 0;margin: auto;background-color: $line-color;}// 向下的线.line-bottom {&::after {@include line;width: $line-crude;bottom: -$line-bottom-length - $container-border-width;}}// 向上的线.line-top {&::before {@include line;width: $line-crude;top: -$line-bottom-length - $container-border-width;}}// 向左的线.line-left {&::after {@include line;width: calc(50%);height: $line-crude;left: calc(-50%);top: 0;}}// 向右的线.line-right {&::before {@include line;width: calc(50%);height: $line-crude;right: calc(-50%);top: 0;}}
}
</style>
- 实操使用
<ProcessTree :data="problemTreeData" />
problemTreeData: [{title: "1",children: [{title: "2",children: [{title: "3",children: [{title: "4",},],},{title: "3",children: [{title: "4",},],},],},{title: "2",},],},
]
- 效果图

相关文章:
纯vue手写流程组件
前言 网上有很多的vue的流程组件,但是本人不喜欢很多冗余的代码,喜欢动手敲代码;刚开始写的时候,确实没法下笔,最后一层一层剥离,总算实现了;大家可以参考我写的代码,可以拿过去定制…...
WPS宏开发手册——使用、工程、模块介绍
目录 系列文章前言1、开始1.1、宏编辑器使用步骤1.2、工程1.3、工程 系列文章 使用、工程、模块介绍 JSA语法 第三篇练习练习题,持续更新中… 前言 如果你是开发人员,那么wps宏开发对你来说手拿把切。反之还挺吃力,需要嘻嘻…...
面试中如何回答性能优化的问题
性能问题和Bug不同,后者的分析和解决思路更清晰,很多时候从应用日志(文中的应用指分布式服务下的单个节点)即可直接找到问题根源,而性能问题,其排查思路更为复杂一些。 对应用进行性能优化,是一个系统性的工程,对工程师的技术广度和技术深度都有所要求。一个简单的应用…...
django入门教程之request和reponse【二】
接上节:入门【一】 再创建一个orders子应用,python manager.py startapp orders,orders目录中新建一个urls.py文件。结构如图: 通过上节课,我们知道在views.py文件中编写函数时,有一个默认入参request&…...
解决 IntelliJ IDEA 方法断点导致程序无法运行的问题
前言 在日常开发中,调试是程序员不可或缺的工具之一。IntelliJ IDEA 作为一款功能强大的集成开发环境(IDE),提供了丰富的调试功能,例如设置断点、单步执行、变量监视等。然而,有时候我们在调试过程中会遇到…...
RAG优化:python从零实现[吃一堑长一智]循环反馈Feedback
本文将介绍一种有反馈循环机制的RAG系统,让当AI学会"吃一堑长一智",给传统RAG装了个"后悔"系统,让AI能记住哪些回答被用户点赞/拍砖,从此告别金鱼记忆: 每次回答都像在玩roguelike:失败结局会强化下次冒险悄悄把优质问答变成新知识卡牌,实现"以…...
日常学习开发记录-select组件(2)
日常学习开发记录-select组件(2) 第二阶段:增强功能 给现有select组件新增功能 第二阶段:增强功能 键盘操作支持 支持键盘上下箭头选择选项支持回车键确认选择支持Esc键关闭下拉菜单 <template><div:class"[my-s…...
微服务 - 高级篇
微服务 - 高级篇 一、服务治理(一)服务注册与发现(二)负载均衡(三)服务熔断与降级 二、分布式事务(一)解决方案(二)最终一致性 三、性能优化(一&a…...
服务器入门笔记
服务器 采用linux操作系统 SN号 服务器的唯一标识 1U的服务器的高度——4.445cm 服务器上UID灯用于定位服务器 服务器是计算机的一种。在网络中为其他客户机提供计算或者应用服务。 服务器用来响应终端的服务请求,并进行处理 服务器的分类—— 按物理形态&#…...
【Linux】VMware17 安装 Ubuntu24.04 虚拟机
目录 安装教程 一、下载 Ubuntu 桌面版iso映像 二、安装 VMware 三、安装 Ubuntu 桌面版 VMware 创建虚拟机 挂载 Ubuntu ISO 安装 Ubuntu 系统 安装教程 一、下载 Ubuntu 桌面版iso映像 链接来自 清华大学开源软件镜像站 ISO文件地址:ubuntu-24.04.2-des…...
WPS宏开发手册——JSA语法
目录 系列文章2、JSA语法2.1、打印输出2.2、注释2.3、变量2.4、数据类型2.5、函数2.6、运算符2.7、比较2.8、if else条件语句2.9、for循环2.10、Math对象(数字常用方法)2.11、字符串常用方法2.12、数组常用方法 系列文章 使用、工程、模块介绍 JSA语…...
word中指定页面开始添加页码
第一步: 插入页码 第二步: 把光标放到指定起始页码处 第三步: 取消链接到前一节 此时关掉页脚先添加分节符 添加完分节符后恢复点击 第四步: 设置页码格式,从1开始 第五步: 删掉不要的页码,…...
详解“二分”系列算法
前言 1.学习建议 网上教二分系列算法的视频或者文章不在少数,每个人对于二分算法的理解都是不一样的,作者不建议小白刚学习二分系列算法就看很多不同的视频或者博客去学习,举个例子,有些教学提供的方法会把left赋值为-1…...
Python实现deepseek接口的调用
简介:DeepSeek 是一个强大的大语言模型,提供 API 接口供开发者调用。在 Python 中,可以使用 requests 或 httpx 库向 DeepSeek API 发送请求,实现文本生成、代码补全,知识问答等功能。本文将介绍如何在 Python 中调用 …...
文档处理控件Aspose.Words 教程:.NET版中增强的 AI 文档摘要功能
Aspose.Words是一个功能强大的 Word 文档处理库。它可以帮助开发人员自动编辑、转换和处理文档。 自 24.11 版以来,Aspose.Words for .NET 提供了 AI 驱动的文档摘要功能,使用户能够从冗长的文本中快速提取关键见解。在 25.2 版中,我们通过使…...
【Linux 维测专栏 5 -- linux pstore 使用介绍】
文章目录 Linux pstore 功能简介1. pstore 概述2. pstore 的核心功能3. pstore 的工作原理4. pstore 的使用示例5. pstore 的优势6. 典型应用场景配置示例1)DTS配置2)config配置运行测试及log问题小结Linux pstore 功能简介 1. pstore 概述 pstore(Persistent Storage)是…...
19,C++——11
目录 一、 C11简介 二、 新增的列表初始化 三、 新增的STL容器 四、 简化声明 1,auto 2,decltype 3,nullptr 五、右值引用 1,左值引用和右值引用 2,两种引用的比较 3,左值引用的使用场景 4&…...
风尚云网|前端|前后端分离架构深度剖析:技术革新还是过度设计?
前后端分离架构深度剖析:技术革新还是过度设计? 作者:风尚云网 在数字化转型浪潮中,前后端分离架构已成为现代Web开发的主流模式。但这项技术真的是银弹吗?本文将从工程实践角度,剖析其优势与潜在风险&am…...
ffmpeg介绍(一)——解封装
解封装 常用函数 1. avformat_open_input() 作用 打开媒体文件或网络资源:解析文件路径或 URL,识别媒体格式(如 MP4、AVI、RTSP 等)。初始化 AVFormatContext:分配并初始化 AVFormatContext 结构体,…...
版本控制GIT的使用
在 GitCode 上进行代码提交的步骤与在 GitHub 或其他 Git 托管平台上提交代码的步骤类似。以下是一个基本的流程: 1. 安装 Git 如果你还没有安装 Git,首先需要在你的计算机上安装 Git。你可以从 Git 官方网站 下载并安装适合你操作系统的版本。 2. 配…...
本周安全速报(2025.3.18~3.24)
合规速递 01 2025欧洲网络安全报告:DDoS攻击同比增长137%,企业应如何应对? 原文: https://hackread.com/european-cyber-report-2025-137-more-ddos-attacks/ 最新的Link11《欧洲网络安全报告》揭示了一个令人担忧的趋势:DDo…...
CMS网站模板设计与用户定制化实战评测
内容概要 在数字化转型背景下,CMS平台作为企业内容管理的核心载体,其模板架构的灵活性与用户定制能力直接影响运营效率。通过对WordPress、Baklib等主流系统的技术解构发现,模块化设计理念已成为行业基准——WordPress依托超过6万款主题库实…...
【后端开发面试题】每日 3 题(二十)
✍个人博客:Pandaconda-CSDN博客 📣专栏地址:https://blog.csdn.net/newin2020/category_12903849.html 📚专栏简介:在这个专栏中,我将会分享后端开发面试中常见的面试题给大家,每天的题目都是独…...
搭建个人博客教程(Hexo)
如何快速搭建一套本地的博客系统呢?这里有一套gitNode.jsHexo的部署方案来进行解决。 安装git Git 是一款免费开源的分布式版本控制系统,由 Linus Torvalds 于 2005 年为 Linux 内核开发设计。它通过本地仓库和远程仓库实现代码管理,支持分支…...
Docker 可视化工具 Portainer
Docker 可视化工具 Portainer安装 官方安装地址:https://docs.portainer.io/start/install-ce/server/docker/wsl 一,首先,创建 Portainer Server 用来存储数据库的卷: docker volume create portainer_data二,然后…...
数据库基础知识点(系列二)
1.关系数据模型由哪三个要素组成。 答:关系数据模型由关系数据结构、关系操作集合和关系完整性约束三部分组成。 2.简述关系的性质。(关系就是一张二维表格,但不是任何二维表都叫关系) 答:(1…...
Docker-Compose部署 EasySearch 异常问题排查
近期将原本运行在 macOS 上的 EasySearch、Console 和 Coco-server 等服务迁移至群晖 NAS 平台。在迁移过程中遇到了EasySearch容器无法正常启动或运行中意外终止的问题。本文记录了这些问题的具体表现及解决方案,旨在为后续类似部署提供参考。 基础部署配置 以下…...
如何进行灌区闸门自动化改造-闸门远程控制系统建设
改造背景 操作效率低:人工启闭耗时耗力,单次操作需2-3人配合,耗时长。 水资源浪费:依赖经验估算放水量,易导致漫灌或供水不足。 管理滞后:无法实时监控水位、流量,故障响应延迟。 …...
深入解析 Vue3 响应式系统:原理、性能优化与应用场景
文章目录 1. Vue3 响应式系统的基本原理:Proxy 与 Reflect1.1 Proxy 和 Reflect 概述1.1.1 Proxy1.1.2 Reflect1.1.3 Proxy 和 Reflect 的协作 1.2 Vue3 响应式系统:如何通过 Proxy 实现数据代理1.3 Vue3 中 Proxy 的核心概念:响应式数据的创…...
C++11QT复习(二)
文章目录 Day4-4 New 与 delete 表达式(2025.03.20)1. new 表达式的三个步骤2. delete 表达式的两个步骤3. new[] 与 delete[] Day5 类的定义和关键字再探(2025.03.24)1. C 关键字 const、static、extern2. 类的定义:C…...
