vue流程图

news2024/11/13 14:41:45

效果图
在这里插入图片描述
组件

<template>
  <div class="processBox" v-if="list.length">
    <div class="childs">
      <div class="child" v-for="(item,index) in list" :key="item.id +'-child-'+index">
        <div class="child-item" :style="{marginRight: item.children && item.children.length > 1 ? '20px' :''}">
          <div class="childname" :id="item.id">
            <div class="shows">
              <slot :items="item">
                {{item.name}}
              </slot>
            </div>
            <div class="position-arrow" v-if="list.length > 1">
              <i class="el-icon-right"></i>
            </div>
            <div class="position-top" v-if="isFirst(item.id) && domready" :style="position_top(item.id,'top')"></div>
            <div class="position-top" v-if="isLast(item.id)" :style="position_top(item.id,'bottom')"></div>
          </div>
          <div class="childarrow" :style="{borderRight:item.children && item.children.length >1 ? '2px solid #606266' : '3px solid transparent'}">
            <div :class="item.children && item.children.length<=1?'long-img':''"></div>
              <i class="el-icon-right" v-if="item.children && item.children.length" ></i>

          </div>
        </div>
        <div class="child-children" v-if="item.children && item.children.length">
          <processJson :list="item.children" >
            <template v-slot="item">
              <slot :items='item.items' />
            </template>

          </processJson>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  name: "processJson",
  components: {},
  data() {
    return {
      domready: false,
    };
  },
  props: {
    list: {
      type: Array,
      default: () => [],
    },
  },

  mounted() {
    this.$nextTick(() => {
      this.domready = true;
    });
  },
  methods: {
    position_top(id, position) {
      let dom = document.getElementById(id);
      let height;
      if (dom) {
        height = dom.clientHeight;
      }
      let rt;
      if (position === "top") {
        rt = {
          height: height / 2 - 2 + "px",
          top: 0,
        };
      }
      if (position === "bottom") {
        rt = {
          height: height / 2 + 1 + "px",
          bottom: 0,
        };
      }
      return rt;
    },

    isFirst(id) {
      return (
        this.list.length > 1 && this.list.map((x) => x.id).indexOf(id) === 0
      );
    },

    isLast(id) {
      return (
        this.list.length > 1 &&
        this.list.map((x) => x.id).indexOf(id) === this.list.length - 1
      );
    },
  },
};
</script>

<style lang="scss" scoped>
.el-icon-right{
  font-weight: 600;
}
.processBox {
  p {
    margin: 0;
    font-size: 13px;
  }
  display: flex;
  .father {
    width: 70px;
    background-color: red;
    padding: 100px 10px;
  }
  .childs {
    .child {
      display: flex;
      background-color: #fff;
      .child-item {
        display: flex;
        align-items: center;
        margin: 10px 0;
        .childname {
          .shows {
            text-align: left;
            border: 1px solid #b4b4b4;
            padding: 10px;
            // height: 100px;
            width: 100%;
            box-shadow: 1px 2px 8px #00000033;
            &:hover{
              box-shadow: 1px 2px 8px #00000066;
            }
          }
          cursor: pointer;
          height: 100%;
          display: flex;
          align-items: center;
          text-align: center;
          justify-content: center;
          position: relative;
          padding: 10px 0;
          .position-arrow {
            position: absolute;
            // top: 50%;
            left: -22px;
          }
          .position-top {
            position: absolute;
            width: 3px;
            background-color: #fff;
            left: -23px;
            height: 10px;
          }
        }
        .childarrow {
          height: 100%;
          // border-right: ;
          display: flex;
          align-items: center;
        }
      }
    }
    .child-children {
      display: flex;
      flex-direction: column;
      justify-content: center;
    }
  }
  .long-img{
    width: 20px;
    height: 2px;
    background-color: #606266;
  }
  .icon_arrow {
    // margin-left: 20px;
    &:after {
      width: 30px;
      height: 1px;
      background-color: #000;
    }
  }
}
</style>


调用

<template>
  <div>
    <josnToProcess :list="list">
      <template #default="{ items }">
        <div class="node_item ">
          {{items.unitName }}
        </div>
      </template>

    </josnToProcess>
  </div>
</template>

