diff --git a/public/abpm-report-template.html b/public/abpm-report-template.html index 5f75da1..1fa8994 100644 --- a/public/abpm-report-template.html +++ b/public/abpm-report-template.html @@ -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: '继续保持' }, diff --git a/src/views/analysis/ABPM/analysis.vue b/src/views/analysis/ABPM/analysis.vue index 64b30d6..92929df 100644 --- a/src/views/analysis/ABPM/analysis.vue +++ b/src/views/analysis/ABPM/analysis.vue @@ -734,15 +734,15 @@ const generateAnalysisReport = (rawList: any[]) => { ? dayjs(minDiastolicItem.measuretime || minDiastolicItem.weartime).format('MM日HH:mm') : '' - // 按时间段分类(白天6:00-22:00,夜间22:00-6:00) + // 按时间段分类(白天8:00-22:00,夜间22: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 }) // 白天平均值