超多功能的免费甘特图 适用(vue)

Vue 甘特图 vue做甘特图,先大致介绍下核心功能: (1)横轴、纵轴拖拽; (2)自定义监听点击事件(双击、右键等)(3)任务之间显示父子层级关系;(4)左侧列表信息,右侧时间轴表示任务;(5)每个任务可以订制样式,并且可以动态修改样式;(6)自定义时间粒度显示(小时、天、星期、月、年);(7)支持大批量数据渲染;(8)支持同行多节点渲染;(9)支持选中,以及批量选中;(9)优秀的扩展性,支持第三方插件。等等还有其他的一些功能。这里先看一下效果图:   接下来会介绍用什么实现的,... 阅读详情
AI摘要

本文展示了如何在Vue应用中使用dhtmlx-gantt插件创建甘特图,包括设置筛选、日期选择、任务类型选择等功能,并提供了初始化配置和事件处理的代码片段。

使用的插件:dhtmlx-gantt

下载方式:npm i dhtmlx-gantt

插件官网:Gantt API Gantt Docs (dhtmlx.com)

作品展示

直接上全部代码

<template>
	<div class="card">

		<el-card>
			<div class="ard">
				<el-radio-group v-model="radio2">
					<el-radio-button label="全部" />
					<el-radio-button label="进行中" />
					<el-radio-button label="已超时" />
					<el-radio-button label="已完成" />
				</el-radio-group>
				<div class="asd">
					<p>开始时间:</p>
					<el-date-picker v-model="value1" type="date" placeholder="点击选择时间" :size="size" />
				</div>
				<div class="asd">
					<p>结束时间:</p>
					<el-date-picker v-model="value1" type="date" placeholder="点击选择时间" :size="size" />
				</div>
				<div class="asd">
					<p>选择任务类型:</p>
					<el-select v-model="value" class="m-2" placeholder="下拉选择" style="width: 170px">
						<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
					</el-select>
				</div>
				<el-button style="margin-left: 10px;" type="primary" :icon="Filter">筛选</el-button>
				<el-button type="primary" :icon="Plus">新增</el-button>
			</div>
		</el-card>
		<el-card class="box-card">

			<div class="cardtop">

				<div class="margins">
					<p><el-color-picker v-model="objs.asd1" show-alpha />攻击组</p>
					<p><el-color-picker v-model="objs.asd2" show-alpha />防御组</p>
					<p><el-color-picker v-model="objs.asd3" show-alpha />目标组</p>
				</div>
				<el-radio-group v-model="radio1" size="small">
					<el-radio-button label="年" />
					<el-radio-button label="月" />
					<el-radio-button label="日" />
				</el-radio-group>
			</div>
			<div id="gantt_here" style="margin-top: 10px;" class="gantt-container"></div>
		</el-card>
	</div>
</template>
   
<script setup>
import { reactive, toRefs, ref, onBeforeMount, onMounted, watchEffect, defineExpose } from 'vue'

import { gantt } from 'dhtmlx-gantt'
import 'dhtmlx-gantt/codebase/dhtmlxgantt.css'
import { Plus, Filter } from '@element-plus/icons-vue'

const data = reactive({})
const radio1 = ref('年')
const radio2 = ref('全部')
const value1 = ref('')
const value = ref('')
let objs = reactive({
	asd1: '#f2e6c2',
	asd2: '#b5e09b',
	asd3: '#baefe2'
})
let dialogVisible = ref(false)