<script>
import josnToProcess from "./tree-right.vue";
export default {
  name: "",
  props: {},
  components: { josnToProcess },
  data() {
    return {
      list: [
        {
          unitName: "长沙供电公司1",
          id: "1",
          children: [
            {
              unitName: "长沙供电公司1-1",
              id: "1-1",
              children: [
                {
                  unitName: "长沙供电公司1-1-1",
                  id: "1-1-1",
                },
                {
                  unitName: "长沙供电公司1-1-2",
                  id: "1-1-2",
                },
              ],
            },
            {
              unitName: "1-2",
              id: "1-2",
              children: [
                {
                  unitName: "1-2-1",
                  id: "1-2-1",
                },
              ],
            },
            {
              unitName: "长沙供电公司1-3",
              id: "1-3",
              children: [
                {
                  unitName: "长沙供电公司1-3-1",
                  id: "1-3-1",
                },
                {
                  unitName: "长沙供电公司1-3-2",
                  id: "1-3-2",
                },
              ],
            },
            {
              unitName: "长沙供电公司1-4",
              id: "1-4",
            },
          ],
        },
        {
          unitName: "长沙供电公司2",
          id: "2",
        },
        {
          unitName: "长沙供电公司3",
          id: "3",
          children: [
            {
              unitName: "长沙供电公司3-1",
              id: "3-1",
              children: [
                {
                  unitName: "长沙供电公司3-1-1",
                  id: "3-1-1",
                },
              ],
            },
            {
              unitName: "长沙供电公司3-1-2",
              id: "3-1-2",
              children: [
                {
                  unitName: "长沙供电公司3-1-2-1",
                  id: "3-1-2-1",
                  children: [
                    {
                      unitName: "长沙供电公司3-1-2-1-1",
                      id: "3-1-2-1-1",
                    },
                  ],
                },
                {
                  unitName: "长沙供电公司3-1-2-2",
                  id: "3-3-1-2-2",
                },
              ],
            },
          ],
        },
        {
          unitName: "长沙供电公司1-3",
          id: "4",
        },
      ],
      showFields: [
        //show fields
        {
          name: "姓名:",
          key: "name",
        },
        {
          name: "年龄:",
          key: "age",
        },
      ],
    };
  },
  computed: {},
  watch: {},
  methods: {},
  created() {},
  mounted() {},
};
</script>

<style scoped lang="scss">
.node_item {
  width: 230px;
  height: 116px;
}
</style>


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

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

相关文章

免费三款备受推崇的爬虫软件

在信息爆炸的时代&#xff0c;爬虫软件成为了数据采集、信息挖掘的得力工具。为了解决用户对优秀爬虫软件的需求&#xff0c;本文将专心分享三款备受推崇的爬虫软件&#xff0c;其中特别突出推荐147采集软件&#xff0c;为您开启爬虫软件的奇妙世界。 一、爬虫软件的重要性 爬…

【 Qt 快速上手】-②- Qt 环境搭建

文章目录 1. Qt 开发工具概述1.1 Qt Creator 介绍1.2 Visual Studio 介绍1.3 Eclipse 介绍 2. Qt SDK 的下载与安装2.1 Qt SDK 的下载2.2 Qt SDK 的安装2.3 验证 Qt SDK 安装是否成功2.4 Qt 环境变量配置 1. Qt 开发工具概述 Qt 开发环境需要安装三个部分&#xff1a; C编译器…

配置zabbix平台对数据库以及主从状态的监控

引言&#xff1a;明人不说暗话&#xff0c;今天分享下配置zabbix平台对数据库以及主从状态的监控 准备好zabbix监控平台&#xff08;zabbix-server端&#xff09;例10.12.153.235 db1客户端&#xff08;zabbix-agent&#xff09;例10.12.153.73 1.安装Zabbix存储库 # rpm -Uv…

内衣洗衣机哪个牌子好用?四款小型洗衣机全自动推荐

说起内衣洗衣机很多小伙伴都不陌生&#xff0c;对于很多小伙伴来说内衣洗衣机真的是一个提高幸福感的小家电&#xff0c;市面上的内衣洗衣机无论从功能和配置上都有着很大的区别&#xff0c;没有做攻略的小伙伴很容易就踩雷了&#xff0c;今天给大家分享四款内衣洗衣机&#xf…

进程调度算法

文章目录 主要内容一.进程调度算法1.各调度算法思想2.程序流程图3.源代码代码如下&#xff08;示例&#xff09;: 4.运行结果分析5.先来先服务算法 6.短作业优先算法7.高响应优先算法8.算法结果对比 总结 主要内容 一.进程调度算法 1.各调度算法思想 先来先服务算法&#xff0…

Mysql:重点且常用的操作和理论知识整理 ^_^

目录 1 基础的命令操作 2 DDL 数据库定义语言 2.1 数据库操作 2.2 数据表操作 2.2.1 创建数据表 2.2.2 修改和删除数据表 2.2.3 添加外键 3 DML 数据库操作语言 3.1 插入语句(INSERT) 3.2 修改语句(UPDATE) 3.3 删除语句 3.3.1 DELETE命令 3.3.2 TRUNCATE命令 4 …

java.sql.SQLException: Failed to fetch schema of XXX 问题

遇到问题&#xff1a;java.sql.SQLException: Failed to fetch schema of pay_record表 i.s.r.d.s.s.c.AbstractTableMetaCache : get table meta of the table pay_record error: Failed to fetch schema of pay_record 原因分析&#xff1a; springcloud项目中使用了se…

Yaklang 中的类型和变量

