diff --git a/frontend/src/renderer/src/assets/archive/close2.png b/frontend/src/renderer/src/assets/archive/close2.png
new file mode 100644
index 00000000..87d3f8ea
Binary files /dev/null and b/frontend/src/renderer/src/assets/archive/close2.png differ
diff --git a/frontend/src/renderer/src/assets/archive/leftbutton.png b/frontend/src/renderer/src/assets/archive/leftbutton.png
new file mode 100644
index 00000000..20c10abf
Binary files /dev/null and b/frontend/src/renderer/src/assets/archive/leftbutton.png differ
diff --git a/frontend/src/renderer/src/assets/archive/pitch.png b/frontend/src/renderer/src/assets/archive/pitch.png
new file mode 100644
index 00000000..3d1a415c
Binary files /dev/null and b/frontend/src/renderer/src/assets/archive/pitch.png differ
diff --git a/frontend/src/renderer/src/assets/archive/rightbutton.png b/frontend/src/renderer/src/assets/archive/rightbutton.png
new file mode 100644
index 00000000..2fb8351d
Binary files /dev/null and b/frontend/src/renderer/src/assets/archive/rightbutton.png differ
diff --git a/frontend/src/renderer/src/assets/archive/roll.png b/frontend/src/renderer/src/assets/archive/roll.png
new file mode 100644
index 00000000..5e1ad141
Binary files /dev/null and b/frontend/src/renderer/src/assets/archive/roll.png differ
diff --git a/frontend/src/renderer/src/assets/archive/selectbottom.png b/frontend/src/renderer/src/assets/archive/selectbottom.png
new file mode 100644
index 00000000..153eeb6a
Binary files /dev/null and b/frontend/src/renderer/src/assets/archive/selectbottom.png differ
diff --git a/frontend/src/renderer/src/assets/archive/yaw.png b/frontend/src/renderer/src/assets/archive/yaw.png
new file mode 100644
index 00000000..0911eaf1
Binary files /dev/null and b/frontend/src/renderer/src/assets/archive/yaw.png differ
diff --git a/frontend/src/renderer/src/assets/test.jpg b/frontend/src/renderer/src/assets/test.jpg
new file mode 100644
index 00000000..d33f84e6
Binary files /dev/null and b/frontend/src/renderer/src/assets/test.jpg differ
diff --git a/frontend/src/renderer/src/assets/test2.png b/frontend/src/renderer/src/assets/test2.png
new file mode 100644
index 00000000..69aa05c0
Binary files /dev/null and b/frontend/src/renderer/src/assets/test2.png differ
diff --git a/frontend/src/renderer/src/assets/test3.jpg b/frontend/src/renderer/src/assets/test3.jpg
new file mode 100644
index 00000000..cda8030e
Binary files /dev/null and b/frontend/src/renderer/src/assets/test3.jpg differ
diff --git a/frontend/src/renderer/src/assets/test5.png b/frontend/src/renderer/src/assets/test5.png
new file mode 100644
index 00000000..b86257a4
Binary files /dev/null and b/frontend/src/renderer/src/assets/test5.png differ
diff --git a/frontend/src/renderer/src/views/GenerateReport.vue b/frontend/src/renderer/src/views/GenerateReport.vue
new file mode 100644
index 00000000..a80a39f6
--- /dev/null
+++ b/frontend/src/renderer/src/views/GenerateReport.vue
@@ -0,0 +1,569 @@
+
+
+
+
+
+ 体态测量报告单
+
+
检测时间:{{ detectionInfo.start_time }}
+
ID:{{ detectionInfo.id }}
+
+
+
+ ID:{{ selectedPatient.id }}
+
+
+ 姓名:{{ selectedPatient.name }}
+
+
+ 性别:{{ selectedPatient.gender }}
+
+
+ 年龄:{{ calculateAge(selectedPatient.birth_date) }}岁
+
+
+ 身高:{{ selectedPatient.height }}cm
+
+
+ 体重:{{ selectedPatient.weight }}kg
+
+
+ 鞋码:{{ selectedPatient.shoe_size }}码
+
+
+ 电话:{{ selectedPatient.phone }}
+
+
+ 邮箱:{{ selectedPatient.email }}
+
+
+ 居住地:{{ selectedPatient.residence }}
+
+
+ 职业:{{ selectedPatient.occupation }}
+
+
+ 【检测数据】
+
+
+
+
选择原始数据
+
+ {{ rawData.order }}
+

