v2.1.0 流程改造 + 农历准确性修复 + 双向同步 + 闰月支持
部署到群晖 / deploy (push) Successful in 44s

- Phase 1: 添加纪念日合并人物创建流程(方案 B)
- Phase 2: 农历提醒按 lunarMonth/Day 计算每年公历
- Phase 3: 人员数据同步到后端(新增 /api/person)
- Phase 4: 新设备启动从云端恢复数据
- Phase 5: 工具函数收敛 utils/format.js
- Phase 6: 同步失败入队 + 启动重试
- Phase 7: 闰月生日完整支持(含 isLeapMonth + UI 警示)
- 修复 lunarInfo 数据表错位(替换为权威源 jjonline/calendar.js)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
yuming
2026-06-02 05:51:17 +08:00
parent 06d22884b9
commit ddcfe3334e
16 changed files with 1001 additions and 167 deletions
+30
View File
@@ -24,6 +24,10 @@ db.exec(`
solarYear INTEGER,
solarMonth INTEGER,
solarDay INTEGER,
lunarYear INTEGER,
lunarMonth INTEGER,
lunarDay INTEGER,
isLeapMonth INTEGER DEFAULT 0,
importance TEXT,
remindEnabled INTEGER DEFAULT 0,
remindDays INTEGER DEFAULT 0,
@@ -34,6 +38,18 @@ db.exec(`
CREATE INDEX IF NOT EXISTS idx_anniv_openid ON anniversaries(openid);
CREATE INDEX IF NOT EXISTS idx_anniv_remind ON anniversaries(remindEnabled);
CREATE TABLE IF NOT EXISTS persons (
id TEXT PRIMARY KEY,
openid TEXT NOT NULL,
name TEXT NOT NULL,
nickname TEXT,
avatar TEXT,
remark TEXT,
createTime INTEGER,
updateTime INTEGER
);
CREATE INDEX IF NOT EXISTS idx_person_openid ON persons(openid);
CREATE TABLE IF NOT EXISTS remind_logs (
id INTEGER PRIMARY KEY AUTOINCREMENT,
anniversaryId TEXT,
@@ -48,4 +64,18 @@ db.exec(`
CREATE INDEX IF NOT EXISTS idx_log_date ON remind_logs(sendDate);
`)
// 旧库迁移:CREATE TABLE IF NOT EXISTS 不会给已存在的表加列,需要手动 ALTER
// 失败说明列已存在,安全忽略
function tryAddColumn(table, column, type) {
try {
db.prepare(`ALTER TABLE ${table} ADD COLUMN ${column} ${type}`).run()
} catch (e) {
if (!/duplicate column/i.test(e.message)) throw e
}
}
tryAddColumn('anniversaries', 'lunarYear', 'INTEGER')
tryAddColumn('anniversaries', 'lunarMonth', 'INTEGER')
tryAddColumn('anniversaries', 'lunarDay', 'INTEGER')
tryAddColumn('anniversaries', 'isLeapMonth', 'INTEGER DEFAULT 0')
module.exports = db