//初始化甘特图
const initGantt = () => {

	var tasks = {
		data: [
			{
				id: 1,
				taskname: '明天吃烩菜',
				parent: 0,
				start_date: "01-04-2018",
				progress: 0.3,
				duration: 1,
				types: 1,
				text: '李大厨',
				color: objs.asd1,
				tsakrank: 0,

			},
			{
				id: 2,
				taskname: '明天吃鱼肉',
				parent: 0,
				start_date: "01-04-2018",
				progress: 0.42,
				duration: 5,
				types: 2,
				color: objs.asd2,
				text: '王大厨',
				tsakrank: 1,


			},
			{
				id: 3,
				taskname: '明天吃西餐',
				parent: 0,
				start_date: "01-04-2018",
				progress: 0.65,
				duration: 5,
				types: 3,
				text: '赵大厨',
				color: objs.asd3,
				tsakrank: 2,

			},
			{
				id: 4,
				taskname: '购买水军发动舆论偏差',
				parent: 1,
				start_date: "01-04-2018",
				progress: 0.1,
				duration: 1,
				types: 1,
				text: '李大厨',
				color: objs.asd1
			},
			{
				id: 5,
				taskname: '编辑一边有效证据的文章',
				parent: 2,
				start_date: "01-04-2018",
				progress: 0.1,
				duration: 3,
				types: 2,
				text: '王大厨',
				color: objs.asd2
			},
			{
				id: 6,
				taskname: '寻找目标人物关键证据',
				parent: 3,

				start_date: "01-04-2018",
				progress: 0.1,
				duration: 3,
				types: 3,
				text: '赵大厨',
				color: objs.asd3

			},
			{
				id: 7,
				taskname: '发布目标任务黑料',
				parent: 1,

				start_date: "03-04-2018",
				progress: 0.2,
				duration: 2,
				types: 1,
				text: '李大厨',
				color: objs.asd1
			},
			{
				id: 8,
				taskname: '打造慈善公益效果',
				parent: 2,

				start_date: "04-04-2018",
				progress: 0.1,
				duration: 3,
				types: 2,
				text: '王大厨',
				color: objs.asd2

			},
			{
				id: 9,
				taskname: '查看目标亲朋好友博客',
				parent: 3,
				start_date: "02-04-2018",
				progress: 0.1,
				duration: 6,
				types: 3,
				text: '赵大厨',
				color: objs.asd3
			},


		],
		// links: [
		// 	{ id: 1, source: 1, target: 2, type: "1" },
		// 	{ id: 2, source: 2, target: 3, type: "0" },
		// 	{ id: 3, source: 3, target: 4, type: "1" },
		// 	{ id: 4, source: 4, target: 5, type: "0" },
		// ]
	};

	gantt.config.grid_width = 350
	gantt.config.add_column = false //添加符号
	gantt.config.autosize = true//自适应尺寸
	gantt.config.autofit = true// 表格列宽自适应
	gantt.config.autoscroll = true// 把任务或者连线拖拽到浏览器屏幕外时,自动触发滚动效果
	gantt.config.drag_progress = false//取消任务进度条进度拖动
	gantt.config.scale_height = 60
	gantt.config.row_height = 60
	gantt.config.bar_height = 34
	gantt.config.fit_tasks = true //自动延长时间刻度,以适应所有显示的任务
	gantt.config.auto_types = true //将包含子任务的任务转换为项目,将没有子任务的项目转换回任务
	gantt.i18n.setLocale('cn') //设置语言
	//时间栏配置
	gantt.config.scales = [
		{ unit: 'month', step: 1, format: '%Y年%m月' },
		{ unit: 'day', step: 1, format: '%m/%d' },
	]
	//左侧列表配置
	gantt.config.columns = [
		{ name: "taskname", label: "任务名称", align: 'left', tree: true, width: 140 },
		{
			name: "progress", label: "任务优先", align: 'center', width: 80, template: function (task) {
				let obj = {
					color: task.tsakrank === 0 ? '#ff2b00' : task.tsakrank === 1 ? '#ffab00' : '#409eff',
					icon: task.tsakrank === 0 ? 'icon-youxianjiP0' : task.tsakrank === 1 ? 'icon-youxianjiP1' : 'icon-youxianjiP2',
				}
				return `<div class="jindu" style="color:${obj.color};"><i style="font-size:24px;" class="iconfont ${obj.icon}"></i></div>`
			}
		},
		{
			name: "type", label: "任务类别", align: 'center', width: 100, template: function (task) {

				let obj = {
					color: task.types === 1 ? '#f29d38' : task.types === 2 ? '#65c16f' : '#1890ff',
					icon: task.types === 1 ? 'icon-gongji' : task.types === 2 ? 'icon-kaiqifangyu' : 'icon-icon--mubiaoku',
					text: task.types === 1 ? '攻击' : task.types === 2 ? '防御' : '目标'
				}
				return `<div class="tasktype" style="color:${obj.color};font-size:14px;">
					<i class="iconfont ${obj.icon}"></i>
					<span style="margin-left:3px;"> ${obj.text}</span>
					</div>`
			}
		},
		{
			name: "progress", label: "任务进度", align: 'center', width: 80, template: function (task) {
				return `<div class="jindu" style="width:100%;height:30px;padding-left:10px;font-size:13px;color:black;"><span>${(task.progress * 100).toFixed(0) + "%"}</span></div>`;
			}
		},

	]
	//鼠标移入弹框
	// gantt.templates.tooltip_text = function (start, end, task) {
	// 	return `
	// 	<div style="width: 200px;height: 200px;">
	//             <p>任务名称:这是一个任务</p>
	//             <p>任务策划:张三</p>
	// 			<p>当前状态:进行中</p>
	//             <p>任务类别:攻击</p>
	//             <p>开始时间:2020-12-11</p>
	//             <p>结束时间:2021-04-13</p>
	//     </div>
	// 	`
	// };
	//更改父项图标
	gantt.templates.grid_folder = (item) => {
		return ""
	}
	gantt.plugins({
		marker: true
	});
	var date_to_str = gantt.date.date_to_str(gantt.config.task_date);
	var today = new Date();
	gantt.addMarker({
		start_date: today,
		css: "today",
		text: "今天",
		title: "今天: " + date_to_str(today)
	});
	//更改子项图标
	gantt.templates.grid_file = (item) => {

		return ""
	}
	//任务条显示内容
	gantt.templates.task_text = function (start, end, task) {

		return `
			<div style="color:#454545;font-size:14px;font-weight:700;">执行:${task.text}</div>
		`
	}
	//任务条左侧配置
	// gantt.templates.leftside_text = function (start, end, task) {
	// 	return `<div class="jindu" style="width:100%;height:30px;background-color:#e6f4ff;padding-left:10px;font-size:13px;color:#629eff;"><span>当前进度${(task.progress * 100).toFixed(0) + "%"}</span></div>`;
	// };
	//展开树图标
	gantt.templates.grid_open = function (item) {
		return `<i style="font-size:14px;background:none; color:#1890ff; padding-left:10px;" class="gantt_tree_icon gantt_${item.$open ? "close" : "open"}  iconfont  ${item.$open ? 'icon-zhankaishousuo' : 'icon-zhankaishousuo1'}"></i>`
	};

	gantt.init('gantt_here')  //初始化
	gantt.parse(tasks)   //填充数据

	//双击事件
	gantt.attachEvent("onTaskDblClick", function (id, e) {
		// 在这里编写处理双击事件的代码
		console.log("双击了任务:" + id);
		dialogVisible.value = true
	});


}