Yaklang 的类型其实非常简单&#xff0c;我们仅需要记住如下类型即可 string 字符串类型&#xff0c;用以快速构建一个字符串int 整数类型&#xff1a;在 64 位机中&#xff0c;int 和 int64 是一样的float 浮点类型&#xff0c;用来定义和表示浮点数byte 本质上等同于 uint8u…

docker安装marcocesarato/php-conventional-changelog报错

composer require --dev marcocesarato/php-conventional-changelog --no-update “marcocesarato/php-conventional-changelog”: “^1.17” 在小皮环境没问题&#xff0c;在dockerswoole环境下报错 "scripts": {"changelog": "conventional-chang…

采用云端SaaS服务的云HIS基层医院信息管理系统源码

目录 一、日常运维工作内容 二、科室巡查工作 三、网络安全管理工作内容 四、业务能力提升学习 云HIS系统业务 一、日常运维工作内容 1. 系统监控&#xff1a;每天早晨第一件事就是打开电脑&#xff0c;查看各个系统的运行状况。通过监控系统&#xff0c;可以实时了解到服…

大数据质量管制规范示例

大数据质量管制规范示例 一、前提概要二、相关概念三、管理原则四、治理委员五、应用管理六、查验方式七、考核比率八、扣分标准九、责任划分十、追责范围十一、其它条例十二、总结 一、前提概要 在当今大数据信息时代&#xff0c;大数据平台&#xff08;大数据平台开发规范示…

【ChatGPT】利用ChatGPT将图片转换成JSON文件

前言 我在创建自己的GPT时,通常会上传一些JSON文件作为知识库,我还制作了一些脚本工具,将PDF文件转换成JSON文件。但是在这个过程中产生一个问题,PDF文件中会有一些图表,JSON文件就不能存储和表达这些图表的内容了。那该怎么办呢?这里跟大家介绍一个方法,可以有效地将图…

【论文笔记】Fully Sparse 3D Panoptic Occupancy Prediction

原文链接&#xff1a;https://arxiv.org/abs/2312.17118 1. 引言 现有的3D占用预测方法建立密集的3D特征&#xff0c;没有考虑场景的稀疏性&#xff0c;因此难以满足实时要求。此外&#xff0c;这些方法仅关注语义占用&#xff0c;无法区分实例。 本文认为场景的稀疏性包含两…

查询指定日期是否为法定工作日的服务接口

在现代社会中&#xff0c;人们的工作与生活节奏日益加快&#xff0c;为了更好地规划工作与休息时间&#xff0c;在开发应用软件时&#xff0c;通过查询指定日期是否为法定工作日的服务接口是一个非常有用的功能。本文将介绍一个API接口&#xff0c;可以根据国家的放假安排来判断…

Schema Builder - Salesforce的图形化工具

Schema Builder这个工具最近几年接触Salesforce的宝们用到的很少&#xff0c;这里给大家简单介绍下&#xff1a; 1. Schema Builder是一个动态的环境&#xff0c;在这个环境里管理员能查看或更改组织内对象及对象之间的关联关系&#xff1b;如果一开始接触CRM可以通过这个图形…

JVM:垃圾收集器(7种)

垃圾收集器关系图&#xff1a; 如果两个收集器之间存在连线&#xff0c;就说明它们可以搭配使用。它们说在的区域则表示这个收集器属于新生代收集器还是老年代收集器。其中Serial&#xff08;串行&#xff09;、Parallel&#xff08;并行&#xff09; 1、Serial收集器 Serial收…

F - Digital Roots HUOJ

题目 The digital root of a positive integer is found by summing the digits of the integer. If the resulting value is a single digit then that digit is the digital root. If the resulting value contains two or more digits, those digits are summed and the pro…

Spring Boot 学习之——@SpringBootApplication注解(自动注解原理)

SpringBootApplication注解 springboot是基于spring的新型的轻量级框架&#xff0c;最厉害的地方当属**自动配置。**那我们就可以根据启动流程和相关原理来看看&#xff0c;如何实现传奇的自动配置 SpringBootApplication//标注在某个类上&#xff0c;表示这个类是SpringBoot…

大数据开发之Kafka(broker、消费者、eagle监控、kraft模式)

第 4 章&#xff1a;Kafka Broker 4.1 Kafka Broker工作流程 4.1.1 Zookeeper存储的Kafka的信息 1、查看zookeeper中的kafka节点所存储的信息 启动Zookeeper客户端 [atguiguhadoop104 zookeeper-3.5.7]$ bin/zkCli.sh 通过ls命令列出kafka节点内容 [zk: localhost:2181(CO…

Docker(六)数据管理

作者主页&#xff1a; 正函数的个人主页 文章收录专栏&#xff1a; Docker 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01; Docker 数据管理 这一章介绍如何在 Docker 内部以及容器之间管理数据&#xff0c;在容器中管理数据主要有两种方式&#xff1a; 数据卷&…