feat(water): 重构饮水模块并新增自定义提醒设置功能
- 新增饮水详情页面 `/water/detail` 展示每日饮水记录与统计 - 新增饮水设置页面 `/water/settings` 支持目标与快速添加配置 - 新增喝水提醒设置页面 `/water/reminder-settings` 支持自定义时间段与间隔 - 重构 `useWaterData` Hook,支持按日期查询与实时刷新 - 新增 `WaterNotificationHelpers.scheduleCustomWaterReminders` 实现个性化提醒 - 优化心情编辑页键盘体验,新增 `KeyboardAvoidingView` 与滚动逻辑 - 升级版本号至 1.0.14 并补充路由常量 - 补充用户偏好存储字段 `waterReminderEnabled/startTime/endTime/interval` - 废弃后台定时任务中的旧版喝水提醒逻辑,改为用户手动管理
This commit is contained in:
@@ -27,7 +27,7 @@ const WaterIntakeCard: React.FC<WaterIntakeCardProps> = ({
|
||||
selectedDate
|
||||
}) => {
|
||||
const router = useRouter();
|
||||
const { waterStats, dailyWaterGoal, waterRecords, addWaterRecord } = useWaterDataByDate(selectedDate);
|
||||
const { waterStats, dailyWaterGoal, waterRecords, addWaterRecord, getWaterRecordsByDate } = useWaterDataByDate(selectedDate);
|
||||
const [quickWaterAmount, setQuickWaterAmount] = useState(150); // 默认值,将从用户偏好中加载
|
||||
|
||||
// 计算当前饮水量和目标
|
||||
@@ -76,21 +76,25 @@ const WaterIntakeCard: React.FC<WaterIntakeCardProps> = ({
|
||||
// 判断是否是今天
|
||||
const isToday = selectedDate === dayjs().format('YYYY-MM-DD') || !selectedDate;
|
||||
|
||||
// 加载用户偏好的快速添加饮水默认值
|
||||
// 页面聚焦时重新加载数据
|
||||
useFocusEffect(
|
||||
useCallback(() => {
|
||||
const loadQuickWaterAmount = async () => {
|
||||
const loadDataOnFocus = async () => {
|
||||
try {
|
||||
// 重新加载快速添加饮水默认值
|
||||
const amount = await getQuickWaterAmount();
|
||||
setQuickWaterAmount(amount);
|
||||
|
||||
// 重新获取水数据以刷新显示
|
||||
const targetDate = selectedDate || dayjs().format('YYYY-MM-DD');
|
||||
await getWaterRecordsByDate(targetDate);
|
||||
} catch (error) {
|
||||
console.error('加载快速添加饮水默认值失败:', error);
|
||||
// 保持默认值 250ml
|
||||
console.error('页面聚焦时加载数据失败:', error);
|
||||
}
|
||||
};
|
||||
|
||||
loadQuickWaterAmount();
|
||||
}, [])
|
||||
loadDataOnFocus();
|
||||
}, [selectedDate, getWaterRecordsByDate])
|
||||
);
|
||||
|
||||
// 触发柱体动画
|
||||
@@ -135,16 +139,16 @@ const WaterIntakeCard: React.FC<WaterIntakeCardProps> = ({
|
||||
await addWaterRecord(waterAmount, recordedAt);
|
||||
};
|
||||
|
||||
// 处理卡片点击 - 跳转到饮水设置页面
|
||||
// 处理卡片点击 - 跳转到饮水详情页面
|
||||
const handleCardPress = async () => {
|
||||
// 触发震动反馈
|
||||
if (process.env.EXPO_OS === 'ios') {
|
||||
Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light);
|
||||
}
|
||||
|
||||
// 跳转到饮水设置页面,传递选中的日期参数
|
||||
// 跳转到饮水详情页面,传递选中的日期参数
|
||||
router.push({
|
||||
pathname: '/water-settings',
|
||||
pathname: '/water/detail',
|
||||
params: selectedDate ? { selectedDate } : undefined
|
||||
});
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user