{"version":3,"file":"BloodPressureStatistics-bIHF2qYP.js","names":[],"sources":["../../../app/javascript/Pages/AiBloodPressureMeasurements/composables/useBloodPressureAnalysis.js","../../../app/javascript/Pages/AiBloodPressureMeasurements/BloodPressureStatistics.vue"],"sourcesContent":["import { ref, watch, onMounted, reactive, computed } from 'vue';\nimport { Chart, registerables } from 'chart.js';\nimport { performGroupAnalysis, calculateHealthScore, getHealthStatus, calculateWeightedHealthScore, getWeightedHealthLevel } from '../utils/bloodPressureUtils';\n\nChart.register(...registerables);\n\nexport function useBloodPressureAnalysis(measurements) {\n const startDate = ref('');\n const endDate = ref('');\n const selectedDailyReport = ref(null);\n const dailyReports = ref([]);\n const statistics = ref(null);\n const analysisLoading = ref(false);\n const analysisError = ref(null);\n const loadingDates = reactive(new Set());\n\n const selectedAIQueries = reactive({});\n const batchLoading = ref(false);\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 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 let dateMapCache = {};\n const aiCache = {};\n const forceRefreshDates = reactive({});\n const isDateInRange = (dateStr) => {\n if (startDate.value) {\n const start = new Date(startDate.value);\n if (new Date(dateStr) < start) return false;\n }\n if (endDate.value) {\n const end = new Date(endDate.value);\n end.setHours(23, 59, 59, 999);\n if (new Date(dateStr) > end) return false;\n }\n return true;\n };\n\n const filteredDailyReports = computed(() => {\n return dailyReports.value.filter(r => isDateInRange(r.date)).slice(0, 10);\n });\n\n const hasAnySelected = computed(() => {\n const hasQuerySelected = Object.values(selectedAIQueries).some(v => v);\n const hasForceRefresh = Object.values(forceRefreshDates).some(v => v);\n return hasQuerySelected || hasForceRefresh;\n });\n\n const validateDateRange = () => {\n if (!startDate.value || !endDate.value) return null;\n const start = new Date(startDate.value);\n const end = new Date(endDate.value);\n if (start > end) return 'start_after_end';\n const diffMs = end.getTime() - start.getTime();\n const diffDays = Math.ceil(diffMs / (1000 * 60 * 60 * 24));\n if (diffDays > 7) return 'max_seven_days';\n return null;\n };\n\n const toggleAIQuery = (dateKey) => {\n if (selectedAIQueries[dateKey]) {\n delete selectedAIQueries[dateKey];\n } else {\n selectedAIQueries[dateKey] = true;\n }\n };\n\n const toggleSelectAll = (checked) => {\n if (checked) {\n filteredDailyReports.value.forEach(report => {\n if (report._aiLoaded || report.queryCount > 0) {\n forceRefreshDates[report.date] = true;\n } else {\n selectedAIQueries[report.date] = true;\n }\n });\n } else {\n Object.keys(selectedAIQueries).forEach(key => delete selectedAIQueries[key]);\n Object.keys(forceRefreshDates).forEach(key => delete forceRefreshDates[key]);\n }\n };\n\n const buildLocalAnalysis = (allReadings) => {\n const groupAnalysis = performGroupAnalysis(allReadings);\n const systolicValues = allReadings.map((r) => r.systolic);\n const diastolicValues = allReadings.map((r) => r.diastolic);\n const avgSys = systolicValues.reduce((a, b) => a + b, 0) / systolicValues.length;\n const avgDia = diastolicValues.reduce((a, b) => a + b, 0) / diastolicValues.length;\n const score = calculateHealthScore(avgSys, avgDia);\n return {\n clinicalAnalysis: {\n stability: '一般',\n trend: '平稳',\n quality: '良好',\n analysis: `基于${allReadings.length}次读数的本地基础分析。`,\n recommendations: '请保持健康生活方式,定期监测血压。',\n dimensions: {},\n overall_summary: {},\n usage: {},\n fallback_reason: 'AI分析未完成。当前为本地算法基础估算。',\n },\n groupAnalysis,\n bpHealthScore: {\n totalScore: score,\n healthLevel: getHealthStatus(score),\n clinicalJudgment: '基础评分(本地分析)',\n dimensions: {},\n analysis: `血压均值: ${avgSys.toFixed(1)}/${avgDia.toFixed(1)}mmHg`,\n recommendations: '请保持健康生活方式,定期监测血压。',\n },\n };\n };\n\n const buildReportSummaries = () => {\n const reports = [];\n const dateMap = {};\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 dateMapCache = dateMap;\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 const healthScore = calculateHealthScore(avgSystolic, avgDiastolic);\n const healthStatus = getHealthStatus(healthScore);\n\n let measurementMode;\n if (measurementsList.length === 1) measurementMode = '一天只有一组数据';\n else if (measurementsList.length === 2) measurementMode = '一天只有早晚两组数据';\n else measurementMode = '一天最多只有三组数据';\n\n const cached = aiCache[dateKey];\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: cached?.clinicalAnalysis || null,\n groupAnalysis: cached?.groupAnalysis || null,\n bpHealthScore: cached?.bpHealthScore || null,\n queryCount: cached?.queryCount || 0,\n _aiLoaded: !!cached,\n });\n }\n }\n\n dailyReports.value = reports.sort((a, b) => new Date(b.date) - new Date(a.date));\n };\n\n const loadAIForReport = async (dateKey) => {\n const idx = dailyReports.value.findIndex(r => r.date === dateKey);\n if (idx < 0) return;\n\n const forced = !!forceRefreshDates[dateKey];\n const useAI = !!selectedAIQueries[dateKey] || forced;\n\n loadingDates.add(dateKey);\n analysisLoading.value = true;\n sessionStorage.setItem('bp_loading_date', dateKey);\n\n try {\n if (useAI) {\n const csrfToken = document.querySelector('meta[name=\"csrf-token\"]')?.getAttribute('content') || '';\n const resp = await fetch('/api/ai_blood_pressure/batch_analyze', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-CSRF-Token': csrfToken,\n },\n body: JSON.stringify({\n dates: [dateKey],\n force_refresh_dates: forced ? [dateKey] : [],\n }),\n });\n\n if (!resp.ok) {\n console.error('[AI-BP] 单日分析请求失败:', resp.status);\n return;\n }\n\n const data = await resp.json();\n const results = data.results || {};\n const result = results[dateKey];\n if (!result) return;\n\n const clinicalAnalysis = result.clinical_analysis || { dimensions: {} };\n const bpHealthScore = result.health_score || {};\n\n if (clinicalAnalysis?.dimensions && Object.keys(clinicalAnalysis.dimensions).length > 0) {\n const weightedScore = calculateWeightedHealthScore(clinicalAnalysis.dimensions);\n if (weightedScore != null) {\n bpHealthScore.totalScore = weightedScore;\n bpHealthScore.healthLevel = getWeightedHealthLevel(weightedScore);\n }\n }\n\n const prevQueryCount = (aiCache[dateKey]?.queryCount || 0) + 1;\n const report = dailyReports.value[idx];\n aiCache[dateKey] = { clinicalAnalysis, bpHealthScore, queryCount: prevQueryCount };\n\n dailyReports.value[idx] = {\n ...report,\n clinicalAnalysis,\n bpHealthScore,\n queryCount: prevQueryCount,\n _aiLoaded: true,\n _aiRequested: true,\n };\n } else {\n const measurementsList = dateMapCache[dateKey];\n if (!measurementsList || measurementsList.length === 0) return;\n\n const allReadings = [];\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) return;\n\n const localResult = buildLocalAnalysis(allReadings);\n const prevQueryCount = (aiCache[dateKey]?.queryCount || 0) + 1;\n const report = dailyReports.value[idx];\n aiCache[dateKey] = { ...localResult, queryCount: prevQueryCount };\n\n dailyReports.value[idx] = {\n ...report,\n ...localResult,\n queryCount: prevQueryCount,\n _aiLoaded: true,\n _aiRequested: false,\n };\n }\n } catch (e) {\n console.error('[AI-BP] 分析失败:', e);\n } finally {\n analysisLoading.value = false;\n loadingDates.delete(dateKey);\n sessionStorage.removeItem('bp_loading_date');\n delete selectedAIQueries[dateKey];\n }\n };\n\n const batchAnalyzeSelected = async () => {\n const datesToAnalyze = [];\n const forceRefreshList = [];\n\n filteredDailyReports.value.forEach(report => {\n if (!report._aiLoaded && selectedAIQueries[report.date]) {\n datesToAnalyze.push(report.date);\n } else if (report._aiLoaded && forceRefreshDates[report.date]) {\n datesToAnalyze.push(report.date);\n forceRefreshList.push(report.date);\n }\n });\n\n if (datesToAnalyze.length === 0 && forceRefreshList.length === 0) return;\n\n datesToAnalyze.forEach(d => loadingDates.add(d));\n forceRefreshList.forEach(d => loadingDates.add(d));\n\n batchLoading.value = true;\n analysisLoading.value = true;\n\n try {\n const csrfToken = document.querySelector('meta[name=\"csrf-token\"]')?.getAttribute('content') || '';\n const resp = await fetch('/api/ai_blood_pressure/batch_analyze', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-CSRF-Token': csrfToken,\n },\n body: JSON.stringify({\n dates: datesToAnalyze,\n force_refresh_dates: forceRefreshList,\n }),\n });\n\n if (!resp.ok) {\n console.error('[AI-BP] 批量分析请求失败:', resp.status);\n return;\n }\n\n const data = await resp.json();\n const results = data.results || {};\n\n Object.entries(results).forEach(([dateKey, result]) => {\n const idx = dailyReports.value.findIndex(r => r.date === dateKey);\n if (idx < 0) return;\n\n const report = dailyReports.value[idx];\n const clinicalAnalysis = result.clinical_analysis || { dimensions: {} };\n const bpHealthScore = result.health_score || {};\n\n if (clinicalAnalysis?.dimensions && Object.keys(clinicalAnalysis.dimensions).length > 0) {\n const weightedScore = calculateWeightedHealthScore(clinicalAnalysis.dimensions);\n if (weightedScore != null) {\n bpHealthScore.totalScore = weightedScore;\n bpHealthScore.healthLevel = getWeightedHealthLevel(weightedScore);\n }\n }\n\n const prevQueryCount = (aiCache[dateKey]?.queryCount || 0) + 1;\n aiCache[dateKey] = { clinicalAnalysis, groupAnalysis: performGroupAnalysis([]), bpHealthScore, queryCount: prevQueryCount };\n\n dailyReports.value[idx] = {\n ...report,\n clinicalAnalysis,\n bpHealthScore,\n queryCount: prevQueryCount,\n _aiLoaded: true,\n _aiRequested: true,\n };\n });\n\n Object.keys(selectedAIQueries).forEach(key => delete selectedAIQueries[key]);\n Object.keys(forceRefreshDates).forEach(key => delete forceRefreshDates[key]);\n await refreshCacheStatus();\n } catch (e) {\n console.error('[AI-BP] 批量分析失败:', e);\n } finally {\n datesToAnalyze.forEach(d => loadingDates.delete(d));\n forceRefreshList.forEach(d => loadingDates.delete(d));\n batchLoading.value = false;\n analysisLoading.value = false;\n }\n };\n\n const analyzeData = () => {\n statistics.value = null;\n if (!startDate.value && !endDate.value) return;\n\n const filteredMeasurements = measurements.value.filter((measurement) =>\n isDateInRange(measurement.measured_at)\n );\n\n if (filteredMeasurements.length === 0) {\n statistics.value = null;\n return;\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 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 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 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 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 const stabilityScore = 10 - (stdSystolic / 10 + stdDiastolic / 8);\n\n const systolicDistribution = {};\n const diastolicDistribution = {};\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 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 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 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 const selectDailyReport = (report) => {\n selectedDailyReport.value = report;\n analyzeData();\n };\n\n const refreshCacheStatus = async () => {\n try {\n const resp = await fetch('/api/ai_blood_pressure/cached_status');\n if (!resp.ok) return;\n const data = await resp.json();\n const dates = data.dates || {};\n dailyReports.value.forEach((report) => {\n const status = dates[report.date];\n if (status) {\n if (status.queryCount > 0) {\n report.queryCount = status.queryCount;\n if (status.clinicalAnalysis) {\n report.clinicalAnalysis = status.clinicalAnalysis;\n report._aiLoaded = true;\n report._aiRequested = true;\n }\n if (status.healthScore) {\n report.bpHealthScore = status.healthScore;\n }\n }\n if (!aiCache[report.date]) {\n aiCache[report.date] = {\n queryCount: status.queryCount || 0,\n clinicalAnalysis: status.clinicalAnalysis || null,\n bpHealthScore: status.healthScore || null\n };\n }\n }\n });\n } catch (e) {\n console.error('[AI-BP] 缓存状态刷新失败:', e);\n }\n };\n\n const fetchPromptPreview = async (date) => {\n try {\n const csrfToken = document.querySelector('meta[name=\"csrf-token\"]')?.getAttribute('content') || '';\n const resp = await fetch(`/api/ai_blood_pressure/prompt_preview?date=${date}`, {\n headers: { 'X-CSRF-Token': csrfToken },\n });\n if (!resp.ok) {\n const errData = await resp.json().catch(() => ({}));\n throw new Error(errData.error || `请求失败: ${resp.status}`);\n }\n return await resp.json();\n } catch (e) {\n console.error('[AI-BP] 获取prompt预览失败:', e);\n throw e;\n }\n };\n\n onMounted(async () => {\n buildReportSummaries();\n await refreshCacheStatus();\n\n const savedLoadingDate = sessionStorage.getItem('bp_loading_date');\n if (savedLoadingDate) {\n loadingDates.add(savedLoadingDate);\n }\n });\n\n watch(\n () => measurements.value,\n async () => {\n buildReportSummaries();\n await refreshCacheStatus();\n },\n { deep: true }\n );\n\n return {\n startDate,\n endDate,\n selectedDailyReport,\n dailyReports,\n filteredDailyReports,\n statistics,\n chartData,\n chartOptions,\n analyzeData,\n selectDailyReport,\n buildReportSummaries,\n loadAIForReport,\n analysisLoading,\n analysisError,\n loadingDates,\n forceRefreshDates,\n selectedAIQueries,\n batchLoading,\n hasAnySelected,\n toggleAIQuery,\n toggleSelectAll,\n batchAnalyzeSelected,\n validateDateRange,\n refreshCacheStatus,\n fetchPromptPreview,\n };\n}\n","\n\n\n\n\n"],"mappings":"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"}