+
+
+
+
+
整体数据
+
+
![]()
+
+
身体姿态
+
+
![]()
+
+
头部姿态
+
+
+
左:
+ {{headPoseMaxValuesLeft.rotationLeftMax}}°
+
+
+
左:
+ {{headPoseMaxValuesLeft.tiltLeftMax}}°
+
+
俯:
+ {{headPoseMaxValuesLeft.pitchDownMax}}°
+
+
+
+
右:
+ {{headPoseMaxValuesLeft.rotationRightMax}}°
+
+
右:
+
+ {{headPoseMaxValuesLeft.tiltRightMax}}°
+
+
+
仰:
+
+ {{headPoseMaxValuesLeft.pitchUpMax}}°
+
+
+
+
足底压力
+
+
![]()
+
+
视频1图片
+
+
![]()
+
+
视频2图片
+
+
![]()
+
+
+
+
+
+
选择矫正数据
+
+ {{ calibrationData.order }}
+

+
+
+
+
+
整体数据
+
+
![]()
+
+
身体姿态
+
+
![]()
+
+
头部姿态
+
+
+
左:
+ {{headPoseMaxValuesRight.rotationLeftMax}}°
+
+
+
左:
+ {{headPoseMaxValuesRight.tiltLeftMax}}°
+
+
俯:
+ {{headPoseMaxValuesRight.pitchDownMax}}°
+
+
+
+
右:
+ {{headPoseMaxValuesRight.rotationRightMax}}°
+
+
右:
+
+ {{headPoseMaxValuesRight.tiltRightMax}}°
+
+
+
仰:
+
+ {{headPoseMaxValuesRight.pitchUpMax}}°
+
+
+
+
足底压力
+
+
![]()
+
+
视频1图片
+
+
![]()
+
+
视频2图片
+
+
![]()
+
+
+
+
+
+ 【诊断结果】
+ 记录
+ 记录信息
+ 处理
+ 保持观察,不予处理
+ 备注
+ 备注信息
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/frontend/src/renderer/src/views/Header.vue b/frontend/src/renderer/src/views/Header.vue
index 8b39bb76..1dc7c581 100644
--- a/frontend/src/renderer/src/views/Header.vue
+++ b/frontend/src/renderer/src/views/Header.vue
@@ -281,13 +281,14 @@
}
.badge-invalid {
text-align: center;
- background-color: linear-gradient(135deg, rgba(69, 91, 123, 1) 0%, rgba(69, 91, 123, 1) 0%, rgba(55, 65, 81, 1) 100%, rgba(55, 65, 81, 1) 100%);
+ background: linear-gradient(135deg, rgba(69, 91, 123, 1) 0%, rgba(69, 91, 123, 1) 0%, rgba(55, 65, 81, 1) 100%, rgba(55, 65, 81, 1) 100%);
font-weight: 400;
font-style: normal;
color: rgb(255, 255, 255);
+ font-size:14px;
text-align: center;
}
- .badge-trial { background-color: rgba(67, 67, 67, 1); color: #949494; }
+ .badge-trial { background: rgba(67, 67, 67, 1); color: #949494; }
.badge-valid {
text-align: center;
diff --git a/frontend/src/renderer/src/views/ImageDetails.vue b/frontend/src/renderer/src/views/ImageDetails.vue
new file mode 100644
index 00000000..a73b0abf
--- /dev/null
+++ b/frontend/src/renderer/src/views/ImageDetails.vue
@@ -0,0 +1,188 @@
+
+
+
+
+
+
+
![]()
+
+
+
![]()
+
+
+
![]()
+
+
+
![]()
+
+
+
+
视频1
+
+
![]()
+
+
+
+
+
视频2
+
+
![]()
+
+
+
+
+
+
+
+
+
+
整体
+
背部
+
头部
+
足底
+
视频截图
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/frontend/src/renderer/src/views/PatientProfile.vue b/frontend/src/renderer/src/views/PatientProfile.vue
index 6e742731..9732c89d 100644
--- a/frontend/src/renderer/src/views/PatientProfile.vue
+++ b/frontend/src/renderer/src/views/PatientProfile.vue
@@ -107,8 +107,9 @@
font-style: normal;
font-size: 14px;
color: #14AAFF;
- line-height: 18px;
- cursor: pointer;">生成报告
+ line-height: 18px;
+ cursor: pointer;"
+ @click.stop="generateReport(scope.row,scope.$index)">生成报告
-
![]()
+
- {{ item.name }}
- 2025-05-12 12:12:12
+ {{ item.order }}
+ {{ item.timestamp }}
@@ -218,7 +219,6 @@
- {{ BACKEND_URL+'/' + item.screen_video.replace(/\\/g, '/') }}
@@ -226,8 +226,8 @@
- {{ item.name }}
- 2025-05-12 12:12:12
+ {{ item.order }}
+ {{ item.timestamp }}
@@ -275,12 +275,13 @@
-
+
@@ -290,6 +291,8 @@ import { useRouter, useRoute } from 'vue-router'
import { ElMessage, ElMessageBox } from 'element-plus'
import { patientAPI, detectionAPI,historyAPI,getBackendUrl } from '@/services/api.js'
import { useAuthStore } from '@/stores/index.js'
+import GenerateReport from '@/views/GenerateReport.vue'
+
const formatDate = (date) => {
return new Date(date).toLocaleDateString('zh-CN')
}
@@ -308,6 +311,8 @@ const props = defineProps({
default: false
}
})
+const detectionId = ref('') // 列表检测ID
+const isGenerateReport = ref(false) // 是否生成报告
const archiveType =ref(false)
const profileInfo = ref({}) // 患者信息
const selectedRecord = ref({})
@@ -325,12 +330,15 @@ const tempVideoList = ref([])
// tempImgList.value = [...imageList.value]
const useImgList = ref([])// 图片
const useVideoList = ref([])// 视频
-// useImgList.value =[...tempImgList.value.slice(0, 4)] // 图片
-// useVideoList.value =[...tempImgList.value.slice(0, 4)] // 视频
-
const selectedData = ref([]) // 列表选中的数据
-
+function getNo(order) {
+ if(order<10){
+ return '0'+order
+ }else{
+ return order
+ }
+}
const calculateAge = (birthDate) => { // 获取年龄
if (!birthDate) return '—'
const today = new Date()
@@ -388,7 +396,6 @@ const sessionsById = async (session_id) => {
try {
imageList.value = []
videoList.value = []
-
tempImgList.value = []
tempVideoList.value = []
useImgList.value = []
@@ -398,6 +405,12 @@ const sessionsById = async (session_id) => {
// 导出报告逻辑
const response = await historyAPI.sessionsById(session_id)
if (response.success) {
+ response.data.data.forEach((element,index) => {
+ element.order ='D-'+ (getNo(index + 1))
+ });
+ response.data.videos.forEach((element,index) => {
+ element.order ='D-'+ (getNo(index + 1))
+ });
imageList.value = response.data.data
videoList.value = response.data.videos
@@ -408,7 +421,7 @@ const sessionsById = async (session_id) => {
}else{
useImgList.value =[...tempImgList.value]
}
- if(useVideoList.value.length>4){
+ if(tempVideoList.value.length>4){
useVideoList.value =[...tempVideoList.value.slice(0, 4)]
}else{
useVideoList.value =[...tempVideoList.value]
@@ -587,6 +600,15 @@ async function handleDiagnosticInfo(status) { // 保存诊断信息
function viewPatientProfile() { // 临时方法
}
+
+function generateReport(row,index){ // 打开生成报告页面
+ // profileInfo.value = row
+ detectionId.value = row.id
+ isGenerateReport.value = true
+}
+function closeGenerateReport(){ // 关闭生成报告页面
+ isGenerateReport.value = false
+}
\ No newline at end of file