人情随手记 - 温暖的关系备忘录
核心理念: 人情往来是中国传统文化的重要组成部分。人情随手记帮你妥善记录与亲友间的礼物往来、人情互助与珍贵承诺,让每一次温暖的互动都清晰留存,方便随时翻阅与回忆。数据完全存储在本地,隐私安全有保障。
功能模块概览
人情随手记是一款跨平台的人情礼金管理应用,支持 H5、微信小程序和 App 三个平台,提供完整的人情往来记录和管理功能。
| 功能模块 | 核心能力 | 应用场景 |
|---|---|---|
| 🎁 礼金记录 | 收礼/送礼记录、金额统计、事件分类 | 婚礼、生日、节日、乔迁等场合 |
| 🤝 人情互助 | 帮忙记录、互助往来、关系维护 | 搬家帮忙、介绍工作、照顾老人等 |
| 💬 承诺管理 | 承诺记录、提醒功能、完成状态 | 答应的事情、待办事项、约定事宜 |
| 👥 联系人管理 | 联系人信息、关系分类、快速检索 | 亲友信息、关系网络、联系方式 |
| 📊 数据统计 | 收支统计、往来分析、关系图谱 | 年度总结、人情分析、关系维护 |
| 🔒 数据备份 | AES 加密备份、跨平台恢复 | 数据安全、换机迁移、多端同步 |
系统架构
graph TD
A[uni-app 前端] --> B[礼金记录模块]
A --> C[人情互助模块]
A --> D[承诺管理模块]
A --> E[联系人管理]
A --> F[数据统计]
A --> G[备份恢复]
B --> H[存储管理层]
C --> H
D --> H
E --> H
F --> H
G --> H
H --> I[平台适配层]
I --> J[H5 平台
IndexedDB] I --> K[微信小程序
文件系统] I --> L[App 平台
plus.io] J --> M[降级方案
localStorage] K --> N[降级方案
wx.storage] G --> O[AES 加密服务] O --> P[备份导出] O --> Q[备份导入] style A fill:#e1f5fe style H fill:#f3e5f5 style I fill:#fff3e0 style O fill:#ffe0b2 style J fill:#c8e6c9 style K fill:#c8e6c9 style L fill:#c8e6c9
IndexedDB] I --> K[微信小程序
文件系统] I --> L[App 平台
plus.io] J --> M[降级方案
localStorage] K --> N[降级方案
wx.storage] G --> O[AES 加密服务] O --> P[备份导出] O --> Q[备份导入] style A fill:#e1f5fe style H fill:#f3e5f5 style I fill:#fff3e0 style O fill:#ffe0b2 style J fill:#c8e6c9 style K fill:#c8e6c9 style L fill:#c8e6c9
技术架构
| 技术层次 | 技术选型 | 实现细节 |
|---|---|---|
| 前端框架 | uni-app + Vue 3 | 一套代码,多端运行(H5、小程序、App) |
| UI 组件 | uView Plus + uni-ui | 丰富的 UI 组件库,提升开发效率 |
| 持久化存储 | 自研跨平台存储系统 | H5 用 IndexedDB,小程序用文件系统,App 用 plus.io |
| 数据加密 | AES-256 加密 | crypto-js 库,保护用户隐私数据 |
| 自动降级 | 多层降级策略 | 持久化存储不可用时自动降级到缓存存储 |
| 测试框架 | Jest + fast-check | 单元测试 + 属性测试,保证代码质量 |
核心功能
详细介绍各功能模块的具体能力和特点:
🎁 礼金记录
- 收礼/送礼:记录收到或送出的礼金,包括金额、日期、事件类型
- 事件分类:婚礼、生日、满月、乔迁、节日等多种事件类型
- 金额统计:自动统计收支总额,一目了然
- 关联联系人:每条记录关联具体联系人,方便查询
- 备注说明:支持添加详细备注,记录特殊情况
🤝 人情互助
- 帮忙记录:记录帮别人或别人帮自己的事情
- 互助类型:搬家、介绍工作、照顾老人、借物品等
- 往来追踪:清楚记录人情往来,避免遗忘
- 关系维护:通过记录维护良好的人际关系
💬 承诺管理
- 承诺记录:记录答应别人或别人答应自己的事情
- 提醒功能:设置提醒时间,避免忘记承诺
- 完成状态:标记承诺是否已完成
- 优先级:设置承诺的重要程度
👥 联系人管理
- 联系人信息:姓名、电话、关系、地址等基本信息
- 关系分类:家人、亲戚、朋友、同事、同学等
- 快速检索:支持按姓名、关系、拼音搜索
- 往来历史:查看与该联系人的所有往来记录
📊 数据统计
- 收支统计:按时间、事件类型统计收支情况
- 往来分析:分析与各联系人的往来频率和金额
- 图表展示:直观的图表展示数据趋势
- 年度总结:生成年度人情往来报告
🔒 数据备份
- AES 加密:使用 AES-256 加密算法保护数据
- 密码保护:用户设置备份密码,确保数据安全
- 跨平台恢复:备份文件可在不同平台间导入导出
- 备份码:微信小程序支持备份码格式,方便分享
技术亮点
- 跨平台存储系统:自研的跨平台持久化存储方案,根据平台特性选择最优存储方式(H5 用 IndexedDB,小程序用文件系统,App 用 plus.io)
- 自动降级机制:当持久化存储不可用时,自动降级到缓存存储,保证应用可用性
- 数据自动迁移:首次启动时自动检测并迁移旧的缓存数据到持久化存储
- 内存缓存优化:使用内存缓存提升数据读取性能,减少磁盘 I/O
- 原子写入:采用临时文件 + 重命名的方式保证数据写入的原子性,防止数据损坏
- AES 加密备份:使用 AES-256 加密算法保护备份数据,用户密码不会被存储
- 完整的测试覆盖:单元测试 + 属性测试(Property-Based Testing),保证代码质量
- 本地优先:所有数据存储在本地,不依赖服务器,隐私安全有保障
存储系统设计
平台适配策略
| 平台 | 主存储方案 | 降级方案 | 特点 |
|---|---|---|---|
| H5 | IndexedDB | localStorage | 大容量、结构化存储、异步操作 |
| 微信小程序 | 文件系统(wx.env.USER_DATA_PATH) | wx.storage | 持久化、不受缓存清理影响 |
| App | plus.io 文件系统 | - | 原生文件系统、高性能 |
数据安全保障
- 原子写入:先写入临时文件,成功后再重命名,避免写入过程中断导致数据损坏
- 数据校验:读取数据时进行 JSON 格式校验,发现损坏自动恢复
- 加密备份:AES-256 加密,密码不存储,只有用户知道
- 自动迁移:首次启动自动迁移旧数据,迁移成功后清理旧数据
开发心得
这个项目最大的挑战是跨平台持久化存储的实现。不同平台的存储 API 差异很大,H5 有 IndexedDB 和 localStorage,微信小程序有文件系统和 wx.storage,App 有 plus.io。如何设计一套统一的 API,让上层业务代码无感知地在不同平台运行,是核心难点。
最终采用了适配器模式,为每个平台实现独立的存储适配器,通过统一的 StorageManager 对外提供服务。同时实现了自动降级机制,当持久化存储不可用时(比如 IndexedDB 被禁用),自动降级到缓存存储,保证应用可用性。
数据安全方面,采用了原子写入策略(临时文件 + 重命名)和AES 加密备份,确保数据不会因为写入中断而损坏,备份数据也不会被窃取。同时实现了自动数据迁移,首次启动时自动将旧的缓存数据迁移到持久化存储,用户无感知。
测试方面,除了常规的单元测试,还引入了属性测试(Property-Based Testing),使用 fast-check 库生成大量随机测试用例,发现了很多边界情况的 bug,大大提升了代码质量。
下一步计划
近期规划
- 云端同步:可选的云端同步功能,支持多设备数据同步
- 智能提醒:根据历史记录智能提醒即将到来的重要日期
- 关系图谱:可视化展示人际关系网络
- 语音输入:支持语音快速记录
- 照片附件:支持为记录添加照片
长期愿景
- AI 助手:基于历史数据的智能建议和分析
- 社交功能:与好友分享特定记录(可选)
- 数据导出:支持导出为 Excel、PDF 等格式
- 多语言支持:支持英文、繁体中文等语言
- 主题定制:支持自定义主题颜色和样式