From 6d4c22d3f4393d074ee6ac21d8e43eb9b4467347 Mon Sep 17 00:00:00 2001
From: limengnan <420004014@qq.com>
Date: Thu, 21 Aug 2025 18:33:16 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=AE=9E=E6=97=B6=E6=A3=80?=
=?UTF-8?q?=E6=9F=A5=E4=BF=9D=E5=AD=98=E6=96=B9=E6=B3=95=EF=BC=8C=E6=B7=BB?=
=?UTF-8?q?=E5=8A=A0=E5=88=A0=E9=99=A4=E5=8E=86=E5=8F=B2=E6=A3=80=E6=9F=A5?=
=?UTF-8?q?=E6=96=B9=E6=B3=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
frontend/src/renderer/src/services/api.js | 18 ++-
frontend/src/renderer/src/views/Detection.vue | 46 ++++---
.../src/renderer/src/views/PatientProfile.vue | 113 +++++++++---------
3 files changed, 97 insertions(+), 80 deletions(-)
diff --git a/frontend/src/renderer/src/services/api.js b/frontend/src/renderer/src/services/api.js
index 1c471ff8..dc470627 100644
--- a/frontend/src/renderer/src/services/api.js
+++ b/frontend/src/renderer/src/services/api.js
@@ -13,7 +13,7 @@ api.interceptors.request.use(
if (window.electronAPI) {
config.baseURL = window.electronAPI.getBackendUrl()
} else {
- config.baseURL = 'http://192.168.1.173:5000'
+ config.baseURL = 'http://192.168.1.58:5000'
}
// 只为需要发送数据的请求设置Content-Type
@@ -610,16 +610,22 @@ export const historyAPI = {
// 删除检测数据记录
detectionDelById(id) {
return api.delete(`/api/detection/data/${id}`, {})
+ },
+ // 删除检测会话及其相关的检测数据
+ sessionsDelById(id) {
+ return api.delete(`api/detection/sessions/${id}`, {})
},
// 获取检测会话历史
sessionById(id) {
return api.get(`/api/history/sessions/${id}`)
},
- // detectionLatestById(id) {
- // return api.get(`/api/detection/data/detail/${id}`)
- // },
- detectionLatestById(id) {
+ //获取最新的检测数据
+ detectionLatestList(id) {
+ return api.get(`/api/detection/data/detail/${id}/latest`)
+ },
+ //根据主键ID查询检测数据详情
+ detectionById(id) {
return api.get(`/api/detection/data/detail/${id}`)
},
@@ -631,7 +637,7 @@ export const getBackendUrl = () => {
if (window.electronAPI) {
return window.electronAPI.getBackendUrl()
} else {
- return 'http://192.168.1.173:5000'
+ return 'http://192.168.1.58:5000'
}
}
diff --git a/frontend/src/renderer/src/views/Detection.vue b/frontend/src/renderer/src/views/Detection.vue
index 8105a67f..dc0d4bc0 100644
--- a/frontend/src/renderer/src/views/Detection.vue
+++ b/frontend/src/renderer/src/views/Detection.vue
@@ -64,7 +64,7 @@
+
![深度相机视频流]()
@@ -323,7 +323,7 @@
-
@@ -569,6 +572,9 @@ const dataCollectionLoading = ref(false)
const isRecording = ref(false)
const cameraDialogVisible =ref(false) // 设置相机参数弹框
+const wholeBodyRef = ref(null) // 身体姿态ref
+const videoImgRef =ref(null) // 视频流图片ref
+
// 录像相关变量
let mediaRecorder = null
let recordedChunks = []
@@ -908,6 +914,7 @@ const editPatient = () => {
}
dialogVisible.value = true
}
+const tempInfo = ref({})
// WebSocket连接函数
function connectWebSocket() {
try {
@@ -1037,25 +1044,29 @@ function connectWebSocket() {
// 监听各设备数据事件
devicesSocket.on('camera_frame', (data) => {
frameCount++
+ tempInfo.value.camera_frame = data
displayFrame(data.image)
})
- devicesSocket.on('video_frame', (data) => {
- frameCount++
- displayFrame(data.image)
- })
+ // devicesSocket.on('video_frame', (data) => {
+ // frameCount++
+ // displayFrame(data.image)
+ // })
devicesSocket.on('femtobolt_frame', (data) => {
+ tempInfo.value.femtobolt_frame = data
displayDepthCameraFrame(data.depth_image || data.image)
})
- devicesSocket.on('depth_camera_frame', (data) => {
- displayDepthCameraFrame(data.depth_image || data.image)
- })
+ // devicesSocket.on('depth_camera_frame', (data) => {
+ // displayDepthCameraFrame(data.depth_image || data.image)
+ // })
devicesSocket.on('imu_data', (data) => {
+ tempInfo.value.imu_data = data
handleIMUData(data)
})
devicesSocket.on('pressure_data', (data) => {
+ tempInfo.value.pressure_data = data
handlePressureData(data)
})
@@ -1634,11 +1645,12 @@ async function saveDetectionData() {
patientId: patientInfo.value.id,
patientName: patientInfo.value.name,
sessionId: patientInfo.value.sessionId,
- head_pose: {},
- body_pose: {},
- foot_data: {}
+ head_data: imu_data,
+ body_data: femtobolt_frame,
+ foot_data: pressure_data,
+ camera_data: camera_frame,
})
-
+ tempInfo.value
// 显示成功消息和文件路径
ElMessage.success({
message: `截图保存成功!`,
@@ -2286,6 +2298,9 @@ const getDevicesInit = async () => {
}
onMounted(() => {
+ // wholeBodyRef.value
+ console.log(wholeBodyRef.value.getBoundingClientRect())
+ console.log(videoImgRef.value.getBoundingClientRect())
// 加载患者信息
loadPatientInfo()
@@ -2301,6 +2316,7 @@ onMounted(() => {
})
onUnmounted(() => {
+
if (timerId.value) {
clearInterval(timerId.value);
}
diff --git a/frontend/src/renderer/src/views/PatientProfile.vue b/frontend/src/renderer/src/views/PatientProfile.vue
index 4afef145..136e182b 100644
--- a/frontend/src/renderer/src/views/PatientProfile.vue
+++ b/frontend/src/renderer/src/views/PatientProfile.vue
@@ -26,7 +26,7 @@
{{ item.created_at }}
最近会诊
{{ getDayNum(item.created_at,index) }}
-
+
删除
@@ -75,11 +75,11 @@
-
+
-

+
@@ -435,6 +435,10 @@ function getDayNum(date2,index){
// 转换为天数
const daysDiff = Math.floor(timeDiff / (1000 * 3600 * 24));
+
+ if(daysDiff == 0){
+ return "当天";
+ }
return daysDiff + "天";
}
@@ -544,6 +548,7 @@ const deleteScreenshot = async (screenshot) => {
}
}
+
const exportReport = async (record) => {
try {
ElMessage.info('正在生成报告...')
@@ -712,8 +717,7 @@ function editClick(row,index) {
}
//数据详情
function patientdetails(row) {
- // historyAPI.sessionById(row.id).then(res => {
- // })
+ detectionById(row)
detailsDialogVisible.value = true
}
async function handleDiagnosticInfo(status) {
@@ -776,8 +780,42 @@ const playNewVideo = () => {
videoPlayerRef.value[index].play()
}
}
+function detectionById(row) {
+ historyAPI.detectionById(row.id).then((response)=>{
+ if(response.success){
+ debugger
+ }
+ }).catch(()=>{
-const deleteClick = async (row) => {
+ })
+}
+const deleteClick = async (row,row2) => {
+ detectionLatestList(row.id)
+ ElMessageBox.confirm(
+ '确定义删除此条数据?',
+ '提示',
+ {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning',
+ }
+ ).then(() => {
+ historyAPI.detectionDelById(row2.id).then((response)=>{
+ if(response.success){
+ ElMessage.success({
+ message: response.message,
+ duration: 5000
+ });
+ sessionsInit()
+ // detectionLatestList(row.id)
+ }
+ }).catch(()=>{
+ })
+ })
+}
+
+
+const sessionsDelById = async (row) => {
ElMessageBox.confirm(
'确定义删除此条数据?',
@@ -788,7 +826,7 @@ const deleteClick = async (row) => {
type: 'warning',
}
).then(() => {
- historyAPI.detectionDelById(row.id).then((response)=>{
+ historyAPI.sessionsDelById(row.id).then((response)=>{
if(response.success){
ElMessage.success({
message: response.message,
@@ -796,63 +834,20 @@ const deleteClick = async (row) => {
});
sessionsInit()
}
-
-
}).catch(()=>{
-
})
})
+}
-
- // try {
- // // 检查是否有活跃的会话ID
- // if (!row.id) {
- // throw new Error('缺少会话Id');
+const detectionLatestList = async(id)=>{
+ const response = await historyAPI.detectionLatestList(id)
+ console.log(response)
+ // historyAPI.detectionLatestList(id).then((response)=>{
+ // if(response.success){
+ // console.log(response)
// }
-
- // // 显示确认对话框
- // await ElMessageBox.confirm(
- // '确定要删除此条数据?',
- // '警告',
- // {
- // confirmButtonText: '确定',
- // cancelButtonText: '取消',
- // type: 'warning',
- // }
- // );
-
- // // 调用后端API删除数据
- // const response = await fetch(`${BACKEND_URL}/api/detection/data/${row.id}`, {
- // method: 'DELETE',
- // headers: {
- // 'Content-Type': 'application/json'
- // },
- // });
-
- // if (!response.ok) {
- // throw new Error(`HTTP ${response.status}: ${response.statusText}`);
- // }
-
- // const result = await response.json();
- // if (result.success) {
- // ElMessage.success({
- // message: '删除成功',
- // duration: 5000
- // });
- // } else {
- // throw new Error(result.message || '删除失败');
- // }
- // } catch (error) {
- // // 如果是用户取消操作,不显示错误
- // if (error === 'cancel' || error === 'close') {
- // return;
- // }
-
- // ElMessage.error({
- // message: error.message || '删除过程中发生错误',
- // duration: 5000
- // });
- // }
+ // }).catch(()=>{
+ // })
}
// // 其他控制方法
// const togglePlayPause = () => {