From a8d28605b1217fdfd88c76f0eb9a55ab45338e0d Mon Sep 17 00:00:00 2001 From: Flow <958079825@qq.com> Date: Fri, 15 Aug 2025 17:24:31 +0800 Subject: [PATCH] =?UTF-8?q?HRV=E6=8A=A5=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/HRV-report.html | 806 +++++++++++++++++++++++++++++++++++++ src/api/hrvdata/index.ts | 7 +- src/views/analysis/HRV.vue | 252 +++++++++++- 3 files changed, 1062 insertions(+), 3 deletions(-) create mode 100644 public/HRV-report.html diff --git a/public/HRV-report.html b/public/HRV-report.html new file mode 100644 index 0000000..5e56a77 --- /dev/null +++ b/public/HRV-report.html @@ -0,0 +1,806 @@ + + + + + + + 自主神经系统平衡检查报告 + + + + + + + +
+
+ 正在加载报告数据... +
+ + +
+
+
+ +
+
+ + + + +
+
+
+ 姓名: + 郭永生 +
+
+ 性别: + +
+
+ 年龄: + 43 +
+
+ 检查ID: + 20216991 +
+
+
+ + +
+
检查结果
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
SDNN:57SDANN:0rMSSD:20SDNNi:0pNN50:3
TP5546HFP:1659LFP:2453vLFP:1434uLFP:0.0
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
编号检查项说明检查结果
1自主神经系统活性检查自主神经系统整体的活性正常
2自主神经系统平衡度检查交感&副交感神经的平衡度优秀
3自主神经系统稳定性检查自主神经系统的稳定性正常
4抗压能力检查身体对于环境变化的适应能力优秀
5压力指数检查身体当前所受的压力程度优秀
6疲劳程度检查身体当前所处的疲劳程度正常
7心脏稳定性检查心脏的工作稳定性优秀
8焦虑程度检查身体当前所处的焦虑程度不焦虑
9抑郁程度检查身体当前所处的抑郁程度不抑郁
10睡眠调控指数检查自主神经对于睡眠的调控力优秀
11身心控制指数检查身体当前所处的放松程度17次佳
12平均心率反应监测过程中平均心率66正常
+
+ + +
+
+
+
+ +
+
+
+
+ + + +
+
+ + + + + \ No newline at end of file diff --git a/src/api/hrvdata/index.ts b/src/api/hrvdata/index.ts index e5c3df2..e3386ea 100644 --- a/src/api/hrvdata/index.ts +++ b/src/api/hrvdata/index.ts @@ -59,5 +59,10 @@ export const HrvdataApi = { // 导出自主神经系统平衡检查数据 Excel exportHrvdata: async (params) => { return await request.download({ url: `/system/hrvdata/export-excel`, params }) + }, + + //根据examid查询自主神经系统平衡检查数据 + getHrvdataByExamid: async (examid: string) => { + return await request.get({ url: `/system/hrvdata/getByExamid?examid=` + examid }) } -} \ No newline at end of file +} diff --git a/src/views/analysis/HRV.vue b/src/views/analysis/HRV.vue index 83042a5..5c156fe 100644 --- a/src/views/analysis/HRV.vue +++ b/src/views/analysis/HRV.vue @@ -576,6 +576,7 @@ import { getUserProfile, ProfileVO } from '@/api/system/user/profile' import { uploadFileInChunks } from '@/utils/upload' import { OrgApi } from '@/api/org' import { HrvApi, HrvVO } from '@/api/hrv' +import { HrvdataApi } from '@/api/hrvdata' defineOptions({ name: 'AnalysisHRV' }) const Profilevo = ref({} as ProfileVO) //当前登录人信息 @@ -1019,7 +1020,94 @@ const resetQuery = () => { /** 分析 */ const handleAnalysis = async (row) => { - // TODO: 实现分析功能 + try { + const examid = row.examid + if (!examid) { + ElMessage.warning('检查ID不能为空') + return + } + + const loading = ElLoading.service({ + lock: true, + text: '正在获取检查数据...', + background: 'rgba(0, 0, 0, 0.7)' + }) + + try { + // 根据examid查询自主神经系统平衡检查数据 + const res = await HrvdataApi.getHrvdataPage({ examid: examid, pageNo: 1, pageSize: 1 }) + if (res && res.list && res.list.length > 0) { + const hrvData = res.list[0] + console.log('获取到的HRV数据:', hrvData) + + // 打开报告页面并传递数据 + openHrvReport(hrvData, row) + ElMessage.success('数据获取成功,正在生成报告') + } else { + ElMessage.warning('未找到相关检查数据') + } + } finally { + loading.close() + } + } catch (error) { + console.error('分析过程中出错:', error) + ElMessage.error('分析失败,请稍后重试') + } +} + +/** 打开HRV报告页面 */ +const openHrvReport = (hrvData, patientData) => { + // 构造报告数据 + const reportData = { + patientInfo: { + name: patientData.name || '', + gender: patientData.gender === '1' ? '男' : patientData.gender === '2' ? '女' : '未知', + age: patientData.age || '', + examId: patientData.examid || hrvData.examid || '' + }, + resultsData: { + SDNN: String(hrvData.sdnn || '0'), + SDANN: String(hrvData.sdann || '0'), + rMSSD: String(hrvData.rmssd || '0'), + SDNNi: String(hrvData.sdnni || '0'), + pNN50: String(hrvData.pnn50 || '0'), + TP: String(hrvData.tp || '0'), + HFP: String(hrvData.hfp || '0'), + LFP: String(hrvData.lfp || '0'), + vLFP: String(hrvData.vlfp || '0'), + uLFP: String(hrvData.ulfp || '0.0') + }, + analysisResults: [ + hrvData.ansActivity || '正常', + hrvData.ansBalance || '正常', + hrvData.ansStability || '正常', + hrvData.stressResistance || '正常', + hrvData.stressIndex || '正常', + hrvData.fatigueLevel || '正常', + hrvData.heartStability || '正常', + hrvData.anxietyLevel || '正常', + hrvData.depressionLevel || '正常', + hrvData.sleepControl || '正常', + hrvData.bodyMindControl || '正常', + hrvData.avgHeartRate || '正常' + ], + chartData: { + TP: parseInt(hrvData.tp) || 0, + VLF: parseInt(hrvData.vlfp) || 0, + LF: parseInt(hrvData.lfp) || 0, + HF: parseInt(hrvData.hfp) || 0, + SDNN: parseInt(hrvData.sdnn) || 0, + rMSSD: parseInt(hrvData.rmssd) || 0, + pNN50: parseInt(hrvData.pnn50) || 0 + } + } + + // 将数据存储到sessionStorage中 + sessionStorage.setItem('hrvReportData', JSON.stringify(reportData)) + + // 打开新窗口显示报告 + const reportUrl = '/HRV-report.html' + window.open(reportUrl, '_blank', 'width=1200,height=800,scrollbars=yes,resizable=yes') } // 文件浏览器相关方法 @@ -1372,7 +1460,167 @@ const handleApply = async (row) => { /** 查看新报告 */ const handleNewReport = async (row) => { - // TODO: 实现查看新报告功能 + try { + // 从接口获取HRV数据 + let hrvData = row + try { + // 使用API获取最新的HRV数据 + const response = await HrvdataApi.getHrvdataByExamid(row.examid) + + if (response) { + hrvData = response + } else { + console.warn('API返回数据为空,将使用传入的row数据') + } + } catch (error) { + console.error('从API获取HRV数据失败:', error) + ElMessage.warning('获取最新数据失败,将使用当前数据展示报告') + } + + // 构造报告数据 + const reportData = { + patientInfo: { + name: hrvData.name || '未知', + gender: hrvData.gender === '1' ? '男' : hrvData.gender === '2' ? '女' : '未知', + age: hrvData.age || '未知', + examId: hrvData.examid || '未知' + }, + resultsData: { + SDNN: hrvData.sdnn || '57', + SDANN: hrvData.sdann || '0', + rMSSD: hrvData.rmssd || '20', + SDNNi: hrvData.sdnni || '0', + pNN50: hrvData.pnn50 || '3', + TP: hrvData.tp || '5546', + HFP: hrvData.hfp || '1659', + LFP: hrvData.lfp || '2453', + vLFP: hrvData.vlfp || '1434', + uLFP: hrvData.ulfp || '0.0' + }, + analysisResults: [ + hrvData.ansActivity || '正常', + hrvData.ansBalance || '优秀', + hrvData.ansStability || '正常', + hrvData.stressResistance || '优秀', + hrvData.stressIndex || '优秀', + hrvData.fatigueLevel || '正常', + hrvData.heartStability || '优秀', + hrvData.anxietyLevel || '不焦虑', + hrvData.depressionLevel || '不抑郁', + hrvData.sleepControl || '优秀', + hrvData.bodyMindControl || '17次佳', + hrvData.avgHeartRate || '66正常' + ], + chartData: { + TP: parseInt(hrvData.tp) || 5546, + VLF: parseInt(hrvData.vlfp) || 1434, + LF: parseInt(hrvData.lfp) || 2453, + HF: parseInt(hrvData.hfp) || 1659, + SDNN: parseInt(hrvData.sdnn) || 57, + rMSSD: parseInt(hrvData.rmssd) || 20, + pNN50: parseInt(hrvData.pnn50) || 3, + radarData: [ + hrvData.radar1 || 3, + hrvData.radar2 || 4, + hrvData.radar3 || 3, + hrvData.radar4 || 4, + hrvData.radar5 || 4, + hrvData.radar6 || 3, + hrvData.radar7 || 4, + hrvData.radar8 || 1, + hrvData.radar9 || 1, + hrvData.radar10 || 4, + hrvData.radar11 || 2 + ] + } + } + + // 获取报告页面URL + const reportUrl = `${window.location.origin}/HRV-report.html` + + // 打开新窗口并全屏展示 + const reportWindow = window.open(reportUrl, '_blank') + + if (reportWindow) { + // 全屏展示 + reportWindow.moveTo(0, 0) + reportWindow.resizeTo(screen.availWidth, screen.availHeight) + + let dataTransferred = false + + // 监听来自报告窗口的消息 + const messageHandler = (event) => { + if ( + event.source === reportWindow && + event.data?.type === 'HRV_TEMPLATE_LOADED' && + !dataTransferred + ) { + dataTransferred = true + // 延迟传递数据,确保页面完全准备好 + setTimeout(() => { + try { + // 创建深拷贝,避免引用问题 + const dataToSend = JSON.parse(JSON.stringify(reportData)) + reportWindow.postMessage( + { + type: 'HRV_REPORT_DATA', + data: dataToSend + }, + '*' + ) + } catch (error) { + console.error('传递数据到报告窗口失败:', error) + ElMessage.error('初始化报告数据失败,请重试') + } + }, 100) + + // 移除事件监听器 + window.removeEventListener('message', messageHandler) + } + } + + // 添加消息监听器 + window.addEventListener('message', messageHandler) + + // 备用方案:如果3秒内没有收到加载完成消息,直接尝试传递数据 + setTimeout(() => { + if (!dataTransferred) { + dataTransferred = true + try { + // 创建深拷贝,避免引用问题 + const dataToSend = JSON.parse(JSON.stringify(reportData)) + + reportWindow.postMessage( + { + type: 'HRV_REPORT_DATA', + data: dataToSend + }, + '*' + ) + } catch (error) { + console.error('备用方案传递数据失败:', error) + ElMessage.error('初始化报告数据失败,请重试') + } + window.removeEventListener('message', messageHandler) + } + }, 3000) + + // 监听窗口关闭,清理事件监听器 + const checkClosed = setInterval(() => { + if (reportWindow.closed) { + clearInterval(checkClosed) + window.removeEventListener('message', messageHandler) + } + }, 1000) + + ElMessage.success('正在打开HRV报告...') + } else { + ElMessage.error('无法打开报告窗口,请检查浏览器弹窗设置') + } + } catch (error) { + console.error('打开HRV报告失败:', error) + ElMessage.error('打开HRV报告失败,请重试') + } } /** 关闭新报告查看弹窗 */