fix(evaluation): 修复 updateEvaluationPoint 返回数据格式判断问题

## 问题描述
更新评查点时出现"更新评查点失败:返回数据格式不正确"错误

## 根本原因
- updateEvaluationPoint 和 createEvaluationPoint 对返回数据的格式判断过于严格
- 当 PostgREST 返回空数组时,代码没有正确处理

## 解决方案

### updateEvaluationPoint
- 添加详细的调试日志,记录返回数据的类型和格式
- 当返回空数组时,尝试重新获取数据(因为更新可能已成功)
- 改进错误消息,提供更明确的错误提示

### createEvaluationPoint
- 添加相同的调试日志
- 当返回空数组时,提供明确的错误消息并建议刷新页面
- 改进数据格式判断逻辑

## 技术改进
- 分层处理数组格式:有数据、空数组、非数组
- 空数组情况下的降级处理(update 重新获取,create 提示刷新)
- 保留所有调试日志便于问题诊断

## 测试建议
请在控制台查看日志输出,确认 PostgREST 返回的实际数据格式
This commit is contained in:
2025-11-25 16:15:27 +08:00
parent f5a5887651
commit 0499a3f0e5
+49 -8
View File
@@ -2009,10 +2009,28 @@ export async function createEvaluationPoint(
return { error: response.error, status: response.status };
}
if (response.data && Array.isArray(response.data) && response.data.length > 0) {
return { data: response.data[0] };
} else if (response.data && !Array.isArray(response.data)) {
return { data: response.data };
// 调试日志:查看实际返回的数据格式
console.log('createEvaluationPoint 响应数据:', {
data: response.data,
isArray: Array.isArray(response.data),
type: typeof response.data,
length: Array.isArray(response.data) ? response.data.length : 'N/A'
});
if (response.data) {
// 如果是数组且有数据,返回第一个元素
if (Array.isArray(response.data) && response.data.length > 0) {
return { data: response.data[0] };
}
// 如果是数组但为空,PostgREST 可能没有配置正确的 Prefer 头部
else if (Array.isArray(response.data) && response.data.length === 0) {
console.error('PostgREST 返回空数组,无法获取新创建的评查点数据');
return { error: '创建成功但无法获取创建的数据,请刷新页面', status: 500 };
}
// 如果不是数组,直接返回
else if (!Array.isArray(response.data)) {
return { data: response.data };
}
}
return { error: '创建评查点失败:返回数据格式不正确', status: 500 };
@@ -2050,10 +2068,33 @@ export async function updateEvaluationPoint(
return { error: response.error, status: response.status };
}
if (response.data && Array.isArray(response.data) && response.data.length > 0) {
return { data: response.data[0] };
} else if (response.data && !Array.isArray(response.data)) {
return { data: response.data };
// 调试日志:查看实际返回的数据格式
console.log('updateEvaluationPoint 响应数据:', {
data: response.data,
isArray: Array.isArray(response.data),
type: typeof response.data,
length: Array.isArray(response.data) ? response.data.length : 'N/A'
});
if (response.data) {
// 如果是数组且有数据,返回第一个元素
if (Array.isArray(response.data) && response.data.length > 0) {
return { data: response.data[0] };
}
// 如果是数组但为空,说明可能是 PostgREST 配置问题,但更新应该成功了
else if (Array.isArray(response.data) && response.data.length === 0) {
console.warn('PostgREST 返回空数组,可能需要检查 Prefer 头部设置');
// 尝试重新获取数据
const refetchResponse = await getEvaluationPoint(id, token);
if (refetchResponse.data) {
return { data: refetchResponse.data };
}
return { error: '更新成功但无法获取更新后的数据', status: 500 };
}
// 如果不是数组,直接返回
else if (!Array.isArray(response.data)) {
return { data: response.data };
}
}
return { error: '更新评查点失败:返回数据格式不正确', status: 500 };