游乐游手机版
首页/前端开发/文章详情

Vue甘特图vxe-gantt使用(一)年视图渲染

时间:2026-06-29 07:01
在项目管理场景中,甘特图的时间跨度往往长达数年甚至十年以上。vxe-gantt 提供了年视图(year),让你可以清晰展示长期任务的规划和进度。本文介绍年视图的两种使用方式:默认模式和精确模式,并通过示例对比它们的区别与应用场景。 概述 vxe-gantt 通过 taskViewConfig sca

在项目管理场景中,甘特图的时间跨度往往长达数年甚至十年以上。vxe-gantt 提供了年视图(year),让你可以清晰展示长期任务的规划和进度。本文介绍年视图的两种使用方式:默认模式和精确模式,并通过示例对比它们的区别与应用场景。

概述

vxe-gantt 通过 taskViewConfig.scales 配置项控制时间轴的展示粒度。当设置为 ['year'] 时,甘特图以“年”为最小时间单位进行渲染。

配置项 说明
taskViewConfig.scales ['year'] 以年为维度渲染时间轴,每个单元格代表一年。
taskViewConfig.viewStyle.cellWidth 数值(如 120) 每个年份单元格的宽度(单位:px)。
taskConfig.dateFormat 日期格式字符串 控制日期解析精度,决定甘特条在单元格内的精确位置。

适用场景:跨年度的大型工程规划、产品路线图、长期战略项目等。

默认模式:以年为粒度渲染

在默认模式下,甘特图仅解析任务的 年份(yyyy),每个单元格对应一整年。任务条以年份为单位在时间轴上定位,不区分具体的月份或日期。

特点 说明
简单直观 无需关心具体日期,只看年份即可。
性能更优 按年渲染,单元格数量少,滚动流畅。
精度有限 无法区分同一年的不同月份或季度。
适用场景 宏观规划、高层汇报、年度里程碑展示。
<template>
  <div>
    <vxe-gantt v-bind="ganttOptions">vxe-gantt>
  div>
template><script setup>
import { reactive } from 'vue'const ganttOptions = reactive({
  border: true,
showOverflow: true,
  cellConfig: {
    height: 80
  },
  taskBarConfig: {
    showProgress: true,
    showContent: true,
    barStyle: {
      round: true,
      bgColor: '#f56565',
      completedBgColor: '#65c16f'
    }
  },
  taskViewConfig: {
    scales: ['year'],
    tableStyle: {
      width: 320
    },
    viewStyle: {
      cellWidth: 120
    }
  },
  columns: [
    { type: 'seq', field: 'seq', width: 70 },
    { field: 'title', title: '任务名称' },
    { field: 'start', title: '开始时间', width: 100 },
    { field: 'end', title: '结束时间', width: 100 }
  ],
  data: [
    { id: 10001, title: 'A项目', start: '2024-02-26', end: '2025-05-03', progress: 90 },
    { id: 10002, title: '城市道路修理进度', start: '2025-03-03', end: '2027-08-18', progress: 70 },
    { id: 10003, title: 'B大工程', start: '2026-05-28', end: '2029-10-11', progress: 90 },
    { id: 10004, title: '超级大工程', start: '2028-08-11', end: '2032-11-18', progress: 80 }
  ]
})
script>

精确模式

通过设置 taskConfig.dateFormat,可以指定日期解析格式,让甘特条在单元格内按实际开始/结束日期精确显示进度。即使是年视图,也能在单元格内呈现出任务在一年中的具体起止位置。

注意:精确模式下,任务的 start 和 end 字段必须与 dateFormat 格式保持一致。

特点 说明
精度高 可精确到月或日,甘特条位置与实际日期对应。
视觉更细腻 单元格内能直观看出任务在年内的分布。
数据要求更高 日期字段必须包含完整的年月日信息。
适用场景 详细进度跟踪、需要区分年内时间点的场景。
<template>
  <div>
    <vxe-gantt v-bind="ganttOptions">vxe-gantt>
  div>
