vue3 手动简单 24h 甘特图封装

甘特图

手动封装简版甘特图,纯展示功能,无其他操作

文章目录

  • 甘特图
  • 前言
  • 效果图
  • 组件
  • 使用
  • 总结


前言

开始的思路是使用echarts 瀑布图来体现,但是试验后发现,头部时间功能不满足,然未找到其他组件,于是手动封装一个,比较简陋,凑乎看。

echarts效果
echarts效果


效果图

请添加图片描述

组件

<template>

    <div class="gantt_chart">
        <ul class="title" :style="{height}">
            <li  v-for="i in 24" :key="i">
                <p class="title_font">
                    {{ i.toString().length == 1 ? `0${i}` : i }}
                </p>
                <p class="title_node"></p>
            </li>
        </ul>
        <div class="gantt_chart_columns" v-for="v,i in chartData" :key="i" :style="{height}">
            <p class="time_value" :style="{width:getWidth(v),left:getLeft(v)}">
            </p>
        </div>
    </div>

</template>

<script setup>

import {computed,toRefs } from 'vue';


let props = defineProps({
    chartData:{
        type:Object,
        default:() =>  {
            return []
        }
    },
    height:{
        type:String,
        default:() =>  {
            return ''
        }
    }
})

const { chartData } = toRefs(props);


const getWidth = computed(() =>{
    return function (val) {
        if (val.length == 2) {
            if (val[0] > val[1]) {
                let num = ((val[0] - val[1]) / 24 * 100).toString() + '%'
                return num
            } else {
                let num = ((val[1] - val[0]) / 24 * 100).toString() + '%'
                return num
            }
        }
    }

})

const getLeft = computed(() =>{
    return function (val) {
        if (val.length == 2) {
            if (val[0] > val[1]) {
                let num = (val[1] / 24 * 100).toString() + '%'
                return num
            } else {
                let num = (val[0] / 24 * 100).toString() + '%'
                return num
            }
        }
    }
})





</script>
<style scoped lang="scss">
    .gantt_chart{
        width: 100%;
        height: 100%;
        border: 1px solid #2e5c80;
        overflow: auto;
        .title{
            width: 100%;
            // height: 16.6666%;
            overflow: hidden;
            display: flex;
            justify-content: space-evenly;
            overflow: hidden;
            border-bottom: 1px solid #2e5c80;
            margin: 0;
            padding: 0;
            li {
                width: 4%;
                position: relative;
                text-align: center;
                list-style:none;
                box-sizing: border-box;
            }
            .title_font {
                display: inline-block;
                height: 22px;
                margin: 0;
                position: absolute;
                left: 50%;
                top: 50%;
                transform: translate(-50%, -50%);
            }
            .title_node {
                width: 1px;
                height: 10px;
                margin: 0;
                background: #1ea9fa;
                position: absolute;
                left: 50%;
                bottom: 0;
                transform: translateX(-50%);
            }
        }
        .gantt_chart_columns {
            width: 100%;
            // height: 16.6666%;
            overflow: hidden;
            border-bottom: 1px solid #2e5c80;
            .time_value {
                height: 50%;
                position: relative;
                top: 50%;
                transform: translateY(-50%);
                margin: 0;
                background-color: #00ccff;
            }

        }
        .gantt_chart_columns:last-child {
             border-bottom:none;
        }
    }
</style>

使用

import GanttChart from '@/components/GanttChart.vue';

<GanttChart style="width:50%;height:30%; margin-top: 1.1%;" :chartData="chartData" height="16.3%"/>


import { ref } from 'vue';
let chartData = ref([
    [1.2,16.4],
    [5.5,10.8],
    [1,6.2],
    [5.2,9],
    [8.3,10.8],
])


总结

简单使用,至于数据需要处理后传入
感谢各位大佬观看

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

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

相关文章

厨师服穿戴智能监测摄像机

随着科技的发展&#xff0c;智能监测摄像技术已经在各个领域得到了广泛应用。近年来&#xff0c;厨师服穿戴智能监测摄像机逐渐成为了厨房管理和食品安全监控的重要工具。这种设备能够为厨师提供实时监测和反馈&#xff0c;提高工作效率和食品安全&#xff0c;进一步提高整个餐…

网上书城|基于SprinBoot+vue的网上书城管理系统(源码+数据库+文档)

网上书城管理系统 目录 基于SprinBootvue的网上书城管理系统 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 3用户后台功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介…

贵州大学24计算机考研数据速览,国家重点实验室22408复试线285分!贵州大学计算机考研考情分析!

贵州大学计算机科学与技术学院坐落在贵州大学北校区&#xff08;贵阳花溪&#xff09;。 学院现有教职工139人&#xff0c;其中专职教师126人&#xff0c;教授17人&#xff0c;副教授37人&#xff0c;讲师46人&#xff0c;高级实验师4人&#xff0c;实验师17人。具有博士学位的…

部署LAMP环境

红帽9搭建LAMP 安装Apache 2.安装数据库服务 3.安装php (1)使用IP访问/phpinfo.php 4.安装phpMyAdmin &#xff08;1&#xff09;数据库端口改为学号后五位 &#xff08;2&#xff09;登录phpmyadmin 5.SSH增加一个端口10022&#xff0c;fttp增加两个端口10080和8080 &#xf…

如何利用云平台上更好地规划安全生产教育与培训

在平台上进行安全教育和培训&#xff0c;可以采取以下步骤和策略&#xff0c;以确保教育的有效性和参与度&#xff1a; 一、明确教育目标和培训内容 确定教育目标&#xff1a;明确希望员工通过培训达到的安全意识和技能水平。 制定培训内容&#xff1a;根据行业特点、岗位需求…

