- 调整启动画面中的图片宽度,提升视觉效果 - 移除引导页面相关组件,简化应用结构 - 新增心情统计页面,支持用户查看和分析心情数据 - 优化心情卡片组件,增强用户交互体验 - 更新登录页面标题,提升品牌一致性 - 新增心情日历和编辑功能,支持用户记录和管理心情
111 lines
2.7 KiB
TypeScript
111 lines
2.7 KiB
TypeScript
import { MoodCheckin, getMoodConfig } from '@/services/moodCheckins';
|
|
import dayjs from 'dayjs';
|
|
import React from 'react';
|
|
import { StyleSheet, Text, TouchableOpacity, View } from 'react-native';
|
|
|
|
interface MoodCardProps {
|
|
moodCheckin: MoodCheckin | null;
|
|
onPress: () => void;
|
|
isLoading?: boolean;
|
|
}
|
|
|
|
export function MoodCard({ moodCheckin, onPress, isLoading = false }: MoodCardProps) {
|
|
const moodConfig = moodCheckin ? getMoodConfig(moodCheckin.moodType) : null;
|
|
|
|
return (
|
|
<TouchableOpacity onPress={onPress} style={styles.moodCardContent} disabled={isLoading}>
|
|
<View style={styles.cardHeaderRow}>
|
|
<View style={styles.moodIconContainer}>
|
|
{moodCheckin ? (
|
|
<Text style={styles.moodIcon}>
|
|
{moodConfig?.emoji || '😊'}
|
|
</Text>
|
|
) : (
|
|
<Text style={styles.moodIcon}>😊</Text>
|
|
)}
|
|
</View>
|
|
<Text style={styles.cardTitle}>心情</Text>
|
|
</View>
|
|
|
|
<Text style={styles.moodSubtitle}>记录你的每日心情</Text>
|
|
|
|
{isLoading ? (
|
|
<View style={styles.moodPreview}>
|
|
<Text style={styles.moodLoadingText}>加载中...</Text>
|
|
</View>
|
|
) : moodCheckin ? (
|
|
<View style={styles.moodPreview}>
|
|
<Text style={styles.moodPreviewText}>
|
|
{moodConfig?.label || moodCheckin.moodType}
|
|
</Text>
|
|
<Text style={styles.moodPreviewTime}>
|
|
{dayjs(moodCheckin.createdAt).format('HH:mm')}
|
|
</Text>
|
|
</View>
|
|
) : (
|
|
<Text style={styles.moodEmptyText}>点击记录心情</Text>
|
|
)}
|
|
</TouchableOpacity>
|
|
);
|
|
}
|
|
|
|
const styles = StyleSheet.create({
|
|
moodCardContent: {
|
|
width: '100%',
|
|
},
|
|
cardHeaderRow: {
|
|
flexDirection: 'row',
|
|
alignItems: 'center',
|
|
marginBottom: 12,
|
|
},
|
|
moodIconContainer: {
|
|
width: 24,
|
|
height: 24,
|
|
borderRadius: 8,
|
|
backgroundColor: '#DCFCE7',
|
|
alignItems: 'center',
|
|
justifyContent: 'center',
|
|
marginRight: 10,
|
|
},
|
|
moodIcon: {
|
|
fontSize: 14,
|
|
},
|
|
cardTitle: {
|
|
fontSize: 14,
|
|
fontWeight: '800',
|
|
color: '#192126',
|
|
},
|
|
moodSubtitle: {
|
|
fontSize: 12,
|
|
color: '#6B7280',
|
|
marginTop: 4,
|
|
marginBottom: 8,
|
|
},
|
|
moodPreview: {
|
|
flexDirection: 'row',
|
|
justifyContent: 'space-between',
|
|
alignItems: 'center',
|
|
marginTop: 4,
|
|
},
|
|
moodPreviewText: {
|
|
fontSize: 14,
|
|
color: '#059669',
|
|
fontWeight: '600',
|
|
},
|
|
moodPreviewTime: {
|
|
fontSize: 12,
|
|
color: '#6B7280',
|
|
},
|
|
moodEmptyText: {
|
|
fontSize: 12,
|
|
color: '#9CA3AF',
|
|
fontStyle: 'italic',
|
|
marginTop: 4,
|
|
},
|
|
moodLoadingText: {
|
|
fontSize: 12,
|
|
color: '#9CA3AF',
|
|
fontStyle: 'italic',
|
|
marginTop: 4,
|
|
},
|
|
}); |