资讯动态

Grocy 2.5.2 版本解读:家务周期调度升级、购物清单功能开关与日期输入快捷键全解析

发布时间:2026/9/16 19:58:22 来源:尧图企业网站定制
Grocy 2.5.2 版本解读家务周期调度升级、购物清单功能开关与日期输入快捷键全解析【免费下载链接】grocyERP beyond your fridge - Grocy is a web-based self-hosted groceries household management solution for your home项目地址: https://gitcode.com/GitHub_Trending/gr/grocy本文基于 grocy 2.5.22019-10-05 发布的官方变更记录深入剖析该版本在库存、菜谱、购物清单、家务Chores与日期输入交互五大方向的具体改动。读者将掌握新增的FEATURE_FLAG_SHOPPINGLIST_MULTIPLE_LISTS子功能开关的配置方法、家务年周期 周期间隔调度体系的底层计算逻辑含 SQL 视图实现、以及日期字段的完整键盘快捷键速查表并了解升级到该版本时数据库迁移的注意事项。一、版本概览一次以家务调度为重心的修复与增强Grocy 2.5.2 是 2019 年 10 月 5 日发布的维护版本紧随 2.5.0 / 2.5.1 之后。从变更记录看该版本的核心工作集中在三块家务Chores模块的功能增强新增yearly每年周期类型并引入周期间隔period interval选项使调度从固定周期走向每 N 天/周/月/年的灵活组合大量缺陷修复覆盖库存Stock、菜谱Recipes两个核心业务模块交互效率优化为日期字段新增以Shift 方向键快速增减 1 个月/年的输入快捷键。下面逐项结合源码剖析其实现与使用方式。二、库存修复产品特定数量单位换算覆盖的显示隔离变更内容修复了产品特定数量单位换算product overrides在其他具有相同库存数量单位的产品编辑页上也被显示的问题。问题背景在 grocy 中每个产品可以定义默认数量单位QU也可以针对特定产品建立产品级的数量单位换算覆盖即 product overrides。2.5.2 之前的版本存在一个显示层 bug当多个产品使用同一个库存数量单位时某个产品的换算覆盖会被错误地渲染到其他产品的编辑页面上造成数据混淆——例如给面粉配置的500g 1袋换算可能错误地出现在同样以克为单位的砂糖编辑页上。修复要点该问题属于视图View层的数据过滤缺陷修复后每个产品的编辑页对应views/productform.blade.php所在的表单渲染链路只展示与自身产品 ID 严格匹配的换算覆盖不再依据共享的数量单位 ID 做错误关联。从该版本起涉及数量单位换算配置时可以确认一个产品的覆盖配置只会出现在它自己的编辑页这一行为边界。三、菜谱修复总菜谱数超过 100 时成分缺失变更内容修复了当菜谱总数 100 时菜谱显示时缺少成分ingredients的问题。原因与影响这是一个典型的分页/查询边界缺陷当系统中菜谱总量超过 100 条后菜谱详情页加载成分列表时使用的查询逻辑出现截断导致成分列表为空或不全。修复后无论菜谱总量多少打开单个菜谱都能正确渲染全部成分行。与菜谱展示相关的完整数据流可参见 controllers/RecipesController.php 与 services/RecipesService.php前者负责页面路由与渲染参数装配后者负责从数据库组装菜谱及其recipes_pos成分明细数据。2.5.2 的修复即落在这一查询链路的边界条件处理上。四、购物清单改进新增FEATURE_FLAG_SHOPPINGLIST_MULTIPLE_LISTS子功能开关变更内容新增子功能开关FEATURE_FLAG_SHOPPINGLIST_MULTIPLE_LISTS用于在只需要一个购物清单的场景下禁用多清单功能默认值为true即未配置时行为与之前完全一致。配置方式该开关属于子功能开关Sub feature flags层级在 config-dist.php 中与同组的其他子功能开关并列定义// Sub feature flags Setting(FEATURE_FLAG_STOCK_PRICE_TRACKING, true); Setting(FEATURE_FLAG_STOCK_LOCATION_TRACKING, true); Setting(FEATURE_FLAG_STOCK_BEST_BEFORE_DATE_TRACKING, true); Setting(FEATURE_FLAG_STOCK_PRODUCT_OPENED_TRACKING, true); Setting(FEATURE_FLAG_STOCK_PRODUCT_FREEZING, true); Setting(FEATURE_FLAG_STOCK_BEST_BEFORE_DATE_FIELD_NUMBER_PAD, true); Setting(FEATURE_FLAG_SHOPPINGLIST_MULTIPLE_LISTS, true); // ← 2.5.2 新增 Setting(FEATURE_FLAG_RECIPES_MEALPLAN, true); Setting(FEATURE_FLAG_CHORES_ASSIGNMENTS, true); Setting(FEATURE_FLAG_THERMAL_PRINTER, false);与主功能开关如FEATURE_FLAG_SHOPPINGLIST不同这个子开关不会整体隐藏购物清单模块而是控制多清单能力的 UI 与逻辑分支true默认保留购物清单页面顶部的清单切换下拉框、New shopping list/Edit shopping list等列表操作菜单支持维护多条清单false隐藏清单选择器购物清单页面退化为单清单模式页面直接使用 id 为 1 的默认清单界面更简洁。源码中的实际作用点该开关在前端三个位置生效可以直观看到它的控制范围清单切换器渲染views/shoppinglist.blade.php 中通过if(GROCY_FEATURE_FLAG_SHOPPINGLIST_MULTIPLE_LISTS)决定是否渲染下拉切换器为false时则退化为隐藏域selected-shopping-list固定值为1页面始终操作默认清单清单项表单views/shoppinglistitemform.blade.php 中同样用该标志决定添加到哪条清单的选择控件是否出现清空清单确认文案public/viewjs/shoppinglist.js 中关闭多清单时确认弹窗文案由Are you sure you want to empty shopping list %s?简化为Are you sure you want to empty the shopping list?避免单清单场景下出现无意义的清单名占位。配置建议个人/家庭单用户场景若只使用一条清单可将该开关设为false以获得更干净的界面多场景如日常采购与周末大采购分清单用户保持默认true即可无需任何改动。注意后续版本曾修复当该开关为false时某些操作后清单显示为空的连带问题见 changelog/55_2.6.0_2020-01-31.md若你使用较新版本则无需担心此历史缺陷。五、家务改进yearly周期类型与周期间隔period interval变更内容本版本家务模块的两项核心增强新增周期类型yearly每年用于年度性家务安排新增每个家务的周期间隔period interval选项适用于 daily / weekly / monthly / yearly 四类周期调度含义是每 N 天/周/月/年执行一次例如可实现**双周biweekly**调度。家务周期类型的完整集合在服务层 services/ChoresService.php 中定义了 2.5.2 起全部周期类型的常量const CHORE_PERIOD_TYPE_HOURLY hourly; const CHORE_PERIOD_TYPE_DAILY daily; const CHORE_PERIOD_TYPE_MANUALLY manually; const CHORE_PERIOD_TYPE_MONTHLY monthly; const CHORE_PERIOD_TYPE_WEEKLY weekly; const CHORE_PERIOD_TYPE_YEARLY yearly; // ← 2.5.2 新增 const CHORE_PERIOD_TYPE_ADAPTIVE adaptive;表单中的调度配置项在 views/choreform.blade.php 的家务编辑表单中调度相关字段按周期类型联动显示周期类型period_type下拉选择required含上述全部类型周期天数period_days仅对monthly生效每月第几天min 0每周星期几复选仅对weekly生效周一至周日复选框选择结果写入隐藏字段period_config周期间隔period_interval2.5.2 新增字段min 1默认1对hourly / daily / weekly / monthly / yearly五种周期类型均可见语义为每隔 N 个基本周期执行一次如period_interval 2daily即每两天一次period_interval 2weekly即双周一次。底层计算逻辑数据库视图家务的下次预计执行时间由数据库视图chores_current统一计算2.5.2 通过迁移脚本 migrations/0164.sql 重建了该视图其中period_interval参与各周期类型的推算dailyDATETIME(MAX(l.tracked_time), || CAST(h.period_interval AS TEXT) || day)—— 上次执行时间 N 天weekly在启用的星期中取上次执行时间 N×7 天基于period_interval - 1计算偏移后下一个匹配星期作为下次执行时间monthlystart of month偏移 N 个月后再加period_days - 1天即每月第 N 天yearlyMAX(l.tracked_time) N 年后取其年份拼接start_date的月日部分即每年固定在 start_date 设定的月日执行。该视图同时处理manually固定返回2999-12-31表示永不自动到期、rollover过期未做则顺延等分支逻辑并只聚合active 1且未撤销undone 0的跟踪记录具体可查看 migrations/0164.sql。迁移脚本对旧数据的兼容处理migrations/0164.sql 不仅新建了period_interval与start_date字段还做了三项历史数据适配为chores表新增start_date开始日期并将已有家务的开始日期回填为最早一次跟踪时间从未执行过的家务则回填为当天通过INSERT/UPDATE触发器保证新家务未显式填写开始日期时自动取当前时间将历史遗留的yearly周期数据转换为daily period_interval 365的等价表达period_interval IFNULL(period_interval, 1) * 365确保旧数据迁移后调度语义不变。配置示例双周保洁在家务页面新建/编辑家务时配置项值说明周期类型weekly按周调度周期间隔2每 2 周执行一次星期周六每周期的具体执行日开始日期选择首次执行日期作为周期锚点保存后家务总览页会基于上述配置自动推算下一次预计执行时间。六、通用改进日期字段的键盘输入快捷键变更内容日期字段新增输入快捷键——通过Shift 方向键可将日期增减 1 个月/年。完整快捷键速查表该能力实现在 public/viewjs/components/datetimepicker.js前端日期时间选择器组件综合普通方向键与 Shift 组合键完整的按键行为如下按键效果↑日期 -1 天↓日期 1 天←日期 -1 周→日期 1 周Shift ↑日期 -1 个月Shift ↓日期 1 个月Shift ←日期 -1 年Shift →日期 1 年空输入框 任意方向键自动填入今天上述行为对仓库内所有使用日期/日期时间选择器组件的页面如采购、消费、库存盘点、家务跟踪、任务等统一生效无需逐页面配置。同期的其他日期输入技巧在 2.5.2 前后日期输入组件还支持若干文本快捷输入同样位于 public/viewjs/components/datetimepicker.js输入x或X快捷设为永不过期内部表示为2999-12-31 23:59:59输入3d/-2m/1y相对今天增减 N 天/月/年输入 4 位数字如1015解析为MMDD若早于今天则自动顺延到下一年输入 8 位数字如20191005解析为YYYY-MM-DD。这些快捷键与方向键组合共同构成了 grocy 高效的日期录入体系尤其适合在购买页批量录入保质期等场景。七、升级到 2.5.2 的注意事项从变更记录与迁移脚本可以总结出以下升级要点数据库会自动迁移本次升级包含迁移脚本 migrations/0164.sql会自动为chores表新增start_date、period_interval字段并重建chores_current视图无需手工操作但升级前仍建议备份数据库旧数据兼容存量家务的开始日期会被自动回填为最早跟踪时间历史yearly类型数据会被自动转换为等价的daily 365表达调度不会错乱新功能默认开启FEATURE_FLAG_SHOPPINGLIST_MULTIPLE_LISTS默认true不修改配置则升级前后行为一致需要精简界面再将其改为false升级方式标准 grocy 升级流程为备份数据目录后以新版本文件覆盖部署并执行一次页面访问以触发数据库迁移update.sh与版本文件 version.json 记录了发布版本信息。八、小结Grocy 2.5.2 通过家务年度周期 周期间隔的组合将家务调度从固定每天/每周扩展为每 N 天/周/月/年的灵活模式配合yearly类型在数据库视图层完成推算同时以新增子功能开关的方式让单清单用户能够按需精简购物清单界面库存与菜谱的两个显示缺陷修复则提升了数据展示的准确性。日期字段的 Shift 快捷键则从交互层面提升了采购、盘点等高频录入场景的效率。该版本是 2.5.x 系列中家务调度能力成型的关键节点其调度模型与开关设计在此后的版本中持续沿用。【免费下载链接】grocyERP beyond your fridge - Grocy is a web-based self-hosted groceries household management solution for your home项目地址: https://gitcode.com/GitHub_Trending/gr/grocy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价