科学技术创新杂志科学技术创新杂志社科学技术创新编辑部2024年第10期目录

科技创新 单桩穿越岩溶发育地层力学特征与溶洞处置措施研究 刘飞; 1-7《科学技术创新》投稿&#xff1a;cnqikantg126.com 基于多目标优化的中低压配电网电力规划研究 向星山;杨承俊;张寒月; 8-11 激光雷达测绘技术在工程测绘中的应用研究 张军伟;闫宏昌; 12-15 …

大语言模型的创意“魔法“:召唤隐藏的联想思维

随着人工智能的迅猛发展&#xff0c;大语言模型正在掀起一场"创意风暴"。这些强大的AI模型不仅能够生成栩栩如生的文本&#xff0c;还展现出惊人的创造力。但你是否好奇&#xff0c;它们的创意究竟来自何处? 最新研究表明&#xff0c;大语言模型的创意之源在于激活…

高熔体强度聚丙烯(HMSPP)属于高端聚丙烯 我国市场国产化进程有所加快

高熔体强度聚丙烯&#xff08;HMSPP&#xff09;属于高端聚丙烯 我国市场国产化进程有所加快 高熔体强度聚丙烯&#xff08;HMSPP&#xff09;又称高熔体强度PP&#xff0c;是一种含有微交联结构或长支链结构的改性聚丙烯。高熔体强度聚丙烯具有绿色环保、轻量化、结晶性好、熔…

c 系统宏有多少

在C语言中&#xff0c;系统宏&#xff08;也称为预定义宏或内置宏&#xff09;的数量并不是固定的&#xff0c;因为它们取决于C标准、编译器以及可能的其他因素。然而&#xff0c;有一些常见的预定义宏是几乎所有C编译器都支持的。 以下是一些常见的C预定义宏&#xff1a; __…

Creo模型按一定的比例放大或缩小(实际尺寸)

原来&#xff0c;距离是100mm 缩放操作 放大3倍&#xff0c;距离变为300mm

最强端侧多模态模型MiniCPM-V 2.5,8B 参数,性能超越 GPT-4V 和 Gemini Pro

前言 近年来&#xff0c;人工智能领域掀起了一股大模型热潮&#xff0c;然而大模型的巨大参数量级和高昂的算力需求&#xff0c;限制了其在端侧设备上的应用。为了打破这一局限&#xff0c;面壁智能推出了 MiniCPM 模型家族&#xff0c;致力于打造高性能、低参数量的端侧模型。…

Figma 文件批量导出到本地的方法

作为新一代UX设计师&#xff0c;我们应该熟练地使用市场上的许多设计软件&#xff0c;并更熟悉它们的软件功能。现在市场上的即时设计&#xff0c;作为一种在线合作设计工具&#xff0c;值得成为许多设计师的常用工具。最近&#xff0c;我了解到即时设计进行了新的功能更新&…

激光雷达测试板智能系统应用

在自动驾驶技术和机器人感知系统的迅猛发展中&#xff0c;激光雷达&#xff08;Lidar&#xff09;作为一种先进的测距技术&#xff0c;正逐渐成为这些系统不可或缺的组成部分。而在这一技术的实际应用前&#xff0c;对激光雷达进行精确的测试和校准是至关重要的一步。激光雷达测…

C#根据数据量自动排版标签的样例

这是一个C#根据数据量自动排版标签的样例 using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Drawing; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using HslCommuni…

[C][符号]详细讲解

目录 1.算术操作符2.接续符和转义符 \1.续行符使用2.转义 3.单引号和双引号4.逻辑运算符5.位运算符6.移位操作符7. --操作8.条件操作符9.逗号表达式10.操作符的属性 1.算术操作符 算术操作符&#xff1a; - * / %除了%操作符以外&#xff0c;其他的几个操作符可以作用于整数和…

永久免费SSL证书领取流程

一、SSL证书的前世今生 起源&#xff1a; SSL证书起源于1994年&#xff0c;当时网景公司&#xff08;Netscape&#xff09;推出了安全套接字层&#xff08;SSL&#xff0c;Secure Sockets Layer&#xff09;协议&#xff0c;这是一种加密通信协议&#xff0c;用于在客户端和服…

【软考】系统架构师知识点

目录 环路复杂度McCabe软件工具分类需求分类软件测试中间件分类等保&#xff08;信息安全等级保护&#xff09;数据流图DFD微内核架构信息系统生命周期区块链MDA模型驱动架构EJBSOA微服务REST五大原则管道过滤器 VS 仓库风格虚拟机风格质量属性 & 非功能性需求敏感点、权衡…

“2024深圳数字能源展”共同探讨数字能源未来发展方向和挑战

在数字化浪潮的推动下&#xff0c;新一轮科技革命与产业革命正以前所未有的速度加速兴起。在这个时代背景下&#xff0c;数字化技术与能源行业的高度融合&#xff0c;使得能源数字化成为未来发展的必然趋势。数字经济浪潮的蓬勃兴起&#xff0c;为能源行业的数字化转型提供了强…

JAVA面试题大全(十八)

1、说一下 jvm 的主要组成部分&#xff1f;及其作用&#xff1f; 类加载器&#xff08;ClassLoader&#xff09;运行时数据区&#xff08;Runtime Data Area&#xff09;执行引擎&#xff08;Execution Engine&#xff09;本地库接口&#xff08;Native Interface&#xff09;…

【微服务】安装docker以及可视化界面

1.配置yum下载源为aliyun源 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo2.下载docker不加版本号默认为最新版本 yum install -y docker-ce3.启动以及开机自启 #启动docker命令 systemctl start docker #设置开机自启命令…