一个 Halo 2.x 插件:记录纪念日、生日与家人朋友,也管好你的座驾(汽车 / 电瓶车 / 自行车)——保险、年检、保养到期自动提醒;支持阳历/农历、多图相册、前台「生活 / 爱车」双视图、隐私脱敏,零系统配置写入、零主题文件写入。
English README | Releases | 问题反馈 | 作者:yyliucha
📅 重要日期
- 名称 + 日期 + 多行备注;阳历 / 农历(含闰月),农历自动换算当年阳历
- 每年自动循环,列表显示"最近一次"与"还有几天";支持拖拽排序(前后台一致)
- 自研日期选择器:阳历格内标注农历;农历选年/月(含闰月)/日实时换算;编辑时面板定位到已选日期
👤 人员
- 姓名、昵称、关系(含"本人")、生日(阳历/农历)、性别、血型、身高、体重、喜好、备注、大头贴(官方附件上传 / 附件库选择);支持拖拽排序
- 重要日期可关联多人,列表可按人员筛选
🚗 座驾(汽车 / 电瓶车 / 自行车)
- 17 类分类(轿车 / SUV / MPV / 跑车 / 越野车 / 皮卡 / 旅行车 / 两厢车 / 跨界车 / 微面 / 房车 / 货车 / 客车 / 摩托车 / 电瓶车 / 自行车 / 其他)、能源类型(燃油 / 纯电 / 插混 / 油电混动 / 人力)、品牌型号、颜色、VIN、发动机号、注册与购买日期、里程、状态(在用车 / 已出售 / 已报废)
- 按车型只显示用得上的字段(1.3.0):以「有没有发动机、有没有牌照」分档——自行车不显示车牌 / 能源类型 / 车架号 / 里程 / 购买价格;电瓶车保留车牌与车架号(称「整车编号 / 车架号」),能源类型锁定为纯电,不显示发动机号与首次登记日期;保险公司与保险 / 年检 / 车船税只对汽车、摩托车等机动车出现。编辑弹窗相应精简为五个可折叠分区(基本信息、到期提醒默认展开,相册 / 关联人员 / 更多资料收起并显示摘要),每条到期项压成一行、细节收进「设置」
- 改车型不丢数据:把汽车改成自行车时,已有的保险 / 年检项保留在库里但不再展示、也不再提醒(表单里看不到、卡片与前台都不出现),改回汽车后原样恢复,到期日一字不改
- 多图相册:上传或附件库多选、拖拽排序、设封面;每张可单独勾选「展示」(未勾选仅后台可见,适合行驶证、保单等证件照)
- 附件库来源范围:可在「设置 → 照片设置」为人员大头贴与座驾相册分别指定「分类(分组)」与「存储策略」;命中不到时自动放宽范围并在弹窗中说明当前生效范围与命中数(不会出现空白列表),也可一键「显示全部图片」
- 图片失效自动降级:附件被删除(或被其它插件的全局规则拦截)导致图片打不开时,前台封面回退车型图标、大头贴回退首字、相册显示占位说明——访客永远看不到破图;后台车辆/人员卡片会标出「含失效图片 N」「大头贴已失效」,可一键「移除失效图片」或逐张「重新选择」
- 省流量的图片处理:列表 / 相册网格 / 前台卡片使用
?width=缩略图(默认 480px,可配,0=原图),点开查看仍是原图;上传超过 1.5MB 的图片会先在浏览器压缩(默认压到 1920px,可关) - 提醒状态机(1.2.6):到期日过了没办就是逾期(不再自动滚到下一期)——逾期期间逐日提醒,之后转「待处理」但一直保留在清单里;只有点「已办」才顺延:循环项顺延一期、保养项记为「刚做完保养」(自动更新上次保养日期并按间隔推算下次)、一次性项标记完成;支持一键撤销办理(含上次保养日期一起还原)
- 节点式提醒节奏:提醒期每 7 天一个节点、最后 15 天加密为 15/7/3/1/0 天、逾期 1/2/3 天,每个节点只弹一次并记录在数据库(换浏览器 / 换设备都不会重置)—— 这条管的是后台/前台横幅与仪表盘的主动提醒节奏;悬浮弹窗按下面的规则每次打开都提示
- 弹窗内动作原地生效:在座驾编辑弹窗点「已办 / 撤销办理」立即写库、只刷新本行、不关闭弹窗(不必再"记得点保存")
- 提醒可逐条忽略:前台横幅与仪表盘小组件每条右侧的 ✕ 表示"本次到期周期内不再提示"(存在浏览器里,到期日变化后自动恢复),可一键「恢复显示」,也可在设置里关闭
- 年检规则可配置:「座驾设置 → 年检节点(默认 2,4,6,10)」「从第几年起每年上线检验(默认 11)」可按当地车管所规则调整,表单预览与提醒同步
- 到期提醒:交强险 / 商业险 / 年检 / 保养(按上次保养 + 间隔月数推算)/ 车船税 / 自定义项;每项可设启用、提前天数与循环间隔(每年 / 每两年 / 每三年 / 不循环 / 自定义月数);已出售 / 报废不再提醒(「驾照换证」自 1.3.0 起不再挂在座驾上——它属于"人"而非"车",同一个人开两辆车不会重复提醒)
- 保险公司填一次就够:车辆级「保险公司」全车共用(含常用公司快捷提示),个别险种可「使用其他保险公司」单独覆盖;老数据启动时自动迁移(幂等)
- 年检自动推算:按「首次登记日期 + 车型规则」推算下一次年检(第 2/4 年免检申领 → 第 6/10 年上线检验 → 第 11 年起每年),提示阶段与依据,可「手动指定日期」覆盖;默认提前 30 天提醒
- 年检 / 车船税默认与保险同期:日期跟随交强险到期日(可取消后独立填写),保存时写入相同日期
- 同车同日合并提醒:交强险 / 商业险 / 车船税 / 年检同日到期时合并为一条(如「小白 · 交强险 / 商业险 / 年检」),后台列表仍逐项显示
- 规则切换一次性提示:车辆进入上线检验期(第 6 年起)或改为每年一次(第 11 年起)时后台提示一次,点「知道了」不再重复
- 关联人员:车主 + 常用驾驶人(可选),车辆卡片与人员卡片使用统一徽章(男生「酷」/ 女生「可爱」/ 未关联中性)
🔔 到期提醒(三处,任你挑)
- 仪表盘小组件(Halo 2.21+):常驻仪表盘、每分钟刷新、小分页(默认每页 5 条,可调或关闭),显示完整提醒列表(仪表盘 → 编辑 → 添加部件 → 小部件中心 → 分组「记得」)
- 后台 + 前台横幅:"「结婚纪念日」明天就到啦~" / "「小白」的交强险还有 7 天到期,记得安排一下呀~"
- 悬浮弹窗(可选):默认只在「记得」页面弹出(访客看不到站主提醒),可切回"全站";位置 / 文案 / 倒计时可配;每次打开页面都会提示(设置里可关闭菜单,改成静音需访客主动选择时长)
- 重要日期与座驾到期统一排序(谁近谁靠前);同一辆车同一天到期的多项自动合并为一条
👁 隐私
- 日期、人员、车辆各有「前台展示」开关(车辆默认关闭)
- 前台永不输出:体重、血型、身高、喜好、备注;车牌号永远脱敏(
粤B·****5);VIN、发动机号、保单号、购买价格不输出;生日默认脱敏 - 未勾选「展示」的照片不出现在前台相册
🏠 前台页面(插件默认模板,主题可选覆盖)
- 单页 「生活 / 爱车」 双视图切换(地址栏记忆
?view=car):生活视图=重要日期 + 牵挂的人;爱车视图=车辆卡片 + 车主与驾驶人 + 其他重要的人 - 相册:点击车辆封面全屏滚动查看(只读)
- 通过官方页面布局契约复用主题外壳(主题不支持时用 Halo fallback 布局);主题可放置同名模板覆盖;插件不写入、不修改任何主题文件(停用 / 卸载零残留)
- 提供
importantDateFinder:listAll()/listAllPeople()/listAllCars()/listUpcoming(days)/listUpcomingCarEvents(days)
📊 其他
- 导出 / 导入:JSON(v3,含人员与座驾),判重跳过、不覆盖,兼容旧版导出文件
- 数据存于 Halo 扩展存储(
importantdates.halo.run/v1alpha1),底层即站点数据库(H2 / MySQL / PostgreSQL),与站点同库同备份 - 零系统配置写入(不使用「代码注入」,脚本经官方
TemplateHeadProcessor输出)、零主题文件写入 - 无任何联网请求,不采集、不上传任何用户数据
- Halo 2.26 及以上(按官方 2.26 文档与扩展点实现;Java 17 字节码;1.3.0 在真实 2.26 实例上以既有数据(含 10 辆历史车辆)完成功能自测 18/18 与前台回归 5/5,覆盖卡片到期项、车型联动、切车型不丢数据、折叠分区与老数据纠偏)
- 管理员安装后默认拥有全部权限,无需手动配置角色权限
- 从 Releases 下载
plugin-important-dates-*.jar; - Halo 后台 → 插件 → 安装 → 本地安装 → 上传 jar → 启用(左侧菜单 内容 → 记得);
- 前台访问
https://你的域名/important-dates。
升级:停用 → 卸载旧版 → 安装新 jar → 启用(数据不丢失)。若使用页面静态化 / 缓存插件,升级后清理一次页面缓存。
- 新增日期:名称、日期类型、日期(阳历点选 / 农历选年月日)、关联人员(可多选)、备注;可设「重要」与「前台展示」
- 人员页签:维护人员信息与「前台展示」;可拖拽排序
- 座驾页签:维护车辆档案、相册(含逐张「展示」勾选)、到期项;可拖拽排序;卡片上可直接切换「前台展示」
- 导出 / 导入:页面右上角
- 提醒与隐私配置:插件 → 记得 → 设置(提醒设置、全站悬浮提醒、展示设置、隐私设置、照片设置、座驾设置)
- 启用:经官方
TemplateHeadProcessor输出脚本,关闭即不输出,停用 / 卸载随插件消失 - 位置:右下角 / 左下角 / 右上角 / 左上角 / 底部居中 / 屏幕中间(默认右下角)
- 文案占位符:
{title}、{whenText}、{daysUntil}、{dateText}、{nextSolarDate} - 行为:每次打开页面都会提示(1.3.1 起;此前是同一浏览器只弹一次);自动关闭(默认 8 秒,含倒计时 + 进度条);点 × 可选本次关闭 / 今天不再提示 / N 天内不显示
- 只提醒、不堆清单(1.3.3 起):一辆车只占一行(显示最近到期的那项,并注明「这辆车共 N 项到期」);被折叠或超出「每类最多 N 条」的会汇总成「还有 N 项」,底部还有一行可点文字直达「记得」页看全部。完整日期在前台横幅、仪表盘小组件与「记得」页始终逐条可见,只是弹窗不再一次抛给你十几个决定
- 关闭方式菜单(默认开):点 × 弹出上面这些选项;若关掉菜单,点 × 只收起当前弹窗,不会静默静音
- 时长可在设置里勾选(默认 3 / 5 / 7 / 30 天)
- 没有「永久不再提示」:所有静音都有期限,到期自动恢复,不会有人手一滑就再也收不到提醒
⚠️ 菜单开启时有 5 秒超时:未选择则执行「× 关闭默认行为」,建议保持「本次关闭」或「今天不再提示」
历史升级提示:1.0.21 及以前使用「代码注入」方式,1.0.30–1.1.1 曾自动维护注入片段;自 1.1.2 起改为官方扩展点。若站点仍留有
id-toast:start/end片段,请到「系统设置 → 代码注入」删除一次。
插件不写入主题文件。想完全自定义时,在主题放置 templates/important-dates.html(TemplateNameResolver 优先使用;删除即回退插件默认模板)。
可用数据:
- 生活视图:
title、dates、people、reminders、showImportantTag、showAvatar - 爱车视图:
cars(含plateMasked、coverUrl、photos、skin、events)、carEvents、carPeople、otherPeople、personCars、showCarSection、carSkinEnabled、view
需 JDK 17+(已在 JDK 23 验证)与 Node.js 18+:
cd plugin-important-dates
./gradlew build构建结果位于 build/libs/plugin-important-dates-<版本>.jar(当前版本:2.0.0)。
版本说明:最新正式版
2.0.0(收官版本,功能到此为止。新增插件内自检——提醒不弹时点一下就知道是哪一环出了问题;内置使用说明,不用再翻仓库文档;记得页新增临近程度筛选与「还有几天」列,条目多了也能一眼看出最近要办什么;悬浮弹窗支持 Esc 关闭、关闭按钮改为可 Tab 聚焦,读屏更友好;并修掉一个拖拽排序会打乱被筛掉条目顺序的问题。顺带把插件描述收敛成一句话)。更早:
1.3.3弹窗学会"少抛决定"(一辆车只占一行、被折叠的汇总成「还有 N 项」、底部一行可点文字直达记得页),关闭方式菜单去掉「永久不再提示」并自动清理老访客的永久静音标记,修好座驾自定义到期项从不提醒的老问题;1.3.1修复悬浮提醒不出现的一串问题,弹窗改为每次打开页面都提示;1.3.0座驾按车型分档、改车型保留数据、编辑弹窗折叠分区;1.2.6提醒状态机与1.2.5写操作加固、图片失效降级。







