OpenProject 7.0 新特性深度解析:集成甘特图、层级工作包表格与属性组配置
2026/9/17 6:03:01 网站建设 项目流程

OpenProject 7.0 新特性深度解析:集成甘特图、层级工作包表格与属性组配置

【免费下载链接】openprojectOpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira alternative with agile planning, issue tracking, roadmaps, Gantt charts, time tracking, collaboration features, and more. Available on premises or in the cloud. ⭐ Star us on GitHub项目地址: https://gitcode.com/GitHub_Trending/op/openproject

导读

本文以 OpenProject 7.0.0 官方发布说明(2017-05-18 发布,见 docs/release-notes/7/7-0-0/README.md)为骨架,逐项拆解这一里程碑版本的核心新特性——集成式甘特图时间线、工作包表格层级显示、工作包类型属性组配置、固定日期过滤等,并结合当前仓库源码(时间线实现、Type 属性组模型、日期过滤器、gantt 模块测试等)验证其底层实现原理。读完本文,你将完整掌握 7.0 版本的功能全貌、各特性的配置入口,以及它们在现代 OpenProject 代码库中的落地形态。

版本概览:迄今为止最大的一次发布

OpenProject 7.0 被官方定位为当时"最大的一次发布"(the biggest OpenProject release yet),核心亮点包括:

  • 全新的交互式时间线(Gantt chart),与工作包表格深度集成;
  • 工作包表格中的层级展示与折叠/展开;
  • 按工作包类型配置属性组(attribute groups);
  • 基于固定日期的表格过滤;
  • 新头部导航、禅模式(Zen-mode)、项目归档/删除入口;
  • 两项企业版(Enterprise add-on)能力:多选自定义字段、Logo 上传与自定义配色;
  • 针对工作包表格的显著性能优化与大规模 bug 修复。

新的集成式甘特图 / 时间线

7.0 最受关注的变化是新的甘特图(timeline)直接内嵌于工作包表格中,取代旧版独立的、交互性较弱的甘特图。新时间线更强调交互性与易用性,用户可以在表格与时间线之间自由切换视图。

从当前仓库源码看,该功能已沉淀为Query模型的正式能力。在 app/models/query/timelines.rb 中,时间线以查询(query)属性形式持久化:

  • timeline_zoom_level枚举定义了时间线缩放粒度:days(天)、weeks(周)、months(月)、quarters(季度)、years(年)、auto(自动);
  • timeline_labels以 Hash 序列化存储,允许在left(左侧)、right(右侧)、farRight(最右侧)三个位置配置标签列,并有valid_timeline_labels校验保证键的合法性。

Gantt 能力由独立模块承载:modules/gantt/lib/open_project/gantt.rb 提供模块入口,modules/gantt/spec/features/timeline/timeline_dates_spec.rb 等特性测试覆盖了时间线日期格式化与不同缩放级别(如"days")下的渲染行为,测试中通过query.timeline_visible = truequery.timeline_zoom_level = "days"直接驱动时间线视图,印证了表格与时间线共用同一查询模型的设计。

工作包表格中的层级显示

