Vue 和 dhtmlx-gantt 实现图表构建动态多级甘特图效果 ,横坐标为动态刻度不是日期

注意事项:1、横坐标根据日期转换成时间刻度在( gantt.config.scales);2、获取时间刻度的最大值(findMaxRepairTime);3、甘特图多级列表需注意二级三级每个父子id需要唯一(convertData

  1. 安装依赖

    npm install dhtmlx-gantt --save

  2. 在当前页引入和配置 dhtmlx-gantt

    import gantt from "dhtmlx-gantt"; // 引入模块
    // import 'dhtmlx-gantt/codebase/dhtmlxgantt.css'
    import "dhtmlx-gantt/codebase/skins/dhtmlxgantt_terrace.css"; //皮肤
    import "dhtmlx-gantt/codebase/locale/locale_cn"; // 本地化
    // import "dhtmlx-gantt/codebase/ext/dhtmlxgantt_tooltip.js"; //任务条悬浮提示
    

     

  3. 创建甘特图容器

    <div ref="gantt" class="left-container" />initMount() {let convertedData = this.convertData(this.aircraftData);this.tasks.data = convertedData;let maxNum = this.findMaxRepairTime(this.aircraftData);gantt.config.start_date = new Date(2025, 0, 16, 0, 0, 0);gantt.config.end_date = new Date(2025,0,16,Math.floor(maxNum / 60),maxNum % 60,0);gantt.config.autosize = true;gantt.config.readonly = true;gantt.config.show_grid = true;gantt.config.columns = [{ name: "text", label: "名称", tree: true, width: "260" },];gantt.config.show_task_cells = true;// 设置时间刻度gantt.config.scales = [{unit: "minute",step: 10,format: function (date) {// 提取小时和分钟var hours = date.getHours();var minutes = date.getMinutes();// 将小时转换为分钟,并加上额外的分钟数var totalMinutes = hours * 60 + minutes + 10;return totalMinutes;},},];// 设置任务条上展示的内容,参数task会返回当前任务的数据gantt.templates.task_text = function (start, end, task) {return '<div class="gantt-task-content">' + task.text + "-" + task.time + "分钟" + '</div>';};// gantt.config.xml_date = '%Y-%m-%d %H:%i:%s';this.initData();// 初始化甘特图gantt.init(this.$refs.gantt);gantt.clearAll();//销毁// gantt.destructor()gantt.parse(this.tasks);},//初始化甘特图initData: function () {this.tasks.data.map(function (current, ind, arry) {var newObj = {};if (current.type) {if (current.type == 1) {newObj = Object.assign({}, current, { color: "#67c23a" });}//   } else if (current.type == 2) {//     newObj = Object.assign({}, current, { color: "#fec0dc" });//   } else if (current.type == 3) {//     newObj = Object.assign({}, current, { color: "#62ddd4" });//   } else if (current.type == 4) {//     newObj = Object.assign({}, current, { color: "#d1a6ff" });//   }} else {newObj = Object.assign({}, current, { color: "#f9d484" });}return newObj;});},

  4. 处理后端返回的数据

    //处理数组convertData(aircraftData) {let result = [];let nextUniqueId = 0; // 用于生成唯一的IDaircraftData.forEach((aircraft) => {let aircraftInfo = {id: aircraft.taskId,text: aircraft.planeNum,start_date: new Date(2025, 0, 16, 0, 0),end_date: new Date(2025,0,16,Math.floor(aircraft.repairTime / 60),aircraft.repairTime % 60,0),duration: aircraft.repairTime,open: true,time: aircraft.repairTime,};result.push(aircraftInfo);aircraft.lruList.forEach((sparePart) => {let sparePartId = `sparepart-${nextUniqueId++}`; // 生成唯一的IDlet sparePartInfo = {text: sparePart.lruName,start_date: new Date(2025, 0, 16, 0, 0),end_date: new Date(2025,0,16,Math.floor(sparePart.repairTime / 60),sparePart.repairTime % 60,0),id: sparePartId, // sparePart.lruId,  //随机数这个id与下面的sparePart.lruWorkList的parent一致duration: sparePart.repairTime,parent: sparePart.taskId,type: 1,open: true,time: sparePart.repairTime,};result.push(sparePartInfo);sparePart.lruWorkList.forEach((procedure) => {let procedureId = `procedure-${nextUniqueId++}`; // 生成唯一的IDlet procedureInfo = {text: procedure.taskName,start_date: new Date(2025, 0, 16, 0, 0),end_date: new Date(2025,0,16,Math.floor(procedure.workTime / 60),procedure.workTime % 60,0),id: procedureId, //procedure.lruWorkId, //这个 id要唯一duration: procedure.workTime,parent: sparePartId, // procedure.lruIdThree, //aircraft.lruList这个id和parent一致type: procedure.isCompleted,time: procedure.workTime,};result.push(procedureInfo);});});});return result;},//取最大的修理时间findMaxRepairTime(data) {let maxRepairTime = 0;data.forEach((aircraft) => {if (aircraft.repairTime > maxRepairTime) {maxRepairTime = aircraft.repairTime;}});return maxRepairTime;},
    

  5. 子组件监听调用

    watch: {newData: {handler(newVal) {if (newVal !== undefined && newVal !== null)

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

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

相关文章

如何避免大语言模型中涉及丢番图方程的问题

希尔伯特第十问题是一个著名的数学问题,涉及不定方程(又称为丢番图方程)的可解答性。然而在大模型中,我们希望问题都是确定的可解的,或者说要尽可能的想办法避免不确定的不可解问题。由于丢番图方程问题是不可判定问题(即不存在一个有效的算法能够解决该类问题的所有实例…

windows server独立部署Qwen2.5-vl-7B

服务器配置信息 CPU&#xff1a;64G GPU&#xff1a;48G&#xff08;RTX 4090&#xff09; 一、使用conda下载模型 Qwen2.5-VL-7B-Instruct conda下载 conda create --name qwen python3.11 conda activate qwen 魔塔社区下载模型 pip install modelscope modelscope downl…

2025影视泛目录站群程序设计_源码二次开发新版本无缓存刷新不变实现原理

1. 引言 本设站群程序计书旨在详细阐述苹果CMS泛目录的创新设计与实现&#xff0c;介绍无缓存刷新技术、数据统一化、局部URL控制及性能优化等核心功能&#xff0c;以提升网站访问速度和用户体验。 2. 技术概述 2.1 无缓存刷新技术 功能特点&#xff1a; 内容不变性&#x…

在大型语言模型(LLM)框架内Transformer架构与混合专家(MoE)策略的概念整合

文章目录 传统的神经网络框架存在的问题一. Transformer架构综述1.1 transformer的输入1.1.1 词向量1.1.2 位置编码&#xff08;Positional Encoding&#xff09;1.1.3 编码器与解码器结构1.1.4 多头自注意力机制 二.Transformer分步详解2.1 传统词向量存在的问题2.2 详解编解码…

WiFi配网流程—SmartConfig 配网流程

目录 &#x1f4cc; SmartConfig 配网流程 &#x1f449; 阶段 1&#xff1a;设备进入配网模式 &#x1f449; 阶段 2&#xff1a;手机 App 发送 Wi-Fi 配置信息 &#x1f449; 阶段 3&#xff1a;设备解析 Wi-Fi 配置&#xff0c;连接家庭网络 &#x1f449; 阶段 4&…

win10 llamafactory模型微调相关②

微调 使用微调神器LLaMA-Factory轻松改变大语言模型的自我认知_llamafactory 自我认知-CSDN博客 【大模型微调】使用Llama Factory实现中文llama3微调_哔哩哔哩_bilibili 样本数据集 &#xff08;数据集管理脚本处需更改&#xff0c;见报错解决参考1&#xff09; 自我认知微…

从基础到人脸识别与目标检测

前言 从本文开始&#xff0c;我们将开始学习ROS机器视觉处理&#xff0c;刚开始先学习一部分外围的知识&#xff0c;为后续的人脸识别、目标跟踪和YOLOV5目标检测做准备工作。我采用的笔记本是联想拯救者游戏本&#xff0c;系统采用Ubuntu20.04&#xff0c;ROS采用noetic。 颜…

TCP长连接、HTTP短轮询、HTTP长轮询、HTTP长连接、WebSocket的区别

1.TCP长连接 &#xff08;1&#xff09;概念&#xff1a;该连接属于传输层的协议。客户端和服务器之间建立连接后&#xff0c;不立即断开该连接&#xff0c;而是一直保持这个状态&#xff0c;以便后续数据的持续、连续传输。&#xff08;2&#xff09;应用场景&#xff1a;适合…

【Linux Oracle】杂货铺 日常实用2024

1.跨服务器移动文件 passwd=^T^bxxxx `/usr/bin/expect <<-EOF set timeout -1 spawn scp -r ${BATCH_TIME} sxnhtc@192.168.3.x:${EXP_MCRO_DIR}/ expect "*password:" send "$passwd\r" interact expect eof EOF` curl -k -X GET https://192.16…

索引失效的14种常见场景

在 MySQL 中&#xff0c;索引有时可能会失效&#xff0c;导致查询性能下降。以下是常见的 14 种场景&#xff0c;在这些场景下&#xff0c;索引可能会失效 1. 使用 OR 连接多个条件 场景: 当查询中包含 OR 时&#xff0c;如果 OR 连接的多个条件中有一个没有使用索引&#xff0…

06排序 + 查找(D2_查找(D2_刷题练习))

目录 1. 二分查找-I 1.1 题目描述 1.2 解题思路 方法&#xff1a;二分法&#xff08;推荐使用&#xff09; 2. 二维数组中的查找 2.1 题目描述 2.2 解题思路 方法一&#xff1a;二分查找&#xff08;推荐使用&#xff09; 3. 寻找峰值 3.1 题目描述 3.2 解题思路 方…

防火墙综合练习2

准备阶段 实验拓扑图如下&#xff1a; 试验要求如下&#xff1a; 需求一&#xff1a;完成相关配置 需求二&#xff1a;配置DHCP协议 需求三&#xff1a;防火墙安全区域配置 需求四&#xff1a;防火墙地址组信息 需求五&#xff1a;管理员 需求六&#xff1a;用户认证…

Word中Ctrl+V粘贴报错问题

Word中CtrlV粘贴时显示“文件未找到&#xff1a;MathPage.WLL”的问题 Word的功能栏中有MathType&#xff0c;但无法使用&#xff0c;显示灰色。 解决方法如下&#xff1a; 首先找到MathType安装目录下MathPage.wll文件以及MathType Commands 2016.dotm文件&#xff0c;分别复…

单例模式详解(Java)

单例模式详解(Java) 一、引言 1.1 概述单例模式的基本概念和重要性 单例模式是一种常用的软件设计模式,它确保一个类在整个应用程序中只有一个实例,并提供一个全局访问点来访问这个唯一实例。这种模式在资源管理、配置设置和日志记录等方面非常有用,因为它们通常只需要…

什么是FPGA?

目录 一、什么是 FPGA 二、FPGA 的发展历史 三、FPGA 的基本结构 可编程逻辑单元&#xff08;CLB&#xff09; 输入输出块&#xff08;IOB&#xff09; 块随机访问存储器模块&#xff08;BRAM&#xff09; 时钟管理模块&#xff08;CMM&#xff09; 四、FPGA 的工作原理…

ESP8266配置为TCP客户端,连接电脑和手机(使用Arduino配置)

一、简介 基于 ESP8266 的 Arduino 代码&#xff0c;其主要功能是将 ESP8266 连接到指定的 Wi-Fi 网络&#xff0c;并与指定 IP 地址和端口号的服务器建立 TCP 连接。在连接成功后&#xff0c;实现了串口和网络数据的双向传输&#xff0c;也就是将从串口接收到的数据通过 Wi-Fi…

未来科技趋势浅析

基因编辑技术在农业育种上越来越火。这技术能改植物的基因&#xff0c;让它长得更好。比如&#xff0c;科学家用它来培育抗病虫害的作物。这样&#xff0c;农民就不必喷那么多农药了。还有&#xff0c;这种技术还能让作物适应不同的气候条件&#xff0c;这样即使天气不好&#…

力扣-栈与队列-347 前k个高频元素

思路 利用优先队列进行排序&#xff0c;然后利用multiset对count进行排序&#xff0c;最后收集k个高频元素就行 代码 class Solution { public:vector<int> topKFrequent(vector<int>& nums, int k) {priority_queue<int> pq;for(int i 0; i < nu…

【深度学习】多目标融合算法(四):多门混合专家网络MMOE(Multi-gate Mixture-of-Experts)

目录 一、引言 二、MMoE&#xff08;Multi-gate Mixture-of-Experts&#xff0c;多门混合专家网络&#xff09; 2.1 技术原理 2.2 技术优缺点 2.3 业务代码实践 2.3.1 业务场景与建模 2.3.2 模型代码实现 2.3.3 模型训练与推理测试 2.3.4 打印模型结构 三、总结 一、…

关于“i18n“在vue中的使用

关于"i18n"在vue中的使用 <!-- vue2中 --> <template><div>{{ $t("This campaign has expired.") }}}}</div> </template> <script> export default {created() {this.onLoading();},methods: {onLoading () {this.$…