Skip to content

Releases

v0.11.21

Choose a tag to compare

@sctale sctale released this 26 Oct 13:25

一轮代码审查后的数据一致性与交互修复。

Bug 修复

  • 合并导入产生重复记录:合并策略此前直接 INSERT,同一份备份导入两次(或导入本机已有数据)会生成同 uuid 的两行——明细与月度合计翻倍,同步也只更新其中一行。现按 uuid + 当前账本 去重(含备份文件内部的重复 uuid),导入结果改为显示「实际新增」条数
  • 备份携带同步水位:脱敏规则只匹配固定键名,漏掉了按账本动态拼接的 sync.last_push_at.<ledgerId> / sync.last_pull_at.<ledgerId>,水位会随备份导出;导入到另一台设备后跳过区间内的家人变更或本地未传变更。现改为按 sync. 前缀统一剔除
  • 设备时钟偏快导致家人编辑长期不生效:服务端 push 时已把时间钳到服务端时刻,但本地行仍是未来值,pull 的 远端时间 > 本地时间 永远为假;且 push 水位被顶到未来后,本地新记账再也传不上去。现本地时间超前时以服务端版本为准,同步结束把本地未来时间回落到服务端时间、并把异常水位拉回,下一轮自动补传
  • 周期记账备注被输入法挡住:备注是表单最后一项,Dialog 窗口在 Android 15+ edge-to-edge 下不随键盘压缩,一弹键盘就盖住。现把备注上移到金额下方(名称 → 金额 → 备注 → 类型/分类/频率),编辑时始终可见
  • 明细/统计页成员筛选残留:正在筛选的成员被移出家庭或自己退出登录后,筛选胶囊整行隐藏但筛选 id 仍在,列表/合计一直查空且无处复位。现随成员列表变化自动回到「全部」

体验

  • 记录金额可点击编辑:此前编辑热区只覆盖图标与分类信息,点金额没有反应;现金额也进入编辑页(删除按钮仍独立在外,不影响无障碍操作)

v0.11.20

Choose a tag to compare

@sctale sctale released this 22 Oct 01:16

修复(收入脱敏的漏口)

  • 切到后台也会重新遮上收入:0.11.19 只在"换 Tab 再回统计页"时重新遮,所以停在统计页直接切 App/下拉通知栏/进多任务,回来数字还亮着。现在监听 AppState,只要离开 active(含 inactive,正是系统截取多任务预览的那一刻)就收回成 ¥ ****

v0.11.19

Choose a tag to compare

@sctale sctale released this 22 Oct 01:06

新增(统计页收入脱敏)

  • 统计页的「收入」默认脱敏显示为 ¥ ****,点一下出真数、再点收回(和支付宝/钱迹一类的金额隐私做法一致);标签旁带一把小锁:🔒 已遮、🔓 已显示
  • 只在收入那一格,支出/预算/待报销照常显示;切走再回统计页会自动重新遮上,否则遮一次就永久失效
  • 读屏会念「收入已脱敏,点击显示实际金额」/「收入 ¥xxx,点击隐藏」,不靠颜色和小图标传达状态
  • 这是本地显示层的遮罩,不影响数据与同步;不做持久开关——默认就是遮的

v0.11.18

Choose a tag to compare

@sctale sctale released this 17 Oct 09:29

回退

  • 撤销 0.11.17 的备注框改动(f307ae3),记账页与编辑页都回到之前的样子:「+ 添加备注」的热区高度、keyboardDidShow 后补 paddingBottom 再滚到底、备注框的「完成」键全部撤掉
  • 撤掉的直接原因是它在记账页做了重复的键盘补偿:记账页那张卡是「上半 ScrollView + 卡底固定数字键盘」,卡底外面已经包着 KeyboardAvoidingView;再给滚动内容加一个键盘高的 paddingBottom 并强制 scrollToEnd,等于把金额区和数字键盘一起顶出可视范围,看起来就是"改坏了"
  • 因此**「点备注框不顺畅」这个问题目前是未修复状态**(0.11.17 之前什么样,现在还是什么样)。下一版要动它得换路子:只补一层(要么交给 KeyboardAvoidingView,要么自己算高度但不叠加),并且不能把数字键盘滚出屏幕

v0.11.17

Choose a tag to compare

