feat: 添加训练计划和打卡功能

- 新增训练计划页面,允许用户制定个性化的训练计划
- 集成打卡功能,用户可以记录每日的训练情况
- 更新 Redux 状态管理,添加训练计划相关的 reducer
- 在首页中添加训练计划卡片,支持用户点击跳转
- 更新样式和布局,以适应新功能的展示和交互
- 添加日期选择器和相关依赖,支持用户选择训练日期
This commit is contained in:
richarjiang
2025-08-13 09:10:00 +08:00
parent e0e000b64f
commit f3e6250505
24 changed files with 1898 additions and 609 deletions

View File

@@ -1,7 +1,7 @@
import { HeaderBar } from '@/components/ui/HeaderBar';
import { useAppDispatch, useAppSelector } from '@/hooks/redux';
import { completeDay, setCustom } from '@/store/challengeSlice';
import type { Exercise, ExerciseCustomConfig } from '@/utils/pilatesPlan';
import { Ionicons } from '@expo/vector-icons';
import { useLocalSearchParams, useRouter } from 'expo-router';
import React, { useState } from 'react';
import { FlatList, SafeAreaView, StyleSheet, Text, TouchableOpacity, View } from 'react-native';
@@ -55,17 +55,9 @@ export default function ChallengeDayScreen() {
return (
<SafeAreaView style={styles.safeArea}>
<View style={styles.container}>
<View style={styles.header}>
<View style={styles.headerRow}>
<TouchableOpacity onPress={() => router.back()} style={styles.backButton} accessibilityRole="button">
<Ionicons name="chevron-back" size={24} color="#111827" />
</TouchableOpacity>
<Text style={styles.headerTitle}>{plan.dayNumber}</Text>
<View style={{ width: 32 }} />
</View>
<Text style={styles.title}>{plan.title}</Text>
<Text style={styles.subtitle}>{plan.focus}</Text>
</View>
<HeaderBar title={`${plan.dayNumber}`} onBack={() => router.back()} withSafeTop={false} transparent />
<Text style={styles.title}>{plan.title}</Text>
<Text style={styles.subtitle}>{plan.focus}</Text>
<FlatList
data={plan.exercises}