onBeforeMount(() => { })
onMounted(() => {
	initGantt()
})
watchEffect(() => { })
defineExpose({
	...toRefs(data)
})
</script>
<style scoped lang="scss">
::-webkit-scrollbar {
	width: 10px;
}

::-webkit-scrollbar-track {
	background-color: #f1f1f1;
}

::-webkit-scrollbar-thumb {
	background-color: #888;
	border-radius: 5px;
}

::-webkit-scrollbar-thumb:hover {
	background-color: #555;
}

.renwus {
	width: 100%;
	height: 200px;
	display: flex;
	align-items: center;
	justify-content: space-around;
	flex-wrap: wrap;
	overflow: auto;
}

.renwu {
	width: 100%;
	height: 200px;
	display: flex;
	align-items: center;
	justify-content: space-around;
	flex-wrap: wrap;
}

:deep(.el-progress-circle) {
	width: 100px !important;
	height: 80px !important;
}

.ps {

	padding: 0;
	margin: 0;

}

.percentage-value {
	display: block;
	margin-top: 10px;
	font-size: 28px;
}

.percentage-label {
	display: block;
	margin-top: 10px;
	font-size: 12px;
}

.demo-progress .el-progress--line {
	margin-bottom: 15px;
	width: 350px;
}

.demo-progress .el-progress--circle {
	margin-right: 15px;
}