@sctale sctale released this 17 Oct 06:58

优化(触感反馈——第二次调振动,这次换了路子)

上一版只是把波形调轻,你没说清楚"哪里难受"也没关系——问题本来就不在大小上:expo-haptics 在 Android 上走的是直接驱动马达打自定义波形(Vibrator.vibrate(createWaveform(...)),轻档=50ms@30),而不是系统触感通道。Android 的触感设计原则把这类效果单列为「蜂鸣(buzz):噪杂、尖锐、穿透性强,振动停了还留余震」,举的坏例子恰恰是"按键按下后振动时间过长";expo 自己的 API 声明也写着"Vibrator API is not recommended for haptics feedback, use performAndroidHapticsAsync"。所以在它上面怎么调参数都只是选"哪种蜂鸣"。

  • Android 改走 HapticFeedbackConstants(View.performHapticFeedback):波形由厂商按你这台设备调校、跟随系统触感开关、机型不支持时平台自己回退;iOS 继续用 UISelection / UINotification。
  • 新增档位:设置 → 偏好 → 触感反馈 = 关闭 / 精简(默认)/ 完整,选完当场给一段样本,不用等下个版本才能试。
  • 默认「精简」数字键盘按键、分类与收支切换不再振动,只在记一笔成功、失败或删除时反馈一下——这是 Things 3、Cash App 一路的克制:确认只出现在有意义的状态变化上。
  • 想要按键反馈就切「完整」,那里用的是 SEGMENT_FREQUENT_TICK(系统定义:"预期极轻,连续触发也不难受;设备做不出足够轻的振动时干脆就不振"),并加 25ms 去重,避免同一次点击连发两下叠成嗡声。

修复(记账时的备注框)

  • 点不中的第一半是热区太小:「+ 添加备注」实际可点区域不到 20dp 高,第一下经常点空。现在 40dp 最小高 + 上下各 12dp 的 hitSlop。
  • 点完输入框被键盘盖住:原先在 onFocus 时滚到底,那一刻键盘还没弹起、滚的位置没意义;Android 15+ 全屏模式下系统也不再压缩窗口,卡底的数字键盘和它上面的备注行一起被键盘挡住,看起来就像"点了没反应",得再点一次。现在改成监听 keyboardDidShow 拿真实高度 → 给内容补同高的 paddingBottom → 延一帧再滚到底,备注行精确停在键盘上沿(与编辑页已验证的做法对齐)。
  • 备注框加「完成」键:写完按一下直接收起键盘回到数字键盘。编辑页(长按记录)同步以上三项。

v0.11.16

Choose a tag to compare

@sctale sctale released this 14 Oct 14:22

优化(报销页显示方式)

  • 去掉套在条目外面的大框:原先「待报销合计 + 一键全部核销 + 所有记录」整块被一张卡包住,每条记录又在卡里各带一个框,两层框叠着显重。现在汇总单独一张小卡,记录列表和明细页一样直接铺在页面上(每条一格)

新增(报销页按成员筛选)

  • 顶部加「👨‍👩‍👧 全部 / 😎 成员A / …」筛选条(多成员账本才显示,与统计页同款交互);待报销合计、笔数、列表都跟着筛选走,全家一起报账时能分开看每个人垫了多少
  • 「一键全部核销」只核销当前筛选出来的那些:选中成员时按钮变成「核销 TA 的」,确认框也写明是谁的多少笔——批量写会同步到全家设备,作用范围必须和屏幕上看到的条目一致
  • 选中的成员被移出家庭或退出登录时自动回到「全部」,不会停在一个查无此人的空列表上
  • 数据层 getReimbursableSummary / getReimbursableRecords / markAllReimbursed 统一加可选 userId(0=全部),SQL 已用独立数据库验证过筛选与批量更新的作用范围

v0.11.15

Choose a tag to compare

@sctale sctale released this 14 Oct 14:01

优化

0.11.14 把核销按钮放到图标下面之后,行内出现了新的不对齐:图标和按钮被捆成一列,右侧的分类名与金额相对这一整列垂直居中,于是"交通"掉到了中间、日期行又压在按钮下面。本版改成两行按行对齐:

  • 第一行=图标 + 分类/记账人/状态徽章 + 金额(分类行回到上方,与图标顶对齐)
  • 第二行=核销/撤销按钮(行首,与图标同宽 40dp、同左边缘)+ 日期 + 备注,两者同一水平线
  • 没有核销按钮的页面(明细、统计分类明细)第二行仍按原缩进对齐分类文字,观感不变

