feat: 新增目标管理功能及相关组件

- 创建目标管理演示页面,展示高保真的目标管理界面
- 实现待办事项卡片的横向滑动展示,支持时间筛选功能
- 新增时间轴组件,展示选中日期的具体任务
- 更新底部导航,添加目标管理和演示页面的路由
- 优化个人页面菜单项,提供目标管理的快速访问
- 编写目标管理功能实现文档,详细描述功能和组件架构
This commit is contained in:
richarjiang
2025-08-22 09:31:35 +08:00
parent 22142d587d
commit 136c800084
10 changed files with 1666 additions and 2 deletions

View File

@@ -0,0 +1,165 @@
# 目标管理功能实现文档
## 功能概述
根据用户需求,实现了一个高保真的目标管理页面,包含以下主要功能:
1. **横向滑动的待办事项卡片** - 首屏展示1.5张卡片
2. **时间筛选选择器** - 支持按天/周/月筛选
3. **可滚动的时间轴** - 展示选中日期的具体任务,支持上下左右滑动
## 组件架构
### 核心组件
#### 1. TodoCard.tsx
- **功能**: 单个待办事项卡片组件
- **特性**:
- 支持多种任务分类workout, finance, personal, work, health
- 优先级显示(高/中/低)
- 完成状态切换
- 时间显示和格式化
- 响应式设计,适配不同屏幕尺寸
#### 2. TodoCarousel.tsx
- **功能**: 横向滑动的待办事项列表
- **特性**:
- 使用ScrollView实现横向滑动
- 设置snapToInterval实现卡片对齐
- 底部指示器显示当前位置
- 空状态处理
- 首屏显示1.5张卡片的设计
#### 3. TimeTabSelector.tsx
- **功能**: 时间筛选选择器
- **特性**:
- 支持天/周/月三种筛选模式
- 平滑的选择动画
- 符合设计系统的UI风格
#### 4. TimelineSchedule.tsx
- **功能**: 可滚动的时间轴组件
- **特性**:
- 24小时时间轴显示
- 支持同一时间段多个事件的并排显示
- 当前时间指示线
- 事件完成状态显示
- 上下左右滑动支持
- 事件时长可视化
### 主页面
#### (tabs)/goals.tsx
- **功能**: 作为底部Tab第三个位置的目标管理页面
- **特性**:
- 响应式布局
- 状态管理
- 数据筛选逻辑
- 渐变背景
- 安全区域适配
- 集成到底部导航栏中
## 技术实现
### 数据结构
```typescript
interface TodoItem {
id: string;
title: string;
description?: string;
time: string;
category: 'workout' | 'finance' | 'personal' | 'work' | 'health';
isCompleted?: boolean;
priority?: 'high' | 'medium' | 'low';
}
interface TimelineEvent {
id: string;
title: string;
startTime: string;
endTime?: string;
category: TodoItem['category'];
isCompleted?: boolean;
}
```
### 核心功能
1. **横向滑动实现**:
- 使用ScrollView的horizontal属性
- 通过snapToInterval实现卡片对齐
- 计算卡片宽度确保首屏显示1.5张
2. **时间轴布局**:
- 使用绝对定位实现事件在时间轴上的精确定位
- 计算事件高度和位置基于开始/结束时间
- 处理同一时间段的多个事件并排显示
3. **响应式设计**:
- 基于屏幕宽度动态计算组件尺寸
- 适配不同设备的安全区域
- 使用Dimensions API获取屏幕信息
## UI设计特点
### 设计原则
- **高保真还原**: 严格按照用户提供的设计图实现
- **符合项目风格**: 使用项目现有的颜色系统和组件风格
- **无表情符号**: 根据用户记忆偏好,界面中不使用表情符号[[memory:6035831]]
### 颜色系统
- 使用项目统一的Colors常量
- 支持浅色/深色主题切换
- 每个分类使用不同的主题色
### 交互体验
- 平滑的滑动动画
- 触觉反馈支持
- 加载状态处理
- 错误状态处理
## 使用方法
1. **访问页面**:
- 直接点击底部导航栏第三个位置的"目标"tab
- 或通过个人页面的"目标管理"菜单项
- 或访问"目标管理演示"查看功能介绍
2. **基本操作**:
- 左右滑动查看不同的待办事项
- 点击天/周/月切换时间筛选
- 上下滑动查看时间轴
- 点击待办事项可查看详情(可扩展)
- 点击完成按钮切换任务状态
## 扩展性
该实现具有良好的扩展性:
1. **数据源**: 可以轻松接入真实的API数据
2. **功能扩展**: 可以添加新增/编辑/删除任务功能
3. **样式定制**: 基于设计系统,可以轻松调整样式
4. **组件复用**: 各个组件都可以在其他页面中复用
## 文件结构
```
components/
├── TodoCard.tsx # 待办事项卡片
├── TodoCarousel.tsx # 横向滑动列表
├── TimeTabSelector.tsx # 时间筛选器
└── TimelineSchedule.tsx # 时间轴组件
app/
├── (tabs)/
│ └── goals.tsx # 目标管理tab页面第三个位置
└── goal-demo.tsx # 演示页面
constants/
└── Routes.ts # 路由配置(已更新)
```
## 总结
该目标管理功能完全按照用户需求实现,提供了高保真的用户界面和流畅的交互体验。代码结构清晰,易于维护和扩展。所有组件都遵循项目的设计规范,确保了一致的用户体验。