.cardtop {


	width: 100%;
	height: 100%;
	display: flex;
	justify-content: space-between;
	align-items: center;

	.margins {
		display: flex;
		font-size: 12px;

		p {
			margin-left: 10px;

			:deep(.el-color-picker .el-color-picker__icon) {
				opacity: 0;
			}

			:deep(.el-color-picker__trigger) {
				border: none;
				width: 25px;
				height: 25px;
			}
		}
	}
}

.box-card {
	margin-top: 20px;
}

.card {
	width: 1500px;
	height: 1000px;
	margin: 0 auto;

	.ard {
		width: 100%;
		height: 40px;
		display: flex;
		align-items: center;
	}

	.icons {
		width: 80px;
		height: 30px;
		display: flex;
		align-items: center;
		justify-content: center;
		border: 1px solid #a0cfff;
		color: #46a2ff;
		margin-right: 10px;
		border-radius: 7px;
		background-color: #ecf5ff;

		i {
			color: #1890ff;
			font-size: 14px;
			margin-right: 5px;
		}
	}
}

.asd {
	width: 300px;
	height: 33px;
	border-radius: 5px;
	border: 1px dotted #ccc;
	margin-left: 20px;
	display: flex;
	align-items: center;

	p {
		color: #606266;
		margin-left: 5px;
	}

	:deep(.el-input__wrapper) {
		border: none;
		box-shadow: none !important;

	}

	:deep(.el-date-editor.el-input) {
		width: 200px !important;
	}

	:deep(.el-select__wrapper) {
		border: none;
		box-shadow: none !important;
	}
}

:deep(.gantt_layout_cell) {
	border-radius: 7px;
}

:deep(.gantt_tree_indent) {
	opacity: 0;
}

:deep(.gantt_grid_scale .gantt_grid_head_cell) {
	color: #606266;
	font-size: 15px;
	font-weight: 700;
	border-right: 1px solid #ccc !important;
}

:deep(.gantt_scale_cell) {
	color: #454545 !important;
}

:deep(.gantt_grid_data .gantt_cell) {
	border-right: 1px solid #ccc !important;
	padding: 0;

}

:deep(.gantt_task_progress_wrapper) {
	border-radius: 5px;
}

:deep(.gantt_task_line.gantt_project) {
	border-radius: 5px;
	border: none;
}

:deep(.gantt_data_area div) {
	border-radius: 5px;
	// border:none;
}

:deep(.gantt_tree_content) {
	display: flex;
	align-items: center;


	.jindu {
		width: 100%;
		display: flex;
		justify-content: center;
		align-items: center;
		color: #4482e3;
		border-radius: 10px;
	}

	.tasktype {
		width: 100%;
		height: 100%;
		display: flex;
		justify-content: center;
		align-items: center;

	}



}

:deep(.gantt_task_line) {
	border: none;
}

:deep(.gantt_link_point) {
	display: none !important;
}

:deep(.gantt_task_progress) {
	height: 100%;
}

.toppingTask {
	width: 200px;
	height: 200px;
	background-color: #1890ff;
}
</style>

 

不懂的直接区官网查看就好 什么api都有

全网最新-VUE甘特图 根据时间展示不同状态的甘特图,全网最新最简单 阅读详情

相关推荐

vue.js中使用甘特图(gantt-elastic)的使用

在vue中使用甘特图(gantt-elastic)做进度跟踪 公司要使用甘特图插件来跟踪任务的进度 ,在使用这个插件的过程中踩了太多的坑了,很多配置都没有文档的 连英文文档都没有,然后就看了源码研究了下具体的配置,具体的配置我都在下面的文章中截图有备注了。如果说有什么问题给我留言 我这边会在看到的第一时间回复。 一、首先要安装gantt-elastic这个插件 在npm官网上下载 https://www.npmjs.com/package/gantt-elastic npm install --save g

yangxiaoman123的博客 3万+

【亲测免费】 基于Vue的甘特图组件 - 支持上下拖拽

基于Vue的甘特图组件 - 支持上下拖拽 【下载地址】基于Vue的甘特图组件-支持上下拖拽 本仓库提供了一个基于Vue实现的甘特图组件,特别支持上下拖拽功能。该组件适用于需要进行排班管理的场景,通过拖拽操作可以方便地调整任务的顺序和时间安排 ...

gitblog_09815的博客 420

