Skip to content

Releases: yyliucha/plugin-important-dates

v1.1.3 前台页面升级官方页面布局契约(2.26+,自动复用主题外壳)

Choose a tag to compare

@yyliucha yyliucha released this 03 Sep 03:12

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 按应用市场审核意见整改(重新提交版)

Choose a tag to compare

@yyliucha yyliucha released this 01 Sep 09:32

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 修复:删除后列表立即刷新

Choose a tag to compare

@yyliucha yyliucha released this 31 Aug 10:03

v1.1.1 修复

🐛 删除后列表不刷新

  • 现象:删除「重要日期 / 人员」后,列表仍显示该条,需手动刷新
  • 根因:Halo 扩展删除为「软删除(标记 deletionTimestamp)→ GC 真清除」,删除后极短时间内列表接口仍会返回被删对象;原删除流程在删除后立即重新加载,恰好命中该窗口,拿到旧列表
  • 修复:
    1. 删除成功后立即从本地列表移除该条(瞬时反馈,不依赖时序)
    2. 列表 API 层过滤 deletionTimestamp(与 Halo 官方 console 列表行为一致)
  • 验证:Halo 2.26.0 全新实例 37/37 PASS(无回归);浏览器复现同场景:删除 → 行数 5→4、目标行立即消失

其他

  • 版本号 1.1.1(正式版系列);功能无变化

v1.1.0 正式版(应用市场首发)

Choose a tag to compare

@yyliucha yyliucha released this 31 Aug 08:59

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 开发序列)

Choose a tag to compare

@yyliucha yyliucha released this 31 Aug 08:39

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 控制台仪表盘提醒小组件 + 悬浮提醒倒计时

Choose a tag to compare

@yyliucha yyliucha released this 31 Aug 06:56

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 悬浮提醒关闭行为配置化

Choose a tag to compare

@yyliucha yyliucha released this 31 Aug 05:50

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

Choose a tag to compare

@yyliucha yyliucha released this 31 Aug 05:23

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 元素的主题)

Choose a tag to compare

@yyliucha yyliucha released this 31 Aug 04:26

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 弹窗报错修复 + 全站悬浮提醒(设置驱动)

Choose a tag to compare

@yyliucha yyliucha released this 31 Aug 03:47

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 天」→ 点 × 消失 → 刷新不再弹出