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:
@@ -1,4 +1,5 @@
|
||||
import { deleteWaterIntakeFromHealthKit, getWaterIntakeFromHealthKit, saveWaterIntakeToHealthKit } from '@/utils/health';
|
||||
import { logger } from '@/utils/logger';
|
||||
import { Toast } from '@/utils/toast.utils';
|
||||
import { getQuickWaterAmount, getWaterGoalFromStorage, setWaterGoalToStorage } from '@/utils/userPreferences';
|
||||
import { refreshWidget, syncWaterDataToWidget } from '@/utils/widgetDataSync';
|
||||
@@ -495,18 +496,25 @@ export const useWaterDataByDate = (targetDate?: string) => {
|
||||
setError(null);
|
||||
|
||||
try {
|
||||
logger.debug('🚰 开始获取饮水记录,日期:', date);
|
||||
const options = createDateRange(date);
|
||||
logger.debug('🚰 查询选项:', options);
|
||||
|
||||
const healthKitRecords = await getWaterIntakeFromHealthKit(options);
|
||||
logger.debug('🚰 从HealthKit获取到的原始数据:', healthKitRecords);
|
||||
|
||||
// 转换数据格式并按时间排序
|
||||
const convertedRecords = healthKitRecords
|
||||
.map(convertHealthKitToWaterRecord)
|
||||
.sort((a, b) => new Date(b.recordedAt).getTime() - new Date(a.recordedAt).getTime());
|
||||
|
||||
logger.debug('🚰 转换后的记录:', convertedRecords);
|
||||
logger.debug('🚰 记录数量:', convertedRecords.length);
|
||||
|
||||
setWaterRecords(convertedRecords);
|
||||
return convertedRecords;
|
||||
} catch (error) {
|
||||
console.error('获取饮水记录失败:', error);
|
||||
console.error('🚰 获取饮水记录失败:', error);
|
||||
setError('获取饮水记录失败');
|
||||
Toast.error('获取饮水记录失败');
|
||||
return [];
|
||||
@@ -638,7 +646,11 @@ export const useWaterDataByDate = (targetDate?: string) => {
|
||||
|
||||
// 计算指定日期的统计数据
|
||||
const waterStats = useMemo(() => {
|
||||
logger.debug('🚰 计算waterStats - waterRecords:', waterRecords);
|
||||
logger.debug('🚰 计算waterStats - dailyWaterGoal:', dailyWaterGoal);
|
||||
|
||||
if (!waterRecords || waterRecords.length === 0) {
|
||||
logger.debug('🚰 没有饮水记录,返回默认值');
|
||||
return {
|
||||
totalAmount: 0,
|
||||
completionRate: 0,
|
||||
@@ -649,6 +661,10 @@ export const useWaterDataByDate = (targetDate?: string) => {
|
||||
const totalAmount = waterRecords.reduce((total, record) => total + record.amount, 0);
|
||||
const completionRate = dailyWaterGoal > 0 ? Math.min((totalAmount / dailyWaterGoal) * 100, 100) : 0;
|
||||
|
||||
logger.debug('🚰 计算结果 - totalAmount:', totalAmount);
|
||||
logger.debug('🚰 计算结果 - completionRate:', completionRate);
|
||||
logger.debug('🚰 计算结果 - recordCount:', waterRecords.length);
|
||||
|
||||
return {
|
||||
totalAmount,
|
||||
completionRate,
|
||||
|
||||
Reference in New Issue
Block a user