概率论基础-严士健 第二版 习题与补充1.6答案

概率论基础-严士健 第二版 习题与补充1.6答案 1.不独立。 设有一均匀正八面体,其第1,2,3,4面染红色,第1,2,3,5面染白色,第1,6,7,8面染黑色,现在以A,B,C分别表示投一次正八面体出现红、白、黑的事件,则 P(A)=P(B)=P(C)=12.P(A) = P(B) = P(C) = \frac{1}{2}.P(A)=P(B)=P(C)=21​. P(ABC)=18=P(A)P...

weixin_42341993的博客 2515

Vue项目的甘特图组件:dhtmlx-gantt使用教程和实现效果展示

公司的甘特图需求,研究了几个组件后,选择使用 dhtmlx-gantt 进行实现,dhtmlx-gantt使用其实是偏简单的,文档虽然是英文,但配合翻译也是可以看懂的,下面将公司需求的代码实现粘贴出来,并简单介绍一下使用方法,希望对你有帮助。下面讲一下 dhtmlx-gantt 的一些配置项,也可以说是我用到的配置项,更多的就要参考官方文档了。需求是不需要bar连线的,所以将bar连线注释掉了,连线也是可以有的。如果你的页面能展示出来基本样式,那么就成功啦,咱们继续下一步。然后在css内定义样式就好啦。

Yy55gc25112的博客 2万+

Linux - xarray 工具类

第三层节点直接与绿色的值绑定,若需要像数组一样通过下标访问绿色的值对象那么需要给每一个节点进行编码,这样通过根节点即可访问到具体的对象。对于未使用到的小数组不申请空间,这样只需设计一种方法将这些非连续的小数组在一个数据结构中组织在一起即可,对于这个数组结构需要具有结构紧凑并且能够快速定位到对应的小数组段上,这时候树形结构上场了。一个很大的数组必然可以由一个个小数组拼接而成,若定义一个最小粒度的数组长度,比如长度4,那么从宏观上看一个大数组就由一个个长度为4的小数组排队而成。

ymf604的专栏 1085

WorkBench3.2 + VxWorks6.8安装教程

按照FTP连接主机和目标机,将整个VxWorks6.8的安装分为两个部分,一是在主机(win10系统,可以使用虚拟机或者实体机,推荐使用虚拟机)上安装workbench3.2,进行bootrom与VxWroks映像文件的生成,二是在虚拟机上安装VxWorks系统 19.10.10 首先很高兴文章能帮到大家,但由于本人已不做该方向良久,私信和评论的很多问题现在已经无法解答,如果大家有什么问题欢迎...

Alive的博客 3万+

vue使用甘特图插件dhtmlx-gantt( 简单版)

甘特图 dhtmlx-gantt

MELANCHOLY ❤ ◁ ❚❚ ▷ 1万+

ABB机器人ModbusTCP通信实战:如何高效传输Float数据到PLC(附完整代码)

本文详细介绍了ABB机器人通过ModbusTCP协议高效传输Float数据到PLC的实战方法,包括底层逻辑解析、RAPID程序架构设计、PLC服务器配置及现场调试技巧。特别针对浮点数据传输中的字节顺序问题提供了解决方案,并附有完整代码示例,助力工程师快速实现工业自动化设备间的高精度数据交互。

weixin_30836759的博客 482

Vue2整合DHTMLXGantt甘特图实战

本文介绍了在Vue2项目中使用DHTMLX Gantt甘特图的方法。主要内容包括:1) 安装DHTMLX Gantt并引入组件;2) 基础配置和汉化处理;3) 数据格式定义和加载方式;4) 常用功能实现如时间线定位、全屏、搜索等;5) 事件处理和API调用;6) 自定义样式修改。文章详细说明了甘特图的核心配置项、数据绑定方式以及交互功能开发,同时提供了完整的示例代码,包括日期格式化、任务状态显示、负责人头像渲染等实用功能实现。

油墨香^-^的博客 7863

从特斯拉到蔚来:拆解主流智能汽车的车联网架构,看它们如何实现‘车、路、云’协同

本文深度解析了特斯拉、蔚来等主流智能汽车的车联网架构,详细拆解了其‘车、路、云’协同的技术实现。从车内网络、车际通信到云端协同,分析了通信技术、系统架构等关键技术选择,揭示了不同厂商如何通过差异化布局构建竞争优势。

