diff --git a/frontend/src/renderer/main/main.js b/frontend/src/renderer/main/main.js index 40af771f..dcfd2645 100644 --- a/frontend/src/renderer/main/main.js +++ b/frontend/src/renderer/main/main.js @@ -189,8 +189,8 @@ function stopBackendService() { function createWindow() { splashWindow = new BrowserWindow({ - width: 480, - height: 320, + width: 1920, + height: 1080, frame: false, resizable: false, alwaysOnTop: true, diff --git a/frontend/src/renderer/src/assets/archive/pitch.png b/frontend/src/renderer/src/assets/archive/pitch.png index 3d1a415c..ddce3d55 100644 Binary files a/frontend/src/renderer/src/assets/archive/pitch.png and b/frontend/src/renderer/src/assets/archive/pitch.png differ diff --git a/frontend/src/renderer/src/assets/archive/pitch111.png b/frontend/src/renderer/src/assets/archive/pitch111.png new file mode 100644 index 00000000..3d1a415c Binary files /dev/null and b/frontend/src/renderer/src/assets/archive/pitch111.png differ diff --git a/frontend/src/renderer/src/assets/archive/roll.png b/frontend/src/renderer/src/assets/archive/roll.png index 5e1ad141..8e432ff2 100644 Binary files a/frontend/src/renderer/src/assets/archive/roll.png and b/frontend/src/renderer/src/assets/archive/roll.png differ diff --git a/frontend/src/renderer/src/assets/archive/roll1.png b/frontend/src/renderer/src/assets/archive/roll1.png new file mode 100644 index 00000000..5e1ad141 Binary files /dev/null and b/frontend/src/renderer/src/assets/archive/roll1.png differ diff --git a/frontend/src/renderer/src/assets/archive/yaw.png b/frontend/src/renderer/src/assets/archive/yaw.png index 0911eaf1..04e5f0f8 100644 Binary files a/frontend/src/renderer/src/assets/archive/yaw.png and b/frontend/src/renderer/src/assets/archive/yaw.png differ diff --git a/frontend/src/renderer/src/assets/archive/yaw11.png b/frontend/src/renderer/src/assets/archive/yaw11.png new file mode 100644 index 00000000..0911eaf1 Binary files /dev/null and b/frontend/src/renderer/src/assets/archive/yaw11.png differ diff --git a/frontend/src/renderer/src/views/AloneReportComparison.vue b/frontend/src/renderer/src/views/AloneReportComparison.vue index 224dac9f..6ab6fa83 100644 --- a/frontend/src/renderer/src/views/AloneReportComparison.vue +++ b/frontend/src/renderer/src/views/AloneReportComparison.vue @@ -8,46 +8,50 @@ @click="generatePDF">
-
+
体态测量报告单对比
-
+
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 }}
+
+ 电话:{{ selectedPatient.phone }} +
+ +
+ 邮箱:{{ selectedPatient.email }} +
+ +
+ 居住地:{{ selectedPatient.residence }} +
+
【检测数据】
@@ -66,7 +70,7 @@
身体姿态
+ style="width: 99%;height: 454px; object-fit:contain; ">
头部姿态
@@ -74,7 +78,7 @@
-
+
左: {{headPoseMaxValuesLeft.rotationLeftMax}}° @@ -86,7 +90,7 @@ {{headPoseMaxValuesLeft.pitchDownMax}}°
-
+
右: {{headPoseMaxValuesLeft.rotationRightMax}}°
@@ -140,7 +144,7 @@
身体姿态
+ style="width: 99%;height: 454px; object-fit:contain;">
头部姿态
@@ -214,7 +218,7 @@ import { ref, onMounted, onUnmounted } from 'vue' import { historyAPI,getBackendUrl } from '@/services/api.js' import { ElMessage } from 'element-plus' - +import dayjs from 'dayjs'; const emit = defineEmits([ 'closeAloneReportComparison' ]); const props = defineProps({ selectedPatient: { @@ -339,7 +343,7 @@ const generatePDF = async () => { const url = URL.createObjectURL(blob) const a = document.createElement('a') a.href = url - a.download = '对比报告' + a.download = '体态测量对比报告单-' + dayjs().format('YYYY-MM-DD HH:mm:ss') document.body.appendChild(a) a.click() document.body.removeChild(a) @@ -447,12 +451,13 @@ function handleCancel(){ display: flex; } .AloneReportComparison-container-leftbox{ - width: 50%; + width: calc(50% - 5px); border-right:1px solid rgb(208, 208, 208) ; box-sizing: border-box; } .AloneReportComparison-container-rightbox{ - width: 50%; + margin-left: 10px; + width: calc(50% - 5px); box-sizing: border-box; } .displayflex{ @@ -621,19 +626,6 @@ function handleCancel(){ background-color: white !important; } - /* 左右分栏调整 */ - .AloneReportComparison-container-leftbox, - .AloneReportComparison-container-rightbox { - width: 49% !important; - display: inline-block !important; - vertical-align: top !important; - box-sizing: border-box !important; - margin: 0 !important; - padding: 0 10px !important; - border: none !important; - /* 允许分栏内部内容自然分页 */ - break-inside: auto !important; - } .AloneReportComparison-container-leftbox { border-right: 1px solid #ccc !important; @@ -661,26 +653,19 @@ function handleCancel(){ padding-bottom: 10px !important; } - .AloneReportComparison-container-display, + /* .AloneReportComparison-container-display, .AloneReportComparison-container-userinfodisplay { padding: 10px 0 !important; - } - - .AloneReportComparison-container-userinfotext2 { - font-size: 14px !important; - width: auto !important; - margin-right: 20px !important; - padding-bottom: 5px !important; - } + } */ /* 标题字号调整 */ - .AloneReportComparison-content-title, + /* .AloneReportComparison-content-title, .AloneReportComparison-container-testdatatitle, .AloneReportComparison-title2 { font-size: 16px !important; padding-top: 10px !important; padding-bottom: 5px !important; - } + } */ /* 分页控制 */ .AloneReportComparison-content-title { @@ -703,6 +688,7 @@ function handleCancel(){ padding-top: 40px; border-top: 1px solid #333; display: flex; + justify-content: space-between; font-weight: 700; font-style: normal; color: rgb(40, 40, 40); diff --git a/frontend/src/renderer/src/views/Dashboard.vue b/frontend/src/renderer/src/views/Dashboard.vue index 948f54ac..9f636de1 100644 --- a/frontend/src/renderer/src/views/Dashboard.vue +++ b/frontend/src/renderer/src/views/Dashboard.vue @@ -23,6 +23,7 @@
@@ -276,23 +277,7 @@ const userInfo = reactive({ avatar: '' }) const tableRef = ref(null) -const dialogVisible = ref(false) -// 表单引用 -const patientForm = ref({ - id: '', - name: '', - gender: '', - birth_date: '', - nationality: '', - residence: '', - height: '', - weight: '', - shoe_size: '', - phone: '', - occupation: '', - idcode: '', - email: '' -}) + const calculatedAge = ref('') function delRowClick(id){ tipType.value = '删除' @@ -413,14 +398,6 @@ const getStatusType = (lastDetection) => { return 'danger' } -const getStatusText = (lastDetection) => { - if (!lastDetection) return '未检测' - const daysDiff = Math.floor((Date.now() - new Date(lastDetection).getTime()) / (1000 * 60 * 60 * 24)) - if (daysDiff === 0) return '今日检测' - if (daysDiff <= 7) return `${daysDiff}天前` - if (daysDiff <= 30) return `${daysDiff}天前` - return '超过30天' -} const formatDate = (date) => { const d = new Date(date) @@ -445,7 +422,7 @@ const calculateAge = (birthDate) => { const size =ref(15) const page =ref(1) const search = ref("") -const loadPatients = async () => { +const loadPatients = async (type) => { try { const response = await patientAPI.getPatients({ page:page.value, @@ -465,6 +442,9 @@ const loadPatients = async () => { const lastcheck = mh && mh.lastcheck_time ? mh.lastcheck_time : '' return { ...p, doctor, status, updated_at: lastcheck || p.updated_at } }) + if(type === '02' && patients.value[rowIndex.value] != null){ + tableRef.value?.setCurrentRow(patients.value[rowIndex.value], true); // 第二个参数为 true 表示选中 + } patienttotal.value =response.data.total } else if (Array.isArray(response.data)) { patients.value = (response.data || []).map(p => { @@ -477,6 +457,9 @@ const loadPatients = async () => { const lastcheck = mh && mh.lastcheck_time ? mh.lastcheck_time : '' return { ...p, doctor, status, updated_at: lastcheck || p.updated_at } }) + if(type === '02' && patients.value[rowIndex.value] != null){ + tableRef.value?.setCurrentRow(patients.value[rowIndex.value], true); // 第二个参数为 true 表示选中 + } patienttotal.value =response.total } else { patients.value = [] @@ -534,16 +517,18 @@ function closecreatbox(e,e2){ patients.value[rowIndex.value] = { ...patients.value[rowIndex.value], ...e2 } } selectedPatient.value = e2 - loadPatients() + loadPatients('02') } isCloseCreat.value = false } function endChange(){ + loadPatients('02') isDetection.value = false } function closePatientProfile(){ + loadPatients('02') isPatientProfile.value =false } function handleCurrentChange (val) { diff --git a/frontend/src/renderer/src/views/Detection.vue b/frontend/src/renderer/src/views/Detection.vue index 0a0bfa09..5a017850 100644 --- a/frontend/src/renderer/src/views/Detection.vue +++ b/frontend/src/renderer/src/views/Detection.vue @@ -2087,7 +2087,7 @@ const startRecord = async () => { // 开始录屏 patientInfo.value.detectionStartTime = Date.now() console.log('✅ 录屏会话创建成功,会话ID:', patientInfo.value.sessionId) isRecording.value = true - ElMessage.success('录屏已开始') + // ElMessage.success('录屏已开始') } else { throw new Error(result.message || '开始录屏失败') } diff --git a/frontend/src/renderer/src/views/Detection_bak.vue b/frontend/src/renderer/src/views/Detection_bak.vue index 66c6b64d..906b3d8e 100644 --- a/frontend/src/renderer/src/views/Detection_bak.vue +++ b/frontend/src/renderer/src/views/Detection_bak.vue @@ -2137,7 +2137,6 @@ const startRecord = async () => { // 开始录屏 patientInfo.value.detectionStartTime = Date.now() console.log('✅ 录屏会话创建成功,会话ID:', patientInfo.value.sessionId) isRecording.value = true - ElMessage.success('录屏已开始') } else { throw new Error(result.message || '开始录屏失败') } diff --git a/frontend/src/renderer/src/views/GenerateReport.vue b/frontend/src/renderer/src/views/GenerateReport.vue index 1cb7b819..c7997592 100644 --- a/frontend/src/renderer/src/views/GenerateReport.vue +++ b/frontend/src/renderer/src/views/GenerateReport.vue @@ -77,7 +77,7 @@
-
+
左: {{headPoseMaxValuesLeft.rotationLeftMax}}° @@ -89,7 +89,7 @@ {{headPoseMaxValuesLeft.pitchDownMax}}°
-
+
右: {{headPoseMaxValuesLeft.rotationRightMax}}°
@@ -144,7 +144,7 @@
-
+
左: {{headPoseMaxValuesRight.rotationLeftMax}}° @@ -156,7 +156,7 @@ {{headPoseMaxValuesRight.pitchDownMax}}°
-
+
右: {{headPoseMaxValuesRight.rotationRightMax}}°
diff --git a/frontend/src/renderer/src/views/ImageDetails.vue b/frontend/src/renderer/src/views/ImageDetails.vue index a0e61cb3..560ba0b3 100644 --- a/frontend/src/renderer/src/views/ImageDetails.vue +++ b/frontend/src/renderer/src/views/ImageDetails.vue @@ -21,7 +21,7 @@
-
+
左: {{headPoseMaxValuesRight.rotationLeftMax}}° @@ -33,7 +33,7 @@ {{headPoseMaxValuesRight.pitchDownMax}}°
-
+
右: {{headPoseMaxValuesRight.rotationRightMax}}°
diff --git a/frontend/src/renderer/src/views/ImageDetailsCompare.vue b/frontend/src/renderer/src/views/ImageDetailsCompare.vue index 4edcdeb1..0094c865 100644 --- a/frontend/src/renderer/src/views/ImageDetailsCompare.vue +++ b/frontend/src/renderer/src/views/ImageDetailsCompare.vue @@ -40,7 +40,7 @@
-
+
左: {{headPoseMaxValuesLeft.rotationLeftMax}}° @@ -52,7 +52,7 @@ {{headPoseMaxValuesLeft.pitchDownMax}}°
-
+
右: {{headPoseMaxValuesLeft.rotationRightMax}}°
@@ -78,7 +78,7 @@
-
+
左: {{headPoseMaxValuesRight.rotationLeftMax}}° @@ -90,7 +90,7 @@ {{headPoseMaxValuesRight.pitchDownMax}}°
-
+
右: {{headPoseMaxValuesRight.rotationRightMax}}°
diff --git a/frontend/src/renderer/src/views/PatientProfile.vue b/frontend/src/renderer/src/views/PatientProfile.vue index acedd552..374bded8 100644 --- a/frontend/src/renderer/src/views/PatientProfile.vue +++ b/frontend/src/renderer/src/views/PatientProfile.vue @@ -1242,11 +1242,12 @@ historyAPI.VideoDelById(ids).then((response)=>{ height: 24px; margin-top: 5px; cursor: pointer; + margin-left: 4px; } .patientprofile-del{ position: absolute; - left: -5px; + right: -10px; top: -5px; display: none; z-index: 1; diff --git a/frontend/src/renderer/src/views/PatientProfile2.vue b/frontend/src/renderer/src/views/PatientProfile2.vue index e8990385..a48099d9 100644 --- a/frontend/src/renderer/src/views/PatientProfile2.vue +++ b/frontend/src/renderer/src/views/PatientProfile2.vue @@ -699,17 +699,7 @@ const loadPatientInfo = async () => { } catch (error) { console.error('加载患者信息失败:', error) // 模拟数据 - patient.value = { - id: route.params.id, - name: '张三', - gender: '男', - age: 45, - height: 175, - weight: 70, - phone: '13800138001', - doctor: '李医生', - createdAt: '2024-01-15T10:30:00Z' - } + patient.value = {} } } diff --git a/frontend/src/renderer/src/views/PopUpOnlyReport.vue b/frontend/src/renderer/src/views/PopUpOnlyReport.vue index 0e766324..a986b4d3 100644 --- a/frontend/src/renderer/src/views/PopUpOnlyReport.vue +++ b/frontend/src/renderer/src/views/PopUpOnlyReport.vue @@ -4,46 +4,49 @@ alt="" style="cursor: pointer;position: fixed; right: 20px; top: 20px;z-index: 99;" @click="handleCancel">
-
+
体态测量报告单
检测时间:{{ 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 }}
+
+ 电话:{{ selectedPatient.phone }} +
+
+ 邮箱:{{ selectedPatient.email }} +
+
+ 居住地:{{ selectedPatient.residence }} +
+
【检测数据】
@@ -61,10 +64,9 @@
身体姿态
-
- -
+ +
头部姿态
@@ -350,7 +352,7 @@ function handleCancel(){ } .PopUpOnlyReport-container-body{ margin:20px auto 0; - width: 1600px; + width: 1048px; background: #fff; border-radius: 5px; padding: 50px 0 20px; @@ -538,9 +540,140 @@ function handleCancel(){ padding-top: 40px; border-top: 1px solid #333; display: flex; + justify-content: space-between; font-weight: 700; font-style: normal; color: rgb(40, 40, 40); font-size: 18px; } - \ No newline at end of file + + + diff --git a/frontend/src/renderer/src/views/PopUpReport.vue b/frontend/src/renderer/src/views/PopUpReport.vue index 41399958..a1a596b6 100644 --- a/frontend/src/renderer/src/views/PopUpReport.vue +++ b/frontend/src/renderer/src/views/PopUpReport.vue @@ -4,46 +4,50 @@ alt="" style="cursor: pointer;position: fixed; right: 20px; top: 20px;z-index: 99;" @click="handleCancel">
-
+
体态测量报告单
检测时间:{{ 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 }}
+
+ 电话:{{ selectedPatient.phone }} +
+ +
+ 邮箱:{{ selectedPatient.email }} +
+ +
+ 居住地:{{ selectedPatient.residence }} +
+
【检测数据】
@@ -57,20 +61,20 @@
整体数据
-
+
身体姿态
+ style="width: 99%;height: 454px; object-fit:contain; ">
头部姿态
-
+
-
+
左: {{headPoseMaxValuesLeft.rotationLeftMax}}° @@ -82,7 +86,7 @@ {{headPoseMaxValuesLeft.pitchDownMax}}°
-
+
右: {{headPoseMaxValuesLeft.rotationRightMax}}°
@@ -98,16 +102,16 @@
足底压力
-
+
视频1图片
-
+
视频2图片
-
+
@@ -122,19 +126,20 @@
整体数据
-
- +
+
身体姿态
+ style="width: 99%;height: 454px; object-fit:contain; ">
头部姿态
-
+
-
+
左: {{headPoseMaxValuesRight.rotationLeftMax}}° @@ -146,7 +151,7 @@ {{headPoseMaxValuesRight.pitchDownMax}}°
-
+
右: {{headPoseMaxValuesRight.rotationRightMax}}°
@@ -162,16 +167,16 @@
足底压力
-
+
视频1图片
-
+
视频2图片
-
+
@@ -364,7 +369,7 @@ function getFormattedTime() { } .PopUpReport-container-body{ margin:20px auto 0; - width: 1600px; + width: 1048px; background: #fff; border-radius: 5px; padding: 20px 0 30px; @@ -432,14 +437,14 @@ function getFormattedTime() { display: flex; } .PopUpReport-container-leftbox{ - width: 50%; + width: calc(50% - 5px); border-right:1px solid rgb(208, 208, 208) ; box-sizing: border-box; } .PopUpReport-container-rightbox{ - width: 50%; + margin-left: 10px; + width: calc(50% - 5px); box-sizing: border-box; - padding-left: 80px; } .displayflex{ display: flex; @@ -607,23 +612,6 @@ function getFormattedTime() { background-color: white !important; } - /* 左右分栏调整 */ - .PopUpReport-container-leftbox, - .PopUpReport-container-rightbox { - width: 49% !important; - display: inline-block !important; - vertical-align: top !important; - box-sizing: border-box !important; - margin: 0 !important; - padding: 0 10px !important; - border: none !important; - /* 允许分栏内部内容自然分页 */ - break-inside: auto !important; - } - - .PopUpReport-container-leftbox { - border-right: 1px solid #ccc !important; - } /* 图片容器自适应 */ .PopUpReport-container-body div[style*="width: 600px"] { @@ -652,12 +640,12 @@ function getFormattedTime() { padding: 10px 0 !important; } - .PopUpReport-container-userinfotext2 { + /* .PopUpReport-container-userinfotext2 { font-size: 14px !important; width: auto !important; margin-right: 20px !important; padding-bottom: 5px !important; - } + } */ /* 标题字号调整 */ .PopUpReport-content-title, @@ -689,6 +677,7 @@ function getFormattedTime() { padding-top: 40px; border-top: 1px solid #333; display: flex; + justify-content: space-between; font-weight: 700; font-style: normal; color: rgb(40, 40, 40); diff --git a/frontend/src/renderer/src/views/ReportComparison.vue b/frontend/src/renderer/src/views/ReportComparison.vue index 3bb315b5..f7f43057 100644 --- a/frontend/src/renderer/src/views/ReportComparison.vue +++ b/frontend/src/renderer/src/views/ReportComparison.vue @@ -7,44 +7,48 @@ style="cursor: pointer;position: fixed; right: 60px; top: 17px;z-index: 99;height: 28px;" @click="generatePDF">
-
+
体态测量报告单对比
-
+
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 }}
@@ -356,7 +360,7 @@ import { ref, onMounted, onUnmounted } from 'vue' import { historyAPI,getBackendUrl } from '@/services/api.js' import { ElMessage } from 'element-plus' - +import dayjs from 'dayjs'; const emit = defineEmits([ 'closeReportComparison' ]); const props = defineProps({ selectedPatient: { @@ -536,7 +540,7 @@ const generatePDF = async () => { const url = URL.createObjectURL(blob) const a = document.createElement('a') a.href = url - a.download = '对比报告' + a.download = '体态测量对比报告单-' + dayjs().format('YYYY-MM-DD HH:mm:ss') document.body.appendChild(a) a.click() document.body.removeChild(a) @@ -904,6 +908,7 @@ function handleCancel(){ padding-top: 40px; border-top: 1px solid #333; display: flex; + justify-content: space-between; font-weight: 700; font-style: normal; color: rgb(40, 40, 40);