7.0 允许在工作包表格中直接显示层级(hierarchy)并折叠/展开(社区工作包 #24647)。这让父工作包与子工作包的从属关系一目了然,无需切换到甘特图即可在表格内梳理结构。

从源码结构看,现代版本中层级能力由查询结果模型支撑:app/models/query/results.rb 及其分组实现 group_by.rb 承担结果集的层级聚合逻辑。结合 7.0 引入的"表格与时间线一体化"设计,层级折叠状态同样可随查询保存,成为工作包列表浏览的日常入口。

工作包类型的属性组配置

7.0 引入属性组(attribute group)配置(社区工作包 #24123):管理员可以按工作包类型(Type)决定"哪些属性显示、哪些默认隐藏",从而为不同业务场景定制工作包表单。

该机制在当前仓库中实现得相当完整,核心位于 app/models/type/attribute_groups.rb:

  • attribute_groups以 Array 形式序列化到 Type 模型,通过before_save :write_attribute_groups_objectsafter_save :unset_attribute_groups_objects完成落库与缓存清理;
  • default_group_map将内置属性映射到默认分组,例如assigneeresponsible归入peopleestimated_timeremaining_timepercentage_donespent_time归入estimates_and_progresspriority归入details
  • default_groups定义了五类内置分组:peopleestimates_and_progressdetailsotherchildren
  • 支持通过add_default_groupadd_default_mapping扩展默认分组与属性映射(插件可借此挂载新字段);
  • 属性可用性判定在 app/models/type/attributes.rb 中完成:work_package_attributes会结合attribute_constraints(如成本、backlog 等模块可注册约束)过滤出当前类型可用的字段集,再交由属性组模型按默认分组归类。

配置入口在现代版本中位于"类型(Types)→ 表单配置",管理员可拖拽属性进不同分组、隐藏不需要的字段,甚至将自定义字段归入other分组。

基于日期的表格过滤

7.0 让工作包表格支持基于固定日期(fixed dates)的过滤,覆盖所有日期类属性——开始/截止日期(start/due date)、创建时间(created on)、更新时间(updated on)等(社区工作包 #22585)。

当前仓库为每种日期属性都提供了独立过滤器,位于 app/models/queries/work_packages/filter/ 目录:

  • dates_interval_filter.rb:日期区间过滤;
  • due_date_filter.rb 与 start_date_filter.rb:截止/开始日期;
  • created_at_filter.rb 与 updated_at_filter.rb:创建/更新时间。

用户既可选择"今天""本周"等相对区间,也可以直接指定固定起止日期,将结果保存为查询视图以便复用。

新的头部导航

7.0 重做了头部导航(社区工作包 #24465):头部直接显示当前项目名称,Logo 居中,既有菜单项重新排序,导航信息层级更清晰。该改动在仓库中由头部组件体系承载,见 app/components/header/(含菜单、头部渲染等子组件)以及 app/controllers/header/、app/helpers/header/ 等配套实现。

从项目设置中归档与删除项目

7.0 起,管理员可以直接在项目设置页面归档(archive)或删除(delete)项目(社区工作包 #24913),不再需要跳转管理后台。项目生命周期管理由此变得更加顺手:

  • 归档用于暂时冻结项目,保留全部数据;
  • 删除用于彻底移除项目。

对应能力可在 app/controllers/projects_controller.rb 及 app/controllers/projects/ 目录中找到,另有 app/helpers/archived_projects_helper.rb 负责归档项目的视图辅助逻辑,归档后的项目会以标记状态展示,避免误操作。

工作包页面的禅模式(Zen-mode)

7.0 引入禅模式(社区工作包 #18216):在工作包表格页面一键隐藏顶部与侧边导航,最大化可用屏幕空间,提供更干净、更大的工作区,尤其适合专注处理长列表或演示场景。该功能与前述表格/时间线集成配合,构成 7.0"沉浸式工作包管理"体验的一部分。

企业版附加功能

7.0 的两项重量级能力仅面向 Enterprise on-premises(企业本地版)与 Enterprise cloud(企业云版)用户开放。

多选自定义字段(Enterprise add-on)

企业版用户可以创建多选(multi-select)自定义字段(社区工作包 #24793):同一字段一次选择多个值,并可直接基于这些值进行过滤。从当前仓库的 app/models/custom_field/order_statements.rb 可以看出,list类自定义字段在排序/分组 SQL 构建中始终保留multi_value分支处理(如DISTINCT ONGROUP BY customized_id的区分),说明多选是自定义字段体系的深层能力,而非简单 UI 开关。

Logo 上传与自定义配色方案(Enterprise add-on)

企业版还支持上传公司自有 Logo替换 OpenProject 默认 Logo,并使用**自定义配色方案(color scheme)**调整界面主题色(社区工作包 #18099、#24460)。这一能力在仓库中有完整配套:配色与样式管理集中在 app/components/custom_styles/、app/controllers/custom_styles_controller.rb 与 app/helpers/custom_styles_helper.rb,配合 app/models/design_color.rb 等模型持久化主题色定义,让企业品牌标识可以贯穿整个界面。

性能与设计改进

7.0 针对工作包表格的加载与渲染性能做了重点优化("Loading and displaying work packages is faster"),并同步进行了多项设计改进,显著提升移动端访问体验。性能提升主要来自表格数据加载链路的精简;设计层面则统一了头部、菜单与表单的视觉语言,为后续版本的前端现代化(如 Angular 化改造)打下了基础。

大量 bug 修复

7.0 还包含数量可观的 bug 修复,覆盖工作包、时间线、自定义字段、导航等多个子系统。官方在社区工作包列表中维护了完整的修复清单(版本筛选为 7.0,对应社区版本号 750),可在项目工作包查询中按版本过滤查看。对升级用户而言,除新增功能外,这轮修复本身就是值得升级的理由。

总结

OpenProject 7.0 是一个承前启后的版本:它将甘特图与工作包表格合二为一,让层级、日期过滤、属性组配置围绕"工作包"这一核心对象形成统一视图;同时通过禅模式、新导航与性能优化改善了日常操作体验;企业版的 logo/配色定制与多选字段则强化了面向组织的品牌与数据建模能力。这些能力在今天的仓库中依然可寻——时间线缩放枚举、Type 属性组模型、日期过滤器族、gantt 模块测试,都是理解 OpenProject 工作包架构的绝佳切入点。

【免费下载链接】openprojectOpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira alternative with agile planning, issue tracking, roadmaps, Gantt charts, time tracking, collaboration features, and more. Available on premises or in the cloud. ⭐ Star us on GitHub项目地址: https://gitcode.com/GitHub_Trending/op/openproject

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询