weixin_42525289的博客 580

【75】OpenCV C++实战篇——OpenCV 图像拼接、全景拼接(教程合集)

本文整理了OpenCV实现图像拼接的技术教程合集,涵盖C++和Python两种语言实现方案。图像拼接技术旨在将多张重叠图像融合为无缝全景图,既扩大视角又保持高分辨率。内容包含水平矫正等关键步骤(附对比效果图),提供多个实战案例的完整代码和详细讲解,涉及单应性矩阵、图像变换等核心技术。不同案例展示了从两张到多张图像的拼接效果,适合不同层次的学习者参考实践。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 528

前端vue实现甘特图

前端实现甘特图

xiaofiy的博客 1万+

【技术科普】破解政务跨系统数据壁垒!亘川一网统管平台多源数据同步技术解析

本文解析亘川一网统管平台多源数据同步技术,针对政务跨系统数据壁垒难题,介绍组件的数据采集、校验、审计留痕等核心能力,结合营商环境项目落地案例,对比传统开发模式差异,讲解开源组件的实践价值,为政务项目开发者提供落地参考。

weixin_67440240的博客 635

推荐一些免费开源支持Vue3甘特图组件

🌈在现代项目管理和任务调度中,甘特图是一种非常实用的工具。它能够直观地展示任务的时间安排、进度和依赖关系。对于使用Vue 3的开发者来说,选择一个合适的甘特图组件可以大大提高开发效率。本文将为大家推荐几款免费、开源且稳定好用的Vue 3甘特图组件,并简要介绍它们的特点和使用场景。如果需要高度定制化和复杂功能,推荐或。如果需要轻量级且简单易用的组件,推荐或。如果需要多种视图模式,推荐。希望本文能帮助你在Vue 3项目中快速找到合适的甘特图组件!如果你有其他推荐或使用心得,欢迎在评论区分享!

李赛赛的专栏 7530

AUTOSAR NvM 实车故障深度剖析:车载存储问题快速定位与工程解决方案

软件配置与代码逻辑无问题时,排查底层驱动与ECU硬件,步骤如下:底层驱动排查:排查Fls/Eep驱动配置,是否适配目标MCU(如TC397、S32K),编程/擦除/读取时序是否合理;检查Fls/Eep驱动错误处理逻辑,是否未处理Flash编程失败、读取错误等异常;验证Flash高速编程模式是否启用,是否能提升写入/读取速度;排查MemIf层配置,是否正确对接NvM与Fls/Eep驱动,是否存在调度延迟。

getusushu的博客 78

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

基于dhtmlx-gantt和vue开发的甘特图

我当时公司需求是要求在甘特图上能显示任务情况的,即显示开始和结束时间,和实际任务开始和结束时间,还有请假,出差,加班,节假日情况,在网上找了一圈发现dhtmlx-gantt,dhtmlx-gantt付费不能完全能满足需求,但是小人不敢提,结果摸索后发现这是使用html生成的图表,修改起来很方便,所以我来分享一下免费版的,又满足要求的甘特图。

yke1213的博客 4451

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

5款免费又好用的甘特图软件,总有一款适合你

甘特图(Gantt chart)又称为横道图、条状图(Bar chart),以提出者亨利·劳伦斯·甘特(Henry Laurence Gantt)先生的名字命名。甘特图通过条状图来显示项目、进度和其他时间相关的系统进展的内在关系随着时间进展的情况,项目进度一目了然。可帮助用户快速的整合项目管理软件所需的甘特图,网络图,资源柱状图,日程日历,资源调度等功能模块,并提供全方位的支持和服务。目前市面上有很多甘特图产品,现在就来看看常用的、可定制开发的甘特图吧! 1、VARCHART XGantt VARCHART

RoffeyYang的博客 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【免费下载】 XGantt:基于Vue3的高性能甘特图组件

**XGantt** 是一款基于 Vue3 的高性能甘特图组件,专为现代前端开发设计。它不仅继承了 `jz-gantt` 的优秀特性,还针对 Vue3 进行了全面优化和升级。无论你是项目经理、开发者还是数据分析师,XGantt 都能帮助你轻松创建和管理复杂的项目时间线。 ## 项目技术分析 XGantt 的核心技术栈基于 Vue3,充分利用了 Vue3 的响应式系统和 Composition ...

