From b396a7d101961f15414142646a57507b9f0ef5ec Mon Sep 17 00:00:00 2001 From: richarjiang Date: Thu, 21 Aug 2025 10:29:12 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=9B=B4=E6=96=B0=E6=95=99=E7=BB=83?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E5=92=8C=E5=B8=83=E5=B1=80=EF=BC=8C=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E7=94=A8=E6=88=B7=E4=BD=93=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将教练页面中的“Bot”名称更改为“Seal”,提升品牌一致性 - 在布局文件中调整标签标题和图标,确保与新名称一致 - 新增使用次数显示功能,优化用户对使用情况的了解 - 更新日期选择器样式,增强未来日期的禁用效果 - 优化压力分析模态框的颜色和文本,提升可读性 --- app/(tabs)/_layout.tsx | 7 +-- app/(tabs)/coach.tsx | 69 ++++++++++++++++++++++++----- app/(tabs)/statistics.tsx | 41 ++++++++++++----- assets/images/icons/iconFlash.png | Bin 0 -> 27121 bytes components/StressAnalysisModal.tsx | 10 ++--- components/StressMeter.tsx | 12 ++--- store/userSlice.ts | 6 +++ utils/date.ts | 2 +- 8 files changed, 108 insertions(+), 39 deletions(-) create mode 100644 assets/images/icons/iconFlash.png diff --git a/app/(tabs)/_layout.tsx b/app/(tabs)/_layout.tsx index ee1595a..b5b0b14 100644 --- a/app/(tabs)/_layout.tsx +++ b/app/(tabs)/_layout.tsx @@ -43,7 +43,7 @@ export default function TabLayout() { case 'explore': return { icon: 'magnifyingglass.circle.fill', title: '发现' } as const; case 'coach': - return { icon: 'person.3.fill', title: 'Bot' } as const; + return { icon: 'person.3.fill', title: 'Seal' } as const; case 'statistics': return { icon: 'chart.pie.fill', title: '统计' } as const; case 'personal': @@ -131,7 +131,7 @@ export default function TabLayout() { { const isCoachSelected = pathname === '/coach'; return ( @@ -148,7 +148,7 @@ export default function TabLayout() { textAlign: 'center', flexShrink: 0, }}> - Bot + Seal )} @@ -160,6 +160,7 @@ export default function TabLayout() { name="explore" options={{ title: '发现', + href: null, tabBarIcon: ({ color }) => { const isHomeSelected = pathname === '/' || pathname === '/index'; return ( diff --git a/app/(tabs)/coach.tsx b/app/(tabs)/coach.tsx index ed909e9..351d7e6 100644 --- a/app/(tabs)/coach.tsx +++ b/app/(tabs)/coach.tsx @@ -25,12 +25,13 @@ import { useSafeAreaInsets } from 'react-native-safe-area-context'; import { Colors } from '@/constants/Colors'; import { getTabBarBottomPadding } from '@/constants/TabBar'; -import { useAppSelector } from '@/hooks/redux'; +import { useAppDispatch, useAppSelector } from '@/hooks/redux'; import { useAuthGuard } from '@/hooks/useAuthGuard'; import { useCosUpload } from '@/hooks/useCosUpload'; import { deleteConversation, getConversationDetail, listConversations, type AiConversationListItem } from '@/services/aiCoach'; import { loadAiCoachSessionCache, saveAiCoachSessionCache } from '@/services/aiCoachSession'; import { api, getAuthToken, postTextStream } from '@/services/api'; +import { updateProfile } from '@/store/userSlice'; import dayjs from 'dayjs'; import { LinearGradient } from 'expo-linear-gradient'; import { ActionSheet } from '../../components/ui/ActionSheet'; @@ -124,7 +125,7 @@ export default function CoachScreen() { const { isLoggedIn, pushIfAuthedElseLogin } = useAuthGuard(); // 为了让页面更贴近品牌主题与更亮的观感,这里使用亮色系配色 const theme = Colors.light; - const botName = (params?.name || 'Bot').toString(); + const botName = (params?.name || 'Seal').toString(); const [input, setInput] = useState(''); const [isSending, setIsSending] = useState(false); const [isStreaming, setIsStreaming] = useState(false); @@ -174,7 +175,7 @@ export default function CoachScreen() { const generateWelcomeMessage = useCallback(() => { const hour = new Date().getHours(); const name = userProfile?.name || '朋友'; - const botName = (params?.name || '海豹助手').toString(); + const botName = (params?.name || 'Seal').toString(); // 时段问候 let timeGreeting = ''; @@ -199,7 +200,7 @@ export default function CoachScreen() { messages: [ `${timeGreeting},${name}!我是${botName},你的专属健康管理助手。新的一天开始了,让我们一起为你的健康目标努力吧!`, `${timeGreeting}!早晨是制定健康计划的最佳时机,我是${botName},可以帮你管理营养摄入、运动计划和生活作息。`, - `${timeGreeting},${name}!作为你的海豹助手,我很高兴能陪伴你的健康之旅。无论是饮食营养、健身锻炼还是生活管理,我都能为你提供专业建议。` + `${timeGreeting},${name}!作为你的Seal,我很高兴能陪伴你的健康之旅。无论是饮食营养、健身锻炼还是生活管理,我都能为你提供专业建议。` ] }, { @@ -215,7 +216,7 @@ export default function CoachScreen() { messages: [ `${timeGreeting},${name}!午餐时间很关键呢,合理的营养搭配能为下午提供充足能量。我是${botName},可以为你分析饮食营养和热量管理。`, `${timeGreeting}!忙碌的上午结束了,该关注一下身体需求啦。我是你的健康助手${botName},无论是饮食调整、运动安排还是休息建议,都可以找我。`, - `${timeGreeting},${name}!午间是调整状态的好时机。作为你的海豹助手,我建议关注饮食均衡和适度放松~` + `${timeGreeting},${name}!午间是调整状态的好时机。作为你的Seal,我建议关注饮食均衡和适度放松~` ] }, { @@ -231,7 +232,7 @@ export default function CoachScreen() { messages: [ `${timeGreeting},${name}!忙碌了一天,现在是时候关注身心平衡了。我是${botName},可以为你提供放松建议、营养补充和恢复方案。`, `${timeGreeting}!夜幕降临,这是一天中最适合总结和调整的时刻。我是你的健康伙伴${botName},让我们一起回顾今天的健康表现,规划明天的目标。`, - `${timeGreeting},${name}!晚间时光属于你自己,也是关爱身体的珍贵时间。作为你的海豹助手,我想陪你聊聊如何更好地管理健康生活。` + `${timeGreeting},${name}!晚间时光属于你自己,也是关爱身体的珍贵时间。作为你的Seal,我想陪你聊聊如何更好地管理健康生活。` ] }, { @@ -252,7 +253,7 @@ export default function CoachScreen() { }, { condition: () => userProfile && (!userProfile.pilatesPurposes || userProfile.pilatesPurposes.length === 0), - message: `${timeGreeting},${name}!作为你的海豹助手,我想更好地了解你的健康需求。告诉我你希望在营养摄入、身材管理、健身锻炼或生活管理方面实现什么目标吧~` + message: `${timeGreeting},${name}!作为你的Seal,我想更好地了解你的健康需求。告诉我你希望在营养摄入、身材管理、健身锻炼或生活管理方面实现什么目标吧~` } ]; @@ -1236,7 +1237,7 @@ export default function CoachScreen() { - 选择合适的方式记录您的饮食,海豹助手会根据您的饮食情况给出专业的营养建议。 + 选择合适的方式记录您的饮食,Seal会根据您的饮食情况给出专业的营养建议。 ); } @@ -1278,7 +1279,7 @@ export default function CoachScreen() { 发送记录 - 详细描述您的饮食内容和分量,有助于海豹助手给出更精准的营养分析和建议。 + 详细描述您的饮食内容和分量,有助于Seal给出更精准的营养分析和建议。 ); } @@ -1825,7 +1826,32 @@ export default function CoachScreen() { if (h && Math.abs(h - headerHeight) > 0.5) setHeaderHeight(h); }} > - {botName} + + {botName} + + {/* 使用次数显示 */} + { + // 临时测试:切换VIP状态 + const dispatch = useAppDispatch(); + dispatch(updateProfile({ + isVip: !userProfile?.isVip, + freeUsageCount: userProfile?.isVip ? 3 : 5, + maxUsageCount: userProfile?.isVip ? 5 : 10 + })); + }} + > + + + {userProfile?.isVip ? '不限' : `${userProfile?.freeUsageCount || 0}/${userProfile?.maxUsageCount || 0}`} + + + + {days.map((d, i) => { const selected = i === selectedIndex; + const isFutureDate = d.date.isAfter(dayjs(), 'day'); return ( onSelectDate(i)} - activeOpacity={0.8} + style={[ + styles.dayPill, + selected ? styles.dayPillSelected : styles.dayPillNormal, + isFutureDate && styles.dayPillDisabled + ]} + onPress={() => !isFutureDate && onSelectDate(i)} + activeOpacity={isFutureDate ? 1 : 0.8} + disabled={isFutureDate} > - {d.weekdayZh} - {d.dayOfMonth} + {d.weekdayZh} + {d.dayOfMonth} {selected && } @@ -319,9 +332,6 @@ export default function ExploreScreen() { - - - 步数 {stepCount != null ? ( @@ -367,9 +377,6 @@ export default function ExploreScreen() { - - - 睡眠 {sleepDuration != null ? ( @@ -443,6 +450,10 @@ const styles = StyleSheet.create({ dayPillSelected: { backgroundColor: lightColors.datePickerSelected, }, + dayPillDisabled: { + backgroundColor: '#F5F5F5', + opacity: 0.5, + }, dayLabel: { fontSize: 12, fontWeight: '700', @@ -452,6 +463,9 @@ const styles = StyleSheet.create({ dayLabelSelected: { color: '#FFFFFF', }, + dayLabelDisabled: { + color: '#9AA3AE', + }, dayDate: { fontSize: 12, fontWeight: '800', @@ -460,6 +474,9 @@ const styles = StyleSheet.create({ dayDateSelected: { color: '#FFFFFF', }, + dayDateDisabled: { + color: '#9AA3AE', + }, selectedDot: { width: 5, height: 5, diff --git a/assets/images/icons/iconFlash.png b/assets/images/icons/iconFlash.png new file mode 100644 index 0000000000000000000000000000000000000000..38b7f5f1eed067626ad95955f9e67ae79a6a7c40 GIT binary patch literal 27121 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 - - 好事发生 + + 鸭梨山大 活力满满 - - 鸭梨山大 + + 好事发生 diff --git a/components/StressMeter.tsx b/components/StressMeter.tsx index 0610e3c..a5066eb 100644 --- a/components/StressMeter.tsx +++ b/components/StressMeter.tsx @@ -1,4 +1,3 @@ -import { Ionicons } from '@expo/vector-icons'; import { LinearGradient } from 'expo-linear-gradient'; import React, { useState } from 'react'; import { StyleSheet, Text, TouchableOpacity, View } from 'react-native'; @@ -19,9 +18,9 @@ export function StressMeter({ value, updateTime, style, hrvValue }: StressMeterP const getStressStatus = () => { if (value === null) { return '未知'; - } else if (value <= 30) { + } else if (value >= 70) { return '放松'; - } else if (value <= 70) { + } else if (value >= 30) { return '正常'; } else { return '紧张'; @@ -46,7 +45,7 @@ export function StressMeter({ value, updateTime, style, hrvValue }: StressMeterP }; // 计算进度条位置(0-100%) - // 压力指数越高,进度条越满 + // 压力指数越高,进度条越满(红色区域越多) const progressPercentage = value !== null ? Math.max(0, Math.min(100, value)) : 0; // 在组件内部添加状态 @@ -67,9 +66,6 @@ export function StressMeter({ value, updateTime, style, hrvValue }: StressMeterP {/* 头部区域 */} - - - 压力 {getStatusEmoji()} @@ -87,7 +83,7 @@ export function StressMeter({ value, updateTime, style, hrvValue }: StressMeterP {/* 渐变背景进度条 */}