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: |
+ 57 |
+ SDANN: |
+ 0 |
+ rMSSD: |
+ 20 |
+ SDNNi: |
+ 0 |
+ pNN50: |
+ 3 |
+
+
+ | TP |
+ 5546 |
+ HFP: |
+ 1659 |
+ LFP: |
+ 2453 |
+ vLFP: |
+ 1434 |
+ uLFP: |
+ 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报告失败,请重试')
+ }
}
/** 关闭新报告查看弹窗 */