feat: 实现目标列表左滑删除功能及相关组件

- 在目标列表中添加左滑删除功能,用户可通过左滑手势显示删除按钮并确认删除目标
- 修改 GoalCard 组件,使用 Swipeable 组件包装卡片内容,支持删除操作
- 更新目标列表页面,集成删除目标的逻辑,确保与 Redux 状态管理一致
- 添加开发模式下的模拟数据,方便测试删除功能
- 更新相关文档,详细描述左滑删除功能的实现和使用方法
This commit is contained in:
2025-08-23 17:58:39 +08:00
parent 20a244e375
commit 4f2bd76b8f
14 changed files with 1592 additions and 732 deletions

View File

@@ -220,8 +220,15 @@ export async function fetchHealthDataForDate(date: Date): Promise<TodayHealthDat
// 获取最新的血氧饱和度值
const latestOxygen = res[res.length - 1];
if (latestOxygen && latestOxygen.value !== undefined && latestOxygen.value !== null) {
let value = Number(latestOxygen.value);
// 检查数据格式如果值小于1可能是小数形式0.0-1.0),需要转换为百分比
if (value > 0 && value < 1) {
value = value * 100;
console.log('血氧饱和度数据从小数转换为百分比:', latestOxygen.value, '->', value);
}
// 血氧饱和度通常在0-100之间验证数据有效性
const value = Number(latestOxygen.value);
if (value >= 0 && value <= 100) {
resolve(Number(value.toFixed(1)));
} else {
@@ -346,3 +353,66 @@ export async function updateWeight(weight: number) {
});
});
}
// 新增:测试血氧饱和度数据获取
export async function testOxygenSaturationData(date: Date = new Date()): Promise<void> {
console.log('=== 开始测试血氧饱和度数据获取 ===');
const start = dayjs(date).startOf('day').toDate();
const end = dayjs(date).endOf('day').toDate();
const options = {
startDate: start.toISOString(),
endDate: end.toISOString()
} as any;
return new Promise((resolve) => {
AppleHealthKit.getOxygenSaturationSamples(options, (err, res) => {
if (err) {
console.error('获取血氧饱和度失败:', err);
resolve();
return;
}
console.log('原始血氧饱和度数据:', res);
if (!res || !Array.isArray(res) || res.length === 0) {
console.warn('血氧饱和度数据为空');
resolve();
return;
}
// 分析所有数据样本
res.forEach((sample, index) => {
console.log(`样本 ${index + 1}:`, {
value: sample.value,
valueType: typeof sample.value,
startDate: sample.startDate,
endDate: sample.endDate
});
});
// 获取最新的血氧饱和度值
const latestOxygen = res[res.length - 1];
if (latestOxygen && latestOxygen.value !== undefined && latestOxygen.value !== null) {
let value = Number(latestOxygen.value);
console.log('处理前的值:', latestOxygen.value);
console.log('转换为数字后的值:', value);
// 检查数据格式如果值小于1可能是小数形式0.0-1.0),需要转换为百分比
if (value > 0 && value < 1) {
const originalValue = value;
value = value * 100;
console.log('血氧饱和度数据从小数转换为百分比:', originalValue, '->', value);
}
console.log('最终处理后的值:', value);
console.log('数据有效性检查:', value >= 0 && value <= 100 ? '有效' : '无效');
}
console.log('=== 血氧饱和度数据测试完成 ===');
resolve();
});
});
}