v0.11.14

Choose a tag to compare

@sctale sctale released this 14 Oct 13:26

修复

  • 报销页窄屏重叠:「核销」按钮盖在「待报销」徽章上(只剩个"消"字露出来)。原因是主行右侧要同时放「核销 + 金额」,左侧又要放「分类名 + 记账人 + 状态徽章」,在 393dp 宽的屏上总宽超出一行 —— RN 默认不裁剪溢出的子节点,于是按钮直接压在徽章上面
  • 按「核销放到分类图标下面」的思路改:图标自成一列,核销/撤销按钮就在图标正下方(与图标同宽 40dp,左边缘对齐),右侧动作区只剩金额,主行腾出约 68dp,实测这一屏留出 37dp 余量
  • 另给分类行加 flexWrap:更窄的屏(或系统大字号)下徽章会换到第二行,而不是再次溢出压到金额上
  • 编辑热区相应变成「分类信息 + 日期备注」两块(图标不再可点,核销与删除仍各自独立可被读屏聚焦)

v0.11.13

Choose a tag to compare

@sctale sctale released this 14 Oct 13:00

优化

  • 管理页「家庭同步」的连接灯紧跟在标题后面、与文字同一行(0.11.12 放在了行尾箭头旁,离字太远,看着像另一列的东西)

v0.11.12

Choose a tag to compare

@sctale sctale released this 14 Oct 11:08

起因:报销管理页「看不到具体备注信息,不好区分」。查下来不是备注没存,而是行宽被挤没了:那一行的右侧要放「核销」按钮和金额,左侧信息列被压到约 60dp,而日期胶囊自己就占掉约 56dp —— 备注和它排在同一行、允许收缩,于是被压到零宽,屏幕上看着像"这条记录没有备注"。明细页没有核销按钮,所以同样的代码在那边只是截断、在这边是彻底消失。

修复

  • 记录行的日期与备注改为整行宽度单独占一行(左边缘与分类文字对齐):不再和「核销 + 金额」抢宽度,报销页的备注、记账人、日期都能看全;备注由 1 行放宽到 2 行,长备注不再只露两三个字
  • 顺带修好同一页缺的两处明细:记账人标识(此前该页没传成员缓存,全家一起报账时分不清是谁垫的)和点击条目进入编辑(此前该页条目点不开,长备注没有任何地方能看全)
  • 影响面:明细页、统计页分类明细用同一个行组件,备注同样变成整行宽、最多两行(只是能看更多字,位置不变)

优化(触感反馈调柔)

用户反馈「振动太大了,点击反馈不舒服」。查 expo-haptics 的 Android 实现后确认这不是错觉:它在 Android 上是直接驱动马达的固定波形(不走系统触感通道),notificationAsync 因此天生偏重——成功是「40ms+停顿+40ms」双段共 180ms,失败是三段共 330ms,而这两档此前被用在记一笔成功、金额校验失败这类日常高频动作上。

  • 日常确认改为单段轻击:hapticSuccess 由 notificationAsync(Success)(双段 180ms)改为 impactAsync(Soft)(单段 50ms,振幅 30)
  • 错误提示保留但减重:hapticError 由三段 330ms 改为 impactAsync(Heavy)(单段 60ms,振幅 70)——错误仍要能被察觉,但不再是一串长震
  • hapticLight(数字键盘按键等,已是单段 50ms 最轻档)不变;三个入口仍集中在 src/utils/haptics.ts,以后调强度只改这一处

新增(管理页状态灯)

  • 「家庭同步」入口行右侧加连接状态灯:绿=已登录且 /api/health 探测通过,灰=未配置 / 未登录 / 服务器不可达 / 正在检测。此前管理页只有一行文字摘要,看不出"同步到底还活着没",得点进二级页才知道
  • 探测随管理页摘要一起刷新(进入该 Tab、同步完成、登录态变化),并沿用同步页的 mounted + 序号防护,切走页面后旧响应不会回来盖掉新结果
  • 读屏会念出「服务器已连接 / 未连接」,颜色不是唯一线索