Files
digital-pilates/components/PlanCard.tsx
richarjiang 5814044cee feat: 更新 AI 教练聊天界面和个人信息页面
- 在 AI 教练聊天界面中添加训练记录分析功能,允许用户基于近期训练记录获取分析建议
- 更新 Redux 状态管理,集成每日步数和卡路里目标
- 在个人信息页面中优化用户头像显示,支持从库中选择头像
- 修改首页布局,添加可拖动的教练徽章,提升用户交互体验
- 更新样式以适应新功能的展示和交互
2025-08-13 10:09:55 +08:00

95 lines
2.0 KiB
TypeScript

import { ProgressBar } from '@/components/ProgressBar';
import React from 'react';
import { Image, StyleSheet, Text, View } from 'react-native';
type Level = '初学者' | '中级' | '高级';
type PlanCardProps = {
image: string;
title: string;
subtitle: string;
level?: Level;
progress: number; // 0 - 1
};
export function PlanCard({ image, title, subtitle, level, progress }: PlanCardProps) {
return (
<View style={styles.card}>
<Image source={{ uri: image }} style={styles.image} />
<View style={styles.content}>
{level && (
<View style={styles.badgeContainer}>
<View style={styles.badge}>
<Text style={styles.badgeText}>{level}</Text>
</View>
</View>
)}
<Text style={styles.title}>{title}</Text>
<Text style={styles.subtitle}>{subtitle}</Text>
<View style={styles.progressWrapper}>
<ProgressBar progress={progress} showLabel={true} />
</View>
</View>
</View>
);
}
const styles = StyleSheet.create({
card: {
flexDirection: 'row',
backgroundColor: '#FFFFFF',
borderRadius: 28,
padding: 20,
marginBottom: 18,
shadowColor: '#000',
shadowOffset: { width: 0, height: 4 },
shadowOpacity: 0.06,
shadowRadius: 12,
elevation: 3,
},
image: {
width: 100,
height: 100,
borderRadius: 22,
},
content: {
flex: 1,
paddingLeft: 18,
justifyContent: 'center',
},
badgeContainer: {
position: 'absolute',
top: -10,
right: -10,
},
badge: {
backgroundColor: '#192126',
borderTopRightRadius: 12,
borderBottomLeftRadius: 12,
paddingHorizontal: 14,
paddingVertical: 6,
},
badgeText: {
color: '#FFFFFF',
fontSize: 12,
fontWeight: '500',
},
title: {
fontSize: 16,
color: '#192126',
fontWeight: '800',
},
subtitle: {
marginTop: 8,
fontSize: 12,
color: '#B1B6BD',
},
progressWrapper: {
marginTop: 18,
},
});