This commit is contained in:
lxd 2025-07-28 15:47:00 +08:00
commit 8e9d65980d
3 changed files with 105 additions and 46 deletions

2
.env
View File

@ -20,6 +20,6 @@ VITE_APP_DOCALERT_ENABLE=false
VITE_APP_BAIDU_CODE = a1ff8825baa73c3a78eb96aa40325abc
# 默认账户密码
VITE_APP_DEFAULT_LOGIN_TENANT = 艾康菲
VITE_APP_DEFAULT_LOGIN_TENANT = 芋道源码
VITE_APP_DEFAULT_LOGIN_USERNAME = admin
VITE_APP_DEFAULT_LOGIN_PASSWORD = admin123

View File

@ -960,6 +960,7 @@
let patientData = {};
let chartDataTable = [];
let analysisResult = '';
let thresholds = {}; // 存储动态阈值配置
// 数据验证函数
function validateData(data) {
@ -1029,6 +1030,7 @@
patientData = data.patientData || {};
chartDataTable = data.chartDataTable || [];
analysisResult = data.analysisResult || '';
thresholds = data.thresholds || {}; // 接收阈值配置
showDebugInfo('患者姓名: ' + (patientData.name || '空'));
showDebugInfo('图表数据条数: ' + chartDataTable.length);
@ -1301,11 +1303,11 @@
// 根据时段类型设置阈值
let systolicThreshold, diastolicThreshold;
if (periodType === 'day') {
systolicThreshold = 135;
diastolicThreshold = 85;
systolicThreshold = 140;
diastolicThreshold = 90;
} else if (periodType === 'night') {
systolicThreshold = 120;
diastolicThreshold = 70;
diastolicThreshold = 80;
} else { // all
systolicThreshold = 140;
diastolicThreshold = 90;
@ -2115,44 +2117,70 @@
// 渲染饼图
function renderPieCharts() {
// 收缩压饼图 - 按照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); // 全天: 综合白天和夜间
// 获取动态阈值,如果没有则使用默认值
const daytimeSystolicThreshold = thresholds.bp_daytime_systolic || 140;
const nighttimeSystolicThreshold = thresholds.bp_nighttime_systolic || 120;
const daytimeDiastolicThreshold = thresholds.bp_daytime_diastolic || 90;
const nighttimeDiastolicThreshold = thresholds.bp_nighttime_diastolic || 80;
// 舒张压饼图 - 按照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); // 全天: 综合白天和夜间
// 心率动态阈值
const daytimeHrMinThreshold = thresholds.hr_daytime_min || 50;
const daytimeHrMaxThreshold = thresholds.hr_daytime_max || 90;
const nighttimeHrMinThreshold = thresholds.hr_nighttime_min || 50;
const nighttimeHrMaxThreshold = thresholds.hr_nighttime_max || 90;
// 心率饼图 - 按照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
// 收缩压饼图 - 使用动态阈值
renderPieChart('pie-systolic-day', getDaytimeData(), 'systolic', daytimeSystolicThreshold, 'day');
renderPieChart('pie-systolic-night', getNighttimeData(), 'systolic', nighttimeSystolicThreshold, 'night');
renderPieChart('pie-systolic-all', chartDataTable, 'systolic', null, 'all'); // 全天数据需要综合判断
// 舒张压饼图 - 使用动态阈值
renderPieChart('pie-diastolic-day', getDaytimeData(), 'diastolic', daytimeDiastolicThreshold, 'day');
renderPieChart('pie-diastolic-night', getNighttimeData(), 'diastolic', nighttimeDiastolicThreshold, 'night');
renderPieChart('pie-diastolic-all', chartDataTable, 'diastolic', null, 'all'); // 全天数据需要综合判断
// 心率饼图 - 使用动态阈值
renderPieChart('pie-hr-day', getDaytimeData(), 'heartRate', {min: daytimeHrMinThreshold, max: daytimeHrMaxThreshold}, 'day');
renderPieChart('pie-hr-night', getNighttimeData(), 'heartRate', {min: nighttimeHrMinThreshold, max: nighttimeHrMaxThreshold}, 'night');
renderPieChart('pie-hr-all', chartDataTable, 'heartRate', null, 'all'); // 全天数据需要综合判断
// 填充饼图统计信息
fillPieChartStats();
}
// 渲染单个饼图
function renderPieChart(elementId, data, field, threshold) {
function renderPieChart(elementId, data, field, threshold, period) {
const chart = echarts.init(document.getElementById(elementId));
let normalCount, abnormalCount;
if (field === 'heartRate') {
// 按照C#代码的参考值50-90 bpm
normalCount = data.filter(item => item[field] >= 50 && item[field] < 90).length;
// 心率:使用动态阈值
if (threshold && typeof threshold === 'object') {
// 使用传入的动态阈值对象
normalCount = data.filter(item => item[field] >= threshold.min && item[field] <= threshold.max).length;
} else if (period === 'all') {
// 全天数据需要根据时间判断使用哪个阈值
normalCount = data.filter(item => {
const isDay = isDaytimeData(item);
const minHr = isDay ? (thresholds.hr_daytime_min || 50) : (thresholds.hr_nighttime_min || 50);
const maxHr = isDay ? (thresholds.hr_daytime_max || 90) : (thresholds.hr_nighttime_max || 90);
return item[field] >= minHr && item[field] <= maxHr;
}).length;
} else {
// 默认固定范围50-90 bpm
normalCount = data.filter(item => item[field] >= 50 && item[field] <= 90).length;
}
abnormalCount = data.length - normalCount;
} else {
// 血压的判断逻辑需要根据白天/夜间分别处理
// 血压的判断逻辑使用动态阈值
if (field === 'systolic') {
// 收缩压白天90-140夜间80-120
const isDaytime = data === getDaytimeData();
const isNighttime = data === getNighttimeData();
// 收缩压:使用动态阈值
const daytimeThreshold = thresholds.bp_daytime_systolic || 140;
const nighttimeThreshold = thresholds.bp_nighttime_systolic || 120;
if (isDaytime) {
if (period === 'day') {
normalCount = data.filter(item => item[field] >= 90 && item[field] < 140).length;
} else if (isNighttime) {
} else if (period === 'night') {
normalCount = data.filter(item => item[field] >= 80 && item[field] < 120).length;
} else {
// 全天数据,需要综合判断
@ -2166,13 +2194,13 @@
}).length;
}
} else if (field === 'diastolic') {
// 舒张压:白天65-90夜间55-80
const isDaytime = data === getDaytimeData();
const isNighttime = data === getNighttimeData();
// 舒张压:使用动态阈值
const daytimeThreshold = thresholds.bp_daytime_diastolic || 90;
const nighttimeThreshold = thresholds.bp_nighttime_diastolic || 80;
if (isDaytime) {
if (period === 'day') {
normalCount = data.filter(item => item[field] >= 65 && item[field] < 90).length;
} else if (isNighttime) {
} else if (period === 'night') {
normalCount = data.filter(item => item[field] >= 55 && item[field] < 80).length;
} else {
// 全天数据,需要综合判断

View File

@ -284,16 +284,24 @@ const defaultThresholds = {
bp_moderate_diastolic: 110,
//
bp_all_day_systolic: 130,
bp_all_day_diastolic: 80,
bp_all_day_systolic: 140,
bp_all_day_diastolic: 90,
//
bp_daytime_systolic: 135,
bp_daytime_diastolic: 85,
bp_daytime_systolic: 140,
bp_daytime_diastolic: 90,
//
bp_nighttime_systolic: 120,
bp_nighttime_diastolic: 70,
bp_nighttime_diastolic: 80,
//
hr_min: 50,
hr_max: 90,
hr_daytime_min: 50,
hr_daytime_max: 90,
hr_nighttime_min: 50,
hr_nighttime_max: 90,
//
bp_load_min: 5,
@ -306,10 +314,10 @@ const defaultThresholds = {
//
bp_load_total_systolic: 140,
bp_load_total_diastolic: 90,
bp_load_daytime_systolic: 135,
bp_load_daytime_diastolic: 85,
bp_load_daytime_systolic: 140,
bp_load_daytime_diastolic: 90,
bp_load_nighttime_systolic: 120,
bp_load_nighttime_diastolic: 70
bp_load_nighttime_diastolic: 80
}
//
@ -369,6 +377,14 @@ const loadThresholds = async (orgid: number) => {
bp_nighttime_diastolic:
thresholdMap['夜间_舒张压']?.maxValue || defaultThresholds.bp_nighttime_diastolic,
// - 使
hr_min: thresholdMap['全天_心率']?.minValue || defaultThresholds.hr_min,
hr_max: thresholdMap['全天_心率']?.maxValue || defaultThresholds.hr_max,
hr_daytime_min: thresholdMap['白天_心率']?.minValue || defaultThresholds.hr_daytime_min,
hr_daytime_max: thresholdMap['白天_心率']?.maxValue || defaultThresholds.hr_daytime_max,
hr_nighttime_min: thresholdMap['夜间_心率']?.minValue || defaultThresholds.hr_nighttime_min,
hr_nighttime_max: thresholdMap['夜间_心率']?.maxValue || defaultThresholds.hr_nighttime_max,
// -
bp_load_min: defaultThresholds.bp_load_min,
bp_load_max: defaultThresholds.bp_load_max,
@ -1390,19 +1406,33 @@ const calculatePieChartStats = () => {
if (type === 'systolic') {
value = item.systolic
// : 90-140, : 80-120
// 使
const isDayTime = isDaytime(item.time)
isNormal = isDayTime ? value >= 90 && value <= 140 : value >= 80 && value <= 120
const minThreshold = isDayTime ? 90 : 80
const maxThreshold = isDayTime
? thresholds.value.bp_daytime_systolic
: thresholds.value.bp_nighttime_systolic
isNormal = value >= minThreshold && value <= maxThreshold
} else if (type === 'diastolic') {
value = item.diastolic
// : 65-90, : 55-80
// 使
const isDayTime = isDaytime(item.time)
isNormal = isDayTime ? value >= 65 && value <= 90 : value >= 55 && value <= 80
const minThreshold = isDayTime ? 65 : 55
const maxThreshold = isDayTime
? thresholds.value.bp_daytime_diastolic
: thresholds.value.bp_nighttime_diastolic
isNormal = value >= minThreshold && value <= maxThreshold
} else {
// heartRate
// heartRate - 使
value = item.heartRate
// : 50-90
isNormal = value >= 50 && value <= 90
const isDayTime = isDaytime(item.time)
const minThreshold = isDayTime
? thresholds.value.hr_daytime_min
: thresholds.value.hr_nighttime_min
const maxThreshold = isDayTime
? thresholds.value.hr_daytime_max
: thresholds.value.hr_nighttime_max
isNormal = value >= minThreshold && value <= maxThreshold
}
if (isNormal) {
@ -1444,7 +1474,8 @@ const handleReportPreview = () => {
patientData: patientData,
chartDataTable: chartDataTable.value,
analysisResult: analysisResult.value,
pieChartStats: pieChartStats
pieChartStats: pieChartStats,
thresholds: thresholds.value //
}
// abpm-report-template.html (public)