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 = true与query.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_objects与after_save :unset_attribute_groups_objects完成落库与缓存清理;default_group_map将内置属性映射到默认分组,例如assignee、responsible归入people;estimated_time、remaining_time、percentage_done、spent_time归入estimates_and_progress;priority归入details;default_groups定义了五类内置分组:people、estimates_and_progress、details、other、children;- 支持通过
add_default_group与add_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 ON与GROUP 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),仅供参考