调整饼图统计

This commit is contained in:
Flow 2025-07-21 09:42:29 +08:00
parent 454d621537
commit bf02bba18c
2 changed files with 79 additions and 27 deletions

View File

@ -1263,12 +1263,12 @@
function calculateStatistics(data) {
const daytimeData = data.filter(item => {
const hour = new Date(item.originalTime).getHours();
return hour >= 6 && hour < 22;
return hour >= 8 && hour < 22;
});
const nighttimeData = data.filter(item => {
const hour = new Date(item.originalTime).getHours();
return hour < 6 || hour >= 22;
return hour < 8 || hour >= 22;
});
const calculatePeriodStats = (periodData, periodType) => {
@ -2115,20 +2115,20 @@
// 渲染饼图
function renderPieCharts() {
// 收缩压饼图
renderPieChart('pie-systolic-day', getDaytimeData(), 'systolic', 135);
renderPieChart('pie-systolic-night', getNighttimeData(), 'systolic', 120);
renderPieChart('pie-systolic-all', chartDataTable, 'systolic', 140);
// 收缩压饼图 - 按照C#代码的参考值
renderPieChart('pie-systolic-day', getDaytimeData(), 'systolic', 140); // 白天: 90-140
renderPieChart('pie-systolic-night', getNighttimeData(), 'systolic', 120); // 夜间: 80-120
renderPieChart('pie-systolic-all', chartDataTable, 'systolic', 140); // 全天: 综合白天和夜间
// 舒张压饼图
renderPieChart('pie-diastolic-day', getDaytimeData(), 'diastolic', 85);
renderPieChart('pie-diastolic-night', getNighttimeData(), 'diastolic', 70);
renderPieChart('pie-diastolic-all', chartDataTable, 'diastolic', 90);
// 舒张压饼图 - 按照C#代码的参考值
renderPieChart('pie-diastolic-day', getDaytimeData(), 'diastolic', 90); // 白天: 65-90
renderPieChart('pie-diastolic-night', getNighttimeData(), 'diastolic', 80); // 夜间: 55-80
renderPieChart('pie-diastolic-all', chartDataTable, 'diastolic', 90); // 全天: 综合白天和夜间
// 心率饼图
renderPieChart('pie-hr-day', getDaytimeData(), 'heartRate', null);
renderPieChart('pie-hr-night', getNighttimeData(), 'heartRate', null);
renderPieChart('pie-hr-all', chartDataTable, 'heartRate', null);
// 心率饼图 - 按照C#代码的参考值
renderPieChart('pie-hr-day', getDaytimeData(), 'heartRate', null); // 白天: 50-90
renderPieChart('pie-hr-night', getNighttimeData(), 'heartRate', null); // 夜间: 50-90
renderPieChart('pie-hr-all', chartDataTable, 'heartRate', null); // 全天: 50-90
// 填充饼图统计信息
fillPieChartStats();
@ -2140,10 +2140,55 @@
let normalCount, abnormalCount;
if (field === 'heartRate') {
normalCount = data.filter(item => item[field] >=60 && item[field] <= 100).length;
// 按照C#代码的参考值50-90 bpm
normalCount = data.filter(item => item[field] >= 50 && item[field] < 90).length;
abnormalCount = data.length - normalCount;
} else {
normalCount = data.filter(item => item[field] < threshold).length;
// 血压的判断逻辑需要根据白天/夜间分别处理
if (field === 'systolic') {
// 收缩压白天90-140夜间80-120
const isDaytime = data === getDaytimeData();
const isNighttime = data === getNighttimeData();
if (isDaytime) {
normalCount = data.filter(item => item[field] >= 90 && item[field] < 140).length;
} else if (isNighttime) {
normalCount = data.filter(item => item[field] >= 80 && item[field] < 120).length;
} else {
// 全天数据,需要综合判断
normalCount = data.filter(item => {
const isDay = isDaytimeData(item);
if (isDay) {
return item[field] >= 90 && item[field] < 140;
} else {
return item[field] >= 80 && item[field] < 120;
}
}).length;
}
} else if (field === 'diastolic') {
// 舒张压白天65-90夜间55-80
const isDaytime = data === getDaytimeData();
const isNighttime = data === getNighttimeData();
if (isDaytime) {
normalCount = data.filter(item => item[field] >= 65 && item[field] < 90).length;
} else if (isNighttime) {
normalCount = data.filter(item => item[field] >= 55 && item[field] < 80).length;
} else {
// 全天数据,需要综合判断
normalCount = data.filter(item => {
const isDay = isDaytimeData(item);
if (isDay) {
return item[field] >= 65 && item[field] < 90;
} else {
return item[field] >= 55 && item[field] < 80;
}
}).length;
}
} else {
// 其他字段使用原来的逻辑
normalCount = data.filter(item => item[field] < threshold).length;
}
abnormalCount = data.length - normalCount;
}
@ -2178,7 +2223,7 @@
if (params.name === '暂无数据') {
return '暂无数据';
}
return params.name + ': ' + params.value + '次 (' + params.percent + '%)';
return Math.round(params.percent) + '%';
}
},
series: [{
@ -2191,10 +2236,11 @@
if (params.name === '暂无数据') {
return '暂无数据';
}
return params.name + '\n' + params.value + '次\n' + params.percent + '%';
return Math.round(params.percent) + '%';
},
fontSize: 10,
position: 'inside'
fontSize: 12,
position: 'inside',
color: '#000'
},
labelLine: {
show: false
@ -2622,7 +2668,7 @@
function getDaytimeData() {
return chartDataTable.filter(item => {
const hour = new Date(item.originalTime).getHours();
return hour >= 6 && hour < 22;
return hour >= 8 && hour < 22;
});
}
@ -2633,6 +2679,12 @@
});
}
// 判断单个数据项是否为白天数据
function isDaytimeData(item) {
const hour = new Date(item.originalTime).getHours();
return hour >= 8 && hour < 22;
}
// 暴露全局函数供外部调用
window.initializeABPMReport = initializeReport;
@ -2719,7 +2771,7 @@
wearTime: '2024-01-01'
},
chartDataTable: [
// 只有白天数据 (6:00-22:00)
// 只有白天数据 (8:00-22:00)
{ originalTime: '2024-01-01 08:00:00', systolic: 130, diastolic: 80, heartRate: 70, avgBP: 97, status: '正常', suggestion: '继续保持' },
{ originalTime: '2024-01-01 10:00:00', systolic: 140, diastolic: 90, heartRate: 75, avgBP: 107, status: '轻度高血压', suggestion: '注意饮食' },
{ originalTime: '2024-01-01 12:00:00', systolic: 145, diastolic: 95, heartRate: 80, avgBP: 112, status: '轻度高血压', suggestion: '适量运动' },
@ -2755,7 +2807,7 @@
wearTime: '2024-01-01'
},
chartDataTable: [
// 白天数据 (6:00-22:00)
// 白天数据 (8:00-22:00)
{ originalTime: '2024-01-01 08:00:00', systolic: 130, diastolic: 80, heartRate: 70, avgBP: 97, status: '正常', suggestion: '继续保持' },
{ originalTime: '2024-01-01 10:00:00', systolic: 140, diastolic: 90, heartRate: 75, avgBP: 107, status: '轻度高血压', suggestion: '注意饮食' },
{ originalTime: '2024-01-01 12:00:00', systolic: 145, diastolic: 95, heartRate: 80, avgBP: 112, status: '轻度高血压', suggestion: '适量运动' },
@ -2764,7 +2816,7 @@
{ originalTime: '2024-01-01 18:00:00', systolic: 138, diastolic: 82, heartRate: 74, avgBP: 101, status: '正常', suggestion: '继续保持' },
{ originalTime: '2024-01-01 20:00:00', systolic: 132, diastolic: 78, heartRate: 69, avgBP: 96, status: '正常', suggestion: '继续保持' },
// 夜间数据 (22:00-6:00)
// 夜间数据 (22:00-8:00)
{ originalTime: '2024-01-01 23:00:00', systolic: 125, diastolic: 75, heartRate: 65, avgBP: 92, status: '正常', suggestion: '继续保持' },
{ originalTime: '2024-01-02 01:00:00', systolic: 120, diastolic: 70, heartRate: 62, avgBP: 87, status: '正常', suggestion: '继续保持' },
{ originalTime: '2024-01-02 03:00:00', systolic: 118, diastolic: 68, heartRate: 60, avgBP: 85, status: '正常', suggestion: '继续保持' },

View File

@ -734,15 +734,15 @@ const generateAnalysisReport = (rawList: any[]) => {
? dayjs(minDiastolicItem.measuretime || minDiastolicItem.weartime).format('MM日HH:mm')
: ''
// 6:00-22:0022:00-6:00
// 8:00-22:0022:00-8:00
const daytimeData = rawList.filter((item) => {
const hour = dayjs(item.measuretime || item.weartime).hour()
return hour >= 6 && hour < 22
return hour >= 8 && hour < 22
})
const nighttimeData = rawList.filter((item) => {
const hour = dayjs(item.measuretime || item.weartime).hour()
return hour < 6 || hour >= 22
return hour < 8 || hour >= 22
})
//