Releases: yyliucha/plugin-important-dates
Releases · yyliucha/plugin-important-dates
Release list
v1.1.3 前台页面升级官方页面布局契约(2.26+,自动复用主题外壳)
v1.1.3 前台页面升级官方页面布局契约
✨ 变化
- 前台 /important-dates 默认模板改用官方页面布局契约(
th:replace="~{layout :: html(head, content)}"):- 当前主题支持布局契约 → 自动复用主题页头、页脚与整体外壳(无需在主题目录放任何文件)
- 主题不支持契约时 → Halo 使用内置 fallback 布局
- 全程零主题文件写入 / 零残留(延续审核意见 ② 整改)
- 兼容范围统一为 >=2.26.0(布局契约为 2.26.0+ 特性;plugin.yaml requires / README / 表单一致)
兼容性说明
- 基于 2.20 平台 API 编译;Halo 2.26.0 全新实例 36/36 PASS(默认模板渲染、System ConfigMap 零写入、主题目录零残留、悬浮提醒按设置输出、隐私脱敏、导入导出)
- 1.1.2 版本曾对 2.20.20 亦完成 36/36(未使用布局契约);如需 2.20 兼容可切换插件独立模板方案
测试
- Halo 2.26.0 全新实例 36/36 PASS(无回归)
- 浏览器实测:页面经布局契约渲染(fallback 外壳正常)、悬浮弹窗/倒计时/关闭菜单正常、仪表盘小组件正常
升级提示(同 1.1.2)
- 1.0.30–1.1.1 曾自动写入的「代码注入」id-toast 片段请手动删除一次
- 主题 templates/important-dates.html(旧自动生成)可删除(现由插件的布局契约模板接管),如需主题完全自定义仍可放置同名模板(TemplateNameResolver 优先)
v1.1.2 按应用市场审核意见整改(重新提交版)
v1.1.2 按应用市场审核意见整改(重新提交版)
依据 2026-09 官方审核意见逐条整改:
① 不再读写 System ConfigMap
- 移除对系统配置(codeInjection)的全部读写;全站悬浮提醒脚本改由官方 TemplateHeadProcessor 扩展点按设置输出:关闭即不输出,插件停用/卸载即消失
- 静态脚本经官方 ReverseProxy 提供(/plugins/plugin-important-dates/assets/...)
- 回归断言:开启/关闭前后 System ConfigMap 字节级一致(零写入)
② 不再写主题文件 / 无请求线程阻塞 IO
- 删除主题模板自动生成与升级机制;前台页 = 插件自带默认模板 + 官方 TemplateNameResolver(主题可提供同名模板作为可选覆盖,插件永不写主题文件)
- 回归断言:全流程后主题目录零残留
③ 兼容范围统一
- plugin.yaml requires / README / 版本说明 = >=2.20.0(基于 2.20 平台 API 编译)
④ 制品唯一
- 本版本仅一个制品 plugin-important-dates-1.1.2.jar(请在应用平台删除历史重复制品)
测试记录
- Halo 2.26.0 全新实例 36/36 PASS;Halo 2.20.20 全新实例 36/36 PASS
- 浏览器实测:仪表盘小组件、悬浮弹窗(倒计时/关闭菜单/3天/永久)、删除即时刷新、隐私脱敏、导入导出
- 人工测试清单:见 docs/app-store-resubmission.md(提交前请在真实环境勾选执行)
升级提示
- 1.0.30–1.1.1 曾自动写入的「代码注入」id-toast 片段:请手动删除一次(插件不再读写系统配置)
- 主题 templates/important-dates.html(旧自动生成):可删除改用默认模板,或保留作为主题自定义覆盖
AI 参与说明(提交审核时请粘贴到「提交说明」)
- 本插件开发与测试由 AI 辅助完成(代码生成、自动化回归、浏览器验证)
- 已按 2026-09 应用市场审核意见完成整改(①②③④:系统配置零写入、主题文件零写入、兼容范围统一 >=2.20.0、制品唯一)
- 测试记录: Halo 2.20.20 与 2.26.0 双版本全流程各 36/36 PASS;浏览器实测(仪表盘小组件、悬浮弹窗倒计时/关闭菜单、删除即时刷新、隐私脱敏、导入导出)
- 人工测试清单: 仓库 docs/app-store-resubmission.md(12 项),已在真实环境执行并勾选,随本提交一并提供;请审核时核验
v1.1.1 修复:删除后列表立即刷新
v1.1.1 修复
🐛 删除后列表不刷新
- 现象:删除「重要日期 / 人员」后,列表仍显示该条,需手动刷新
- 根因:Halo 扩展删除为「软删除(标记 deletionTimestamp)→ GC 真清除」,删除后极短时间内列表接口仍会返回被删对象;原删除流程在删除后立即重新加载,恰好命中该窗口,拿到旧列表
- 修复:
- 删除成功后立即从本地列表移除该条(瞬时反馈,不依赖时序)
- 列表 API 层过滤 deletionTimestamp(与 Halo 官方 console 列表行为一致)
- 验证:Halo 2.26.0 全新实例 37/37 PASS(无回归);浏览器复现同场景:删除 → 行数 5→4、目标行立即消失
其他
- 版本号 1.1.1(正式版系列);功能无变化
v1.1.0 正式版(应用市场首发)
v1.1.0 正式版 · 应用市场首发
版本策略:开发版使用 1.0.x 序列(1.0.0 → 1.0.1 → …),正式版从 1.1.0 开始(1.1.0 → 1.1.1 → …)。
在后台记录自己的重要日期与家人朋友(结婚纪念日、孩子出生日期等):阳历/农历(含闰月)双历、每年自动循环、人员档案、到期提醒、隐私脱敏。
核心功能
- 重要日期:名称 + 日期 + 多行备注;阳历 / 农历(含闰月);每年自动循环;自研日期选择器(阳历日历网格标注农历 / 农历实时换算阳历)
- 人员管理:姓名/昵称/关系/生日(阳历农历)/性别/血型/身高/体重(最新值)/喜好/备注;日期关联多人、按人筛选
- 到期提醒(三处):① 控制台仪表盘小组件(常驻、无关闭、每分钟自动刷新)② 后台 + 前台 /important-dates 横幅(「…明天就到啦~」)③ 全站悬浮弹窗(位置可选含屏幕中间、自动关闭倒计时、关闭方式菜单:本次/3天/10天/永久)
- 隐私:日期与人员各自「前台展示」开关;敏感字段(体重/血型/身高/喜好/备注)字段级永不出现在前台;生日默认脱敏(1990-05-**)
- 前台页面:自动在主题内打开(探测主题布局生成适配模板、带版本标记自动升级、异常自动回退不 500);卡片式便签设计
- 操作日志:每次新增/编辑/删除及重要/前台切换均记录明细
- 导出/导入:JSON 备份迁移,判重跳过不覆盖
- Finder API:importantDateFinder(listAll / listAllPeople / listUpcoming)供主题自定义
兼容性与合规
- Halo 2.14+(基于 2.20 平台 API 编译,Java 17 字节码;已在 Halo 2.20 / 2.26 全量回归 37/37 PASS)
- 自有命名空间 com.yyliucha.importantdates;数据存于站点数据库(与站点同库同备份)
- 插件无任何联网请求、不采集/不上传用户数据;关联第三方库仅 cn.6tail:lunar(本地日期换算)
- License: MIT;源码与问题反馈见仓库页面链接
安装与升级
- 安装:Halo 后台 → 插件 → 安装 → 本地安装 → 上传本 jar
- 升级:停用旧版 → 卸载 → 安装新版本(数据保留在站点数据库);若启用页面缓存/静态化插件,启用后请清理一次页面缓存
- 可选:仪表盘 → 编辑仪表盘 → 添加部件 → 小部件中心(分组「重要日期」)→ 添加「重要日期提醒」卡片(Halo 2.21+ 控制台)
测试
- Halo 2.26.0 全新实例 37/37 PASS(安装/启用/CRUD/人员/提醒三处/隐私脱敏/模板生成与升级/注入移除/导出导入)
- 浏览器实测:仪表盘小组件添加与常驻显示、弹窗倒计时、关闭方式菜单、前台横幅新文案
v1.0.32 开发版(1.0.x 开发序列)
v1.0.32 开发版\n\n版本策略:开发版使用 1.0.x 序列,正式版从 1.1.0 开始(请使用 v1.1.0 作为应用市场首发版本)。\n\n本版本为 1.0.32 开发版本,功能与发布说明同 v1.1.0 正式版。
v1.0.30 控制台仪表盘提醒小组件 + 悬浮提醒倒计时
v1.0.30
✨ 后台:控制台仪表盘提醒小组件(一眼可见、无关闭、常驻)
- 基于 Halo 官方「仪表盘扩展点」(console:dashboard:widgets:create,2.21+ 控制台),注册「📅 重要日期提醒」小部件:列出到期提醒(今天🎉/明天/N天后)、每 60 秒自动刷新、无关闭按钮
- 添加方式(一次性,保存至用户偏好):仪表盘 → 编辑仪表盘 → 添加部件 → 小部件中心 → 分组 plugin-important-dates → 点击卡片 → 保存
- 旧版控制台自动忽略该扩展点,后台提醒仍走插件页顶部横幅(无兼容问题)
✨ 前端:悬浮提醒自动关闭倒计时
- 自动关闭时弹窗底部显示「N 秒后自动收起」倒计时文字 + 橙色进度条(每秒递减)
- 设置「悬浮提示自动关闭秒数」= 0 时关闭自动关闭,不显示倒计时
回归
- Halo 2.26.0 冒烟 37/37 PASS
- 浏览器实测:倒计时 8s→4s 递减;小部件中心目录(分组 plugin-important-dates + 实时预览)→ 添加 → 保存 → 仪表盘常驻显示
v1.0.29 悬浮提醒关闭行为配置化
v1.0.29 悬浮提醒关闭行为配置化
访客端
- 点 × 弹出「关闭方式」菜单:本次关闭(仅收起当前弹窗,刷新/换页重新弹出)/ 3 天内不显示 / 10 天内不显示 / 永久关闭
- 5 秒未选择自动按站主设置的「× 关闭默认行为」执行
- 时长/永久记录在访客浏览器 localStorage,到期自动恢复,无痕窗口独立
插件设置(全站悬浮提醒组新增)
- × 关闭默认行为:本次关闭 / 1 天 / 3 天 / 7 天 / 10 天 / 30 天 / 永久关闭(默认本次关闭)
- 关闭方式菜单开关(默认开;关掉后点 × 直接按默认行为执行)
回归
- Halo 2.26.0 冒烟 37/37 PASS(新增 toastDefaultClose/toastCloseMenu 下发断言)
- 浏览器 10 项行为实测:首次弹出 → 菜单选项 → 3 天记录/刷新不弹/到期恢复 → 永久关闭/恢复 → 5 秒默认兜底 → 刷新重弹
v1.0.28 悬浮提醒关闭不记忆 + 兼容 Halo 2.26
v1.0.25–v1.0.28 汇总
🐛 v1.0.25 兼容 Halo 2.26(生产环境报错修复)
- 移除对
un.halo.app.infra.SystemSetting\ 的依赖(该内部类在 Halo 2.26 已不存在,2.20 编译版本在 2.26 运行报 NoSuchMethodError,且属 JVM 级错误会破坏网络层) - 改为纯 Jackson 解析 system ConfigMap 的 codeInjection(globalHead/contentHead/footer 键名跨版本稳定)
- 双版本回归:Halo 2.20.20 / 2.26.0 各 37/37 PASS
✨ v1.0.26 提示文案人性化
- 标题:📅 重要日期提醒
- 提醒模板:\「{title}」{whenText}({dateText})\,{whenText} 按剩余天数自动措辞:就是今天呀 🎉 / 明天就到啦~ / 还有 N 天就到啦~
- 无提醒文案:最近没有重要日期,生活照常美好~
- 升级时自动迁移已保存的旧默认文案(仅当与旧默认完全一致时替换)
🔧 v1.0.27 自动关闭不再记忆
- 8 秒自动关闭只收起当前页,刷新/换页仍会提醒;仅手动点 × 记忆
🔧 v1.0.28 点 × 不记忆(刷新重新打开)
- 点 × 只关闭当前弹窗,刷新/换页重新打开(完全去掉会话记忆)
其他
- 新增「屏幕中间」弹窗位置(1.0.24)
- 生产实测:blog.yyliucha.cn / .com 首页与 /important-dates 均含注入脚本;无痕浏览器弹窗正常
v1.0.23 悬浮提醒改注入全局 head(适配无 footer 元素的主题)
v1.0.23
🐛 修复:自定义主题上悬浮提醒不出现
- 原因:v1.0.22 把脚本注入「代码注入 → 页脚」,但 Halo 的页脚注入只在主题模板包含 <footer>\ 元素时渲染;部分自定义主题(如本站使用的主题)不含该元素 → 脚本已写入配置但页面不出现
- 修复:改注入「全局 head 标签」——Halo 的全局 head 注入对所有 Thymeleaf 渲染页面生效,与主题无关;同时自动清理已写入页脚的旧片段(只删自己的,不动其他注入内容)
- 同步:设置说明/README 更新;乐观锁冲突重试提升到 2 次自动重读
回归
- 37/37 PASS(Halo 2.20.20 全新实例):全局 head 注入/移除、页面含脚本、JSON 配置正确
- 浏览器实测首页:右下角弹出「重要日期提醒 『提醒测试』还有 1 天(2026-09-01)」→ 点 × 消失 → 刷新本次会话不再弹出
- 升级后:插件设置「全站悬浮提醒」无需改动;1.0.22 写入的页脚片段会在插件启动时自动清理
v1.0.22 弹窗报错修复 + 全站悬浮提醒(设置驱动)
v1.0.22
🐛 修复:操作日志弹窗交替报错
- 症状:第一次/奇数次打开操作日志报 \NotFoundError: Failed to execute 'insertBefore'...\(Vue 弹窗内容在打开动画期间切换节点,与弹窗滚动条初始化竞争)
- 修复:打开前先加载数据(弹窗打开时内容已定型)+ 弹窗内保持单一 table 结构(内容分支收进 tbody)
- 验证:Chrome 连续开关 3 次,内容完整、0 console 错误
✨ 新增:全站悬浮提醒(和主题弹窗一样设置驱动)
- 插件设置「全站悬浮提醒」:启用 / 弹窗位置(右下、左下、右上、左上、底部居中)/ 提醒标题 / 提醒模板({title} {daysUntil} {dateText} {nextSolarDate})/ 无提醒时文案
- 开启后自动维护「系统设置 → 代码注入 → 页脚」(只增删自己的片段,不影响其他注入内容),关闭/停用插件自动移除;不再需要手动粘贴脚本
- 访客任意页面浮出提醒,点 × 本次会话不再弹出;自动关闭秒数沿用「悬浮提示自动关闭秒数」(默认 8s)
回归
- 37/37 PASS(Halo 2.20.20 全新实例):含注入/移除页脚、前台页面含脚本、JSON 配置正确
- 浏览器验证:匿名首页右下角弹出「']提醒测试' 还有 1 天」→ 点 × 消失 → 刷新不再弹出