{"version":3,"file":"BloodPressureStatistics-CtBVGxnG.js","names":[],"sources":["../../../app/javascript/Pages/BloodPressureMeasurements/composables/useBloodPressureAnalysis.js","../../../app/javascript/Pages/BloodPressureMeasurements/BloodPressureStatistics.vue"],"sourcesContent":["import { ref, watch, onMounted } from 'vue';\nimport { Chart, registerables } from 'chart.js';\nimport { calculateBPHealthScore, performGroupAnalysis, performClinicalAnalysis, calculateHealthScore, getHealthStatus } from '../utils/bloodPressureUtils';\n\nChart.register(...registerables);\n\nexport function useBloodPressureAnalysis(measurements) {\n // 选中的日期\n const selectedDate = ref('');\n // 选中的每日报告\n const selectedDailyReport = ref(null);\n // 每日报告列表\n const dailyReports = ref([]);\n // 统计结果\n const statistics = ref(null);\n // BPHS等级数据\n const bpHealthLevels = ref({});\n const bpHealthLevelsLoading = ref(false);\n const bpHealthLevelsError = ref(null);\n \n // 图表数据\n const chartData = ref({\n labels: [],\n datasets: [\n { label: '收缩压', data: [], borderColor: '#ef4444', backgroundColor: 'rgba(239, 68, 68, 0.1)', tension: 0.4, yAxisID: 'y' },\n { label: '舒张压', data: [], borderColor: '#3b82f6', backgroundColor: 'rgba(59, 130, 246, 0.1)', tension: 0.4, yAxisID: 'y' },\n ],\n });\n\n // 图表选项\n const chartOptions = ref({\n responsive: true,\n maintainAspectRatio: false,\n scales: {\n y: {\n type: 'linear', display: true, position: 'left', title: { display: true, text: '血压 (mmHg)' },\n min: 60, max: 200, grid: { drawOnChartArea: true },\n },\n x: { title: { display: true, text: '测量时间' }, grid: { display: false } },\n },\n plugins: { legend: { display: true, position: 'top' } },\n });\n\n // 生成每日报告\n const generateDailyReports = async () => {\n const reports = [];\n const dateMap = {};\n\n // 按日期分组测量数据\n measurements.value.forEach((measurement) => {\n const date = new Date(measurement.measured_at);\n const dateKey = date.toISOString().split('T')[0];\n if (!dateMap[dateKey]) dateMap[dateKey] = [];\n dateMap[dateKey].push(measurement);\n });\n\n // 为每个日期生成报告\n for (const dateKey of Object.keys(dateMap)) {\n const measurementsList = dateMap[dateKey];\n const allReadings = [];\n\n measurementsList.forEach((measurement) => {\n if (measurement.readings && measurement.readings.length > 0) {\n measurement.readings.forEach((reading) => {\n allReadings.push({ ...reading, measured_at: measurement.measured_at });\n });\n }\n });\n\n if (allReadings.length > 0) {\n const systolicValues = allReadings.map((r) => r.systolic);\n const diastolicValues = allReadings.map((r) => r.diastolic);\n const heartRateValues = allReadings.map((r) => r.heart_rate);\n\n const avgSystolic = systolicValues.reduce((a, b) => a + b, 0) / systolicValues.length;\n const avgDiastolic = diastolicValues.reduce((a, b) => a + b, 0) / diastolicValues.length;\n const avgHeartRate = heartRateValues.reduce((a, b) => a + b, 0) / heartRateValues.length;\n\n // 计算健康评分\n const healthScore = calculateHealthScore(avgSystolic, avgDiastolic);\n const healthStatus = getHealthStatus(healthScore);\n\n // 计算临床分析\n const clinicalAnalysis = await performClinicalAnalysis(allReadings);\n\n // 分组分析\n const groupAnalysis = performGroupAnalysis(allReadings);\n\n // 计算新的血压健康评分\n const bpHealthScore = await calculateBPHealthScore(allReadings, groupAnalysis.groups, measurementsList.length, bpHealthLevels.value);\n\n // 规范测量模式\n let measurementMode;\n if (measurementsList.length === 1) measurementMode = '一天只有一组数据';\n else if (measurementsList.length === 2) measurementMode = '一天只有早晚两组数据';\n else measurementMode = '一天最多只有三组数据';\n\n reports.push({\n date: dateKey,\n measurementsCount: measurementsList.length,\n measurementMode,\n avgSystolic,\n avgDiastolic,\n avgHeartRate,\n healthScore,\n healthStatus,\n clinicalAnalysis,\n groupAnalysis,\n bpHealthScore,\n });\n }\n }\n\n dailyReports.value = reports.sort((a, b) => new Date(b.date) - new Date(a.date));\n };\n\n // 分析数据\n const analyzeData = () => {\n if (!selectedDate.value) {\n statistics.value = null;\n return;\n }\n\n // 过滤选定日期的测量数据\n const filteredMeasurements = measurements.value.filter((measurement) => {\n const measurementDate = new Date(measurement.measured_at);\n const selected = new Date(selectedDate.value);\n return measurementDate.toDateString() === selected.toDateString();\n });\n\n if (filteredMeasurements.length === 0) {\n statistics.value = null;\n return;\n }\n\n // 提取所有读数\n const allReadings = [];\n filteredMeasurements.forEach((measurement) => {\n if (measurement.readings && measurement.readings.length > 0) {\n measurement.readings.forEach((reading, index) => {\n allReadings.push({\n ...reading,\n measured_at: measurement.measured_at,\n reading_index: index + 1,\n measurement_time: new Date(measurement.measured_at),\n });\n });\n }\n });\n\n if (allReadings.length === 0) {\n statistics.value = null;\n return;\n }\n\n // 计算统计数据\n const systolicValues = allReadings.map((r) => r.systolic);\n const diastolicValues = allReadings.map((r) => r.diastolic);\n const heartRateValues = allReadings.map((r) => r.heart_rate);\n const pulsePressureValues = systolicValues.map((s, i) => s - diastolicValues[i]);\n\n // 基本统计\n const avgSystolic = systolicValues.reduce((a, b) => a + b, 0) / systolicValues.length;\n const avgDiastolic = diastolicValues.reduce((a, b) => a + b, 0) / diastolicValues.length;\n const avgHeartRate = heartRateValues.reduce((a, b) => a + b, 0) / heartRateValues.length;\n const avgPulsePressure = pulsePressureValues.reduce((a, b) => a + b, 0) / pulsePressureValues.length;\n\n // 最小/最大值\n const minSystolic = Math.min(...systolicValues);\n const maxSystolic = Math.max(...systolicValues);\n const minDiastolic = Math.min(...diastolicValues);\n const maxDiastolic = Math.max(...diastolicValues);\n const minHeartRate = Math.min(...heartRateValues);\n const maxHeartRate = Math.max(...heartRateValues);\n const minPulsePressure = Math.min(...pulsePressureValues);\n const maxPulsePressure = Math.max(...pulsePressureValues);\n\n // 标准差\n const stdSystolic = Math.sqrt(\n systolicValues.reduce((sq, n) => sq + Math.pow(n - avgSystolic, 2), 0) / systolicValues.length\n );\n const stdDiastolic = Math.sqrt(\n diastolicValues.reduce((sq, n) => sq + Math.pow(n - avgDiastolic, 2), 0) / diastolicValues.length\n );\n const stdHeartRate = Math.sqrt(\n heartRateValues.reduce((sq, n) => sq + Math.pow(n - avgHeartRate, 2), 0) / heartRateValues.length\n );\n const stdPulsePressure = Math.sqrt(\n pulsePressureValues.reduce((sq, n) => sq + Math.pow(n - avgPulsePressure, 2), 0) / pulsePressureValues.length\n );\n\n // 稳定性评分(0-10分,分数越高越稳定)\n const stabilityScore = 10 - (stdSystolic / 10 + stdDiastolic / 8);\n\n // 分布统计\n const systolicDistribution = {};\n const diastolicDistribution = {};\n\n // 收缩压分布\n systolicValues.forEach((value) => {\n const range = `${Math.floor(value / 10) * 10}-${Math.floor(value / 10) * 10 + 9}`;\n systolicDistribution[range] = (systolicDistribution[range] || 0) + 1;\n });\n\n // 舒张压分布\n diastolicValues.forEach((value) => {\n const range = `${Math.floor(value / 10) * 10}-${Math.floor(value / 10) * 10 + 9}`;\n diastolicDistribution[range] = (diastolicDistribution[range] || 0) + 1;\n });\n\n // 准备图表数据\n chartData.value.labels = allReadings.map((r) => {\n const time = new Date(r.measured_at);\n return time.toLocaleTimeString('zh-CN', { hour: '2-digit', minute: '2-digit' });\n });\n\n chartData.value.datasets[0].data = systolicValues;\n chartData.value.datasets[1].data = diastolicValues;\n\n // 创建统计结果\n statistics.value = {\n totalMeasurements: allReadings.length,\n avgSystolic,\n avgDiastolic,\n avgHeartRate,\n avgPulsePressure,\n minSystolic,\n maxSystolic,\n minDiastolic,\n maxDiastolic,\n minHeartRate,\n maxHeartRate,\n minPulsePressure,\n maxPulsePressure,\n stdSystolic,\n stdDiastolic,\n stdHeartRate,\n stdPulsePressure,\n stabilityScore,\n systolicDistribution,\n diastolicDistribution,\n };\n };\n\n // 选择每日报告\n const selectDailyReport = (report) => {\n selectedDailyReport.value = report;\n selectedDate.value = report.date;\n analyzeData();\n };\n\n // 获取BPHS等级数据(带缓存)\n const fetchBPHealthLevels = async () => {\n bpHealthLevelsLoading.value = true;\n bpHealthLevelsError.value = null;\n\n console.log('🔄 开始获取BPHS等级数据...');\n\n // 检查本地缓存(缓存24小时)\n const cached = localStorage.getItem('bpHealthLevels');\n const cacheTime = localStorage.getItem('bpHealthLevelsTime');\n const now = Date.now();\n const cacheExpiry = 24 * 60 * 60 * 1000; // 24小时\n\n if (cached && cacheTime && (now - parseInt(cacheTime)) < cacheExpiry) {\n try {\n const parsedData = JSON.parse(cached);\n // 检查缓存数据是否有效(至少包含6个标准)\n if (parsedData && Object.keys(parsedData).length >= 6) {\n bpHealthLevels.value = parsedData;\n console.log('✅ BPHS levels loaded from cache:', Object.keys(parsedData));\n bpHealthLevelsLoading.value = false;\n return;\n } else {\n console.log('⚠️ Cached BPHS levels are incomplete, fetching fresh data...');\n }\n } catch (e) {\n console.warn('❌ Failed to parse cached BPHS levels:', e);\n }\n }\n\n try {\n console.log('🌐 Fetching BPHS levels from API...');\n const response = await fetch('/health_score_criteria/levels');\n console.log('📡 API response status:', response.status);\n\n if (response.ok) {\n const data = await response.json();\n bpHealthLevels.value = data;\n // 缓存数据\n localStorage.setItem('bpHealthLevels', JSON.stringify(data));\n localStorage.setItem('bpHealthLevelsTime', now.toString());\n console.log('✅ BPHS levels fetched and cached successfully:', Object.keys(data));\n } else {\n const errorMsg = `Failed to fetch BPHS levels, status: ${response.status}`;\n console.error('❌', errorMsg);\n bpHealthLevelsError.value = errorMsg;\n // 尝试使用缓存数据作为fallback\n if (cached) {\n try {\n bpHealthLevels.value = JSON.parse(cached);\n console.log('🔄 Using cached BPHS levels as fallback');\n } catch (e) {\n console.warn('❌ Failed to parse fallback cache');\n bpHealthLevels.value = {};\n }\n } else {\n console.warn('❌ No cache available for fallback');\n bpHealthLevels.value = {};\n }\n }\n } catch (error) {\n const errorMsg = `Failed to fetch BPHS levels: ${error.message}`;\n console.error('❌', errorMsg);\n bpHealthLevelsError.value = errorMsg;\n // 尝试使用缓存数据作为fallback\n if (cached) {\n try {\n bpHealthLevels.value = JSON.parse(cached);\n console.log('🔄 Using cached BPHS levels as fallback');\n } catch (e) {\n console.warn('❌ Failed to parse fallback cache');\n bpHealthLevels.value = {};\n }\n } else {\n console.warn('❌ No cache available for fallback');\n bpHealthLevels.value = {};\n }\n } finally {\n bpHealthLevelsLoading.value = false;\n console.log('🏁 BPHS data loading completed, current data keys:', Object.keys(bpHealthLevels.value));\n }\n };\n\n // 清除BPHS等级缓存(用于调试)\n const clearBPHealthLevelsCache = () => {\n localStorage.removeItem('bpHealthLevels');\n localStorage.removeItem('bpHealthLevelsTime');\n console.log('BPHS levels cache cleared');\n };\n\n // 组件挂载时生成每日报告和获取等级数据\n onMounted(async () => {\n await fetchBPHealthLevels();\n await generateDailyReports();\n });\n\n // 监听测量数据变化\n watch(\n () => measurements.value,\n async (newMeasurements) => {\n if (selectedDate.value && newMeasurements.length > 0) analyzeData();\n await generateDailyReports();\n },\n { deep: true }\n );\n\n // 强制重新生成BPHS报告(用于调试)\n const regenerateBPHSScores = async () => {\n console.log('🔄 强制重新生成BPHS分数...');\n await generateDailyReports();\n console.log('✅ BPHS分数重新生成完成');\n };\n\n return {\n selectedDate,\n selectedDailyReport,\n dailyReports,\n statistics,\n chartData,\n chartOptions,\n analyzeData,\n selectDailyReport,\n generateDailyReports,\n bpHealthLevels,\n bpHealthLevelsLoading,\n bpHealthLevelsError,\n clearBPHealthLevelsCache,\n regenerateBPHSScores,\n };\n}\n","\n\n\n\n\n"],"mappings":"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"}