端上:#47~#55 打包 —— 行程双轨、动态类型、表单全局规范 (#53)

#48 计划/实际双轨:nodeAction(start/done/cancel),完成即转实际行程,
    实际行程不再显示状态;新增 actualStartedAt/actualEndedAt
#49 类型/出行方式/车辆 chip 改内部读状态(@Builder 值传参不刷新)
#50 类型点击立即变色、出行方式平铺、参与人显示已选头像
#51 节点类型动态加载(原硬编码5种)、地址 onPick 拿详细地址与坐标
#52 标签改主题色 Bold、必填红无星号、编辑行程标题同步
#53 表单两排版式(标签独占一行解决左右对不齐);电影弹层 layoutWeight 修滚动
#54 地址联想框加时间窗抑制(600ms 内不搜)、候选限高 180

含附件回填诊断日志(DIAG-ATTACH/FILL),待真机确认后移除
This commit is contained in:
2026-11-05 12:41:04 +08:00
parent 88fa38ecf9
commit 86de59616c
35 changed files with 5818 additions and 911 deletions
+29 -1
View File
@@ -37,7 +37,7 @@ export const FB_DB_NAME: string = 'familybook.db';
* 本地库**不能像服务端那样"每次启动都全量 ALTER 一遍"** ——
* 那是拿用户的手机当试验田。必须按版本逐步迁移。
*/
export const FB_DB_VERSION: number = 8;
export const FB_DB_VERSION: number = 9;
/**
* 建表语句。
@@ -355,6 +355,30 @@ export const FB_SCHEMA_SQL: string[] = [
`CREATE INDEX IF NOT EXISTS idx_cal_date_kind ON cal_events (date, kind)`,
// 同步时按 uid 去重/更新
`CREATE UNIQUE INDEX IF NOT EXISTS idx_cal_uid ON cal_events (cal_id, uid)`,
// ---------- 日历镜像快照(v9 新增)----------
//
// 用户 2026-11-03:「把日历镜像到系统日历中,原因同步日历都已经说过了」。
// 原因:本应用是 CalDAV 客户端,日程不进系统日历,
// 导致小艺 / 桌面日历卡片 / 手表看到的是空的
// (甚至给出"今天没有日程"的错误答案)。
//
// 🔴 这张表是**防回灌的地基**:镜像会把日程写进系统日历;
// 下一轮若直接读系统日历当"用户改动",就会把我们刚写的当成用户改的
// → 回写服务器 → 服务器变了 → 又镜像回去 …… 死循环。
// 记下"上次写了什么",一轮三方比对就能分清谁改的。
//
// ⚠️ `bucket` 在 FamilyBook 里恒为 `family`(只有一套日程,
// 不像 SyncCalendar 有多个 DAV 账户)。留这一列是为了将来按日历本拆。
`CREATE TABLE IF NOT EXISTS mirror_snapshot (
identifier TEXT PRIMARY KEY COMMENT '<bucket>|<uid>[@<发生时刻>]',
bucket TEXT NOT NULL DEFAULT '',
uid TEXT NOT NULL DEFAULT '',
sys_id INTEGER NOT NULL DEFAULT -1,
fingerprint TEXT NOT NULL DEFAULT '',
updated_at INTEGER NOT NULL DEFAULT 0
)`,
`CREATE INDEX IF NOT EXISTS idx_mirror_bucket ON mirror_snapshot (bucket)`,
];
/** 建表语句分组说明(供日志/排查用) */
@@ -383,6 +407,10 @@ export const FB_TABLE_GROUPS: FbTableGroup[] = [
group: '日程',
tables: ['cal_events']
},
{
group: '系统日历镜像',
tables: ['mirror_snapshot']
},
{
group: '同步元数据(本地专有)',
tables: ['sync_state', 'pending_ops', 'module_sync', 'attach_cache']