# day_tracker **Repository Path**: blackworm/day_tracker ## Basic Information - **Project Name**: day_tracker - **Description**: 一个基于 uni-app x + uvue + UTS 开发的本地时间记录应用,当前应用场景以Android App 端为主,未来准备适配 iOS 和小程序,并保留 H5 调试能力。 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-08-28 - **Last Updated**: 2026-08-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Day Tracker ## 工程协作规范 - [Git 提交流程规范](./docs/git-commit-workflow.md) 一个基于 `uni-app x + uvue + UTS` 开发的本地时间记录应用,当前应用场景以 **Android App 端** 为主,未来准备适配 iOS 和小程序,并保留 H5 调试能力。 项目聚焦于 5 类日常时间管理需求: - 纪念日记录 - 倒数日管理 - 生理周期记录与基础预测 - 独立日记记录 - 本地资料与数据备份 当前最新版本请查看Git标签中的发行版本。 ## 项目状态 当前仓库对应的是一个**持续开发中的可运行版本**,已经具备完整的本地数据读写链路和主要页面交互。 ## 功能概览 ### 1. 首页 - 三个主功能入口: - 纪念日 - 倒数日 - 生理周期 - 根据主题切换入口图标与图标底色 - 底部导航支持快速切换到各主模块 ### 2. 纪念日 - 纪念日列表展示 - 标题/类型实时搜索 - 新增纪念日 - 编辑纪念日详情 - 删除纪念日 - 根据起始日期自动计算: - 第几天 - 已持续多少天 - 下一个里程碑和剩余天数 ### 3. 倒数日 - 倒数日列表展示 - 标题/标签实时搜索 - 新增倒数日 - 编辑倒数日详情 - 删除倒数日 - 支持到期后转为纪念日 - 支持进度条展示 - 若未填写开始日期,默认使用创建当天作为开始日期 ### 4. 生理周期 - 月历视图 - 已记录经期显示 - 预测经期显示 - 排卵期 / 排卵日标记 - 经期开始 / 结束标记 - 日维度记录表单: - 经血量 - 痛经程度 - 身高 / 体重 / BMI - 体温 - 性行为 / 避孕措施 - 性欲 - 症状 - 心情 - 睡眠 - 运动 - 饮水 - 备注 - 独立的记录管理页 - 查看所有记录日期 - 批量选择 - 批量删除 ### 5. 日记 - 首页独立日记入口 - 月历视图展示 - 列表视图展示 - 有日记日期使用蓝色空心圆标记 - 按日期和标题搜索 - 每天一篇日记 - 标题与长文本正文编辑 - 正文暂不限制文字长度 - 保存、删除后日历和列表同步刷新 - 日记数据纳入本地导出、导入与合并 ### 6. 我的 - 展示用户头像与昵称 - 展示下一次经期、最近倒数日、重要纪念日摘要 - 支持资料编辑: - 昵称 - 头像(本地图像转 base64 存储) - 设置页支持主题切换 - 关于页展示版本、功能说明与 Gitee 发行版更新检测 - 数据备份支持: - 导出 JSON - 复制 JSON - 导入并合并 ## 技术栈 ### 核心 - `uni-app x` - `uvue` - `UTS` - `Vue 3` ### 运行目标 - Android App:当前主要应用场景与验收基线 - iOS、小程序:未来适配方向 - H5:调试与联调辅助 ### 当前实现特点 - 本地存储优先,无后端依赖 - Android 编译兼容优先 - 尽量避免容易触发 UTS 编译问题的动态写法 - 日期选择器采用自定义组件,不依赖当前基座可能不稳定的原生选择器方案 ## 快速开始 ### 环境要求 - HBuilderX(建议使用支持 `uni-app x` 的较新版本) - Android 真机或 Android 模拟器 - 可选:H5 浏览器调试环境 ### 运行方式 #### 1. 克隆仓库 ```bash git clone cd day_tracker ``` #### 2. 使用 HBuilderX 打开项目 直接用 HBuilderX 打开项目根目录: ```text day_tracker/ ``` #### 3. 运行到 H5 在 HBuilderX 中选择: ```text 运行 -> 运行到浏览器 ``` #### 4. 运行到 Android 在 HBuilderX 中选择: ```text 运行 -> 运行到 Android App 基座 ``` > 当前项目以 Android App 端为主要应用场景,未来准备适配 iOS 和小程序;H5 主要用于调试与联调。 ## 项目结构 ```text day_tracker/ ├─ components/ │ ├─ BottomTabs.uvue # 底部导航 │ └─ DateWheelPicker.uvue # 自定义日期滚轮选择器 ├─ pages/ │ ├─ index/ │ │ └─ index.uvue # 首页 │ ├─ anniversary/ │ │ ├─ index.uvue # 纪念日列表 │ │ ├─ add.uvue # 新增纪念日 │ │ └─ detail.uvue # 纪念日详情 │ ├─ countdown/ │ │ ├─ index.uvue # 倒数日列表 │ │ ├─ add.uvue # 新增倒数日 │ │ └─ detail.uvue # 倒数日详情 │ ├─ menstrual/ │ │ ├─ index.uvue # 生理周期主页 │ │ └─ records.uvue # 生理周期记录管理页 │ ├─ diary/ │ │ ├─ index.uvue # 日记主页 │ │ └─ edit.uvue # 日记编辑 │ └─ profile/ │ ├─ index.uvue # 我的 │ ├─ edit.uvue # 个人资料编辑 │ ├─ settings.uvue # 设置 │ └─ about.uvue # 关于 ├─ src/ │ └─ dayTracker/ │ └─ core.ts # 核心数据结构、算法、存储 ├─ static/ │ ├─ app-icons/ # App 图标 │ ├─ icons/ # 页面与 tab 图标(blue/pink) │ └─ startup-interface/ # 启动图资源 ├─ App.uvue ├─ main.uts ├─ manifest.json ├─ pages.json └─ uni.scss ``` ## 页面路由 当前注册页面如下: - `/pages/index/index` - `/pages/anniversary/index` - `/pages/anniversary/add` - `/pages/anniversary/detail` - `/pages/countdown/index` - `/pages/countdown/add` - `/pages/countdown/detail` - `/pages/menstrual/index` - `/pages/menstrual/records` - `/pages/diary/index` - `/pages/diary/edit` - `/pages/profile/index` - `/pages/profile/edit` - `/pages/profile/settings` - `/pages/profile/about` ## 本地数据设计 ### 存储键 当前版本正式使用以下本地存储键: - `dt_anniversaries_v1` - `dt_countdowns_v1` - `dt_menstrual_records_v1` - `dt_menstrual_daily_v1` - `dt_diaries_v1` - `dt_diary_view_mode_v1` - `dt_profile_v1` - `dt_profile_username_v1` - `dt_profile_avatar_v1` - `dt_profile_theme_v1` ### 用户资料存储策略 用户资料采用“整体对象 + 拆分字段”双写入方案: - 统一对象:`dt_profile_v1` - 拆分字段: - `dt_profile_username_v1` - `dt_profile_avatar_v1` - `dt_profile_theme_v1` 这样做的目的是增强 Android 端读取稳定性,避免昵称和头像只依赖单一 JSON 串。 ### 数据导出结构 导出内容为 JSON,包含: - 纪念日 - 倒数日 - 生理周期主记录 - 生理周期日记录 - 日记 导入策略为本地合并,不是全量覆盖。 ## 主题与图标 当前支持两种主题: - `default` - `pink` 图标规则: - 默认主题使用 `*-blue.png` - 粉色主题使用 `*-pink.png` 已接入主题图标切换的区域包括: - 底部导航 - 首页功能入口 ## Android 权限说明 当前 `manifest.json` 中已声明以下 Android 权限: - `android.permission.CAMERA` - `android.permission.READ_MEDIA_IMAGES` - `android.permission.READ_EXTERNAL_STORAGE` 主要用途: - 用户选择或拍摄头像 - 读取本地图像并转为 base64 存储 ## 当前实现边界 为了让仓库状态保持真实,这里明确说明当前**已做**与**未做**。 ### 已实现 - 本地纪念日管理 - 本地倒数日管理 - 生理周期记录与基础预测 - 资料编辑与主题设置 - JSON 导入导出 - 以 Android App 端为主的日期选择与本地存储链路 ### 当前未实现或未完整实现 - 长期后台/离线可靠提醒:当前 App 通知是本地短期调度,App 启动、回到前台或保存提醒设置时才会刷新未来调度窗口内的通知计划;已注册给系统的通知可在前台或后台展示,但不保证 App 长期未打开、进程被系统或厂商策略清理、或提醒尚未进入本地调度窗口时仍能自动触发。 - 远程推送提醒:如需长期后台或离线可靠提醒,需要后续接入 uni-push 服务端/厂商离线推送能力。 - 后端同步 - 多端账号体系 - 复杂周期性规则调度 - 医疗级生理预测算法 - 节假日/农历高级时间计算 ## 开发说明 ### 1. 当前版本是“现行基线” 这个仓库当前不再以“兼容旧历史版本数据”为主要目标,而是以当前版本作为有效起点继续迭代。 ### 2. Android App 端优先,未来适配 iOS 和小程序 因为本项目当前应用场景以 Android App 端为主,未来准备适配 iOS 和小程序,开发时建议优先关注: - UTS 可空类型问题 - Android 基座组件行为差异 - 页面切换后的本地数据回读 ### 3. 文档位置 如果你需要快速理解现有实现,请优先查看: - [需求设计文档.md](./need/需求设计文档.md) 它记录的是**当前代码实际实现说明**,而不是最初的理想需求版本。 > 暂未上传到git仓库。 ## Roadmap 后续可以继续推进的方向: - 完善提醒系统 - 优化生理周期预测模型 - 补充更多设置项 - 增加更完整的视觉与动画反馈 - 统一清理部分历史乱码文案 ## 贡献方式 欢迎基于当前基线继续完善项目。建议的提交流程: 1. Fork 本仓库 2. 新建功能分支 3. 完成开发并自测 Android/iOS 端,确保无报错 4. 提交 Pull Request 如果你计划提交较大改动,建议先在 issue 或文档中说明修改目标和边界。 ## 常见问题 ### Q1:为什么头像采用 base64 保存? 因为当前版本没有后端文件服务,头像需要纯本地可持久化,因此直接将选中的图像转成 base64 存储。 ## License 本项目已附带 [LICENSE](./LICENSE) 文件,采用 **Apache License 2.0** 开源许可证。 在使用、复制、修改、分发本项目源码或衍生作品时,请遵守 Apache-2.0 的许可证条款,包括保留版权声明、许可证文本以及相关声明。