template><script setup>
import { reactive } from 'vue'const ganttOptions = reactive({
  border: true,
  showOverflow: true,
  cellConfig: {
    height: 80
  },
  taskConfig: {
    dateFormat: 'yyyy-MM-dd'
  },
  taskBarConfig: {
    showProgress: true,
    showContent: true,
    barStyle: {
      round: true,
      bgColor: '#f56565',
      completedBgColor: '#65c16f'
    }
  },
  taskViewConfig: {
    scales: ['year'],
    tableStyle: {
      width: 320
    },
    viewStyle: {
      cellWidth: 120
    }
  },
  columns: [
    { type: 'seq', field: 'seq', width: 70 },
    { field: 'title', title: '任务名称' },
    { field: 'start', title: '开始时间', width: 160 },
    { field: 'end', title: '结束时间', width: 160 }
  ],
  data: [
    { id: 10001, title: 'A项目', start: '2024-02-26', end: '2025-05-03', progress: 90 },
    { id: 10002, title: '城市道路修理进度', start: '2025-03-03', end: '2027-08-18', progress: 70 },
    { id: 10003, title: 'B大工程', start: '2026-05-28', end: '2029-10-11', progress: 90 },
    { id: 10003, title: '超级大工程', start: '2028-08-11', end: '2032-11-18', progress: 80 }
  ]
})
script>

两种模式对比

对比维度 默认模式 精确模式
日期解析 仅解析年份(yyyy) 按 dateFormat 解析(如 yyyy-MM-dd)
甘特条精度 以年为单位,占据整年位置 精确到月/日,在单元格内按比例定位
数据字段要求 start/end 至少包含年份 start/end 必须包含完整的月/日信息
视觉表现 甘特条左对齐年份起始位置 甘特条根据实际日期在单元格内偏移
性能开销 较低 稍高(需要更精细的日期计算)
典型场景 高层规划、年度概览 执行跟踪、详细排期
  • vxe-gantt 的年视图提供了两种使用模式:
    • 默认模式:简单直观,以年为粒度展示任务,适合宏观规划场景。
    • 精确模式:通过 taskConfig.dateFormat 指定日期精度,在年视图内精确定位任务起止,适合需要细粒度展示的跟踪场景。

可根据实际业务需求,在“简洁性”与“精确性”之间选择合适的模式。

来源:https://juejin.cn/post/7654781697330659362
上一篇Fancy Product Designer v6.5.1汉化版产品定制设计插件 下一篇TinyVue开发常见踩坑问题合集
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
如何在JavaScript中实现基于旋转视野的FOV射线绘制详解
前端开发 · 2026-07-01

如何在JavaScript中实现基于旋转视野的FOV射线绘制详解

如果用一句话概括核心,那就是:在 RayCasting 游戏开发中,绘制动态视野边界线(FOV)最可靠的方式是在逻辑层通过数学公式将坐标“算”出来,而不是依赖 Canvas 绘图上下文的旋转操作。 在实现类似 Doom 风格的 RayCasting 游戏时,动态视野(Field of View, F

TypeScript后端数据正确映射为前端接口类型的方法
前端开发 · 2026-07-01

TypeScript后端数据正确映射为前端接口类型的方法

在后端数据与前端类型之间来回转换,几乎是每位 TypeScript 开发者都无法回避的常态。后端返回的 car_brand、reg_number,和前端接口中定义的 brand、govtNumber,命名风格常常对不上号。此时,如果为了省事直接用 as 类型断言“强行”指认类型,那就踩进了常见的陷阱

动态HTML表格按层级条件合并单元格的JavaScript实现
前端开发 · 2026-07-01

动态HTML表格按层级条件合并单元格的JavaScript实现

本文详细讲解一种递归式 JavaScript 合并单元格方法,用于按列优先级(如前3列)智能合并表格行:仅当前一列已合并的前提下,才允许后续列合并相同值,从而精准实现多级分组与层级表格合并效果。 在动态生成的 HTML 表格中,按业务逻辑合并重复行是常见需求。然而,简单地对单列分别遍历合并——例如先

Next.js 13+重定向后滚动失效解决方案
前端开发 · 2026-07-01

Next.js 13+重定向后滚动失效解决方案

在 Next js App Router 的日常开发中,有一个令人颇为困扰的异常现象——当服务端执行 `redirect()` 跳转后,目标页面竟然无法正常滚动。没错,页面已经渲染完成,内容也完整显示,但垂直滚动条仿佛凭空消失。这个问题在 Next js 13 5 4 版本中尤为突出。 先给出结论:

WebGL图像加载延迟的纹理初始化时立即显示方法
前端开发 · 2026-07-01

WebGL图像加载延迟的纹理初始化时立即显示方法

本文详细介绍如何利用 Promise 与 async await 重构 WebGL 纹理加载流程,彻底解决首次渲染显示蓝色占位色、需要手动交互才能刷新的问题,实现文件导入后四张纹理平面即时正确渲染。 实际上,这个坑在 WebGL 开发中相当常见——纹理异步加载的小陷阱,说起来不大,但第一次遇到确实令