gitblog_00991的博客 2113

推荐文章:Vue2驱动的高效可拖拽甘特图——你的项目管理神器

推荐文章:Vue2驱动的高效可拖拽甘特图——你的项目管理神器 【下载地址】Vue2实现可拖拽甘特图基于Element-UI的Gantt图 本项目源于企业级应用的实际需求,旨在开发一个功能全面、易用且免费的可拖拽甘特图表解决方案。在面对市场上付费且缺乏详尽中文文档的难题时,我们深入调研了多个开源示例,整合并优化了各项功能,...

gitblog_09771的博客 558

Plugin-gantt-elastic(vue2中甘特图实现与引入)

gantt-elastic(vue2中甘特图实现与引入)

岂不闻 3679

从0到1开发Vue甘特图应用:基于Vue-Gantt-chart的完整开发流程

Vue-Gantt-chart是一个基于Vue.js的数据可视化组件,专为项目管理和时间线规划设计。本文将带你通过简单步骤,快速构建功能完善的甘特图应用,无需复杂的前端知识即可上手。 ## 📋 准备工作:环境搭建与项目初始化 ### 1. 安装必要依赖 确保你的开发环境已安装Node.js和npm/yarn。通过以下命令克隆项目仓库: ```bash git clone https://gi

gitblog_01004的博客 1075

【亲测免费】 Vue2 实现可拖拽甘特图(基于Element-UI的Gantt图)

Vue2 实现可拖拽甘特图(基于Element-UI的Gantt图) 【下载地址】Vue2实现可拖拽甘特图基于Element-UI的Gantt图 本项目源于企业级应用的实际需求,旨在开发一个功能全面、易用且免费的可拖拽甘特图表解决方案。在面对市场上付费且缺乏详尽中文文档的难题时,我们深入调研了多个开源示例,整合并优化了各...

gitblog_09705的博客 1203

【亲测免费】 打造高效项目管理:Vue2自制甘特图组件推荐

打造高效项目管理:Vue2自制甘特图组件推荐 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在现代项目管理中,甘特图作为一种直观展示项目进度和任务分配的工具,被广泛应用于各种业务场景。为了满足更贴合实际业务需求的管理需求,我们推出了基于Vue2框架的自制甘特图组件源码。该组件不仅继承了Vue2的灵活性和高效性,还通过多段显示功能和自定义样式配置,为用户提供了更加个性化...

gitblog_09789的博客 456

vue.js有哪几种甘特图库?Vue.js的5大甘特图库分享!

如今,软件市场为任何复杂程度的项目提供了各种现成的计划和调度工具,但这些解决方案可能包含过多的功能或缺乏一些必要的功能。这就是为什么许多公司更愿意投资开发基于网络的定制解决方案的原因。这并不奇怪,因为有大量且不断增长的高级 JavaScript 库和框架允许 Web 开发人员构建功能丰富的应用程序,以精确满足任何给定项目的所有需求。在本文中,我们将考虑用于基于 Vue 的应用程序的前 5 个甘特库。

爱编程的鱼的博客 4068

vue 开源免费的在线甘特图制作平台

技术栈是 Vue3 + Element Plus,界面清爽,功能够用。不管你是项目经理、产品经理,还是自己接私活需要排期,用它来可视化项目进度都挺顺手的。开源地址:https://gitee.com/yubaolee/StarGantt。的开源项目,前端包括管理后台、微信小程序,后端支持单体、微服务架构。一对一交流/面试小册/简历优化/求职解惑,欢迎加入。:项目实战、面试招聘、源码解析、学习路线。RBAC权限、数据权限、SaaS多租户、欢迎加入我的知识星球,全面提升技术能力。、支付、工作流、大屏报表、

weixin_44421461的博客 77
上一篇: 送给广大同行们 一个养生好方法 杜绝掉头发
下一篇: 打包报错提示:At least one <template> or <script> is required in a single file component.
Gql_郭小磊
博客等级 码龄4年 405粉丝 15原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值