This commit is contained in:
zhaozilong12 2025-08-07 14:38:39 +08:00
commit 27d4092e66
23 changed files with 1773 additions and 498 deletions

View File

@ -194492,3 +194492,263 @@ transform: {rot: [0.994135, -0.00252459, 0.00230278, 0.00226079, 0.994134, 0.108
[08/06 09:16:02.117816][debug][2648][DeviceManager.cpp:64] DeviceManager Destructors done
[08/06 09:16:02.118401][debug][2648][MfPal.cpp:128] WmfPal destroyed!
[08/06 09:16:02.118676][info][2648][Context.cpp:84] Context destroyed
[08/06 16:03:14.044503][debug][17676][Context.cpp:30] Context creating, work_dir=D:\Trae_space\BodyBalanceEvaluation
[08/06 16:03:14.044599][debug][17676][Context.cpp:49] Config file version=1.1
[08/06 16:03:14.044628][debug][17676][FrameBufferManager.cpp:23] Max global frame buffer size updated! size=2048.000MB
[08/06 16:03:14.044652][info][17676][Context.cpp:68] Context created with config: default config!
[08/06 16:03:14.044936][info][17676][Context.cpp:73] Work directory=D:\Trae_space\BodyBalanceEvaluation, SDK version=v1.10.11-20240724-aeaa107e5
[08/06 16:03:14.045171][debug][17676][DeviceManager.cpp:30] DeviceManager init ...
[08/06 16:03:14.045184][info][17676][MfPal.cpp:105] createObPal: create WinPal!
[08/06 16:03:14.045278][debug][17676][MfPal.cpp:110] WmfPal init ...
[08/06 16:03:14.074226][debug][17676][MfPal.cpp:117] WmfPal created!
[08/06 16:03:14.074266][debug][17676][DeviceManager.cpp:34] Enable USB Device Enumerator ...
[08/06 16:03:14.097196][debug][17676][EnumeratorLibusb.cpp:321] queryDevicesInfo done!
[08/06 16:03:14.097473][debug][17676][MfPal.cpp:216] Create WinEventDeviceWatcher!
[08/06 16:03:14.097687][debug][17676][UsbDeviceEnumerator.cpp:78] No matched usb device found!
[08/06 16:03:14.097720][info][17676][DeviceManager.cpp:15] Current found device(s): (0)
[08/06 16:03:14.097850][debug][17676][DeviceManager.cpp:52] DeviceManager construct done!
[08/06 16:03:14.097871][debug][17676][Context.cpp:81] Context destroying ...
[08/06 16:03:14.097881][debug][17676][DeviceManager.cpp:56] DeviceManager destroy ...
[08/06 16:03:14.097890][debug][17676][DeviceManager.cpp:64] DeviceManager Destructors done
[08/06 16:03:14.098772][debug][17676][MfPal.cpp:128] WmfPal destroyed!
[08/06 16:03:14.099070][info][17676][Context.cpp:84] Context destroyed
[08/06 16:06:30.815796][debug][29672][Context.cpp:30] Context creating, work_dir=D:\Trae_space\BodyBalanceEvaluation
[08/06 16:06:30.815899][debug][29672][Context.cpp:49] Config file version=1.1
[08/06 16:06:30.815926][debug][29672][FrameBufferManager.cpp:23] Max global frame buffer size updated! size=2048.000MB
[08/06 16:06:30.815947][info][29672][Context.cpp:68] Context created with config: default config!
[08/06 16:06:30.816126][info][29672][Context.cpp:73] Work directory=D:\Trae_space\BodyBalanceEvaluation, SDK version=v1.10.11-20240724-aeaa107e5
[08/06 16:06:30.816393][debug][29672][DeviceManager.cpp:30] DeviceManager init ...
[08/06 16:06:30.816414][info][29672][MfPal.cpp:105] createObPal: create WinPal!
[08/06 16:06:30.816552][debug][29672][MfPal.cpp:110] WmfPal init ...
[08/06 16:06:30.844118][debug][29672][MfPal.cpp:117] WmfPal created!
[08/06 16:06:30.844165][debug][29672][DeviceManager.cpp:34] Enable USB Device Enumerator ...
[08/06 16:06:30.867078][debug][29672][EnumeratorLibusb.cpp:321] queryDevicesInfo done!
[08/06 16:06:30.867402][debug][29672][MfPal.cpp:216] Create WinEventDeviceWatcher!
[08/06 16:06:30.867705][debug][29672][UsbDeviceEnumerator.cpp:78] No matched usb device found!
[08/06 16:06:30.867736][info][29672][DeviceManager.cpp:15] Current found device(s): (0)
[08/06 16:06:30.867967][debug][29672][DeviceManager.cpp:52] DeviceManager construct done!
[08/06 16:06:30.868046][debug][29672][Context.cpp:81] Context destroying ...
[08/06 16:06:30.868082][debug][29672][DeviceManager.cpp:56] DeviceManager destroy ...
[08/06 16:06:30.868091][debug][29672][DeviceManager.cpp:64] DeviceManager Destructors done
[08/06 16:06:30.868890][debug][29672][MfPal.cpp:128] WmfPal destroyed!
[08/06 16:06:30.869245][info][29672][Context.cpp:84] Context destroyed
[08/06 16:08:52.321145][debug][26380][Context.cpp:30] Context creating, work_dir=D:\Trae_space\BodyBalanceEvaluation
[08/06 16:08:52.321267][debug][26380][Context.cpp:49] Config file version=1.1
[08/06 16:08:52.321306][debug][26380][FrameBufferManager.cpp:23] Max global frame buffer size updated! size=2048.000MB
[08/06 16:08:52.321328][info][26380][Context.cpp:68] Context created with config: default config!
[08/06 16:08:52.321578][info][26380][Context.cpp:73] Work directory=D:\Trae_space\BodyBalanceEvaluation, SDK version=v1.10.11-20240724-aeaa107e5
[08/06 16:08:52.321776][debug][26380][DeviceManager.cpp:30] DeviceManager init ...
[08/06 16:08:52.321793][info][26380][MfPal.cpp:105] createObPal: create WinPal!
[08/06 16:08:52.321887][debug][26380][MfPal.cpp:110] WmfPal init ...
[08/06 16:08:52.361501][debug][26380][MfPal.cpp:117] WmfPal created!
[08/06 16:08:52.361555][debug][26380][DeviceManager.cpp:34] Enable USB Device Enumerator ...
[08/06 16:08:52.392828][debug][26380][EnumeratorLibusb.cpp:321] queryDevicesInfo done!
[08/06 16:08:52.393196][debug][26380][MfPal.cpp:216] Create WinEventDeviceWatcher!
[08/06 16:08:52.393539][debug][26380][UsbDeviceEnumerator.cpp:78] No matched usb device found!
[08/06 16:08:52.393582][info][26380][DeviceManager.cpp:15] Current found device(s): (0)
[08/06 16:08:52.393837][debug][26380][DeviceManager.cpp:52] DeviceManager construct done!
[08/06 16:08:52.393864][debug][26380][Context.cpp:81] Context destroying ...
[08/06 16:08:52.393877][debug][26380][DeviceManager.cpp:56] DeviceManager destroy ...
[08/06 16:08:52.393887][debug][26380][DeviceManager.cpp:64] DeviceManager Destructors done
[08/06 16:08:52.398033][debug][26380][MfPal.cpp:128] WmfPal destroyed!
[08/06 16:08:52.398403][info][26380][Context.cpp:84] Context destroyed
[08/06 16:10:21.638974][debug][29392][Context.cpp:30] Context creating, work_dir=D:\Trae_space\BodyBalanceEvaluation
[08/06 16:10:21.639110][debug][29392][Context.cpp:49] Config file version=1.1
[08/06 16:10:21.639149][debug][29392][FrameBufferManager.cpp:23] Max global frame buffer size updated! size=2048.000MB
[08/06 16:10:21.639172][info][29392][Context.cpp:68] Context created with config: default config!
[08/06 16:10:21.639421][info][29392][Context.cpp:73] Work directory=D:\Trae_space\BodyBalanceEvaluation, SDK version=v1.10.11-20240724-aeaa107e5
[08/06 16:10:21.639616][debug][29392][DeviceManager.cpp:30] DeviceManager init ...
[08/06 16:10:21.639637][info][29392][MfPal.cpp:105] createObPal: create WinPal!
[08/06 16:10:21.639888][debug][29392][MfPal.cpp:110] WmfPal init ...
[08/06 16:10:21.684336][debug][29392][MfPal.cpp:117] WmfPal created!
[08/06 16:10:21.684398][debug][29392][DeviceManager.cpp:34] Enable USB Device Enumerator ...
[08/06 16:10:21.721401][debug][29392][EnumeratorLibusb.cpp:321] queryDevicesInfo done!
[08/06 16:10:21.721922][debug][29392][MfPal.cpp:216] Create WinEventDeviceWatcher!
[08/06 16:10:21.722414][debug][29392][UsbDeviceEnumerator.cpp:78] No matched usb device found!
[08/06 16:10:21.722485][info][29392][DeviceManager.cpp:15] Current found device(s): (0)
[08/06 16:10:21.722732][debug][29392][DeviceManager.cpp:52] DeviceManager construct done!
[08/06 16:10:21.722788][debug][29392][Context.cpp:81] Context destroying ...
[08/06 16:10:21.722811][debug][29392][DeviceManager.cpp:56] DeviceManager destroy ...
[08/06 16:10:21.722831][debug][29392][DeviceManager.cpp:64] DeviceManager Destructors done
[08/06 16:10:21.726464][debug][29392][MfPal.cpp:128] WmfPal destroyed!
[08/06 16:10:21.726866][info][29392][Context.cpp:84] Context destroyed
[08/06 16:10:57.645092][debug][20760][Context.cpp:30] Context creating, work_dir=D:\Trae_space\BodyBalanceEvaluation
[08/06 16:10:57.645324][debug][20760][Context.cpp:49] Config file version=1.1
[08/06 16:10:57.645407][debug][20760][FrameBufferManager.cpp:23] Max global frame buffer size updated! size=2048.000MB
[08/06 16:10:57.645444][info][20760][Context.cpp:68] Context created with config: default config!
[08/06 16:10:57.645773][info][20760][Context.cpp:73] Work directory=D:\Trae_space\BodyBalanceEvaluation, SDK version=v1.10.11-20240724-aeaa107e5
[08/06 16:10:57.646061][debug][20760][DeviceManager.cpp:30] DeviceManager init ...
[08/06 16:10:57.646083][info][20760][MfPal.cpp:105] createObPal: create WinPal!
[08/06 16:10:57.646291][debug][20760][MfPal.cpp:110] WmfPal init ...
[08/06 16:10:57.693789][debug][20760][MfPal.cpp:117] WmfPal created!
[08/06 16:10:57.693860][debug][20760][DeviceManager.cpp:34] Enable USB Device Enumerator ...
[08/06 16:10:57.734267][debug][20760][EnumeratorLibusb.cpp:321] queryDevicesInfo done!
[08/06 16:10:57.734690][debug][20760][MfPal.cpp:216] Create WinEventDeviceWatcher!
[08/06 16:10:57.734988][debug][20760][UsbDeviceEnumerator.cpp:78] No matched usb device found!
[08/06 16:10:57.735041][info][20760][DeviceManager.cpp:15] Current found device(s): (0)
[08/06 16:10:57.735528][debug][20760][DeviceManager.cpp:52] DeviceManager construct done!
[08/06 16:10:57.735616][debug][20760][Context.cpp:81] Context destroying ...
[08/06 16:10:57.735659][debug][20760][DeviceManager.cpp:56] DeviceManager destroy ...
[08/06 16:10:57.735689][debug][20760][DeviceManager.cpp:64] DeviceManager Destructors done
[08/06 16:10:57.741115][debug][20760][MfPal.cpp:128] WmfPal destroyed!
[08/06 16:10:57.741988][info][20760][Context.cpp:84] Context destroyed
[08/06 16:12:16.098220][debug][28004][Context.cpp:30] Context creating, work_dir=D:\Trae_space\BodyBalanceEvaluation
[08/06 16:12:16.098394][debug][28004][Context.cpp:49] Config file version=1.1
[08/06 16:12:16.098436][debug][28004][FrameBufferManager.cpp:23] Max global frame buffer size updated! size=2048.000MB
[08/06 16:12:16.098468][info][28004][Context.cpp:68] Context created with config: default config!
[08/06 16:12:16.098742][info][28004][Context.cpp:73] Work directory=D:\Trae_space\BodyBalanceEvaluation, SDK version=v1.10.11-20240724-aeaa107e5
[08/06 16:12:16.098886][debug][28004][DeviceManager.cpp:30] DeviceManager init ...
[08/06 16:12:16.098901][info][28004][MfPal.cpp:105] createObPal: create WinPal!
[08/06 16:12:16.099085][debug][28004][MfPal.cpp:110] WmfPal init ...
[08/06 16:12:16.134815][debug][28004][MfPal.cpp:117] WmfPal created!
[08/06 16:12:16.134858][debug][28004][DeviceManager.cpp:34] Enable USB Device Enumerator ...
[08/06 16:12:16.172781][debug][28004][EnumeratorLibusb.cpp:321] queryDevicesInfo done!
[08/06 16:12:16.173306][debug][28004][MfPal.cpp:216] Create WinEventDeviceWatcher!
[08/06 16:12:16.173613][debug][28004][UsbDeviceEnumerator.cpp:78] No matched usb device found!
[08/06 16:12:16.173659][info][28004][DeviceManager.cpp:15] Current found device(s): (0)
[08/06 16:12:16.173897][debug][28004][DeviceManager.cpp:52] DeviceManager construct done!
[08/06 16:12:16.173941][debug][28004][Context.cpp:81] Context destroying ...
[08/06 16:12:16.173956][debug][28004][DeviceManager.cpp:56] DeviceManager destroy ...
[08/06 16:12:16.173968][debug][28004][DeviceManager.cpp:64] DeviceManager Destructors done
[08/06 16:12:16.175519][debug][28004][MfPal.cpp:128] WmfPal destroyed!
[08/06 16:12:16.176049][info][28004][Context.cpp:84] Context destroyed
[08/06 16:13:23.391846][debug][13332][Context.cpp:30] Context creating, work_dir=D:\Trae_space\BodyBalanceEvaluation
[08/06 16:13:23.391992][debug][13332][Context.cpp:49] Config file version=1.1
[08/06 16:13:23.392025][debug][13332][FrameBufferManager.cpp:23] Max global frame buffer size updated! size=2048.000MB
[08/06 16:13:23.392050][info][13332][Context.cpp:68] Context created with config: default config!
[08/06 16:13:23.392226][info][13332][Context.cpp:73] Work directory=D:\Trae_space\BodyBalanceEvaluation, SDK version=v1.10.11-20240724-aeaa107e5
[08/06 16:13:23.392496][debug][13332][DeviceManager.cpp:30] DeviceManager init ...
[08/06 16:13:23.392526][info][13332][MfPal.cpp:105] createObPal: create WinPal!
[08/06 16:13:23.392681][debug][13332][MfPal.cpp:110] WmfPal init ...
[08/06 16:13:23.435989][debug][13332][MfPal.cpp:117] WmfPal created!
[08/06 16:13:23.436054][debug][13332][DeviceManager.cpp:34] Enable USB Device Enumerator ...
[08/06 16:13:23.466488][debug][13332][EnumeratorLibusb.cpp:321] queryDevicesInfo done!
[08/06 16:13:23.466890][debug][13332][MfPal.cpp:216] Create WinEventDeviceWatcher!
[08/06 16:13:23.467292][debug][13332][UsbDeviceEnumerator.cpp:78] No matched usb device found!
[08/06 16:13:23.467338][info][13332][DeviceManager.cpp:15] Current found device(s): (0)
[08/06 16:13:23.467777][debug][13332][DeviceManager.cpp:52] DeviceManager construct done!
[08/06 16:13:23.467808][debug][13332][Context.cpp:81] Context destroying ...
[08/06 16:13:23.467821][debug][13332][DeviceManager.cpp:56] DeviceManager destroy ...
[08/06 16:13:23.467831][debug][13332][DeviceManager.cpp:64] DeviceManager Destructors done
[08/06 16:13:23.474014][debug][13332][MfPal.cpp:128] WmfPal destroyed!
[08/06 16:13:23.474445][info][13332][Context.cpp:84] Context destroyed
[08/06 16:15:59.453762][debug][13332][Context.cpp:30] Context creating, work_dir=D:\Trae_space\BodyBalanceEvaluation
[08/06 16:15:59.453814][debug][13332][Context.cpp:49] Config file version=1.1
[08/06 16:15:59.453833][debug][13332][FrameBufferManager.cpp:23] Max global frame buffer size updated! size=2048.000MB
[08/06 16:15:59.453848][info][13332][Context.cpp:68] Context created with config: default config!
[08/06 16:15:59.453949][info][13332][Context.cpp:73] Work directory=D:\Trae_space\BodyBalanceEvaluation, SDK version=v1.10.11-20240724-aeaa107e5
[08/06 16:15:59.454063][debug][13332][DeviceManager.cpp:30] DeviceManager init ...
[08/06 16:15:59.454074][info][13332][MfPal.cpp:105] createObPal: create WinPal!
[08/06 16:15:59.454171][debug][13332][MfPal.cpp:110] WmfPal init ...
[08/06 16:15:59.478375][debug][13332][MfPal.cpp:117] WmfPal created!
[08/06 16:15:59.478410][debug][13332][DeviceManager.cpp:34] Enable USB Device Enumerator ...
[08/06 16:15:59.503981][debug][13332][EnumeratorLibusb.cpp:321] queryDevicesInfo done!
[08/06 16:15:59.504283][debug][13332][MfPal.cpp:216] Create WinEventDeviceWatcher!
[08/06 16:15:59.504495][debug][13332][UsbDeviceEnumerator.cpp:78] No matched usb device found!
[08/06 16:15:59.504521][info][13332][DeviceManager.cpp:15] Current found device(s): (0)
[08/06 16:15:59.504714][debug][13332][DeviceManager.cpp:52] DeviceManager construct done!
[08/06 16:15:59.504732][debug][13332][Context.cpp:81] Context destroying ...
[08/06 16:15:59.504742][debug][13332][DeviceManager.cpp:56] DeviceManager destroy ...
[08/06 16:15:59.504751][debug][13332][DeviceManager.cpp:64] DeviceManager Destructors done
[08/06 16:15:59.505619][debug][13332][MfPal.cpp:128] WmfPal destroyed!
[08/06 16:15:59.506002][info][13332][Context.cpp:84] Context destroyed
[08/06 16:16:20.739938][debug][18856][Context.cpp:30] Context creating, work_dir=D:\Trae_space\BodyBalanceEvaluation
[08/06 16:16:20.740031][debug][18856][Context.cpp:49] Config file version=1.1
[08/06 16:16:20.740058][debug][18856][FrameBufferManager.cpp:23] Max global frame buffer size updated! size=2048.000MB
[08/06 16:16:20.740075][info][18856][Context.cpp:68] Context created with config: default config!
[08/06 16:16:20.740333][info][18856][Context.cpp:73] Work directory=D:\Trae_space\BodyBalanceEvaluation, SDK version=v1.10.11-20240724-aeaa107e5
[08/06 16:16:20.740472][debug][18856][DeviceManager.cpp:30] DeviceManager init ...
[08/06 16:16:20.740485][info][18856][MfPal.cpp:105] createObPal: create WinPal!
[08/06 16:16:20.740642][debug][18856][MfPal.cpp:110] WmfPal init ...
[08/06 16:16:20.768187][debug][18856][MfPal.cpp:117] WmfPal created!
[08/06 16:16:20.768248][debug][18856][DeviceManager.cpp:34] Enable USB Device Enumerator ...
[08/06 16:16:20.791752][debug][18856][EnumeratorLibusb.cpp:321] queryDevicesInfo done!
[08/06 16:16:20.792149][debug][18856][MfPal.cpp:216] Create WinEventDeviceWatcher!
[08/06 16:16:20.792375][debug][18856][UsbDeviceEnumerator.cpp:78] No matched usb device found!
[08/06 16:16:20.792412][info][18856][DeviceManager.cpp:15] Current found device(s): (0)
[08/06 16:16:20.792631][debug][18856][DeviceManager.cpp:52] DeviceManager construct done!
[08/06 16:16:20.792653][debug][18856][Context.cpp:81] Context destroying ...
[08/06 16:16:20.792664][debug][18856][DeviceManager.cpp:56] DeviceManager destroy ...
[08/06 16:16:20.792673][debug][18856][DeviceManager.cpp:64] DeviceManager Destructors done
[08/06 16:16:20.794234][debug][18856][MfPal.cpp:128] WmfPal destroyed!
[08/06 16:16:20.794542][info][18856][Context.cpp:84] Context destroyed
[08/06 18:49:39.320553][debug][7128][Context.cpp:30] Context creating, work_dir=D:\Trae_space\BodyBalanceEvaluation
[08/06 18:49:39.321439][debug][7128][Context.cpp:49] Config file version=1.1
[08/06 18:49:39.321794][debug][7128][FrameBufferManager.cpp:23] Max global frame buffer size updated! size=2048.000MB
[08/06 18:49:39.321861][info][7128][Context.cpp:68] Context created with config: default config!
[08/06 18:49:39.322297][info][7128][Context.cpp:73] Work directory=D:\Trae_space\BodyBalanceEvaluation, SDK version=v1.10.11-20240724-aeaa107e5
[08/06 18:49:39.322605][debug][7128][DeviceManager.cpp:30] DeviceManager init ...
[08/06 18:49:39.322653][info][7128][MfPal.cpp:105] createObPal: create WinPal!
[08/06 18:49:39.324634][debug][7128][MfPal.cpp:110] WmfPal init ...
[08/06 18:49:39.397789][debug][7128][MfPal.cpp:117] WmfPal created!
[08/06 18:49:39.397898][debug][7128][DeviceManager.cpp:34] Enable USB Device Enumerator ...
[08/06 18:49:39.480505][debug][7128][EnumeratorLibusb.cpp:321] queryDevicesInfo done!
[08/06 18:49:39.481199][debug][7128][MfPal.cpp:216] Create WinEventDeviceWatcher!
[08/06 18:49:39.481472][debug][7128][UsbDeviceEnumerator.cpp:78] No matched usb device found!
[08/06 18:49:39.481703][info][7128][DeviceManager.cpp:15] Current found device(s): (0)
[08/06 18:49:39.482334][debug][7128][DeviceManager.cpp:52] DeviceManager construct done!
[08/06 18:49:39.482711][debug][7128][Context.cpp:81] Context destroying ...
[08/06 18:49:39.482753][debug][7128][DeviceManager.cpp:56] DeviceManager destroy ...
[08/06 18:49:39.482846][debug][7128][DeviceManager.cpp:64] DeviceManager Destructors done
[08/06 18:49:39.484599][debug][7128][MfPal.cpp:128] WmfPal destroyed!
[08/06 18:49:39.485324][info][7128][Context.cpp:84] Context destroyed
[08/07 08:37:04.330106][debug][1608][Context.cpp:30] Context creating, work_dir=D:\Trae_space\BodyBalanceEvaluation
[08/07 08:37:04.331001][debug][1608][Context.cpp:49] Config file version=1.1
[08/07 08:37:04.331403][debug][1608][FrameBufferManager.cpp:23] Max global frame buffer size updated! size=2048.000MB
[08/07 08:37:04.331481][info][1608][Context.cpp:68] Context created with config: default config!
[08/07 08:37:04.331980][info][1608][Context.cpp:73] Work directory=D:\Trae_space\BodyBalanceEvaluation, SDK version=v1.10.11-20240724-aeaa107e5
[08/07 08:37:04.332345][debug][1608][DeviceManager.cpp:30] DeviceManager init ...
[08/07 08:37:04.332393][info][1608][MfPal.cpp:105] createObPal: create WinPal!
[08/07 08:37:04.332702][debug][1608][MfPal.cpp:110] WmfPal init ...
[08/07 08:37:04.392689][debug][1608][MfPal.cpp:117] WmfPal created!
[08/07 08:37:04.392788][debug][1608][DeviceManager.cpp:34] Enable USB Device Enumerator ...
[08/07 08:37:04.434990][debug][1608][EnumeratorLibusb.cpp:321] queryDevicesInfo done!
[08/07 08:37:04.435417][debug][1608][MfPal.cpp:216] Create WinEventDeviceWatcher!
[08/07 08:37:04.435774][debug][1608][UsbDeviceEnumerator.cpp:78] No matched usb device found!
[08/07 08:37:04.436028][info][1608][DeviceManager.cpp:15] Current found device(s): (0)
[08/07 08:37:04.436282][debug][1608][DeviceManager.cpp:52] DeviceManager construct done!
[08/07 08:37:04.436602][debug][1608][Context.cpp:81] Context destroying ...
[08/07 08:37:04.436640][debug][1608][DeviceManager.cpp:56] DeviceManager destroy ...
[08/07 08:37:04.436974][debug][1608][DeviceManager.cpp:64] DeviceManager Destructors done
[08/07 08:37:04.438813][debug][1608][MfPal.cpp:128] WmfPal destroyed!
[08/07 08:37:04.439737][info][1608][Context.cpp:84] Context destroyed
[08/07 08:53:58.557016][debug][26392][Context.cpp:30] Context creating, work_dir=D:\Trae_space\BodyBalanceEvaluation
[08/07 08:53:58.557193][debug][26392][Context.cpp:49] Config file version=1.1
[08/07 08:53:58.557237][debug][26392][FrameBufferManager.cpp:23] Max global frame buffer size updated! size=2048.000MB
[08/07 08:53:58.557265][info][26392][Context.cpp:68] Context created with config: default config!
[08/07 08:53:58.557495][info][26392][Context.cpp:73] Work directory=D:\Trae_space\BodyBalanceEvaluation, SDK version=v1.10.11-20240724-aeaa107e5
[08/07 08:53:58.557711][debug][26392][DeviceManager.cpp:30] DeviceManager init ...
[08/07 08:53:58.557731][info][26392][MfPal.cpp:105] createObPal: create WinPal!
[08/07 08:53:58.557935][debug][26392][MfPal.cpp:110] WmfPal init ...
[08/07 08:53:58.610665][debug][26392][MfPal.cpp:117] WmfPal created!
[08/07 08:53:58.610706][debug][26392][DeviceManager.cpp:34] Enable USB Device Enumerator ...
[08/07 08:53:58.642596][debug][26392][EnumeratorLibusb.cpp:321] queryDevicesInfo done!
[08/07 08:53:58.642997][debug][26392][MfPal.cpp:216] Create WinEventDeviceWatcher!
[08/07 08:53:58.643262][debug][26392][UsbDeviceEnumerator.cpp:78] No matched usb device found!
[08/07 08:53:58.643306][info][26392][DeviceManager.cpp:15] Current found device(s): (0)
[08/07 08:53:58.643483][debug][26392][DeviceManager.cpp:52] DeviceManager construct done!
[08/07 08:53:58.643513][debug][26392][Context.cpp:81] Context destroying ...
[08/07 08:53:58.643527][debug][26392][DeviceManager.cpp:56] DeviceManager destroy ...
[08/07 08:53:58.643540][debug][26392][DeviceManager.cpp:64] DeviceManager Destructors done
[08/07 08:53:58.644558][debug][26392][MfPal.cpp:128] WmfPal destroyed!
[08/07 08:53:58.644986][info][26392][Context.cpp:84] Context destroyed
[08/07 09:03:51.600617][debug][5460][Context.cpp:30] Context creating, work_dir=D:\Trae_space\BodyBalanceEvaluation
[08/07 09:03:51.600710][debug][5460][Context.cpp:49] Config file version=1.1
[08/07 09:03:51.600737][debug][5460][FrameBufferManager.cpp:23] Max global frame buffer size updated! size=2048.000MB
[08/07 09:03:51.600755][info][5460][Context.cpp:68] Context created with config: default config!
[08/07 09:03:51.600863][info][5460][Context.cpp:73] Work directory=D:\Trae_space\BodyBalanceEvaluation, SDK version=v1.10.11-20240724-aeaa107e5
[08/07 09:03:51.600973][debug][5460][DeviceManager.cpp:30] DeviceManager init ...
[08/07 09:03:51.600985][info][5460][MfPal.cpp:105] createObPal: create WinPal!
[08/07 09:03:51.601138][debug][5460][MfPal.cpp:110] WmfPal init ...
[08/07 09:03:51.629206][debug][5460][MfPal.cpp:117] WmfPal created!
[08/07 09:03:51.629309][debug][5460][DeviceManager.cpp:34] Enable USB Device Enumerator ...
[08/07 09:03:51.652743][debug][5460][EnumeratorLibusb.cpp:321] queryDevicesInfo done!
[08/07 09:03:51.653156][debug][5460][MfPal.cpp:216] Create WinEventDeviceWatcher!
[08/07 09:03:51.653432][debug][5460][UsbDeviceEnumerator.cpp:78] No matched usb device found!
[08/07 09:03:51.653463][info][5460][DeviceManager.cpp:15] Current found device(s): (0)
[08/07 09:03:51.653658][debug][5460][DeviceManager.cpp:52] DeviceManager construct done!
[08/07 09:03:51.653680][debug][5460][Context.cpp:81] Context destroying ...
[08/07 09:03:51.653690][debug][5460][DeviceManager.cpp:56] DeviceManager destroy ...
[08/07 09:03:51.653698][debug][5460][DeviceManager.cpp:64] DeviceManager Destructors done
[08/07 09:03:51.654355][debug][5460][MfPal.cpp:128] WmfPal destroyed!
[08/07 09:03:51.654625][info][5460][Context.cpp:84] Context destroyed

View File

@ -0,0 +1,20 @@
[08/06 16:05:29.947597][debug][29212][Context.cpp:30] Context creating, work_dir=D:\Trae_space\BodyBalanceEvaluation\backend
[08/06 16:05:29.947770][debug][29212][Context.cpp:49] Config file version=1.1
[08/06 16:05:29.947818][debug][29212][FrameBufferManager.cpp:23] Max global frame buffer size updated! size=2048.000MB
[08/06 16:05:29.947857][info][29212][Context.cpp:68] Context created with config: default config!
[08/06 16:05:29.948048][info][29212][Context.cpp:73] Work directory=D:\Trae_space\BodyBalanceEvaluation\backend, SDK version=v1.10.11-20240724-aeaa107e5
[08/06 16:05:29.948256][debug][29212][DeviceManager.cpp:30] DeviceManager init ...
[08/06 16:05:29.948529][info][29212][MfPal.cpp:105] createObPal: create WinPal!
[08/06 16:05:29.948659][debug][29212][MfPal.cpp:110] WmfPal init ...
[08/06 16:05:29.984405][debug][29212][MfPal.cpp:117] WmfPal created!
[08/06 16:05:29.984501][debug][29212][DeviceManager.cpp:34] Enable USB Device Enumerator ...
[08/06 16:05:30.020645][debug][29212][EnumeratorLibusb.cpp:321] queryDevicesInfo done!
[08/06 16:05:30.021037][debug][29212][MfPal.cpp:216] Create WinEventDeviceWatcher!
[08/06 16:05:30.021274][debug][29212][UsbDeviceEnumerator.cpp:78] No matched usb device found!
[08/06 16:05:30.021308][info][29212][DeviceManager.cpp:15] Current found device(s): (0)
[08/06 16:05:30.021507][debug][29212][DeviceManager.cpp:52] DeviceManager construct done!
[08/06 16:05:30.021539][debug][29212][Context.cpp:81] Context destroying ...
[08/06 16:05:30.021552][debug][29212][DeviceManager.cpp:56] DeviceManager destroy ...
[08/06 16:05:30.021562][debug][29212][DeviceManager.cpp:64] DeviceManager Destructors done
[08/06 16:05:30.030937][debug][29212][MfPal.cpp:128] WmfPal destroyed!
[08/06 16:05:30.031392][info][29212][Context.cpp:84] Context destroyed

View File

@ -113,7 +113,8 @@ def init_app():
except Exception as e:
logger.error(f'应用初始化失败: {e}')
raise
logger.warning('部分功能可能不可用,但服务将继续运行')
# 不再抛出异常,让应用继续运行
# ==================== 基础API ====================
@ -773,6 +774,68 @@ def get_detection_status(session_id):
logger.error(f'获取检测状态失败: {e}')
return jsonify({'success': False, 'error': str(e)}), 500
@app.route('/api/detection/<session_id>/save-info', methods=['POST'])
def save_session_info(session_id):
"""保存会话信息(诊断、处理、建议、状态)"""
try:
if not db_manager:
return jsonify({'success': False, 'error': '数据库管理器未初始化'}), 500
if not session_id:
return jsonify({
'success': False,
'error': '缺少会话ID'
}), 400
# 获取请求数据
data = flask_request.get_json() or {}
diagnosis_info = data.get('diagnosis_info')
treatment_info = data.get('treatment_info')
suggestion_info = data.get('suggestion_info')
status = data.get('status')
# 验证至少提供一个要更新的字段
if not any([diagnosis_info, treatment_info, suggestion_info, status]):
return jsonify({
'success': False,
'error': '至少需要提供一个要更新的字段diagnosis_info, treatment_info, suggestion_info, status'
}), 400
# 调用数据库管理器的批量更新方法
db_manager.update_session_all_info(
session_id=session_id,
diagnosis_info=diagnosis_info,
treatment_info=treatment_info,
suggestion_info=suggestion_info,
status=status
)
# 构建更新信息反馈
updated_fields = []
if diagnosis_info is not None:
updated_fields.append('诊断信息')
if treatment_info is not None:
updated_fields.append('处理信息')
if suggestion_info is not None:
updated_fields.append('建议信息')
if status is not None:
updated_fields.append(f'状态({status})')
logger.info(f'会话信息保存成功: {session_id}, 更新字段: {", ".join(updated_fields)}')
return jsonify({
'success': True,
'message': f'会话信息保存成功,更新字段: {", ".join(updated_fields)}',
'data': {
'session_id': session_id,
'updated_fields': updated_fields
}
})
except Exception as e:
logger.error(f'保存会话信息失败: {e}')
return jsonify({'success': False, 'error': str(e)}), 500
@app.route('/api/detection/<session_id>/collect', methods=['POST'])
def collect_detection_data(session_id):
"""采集检测数据"""

View File

@ -276,7 +276,7 @@ class DatabaseManager:
diagnosis_info TEXT, -- 诊断信息
treatment_info TEXT, -- 处理信息
suggestion_info TEXT, -- 建议信息
status TEXT DEFAULT 'created', -- 会话状态created/running/completed/failed
status TEXT DEFAULT 'created', -- 会话状态created/running/diagnosed/completed)
created_at TIMESTAMP, -- 记录创建时间
FOREIGN KEY (patient_id) REFERENCES patients (id), -- 患者表外键约束
FOREIGN KEY (creator_id) REFERENCES users (id) -- 用户表外键约束
@ -825,6 +825,69 @@ class DatabaseManager:
logger.error(f'更新会话建议信息失败: {e}')
raise
def update_session_all_info(self, session_id: str, diagnosis_info: str = None, treatment_info: str = None, suggestion_info: str = None, status: str = None):
"""同时更新会话的诊断信息、处理信息、建议信息和状态"""
conn = self.get_connection()
cursor = conn.cursor()
try:
# 构建动态SQL语句只更新非None的字段
update_fields = []
update_values = []
if diagnosis_info is not None:
update_fields.append('diagnosis_info = ?')
update_values.append(diagnosis_info)
if treatment_info is not None:
update_fields.append('treatment_info = ?')
update_values.append(treatment_info)
if suggestion_info is not None:
update_fields.append('suggestion_info = ?')
update_values.append(suggestion_info)
if status is not None:
update_fields.append('status = ?')
update_values.append(status)
# 如果状态是完成、停止或错误,同时更新结束时间
if status in ['completed', 'stopped', 'error']:
update_fields.append('end_time = ?')
update_values.append(self.get_china_time())
if not update_fields:
logger.warning(f'没有提供要更新的信息: {session_id}')
return
# 添加session_id到参数列表
update_values.append(session_id)
sql = f'''
UPDATE detection_sessions SET {', '.join(update_fields)}
WHERE id = ?
'''
cursor.execute(sql, update_values)
conn.commit()
updated_info = []
if diagnosis_info is not None:
updated_info.append('诊断信息')
if treatment_info is not None:
updated_info.append('处理信息')
if suggestion_info is not None:
updated_info.append('建议信息')
if status is not None:
updated_info.append(f'状态({status})')
logger.info(f'批量更新会话信息成功: {session_id}, 更新字段: {", ".join(updated_info)}')
except Exception as e:
conn.rollback()
logger.error(f'批量更新会话信息失败: {e}')
raise
def get_detection_sessions(self, page: int = 1, size: int = 10, patient_id: str = None) -> List[Dict]:

View File

@ -66,8 +66,12 @@ class DeviceManager:
# 推流状态和线程
self.camera_streaming = False
self.femtobolt_streaming = False
self.imu_streaming = False
self.pressure_streaming = False
self.camera_streaming_thread = None
self.femtobolt_streaming_thread = None
self.imu_thread = None
self.pressure_thread = None
self.streaming_stop_event = threading.Event()
# 全局帧缓存机制
@ -244,17 +248,22 @@ class DeviceManager:
self.femtobolt_config.synchronized_images_only = True
# 视效范围参数示例假设SDK支持depth_range_min和depth_range_max
# 直接尝试启动设备pykinect_azure库没有设备数量检测API
logger.info('准备启动FemtoBolt设备...')
# 启动FemtoBolt设备
# 启动FemtoBolt设备直接尝试启动失败时优雅处理
logger.info('尝试启动FemtoBolt设备...')
self.femtobolt_camera = pykinect.start_device(config=self.femtobolt_config)
if self.femtobolt_camera:
self.device_status['femtobolt'] = True
logger.info('✓ FemtoBolt深度相机初始化成功!')
else:
raise Exception('设备启动返回None')
try:
self.femtobolt_camera = pykinect.start_device(config=self.femtobolt_config)
if self.femtobolt_camera:
self.device_status['femtobolt'] = True
logger.info('✓ FemtoBolt深度相机初始化成功!')
else:
logger.warning('FemtoBolt设备启动失败设备返回None可能未连接设备')
self.femtobolt_camera = None
self.device_status['femtobolt'] = False
except BaseException as device_error:
logger.warning(f'FemtoBolt设备启动失败: {device_error}')
logger.info('这通常表示没有连接FemtoBolt设备系统将继续运行但不包含深度相机功能')
self.femtobolt_camera = None
self.device_status['femtobolt'] = False
except Exception as e:
logger.warning(f'FemtoBolt深度相机初始化失败: {e}')
@ -856,9 +865,7 @@ class DeviceManager:
head_pose_data = {
'rotation': head_pose['rotation'], # 旋转角:左旋(-), 右旋(+)
'tilt': head_pose['tilt'], # 倾斜角:左倾(-), 右倾(+)
'pitch': head_pose['pitch'], # 俯仰角:俯角(-), 仰角(+)
'temperature': imu_data.get('temperature', 25),
'pitch': head_pose['pitch'], # 俯仰角:俯角(-), 仰角(+)
'timestamp': imu_data['timestamp']
}
@ -904,6 +911,14 @@ class DeviceManager:
# 计算总压力
total_pressure = left_total + right_total
# 计算各区域压力百分比
left_front_percent = (left_front / total_pressure * 100) if total_pressure > 0 else 0
left_rear_percent = (left_rear / total_pressure * 100) if total_pressure > 0 else 0
right_front_percent = (right_front / total_pressure * 100) if total_pressure > 0 else 0
right_rear_percent = (right_rear / total_pressure * 100) if total_pressure > 0 else 0
left_total_percent = (left_total / total_pressure * 100) if total_pressure > 0 else 0
right_total_percent = (right_total / total_pressure * 100) if total_pressure > 0 else 0
# 计算平衡比例(左脚压力占总压力的比例)
balance_ratio = left_total / total_pressure if total_pressure > 0 else 0.5
@ -916,15 +931,15 @@ class DeviceManager:
# 构建完整的足部压力数据
complete_pressure_data = {
# 分区压力
# 分区压力百分比
'pressure_zones': {
'left_front': left_front,
'left_rear': left_rear,
'right_front': right_front,
'right_rear': right_rear,
'left_total': left_total,
'right_total': right_total,
'total_pressure': total_pressure
'left_front': round(left_front_percent, 1),
'left_rear': round(left_rear_percent, 1),
'right_front': round(right_front_percent,1),
'right_rear': round(right_rear_percent, 1),
'left_total': round(left_total_percent, 1),
'right_total': round(right_total_percent, 1),
'total_pressure': 100.0 # 总压力百分比始终为100%
},
# 平衡分析
'balance_analysis': {

Binary file not shown.

After

Width:  |  Height:  |  Size: 941 B

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="18px" height="20px" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(1 0 0 1 -1758 -448 )">
<path d="M 0.922433035714286 0 L 11.0350864955357 0 C 11.2741777312329 0.0265979876876923 11.503892725468 0.118942562722911 11.6756417410714 0.284096575797872 L 17.7181222098214 6.09443567154255 C 17.8972184278233 6.26665022859307 17.9983236115259 6.50361568698034 18 6.75116356382979 L 18 19.0591755319149 C 17.9983258928571 19.5640791223404 17.5860770089286 19.9734042553191 17.0775669642857 20 L 0.922433035714286 20 C 0.413922991071429 19.9734042553191 0.00167410714285714 19.5640791223404 0 19.0591755319149 L 0 0.940824468085106 C 0.00167410714285714 0.435920877659574 0.413922991071429 0.0265957446808511 0.922433035714286 0 Z M 14.4995675223214 15.1944813829787 C 14.4995675223214 14.3338389295213 13.7968610491071 13.6361369680851 12.9300920758929 13.6361369680851 L 5.09087611607143 13.6361369680851 C 4.22406529017857 13.6361369680851 3.52140066964286 14.3338389295213 3.52140066964286 15.1944813829787 C 3.52140066964286 16.0551238364362 4.22406529017857 16.7528257978723 5.09087611607143 16.7528257978723 L 12.9300920758929 16.7528257978723 C 13.7968610491071 16.7528257978723 14.4995675223214 16.0551238364362 14.4995675223214 15.1944813829787 Z M 14.4995675223214 10 C 14.4995675223214 9.13935754654255 13.7968610491071 8.44165558510638 12.9300920758929 8.44165558510638 L 5.09087611607143 8.44165558510638 C 4.22406529017857 8.44165558510638 3.52140066964286 9.13935754654255 3.52140066964286 10 C 3.52140066964286 10.8606424534574 4.22406529017857 11.5583444148936 5.09087611607143 11.5583444148936 L 12.9300920758929 11.5583444148936 C 13.7968610491071 11.5583444148936 14.4995675223214 10.8606424534574 14.4995675223214 10 Z M 9.01046316964286 4.80551861702128 C 9.01046316964286 3.94487616356383 8.30775669642857 3.24717420212766 7.44098772321429 3.24717420212766 L 5.09087611607143 3.24717420212766 C 4.22406529017857 3.24717420212766 3.52140066964286 3.94487616356383 3.52140066964286 4.80551861702128 C 3.52140066964286 5.66616107047872 4.22406529017857 6.36386303191489 5.09087611607143 6.36386303191489 L 7.44098772321429 6.36386303191489 C 8.30775669642857 6.36386303191489 9.01046316964286 5.66616107047872 9.01046316964286 4.80551861702128 Z " fill-rule="nonzero" fill="#ffffff" stroke="none" transform="matrix(1 0 0 1 1758 448 )" />
</g>
</svg>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="18px" height="18px" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(1 0 0 1 -1758 -474 )">
<path d="M 17.9999999999999 4.49999999999989 C 17.9999999999999 3.11928812542294 16.8807118745769 1.99999999999989 15.5 2 L 12.449 1.99999999999989 C 12.2114408432971 0.836202448393578 11.1877958746828 0.000232690439815997 10 0 L 7.99999999999994 0 C 6.81257983768819 0.000707623411813074 5.78948386378374 0.836570347189877 5.55200000000002 2 L 2.5 1.99999999999989 C 1.119288125423 1.99999999999989 0 3.11928812542294 0 4.5 C 0 4.77614237491537 0.223857625084577 5 0.5 5 L 2.5 5 L 2.5 16 C 2.5 17.1045694996616 3.39543050033842 18 4.5 18 L 13.5 18 C 14.6045694996616 18 15.5 17.1045694996616 15.5 16 L 15.5 5 L 17.5 5 C 17.7761423749154 5 18 4.77614237491537 18 4.5 Z M 6.584 2 C 6.79610970339127 1.40006172614665 7.36366998764606 0.999242316362142 8 1 L 10 1 C 10.6355961099298 1.000090495221 11.2021346343182 1.40075423241217 11.414 2 L 6.584 2 Z M 14.5 5 L 14.5 16 C 14.5 16.5522847498308 14.0522847498308 17 13.5 17 L 4.5 17 C 3.94771525016921 17 3.5 16.5522847498308 3.5 16 L 3.5 5 L 14.5 5 Z M 16.914 4 L 15.5 4 L 1.084 4 C 1.29598764058022 3.40040812919494 1.86303690347711 2.99966660064604 2.49900000000002 3 L 15.499 3 C 16.1349630965229 2.99966660064604 16.7020123594198 3.40040812919494 16.914 4 Z M 9 15 C 9.27614237491542 15 9.5 14.7761423749154 9.5 14.5 L 9.5 7.5 C 9.5 7.22385762508463 9.27614237491542 7 9 7 C 8.72385762508458 7 8.5 7.22385762508463 8.5 7.5 L 8.5 14.5 C 8.5 14.7761423749154 8.72385762508458 15 9 15 Z M 6 15 C 6.27614237491542 15 6.5 14.7761423749154 6.5 14.5 L 6.5 7.5 C 6.5 7.22385762508463 6.27614237491542 7 6 7 C 5.72385762508458 7 5.5 7.22385762508463 5.5 7.5 L 5.5 14.5 C 5.5 14.7761423749154 5.72385762508458 15 6 15 Z M 12 15 C 12.2761423749154 15 12.5 14.7761423749154 12.5 14.5 L 12.5 7.5 C 12.5 7.22385762508463 12.2761423749154 7 12 7 C 11.7238576250846 7 11.5 7.22385762508463 11.5 7.5 L 11.5 14.5 C 11.5 14.7761423749154 11.7238576250846 15 12 15 Z " fill-rule="nonzero" fill="#ffffff" stroke="none" transform="matrix(1 0 0 1 1758 474 )" />
</g>
</svg>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="32px" height="25px" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(1 0 0 1 -1741 -10 )">
<path d="M 14.9237668161435 18.75 L 15.9282511210762 18.75 L 18.0089686098655 16.6903409090909 L 15.2825112107623 13.9914772727273 L 13.2017937219731 16.0511363636364 L 13.2017937219731 17.0454545454545 L 14.9237668161435 17.0454545454545 L 14.9237668161435 18.75 Z M 23.8026905829596 6.55184659090909 C 24.0059790732437 6.35061553030303 24.0119581464873 6.15530303030303 23.8206278026906 5.96590909090909 C 23.6292974588939 5.77651515151515 23.4319880418535 5.78243371212121 23.2286995515695 5.98366477272727 L 16.9506726457399 12.1981534090909 C 16.7473841554559 12.399384469697 16.7414050822123 12.594696969697 16.932735426009 12.7840909090909 C 17.1240657698057 12.9734848484848 17.321375186846 12.9675662878788 17.52466367713 12.7663352272727 L 23.8026905829596 6.55184659090909 Z M 24.8968609865471 15.9978693181818 C 25.136023916293 16.0925662878788 25.2556053811659 16.2642045454545 25.2556053811659 16.5127840909091 L 25.2556053811659 19.8863636363636 C 25.2556053811659 21.2949810606061 24.7503736920777 22.4994081439394 23.7399103139013 23.4996448863636 C 22.729446935725 24.4998816287879 21.5127055306428 25 20.0896860986547 25 L 5.16591928251121 25 C 3.74289985052317 25 2.52615844544096 24.4998816287879 1.51569506726457 23.4996448863636 C 0.505231689088191 22.4994081439394 0 21.2949810606061 0 19.8863636363636 L 0 5.11363636363637 C 0 3.70501893939394 0.505231689088191 2.50059185606061 1.51569506726457 1.50035511363636 C 2.52615844544096 0.500118371212119 3.74289985052317 0 5.16591928251121 0 L 20.0896860986547 0 C 20.8430493273543 0 21.542600896861 0.147964015151514 22.1883408071749 0.443892045454544 C 22.3677130044843 0.526751893939392 22.47533632287 0.662878787878787 22.5112107623318 0.852272727272727 C 22.5470852017937 1.05350378787879 22.4932735426009 1.22514204545454 22.3497757847534 1.3671875 L 21.4708520179372 2.23721590909091 C 21.3034379671151 2.40293560606061 21.1121076233184 2.45028409090909 20.8968609865471 2.37926136363636 C 20.6218236173393 2.30823863636364 20.3527653213752 2.27272727272727 20.0896860986547 2.27272727272727 L 5.16591928251121 2.27272727272727 C 4.37668161434978 2.27272727272727 3.70104633781764 2.55089962121212 3.1390134529148 3.10724431818182 C 2.57698056801196 3.66358901515151 2.29596412556054 4.33238636363637 2.29596412556054 5.11363636363637 L 2.29596412556054 19.8863636363636 C 2.29596412556054 20.6676136363636 2.57698056801196 21.3364109848485 3.1390134529148 21.8927556818182 C 3.70104633781764 22.4491003787879 4.37668161434978 22.7272727272727 5.16591928251121 22.7272727272727 L 20.0896860986547 22.7272727272727 C 20.8789237668161 22.7272727272727 21.5545590433483 22.4491003787879 22.1165919282511 21.8927556818182 C 22.678624813154 21.3364109848485 22.9596412556054 20.6676136363636 22.9596412556054 19.8863636363636 L 22.9596412556054 17.6491477272727 C 22.9596412556054 17.4952651515151 23.0134529147982 17.3650568181818 23.1210762331839 17.2585227272727 L 24.2690582959641 16.1221590909091 C 24.4484304932735 15.9446022727273 24.6576980568012 15.9031723484848 24.8968609865471 15.9978693181818 Z M 11.4798206278027 15.3409090909091 L 23.5336322869955 3.40909090909091 L 28.6995515695067 8.52272727272727 L 16.6457399103139 20.4545454545455 L 11.4798206278027 20.4545454545455 L 11.4798206278027 15.3409090909091 Z M 32 4.54545454545454 C 32 5.01893939393939 31.8325859491779 5.42140151515151 31.4977578475336 5.75284090909091 L 29.847533632287 7.38636363636363 L 24.6816143497758 2.27272727272727 L 26.3318385650224 0.639204545454544 C 26.6666666666667 0.307765151515149 27.0732436472347 0.142045454545456 27.5515695067265 0.142045454545456 C 28.0298953662182 0.142045454545456 28.4364723467863 0.307765151515149 28.7713004484305 0.639204545454544 L 31.4977578475336 3.33806818181818 C 31.8325859491779 3.66950757575757 32 4.0719696969697 32 4.54545454545454 Z " fill-rule="nonzero" fill="#ffffff" stroke="none" transform="matrix(1 0 0 1 1741 10 )" />
</g>
</svg>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="15px" height="16px" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(1 0 0 1 -471 -604 )">
<path d="M 2.50414235937501 0 C 3.87625279687495 0 4.98789009375002 1.11158993749996 4.98789009375002 2.48291045312499 C 4.98789009375002 3.854964359375 3.87625432812501 4.96656957812502 2.50414235937501 4.96656957812502 C 1.13276376562499 4.96656957812502 0.0210974531249803 3.85494909374995 0.0210974531249803 2.48291045312499 C 0.0210974531249803 1.11158992187495 1.13276378124999 0 2.50414235937501 0 Z M 7.098429984375 0 C 7.78448520312497 0 8.34031149999998 0.555801843750032 8.34031149999998 1.24182956250002 C 8.34031149999998 1.92782671875 7.78448521874998 2.48364384374997 7.098429984375 2.48364384374997 C 6.41237475000003 2.48364384374997 5.85656374999996 1.92784200000006 5.85656374999996 1.24182956250002 C 5.85656374999996 0.555801843750032 6.41237476562503 0 7.098429984375 0 Z M 10.69892884375 0.309903156250016 C 11.38498559375 0.309889406250022 11.940795078125 0.865706515624993 11.940795078125 1.55173271875003 C 11.940795078125 2.23776043750001 11.3849840625001 2.79356228125005 10.69892884375 2.79356228125005 C 10.012873625 2.79356228125005 9.45704732812499 2.23776043750001 9.45704732812499 1.55173271875003 C 9.45704732812499 0.865705000000048 10.012873609375 0.309903156250016 10.69892884375 0.309903156250016 Z M 13.617007296875 1.92420717187497 C 14.30304725 1.92420717187497 14.8588888125 2.48001054687495 14.8588888125 3.16603673437498 C 14.8588888125 3.85206445312497 14.30306253125 4.407866296875 13.617007296875 4.407866296875 C 12.930952078125 4.407866296875 12.3751410625 3.85206445312497 12.3751410625 3.16603673437498 C 12.3751410625 2.480009015625 12.930952078125 1.92420717187497 13.617007296875 1.92420717187497 Z M 6.72520839062497 10.3674653125 C 6.11991084374995 9.57594962500002 3.09343687499995 9.34315098437503 3.88497240624997 6.36335835937496 C 3.88497240624997 6.36335835937496 4.676507953125 4.17506765625001 7.70299567187499 3.80259320312496 C 7.70299567187499 3.80259320312496 12.3751410625 3.47667328124999 13.1797766562499 8.0831213125 C 13.572634578125 10.333981796875 13.4089511562499 15.2096134375 9.79825217187499 15.95164409375 C 8.92667706249995 16.13062159375 6.399274703125 15.90800628125 6.72520839062497 13.626609578125 C 6.84015393749996 12.819808984375 7.59678350000002 11.506691546875 6.72520839062497 10.3674653125 Z " fill-rule="nonzero" fill="#ffffff" stroke="none" transform="matrix(1 0 0 1 471 604 )" />
</g>
</svg>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="20px" height="15px" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(1 0 0 1 -20 -68 )">
<path d="M 10 14.0353894412879 L 0.120591027462126 7.17959141216856 L 10 0.166593720407192 L 10 14.0353894412879 Z M 10 0.166647165009465 L 10 14.0814642814867 L 10.2509636008523 14.0585337653883 L 0.0753713896780255 7.17985866477272 L 10.2940986328125 0.119930900804931 L 10 0.166647165009465 Z M 10 0.21325651041667 L 0.165810635653429 7.17932415956439 L 10 13.9892611268939 L 10 0.21325651041667 Z M 18.5711613103693 7.92667737926136 C 19.9572551491477 9.55351497395833 19.9710989879262 12.3384774502841 19.9710989879262 12.3384774798769 C 19.9710989879262 12.3384774798769 19.7536599195076 11.1792300840436 19.0377893880208 10.4719651692708 C 18.4886862571023 9.92948999763257 18.1469199514678 9.62353589607008 17.3409308712122 9.45382868726325 C 15.2434029356061 9.01226917613636 5.67015113044505 9.45532531368372 5.67015113044505 9.45532531368372 L 5.67015113044505 5.42532640861742 C 5.67015113044505 5.42532640861742 12.0294419093277 5.32542631392046 14.1168676017992 5.76319078480114 C 14.736312352036 5.89307694128787 15.8322736446496 6.06043232125947 16.5773285097064 6.44191281960227 C 17.3805915897254 6.8532724609375 18.1643450224905 7.44925218986742 18.5711613103693 7.92667737926136 Z " fill-rule="nonzero" fill="#ffffff" stroke="none" transform="matrix(1 0 0 1 20 68 )" />
</g>
</svg>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="16px" height="11px" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(1 0 0 1 -1271 -606 )">
<path d="M 11.3045078196872 1.90077626379218 L 11.3045078196872 3.21209917087594 C 11.3045078196872 3.26234142785233 11.251753449862 3.35026537756096 11.1462447102117 3.47587102000193 C 11.0407359705612 3.60147666244291 10.9276908923644 3.74969132052331 10.807109475621 3.92051499424303 C 10.6865280588777 4.09133866796276 10.5734829806809 4.2772350187754 10.4679742410303 4.47820404668096 C 10.36246550138 4.67917307458652 10.3097111315546 4.8851663281896 10.3097111315546 5.09618380749043 C 10.3097111315546 5.30720128679127 10.36246550138 5.5106824275457 10.4679742410303 5.70662722975362 C 10.5734829806809 5.90257203196154 10.6865280588777 6.08093204422767 10.807109475621 6.24170726655211 C 10.9276908923644 6.40248248887656 11.0407359705612 6.53562446986405 11.1462447102117 6.64113320951435 C 11.251753449862 6.74664194916477 11.3045078196872 6.81446899608295 11.3045078196872 6.84461435026878 L 11.3045078196872 8.42724544502494 C 11.3045078196872 8.59806911874466 11.2417049984667 8.79150180810382 11.1160993560259 9.00754351310229 C 10.9904937135848 9.22358521810077 10.8347427169581 9.42706635885509 10.6488463661453 9.61798693536537 C 10.4629500153328 9.80890751187565 10.2569567617295 9.96717062135133 10.0308666053359 10.0927762637922 C 9.80477644894199 10.2183819062332 9.5912468567924 10.2811847274537 9.39027782888684 10.2811847274537 L 1.89915731370752 10.2811847274537 C 1.62784912603502 10.2811847274537 1.37914995400183 10.2334545833261 1.15305979760819 10.1379942950709 C 0.926969641214328 10.0425340068159 0.728512726157533 9.90939202582842 0.557689052437809 9.7385683521087 C 0.386865378718085 9.56774467838898 0.25372339773071 9.36677565048342 0.158263109475683 9.13566126839203 C 0.0628028212204299 8.90454688630064 0.0150726770928031 8.65333560141869 0.0150726770928031 8.38202741374619 L 0.0150726770928031 1.88570358669926 C 0.0150726770928031 1.68473455879371 0.0602907083716673 1.47622919234175 0.150726770929168 1.26018748734327 C 0.241162833486669 1.0441457823448 0.369280588776519 0.845688867288118 0.53508003679849 0.664816742173116 C 0.700879484820689 0.483944617058114 0.896824287028494 0.333217846128946 1.12291444342236 0.212636429385611 C 1.349004599816 0.0920550126422768 1.59770377184918 0.0317643042706095 1.86901195952169 0.0317643042706095 L 9.360132474701 0.0317643042706095 C 9.63144066237351 0.0317643042706095 9.88516406010422 0.0794944483981226 10.1213026678934 0.174954736653262 C 10.3574412756823 0.270415024908402 10.5634345292856 0.401044893047015 10.7392824287028 0.5668443410691 C 10.9151303281203 0.732643789091185 11.0532965348052 0.93110070414798 11.153781048758 1.16221508623937 C 11.2542655627108 1.39332946833065 11.3045078196872 1.63951652751496 11.3045078196872 1.90077626379218 Z M 15.9921103955842 1.76512216995593 L 15.9921103955842 1.79526752414176 L 15.9921103955842 8.68348095560452 C 15.9921103955842 8.90454688630064 15.9343318000613 9.10049168850855 15.8187746090157 9.27131536222828 C 15.7032174179699 9.442139035948 15.5298816314014 9.52755087280786 15.29876724931 9.52755087280786 C 15.2183796381478 9.52755087280786 15.1153830113462 9.49740551862203 14.9897773689052 9.43711481025036 C 14.8641717264643 9.3768241018787 14.7385660840232 9.30648494211175 14.6129604415823 9.22609733094953 C 14.4873547991413 9.14570971978731 14.3692854952469 9.06532210862508 14.2587525298989 8.98493449746286 C 14.1482195645508 8.90454688630064 14.0678319533886 8.83923195223133 14.0175896964122 8.78898969525494 C 13.8869598282736 8.67845672990688 13.6885029132168 8.4875361533966 13.422218951242 8.21622796572422 C 13.1559349892671 7.94491977805171 12.8871389144433 7.63844201049574 12.615830726771 7.29679466305629 C 12.3445225390985 6.95514731561684 12.1058718184606 6.60345151678211 11.8998785648573 6.24170726655211 C 11.6938853112542 5.87996301632211 11.5908886844527 5.54836412027794 11.5908886844527 5.2469105784196 C 11.5908886844527 4.94545703656127 11.7014216498007 4.60129757627305 11.9224875804969 4.21443219755486 C 12.143553511193 3.82756681883666 12.4098374731677 3.44823777866497 12.7213394664213 3.07644507703969 C 13.032841459675 2.70465237541441 13.3594161300214 2.3604929151262 13.7010634774608 2.04396669617495 C 14.0427108249003 1.72744047722369 14.3290916896658 1.48878975658579 14.5602060717572 1.32801453426146 C 14.6506421343147 1.26772382588979 14.7737356639068 1.19487255327397 14.9294866605335 1.10946071641411 C 15.0852376571604 1.02404887955424 15.2234038638455 0.981342961124369 15.3439852805889 0.981342961124369 C 15.6152934682614 0.981342961124369 15.7911413676786 1.05670634658895 15.8715289788408 1.20743311751812 C 15.9519165900031 1.35815988844718 15.9921103955842 1.54405623925982 15.9921103955842 1.76512216995593 Z " fill-rule="nonzero" fill="#ffffff" stroke="none" transform="matrix(1 0 0 1 1271 606 )" />
</g>
</svg>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="15px" height="16px" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(1 0 0 1 -1271 -113 )">
<path d="M 0 2.30431893168605 C 0.0531561409884489 1.04717607194766 1.14285714026164 0.026578070494196 2.48903653706407 0.026578070494196 L 12.2352159520349 0.026578070494196 C 13.5800664425872 0.026578070494196 14.6710963481105 1.04717607194766 14.6710963481105 2.30431893168605 L 14.6710963481105 13.6956810683139 C 14.6710963481105 14.9528239280523 13.5813953488373 15.9734219295058 12.2352159520349 15.9734219295058 L 2.48903653706407 15.9734219295058 C 1.14418604651155 15.9734219295058 0.0531561409884489 14.9528239280523 0 13.6956810683139 L 0 2.30431893168605 Z M 12.2352159520349 1.16544851017443 L 2.48903653706407 1.16544851017443 C 1.81661128270343 1.16544851017443 1.2717607921511 1.67574751090118 1.2717607921511 2.30431893168605 L 1.2717607921511 13.6956810683139 C 1.2717607921511 14.3242524890989 1.81661128270343 14.8345515079942 2.48903653706407 14.8345514898256 L 12.2352159520349 14.8345514898256 C 12.9076412063955 14.8345514898256 13.4524916969476 14.3242524890989 13.4524916969476 13.6956810683139 L 13.4524916969476 2.30431893168605 C 13.4524916969476 1.67574751090118 12.9076412063955 1.16544849200582 12.2352159520349 1.16544851017443 Z M 2.71107331816233 5.34485049963664 C 2.71107331816233 5.71177420762504 3.00849157682455 6.00924165127614 3.37541527979647 6.00930232558139 C 3.74249176867511 6.0093023346657 4.03997698822059 5.71181711512028 4.03997698822059 5.34485049963664 C 4.03997698822059 4.97788388415299 3.74249176867511 4.68039866460757 3.37552515319135 4.68039866460757 C 3.00849157682455 4.68045934799713 2.71107331816233 4.9779267916482 2.71107331816233 5.34485049963664 Z M 2.71107331816233 8.0026578034157 C 2.71107331816233 8.36958151140411 3.00849157682455 8.66704895505521 3.37541527979647 8.66710962936045 C 3.74249176867511 8.66710963844477 4.03997698822059 8.36962441889935 4.03997698822059 8.0026578034157 C 4.03997698822059 7.63569118793205 3.74249176867511 7.33820596838663 3.37552515319135 7.33820596838663 C 3.00849157682455 7.33826665177619 2.71107331816233 7.63573409542727 2.71107331816233 8.0026578034157 Z M 3.37541527979647 11.3249169513082 C 3.74238189528023 11.3249169513082 4.03986711482571 11.0274317317627 4.03986711482571 10.6604651162791 C 4.03986711482571 10.2934985007954 3.74238189528023 9.99601328125001 3.37541527979647 9.99601328125001 C 3.00844866431294 9.99601328125001 2.71096344476746 10.2934985007954 2.71096344476746 10.6604651162791 C 2.71096344476746 11.0274317317627 3.00844866431294 11.3249169513082 3.37541527979647 11.3249169513082 Z M 4.70431893168598 5.34219269622093 C 4.70431893168598 5.70897011264535 4.95415281613373 6.00664453125 5.2624584665698 6.0066445130814 L 11.1229235828489 6.0066445130814 C 11.431229233285 6.0066445130814 11.6810631177325 5.70897009447674 11.6810631177325 5.34219269622093 C 11.6810631177325 4.97541529796513 11.431229233285 4.67774086119186 11.1229235828489 4.67774086119186 L 5.2624584665698 4.67774086119186 C 4.95415281613373 4.67774086119186 4.70431893168598 4.97541527979652 4.70431893168598 5.34219269622093 Z M 4.70431893168598 8 C 4.70431893168598 8.36677741642441 4.95415281613373 8.66445183502907 5.2624584665698 8.66445183502907 L 11.1229235828489 8.66445183502907 C 11.431229233285 8.66445183502907 11.6810631177325 8.36677741642441 11.6810631177325 8 C 11.6810631177325 7.63322258357559 11.431229233285 7.33554816497093 11.1229235828489 7.33554816497093 L 5.2624584665698 7.33554816497093 C 4.95415281613373 7.33554816497093 4.70431893168598 7.63322258357559 4.70431893168598 8 Z M 4.70431893168598 10.6578073037791 C 4.70431893168598 11.0245847020349 4.95415281613373 11.3222591388081 5.2624584665698 11.3222591388081 L 11.1229235828489 11.3222591388081 C 11.431229233285 11.3222591388081 11.6810631177325 11.0245847202035 11.6810631177325 10.6578073037791 C 11.6810631177325 10.2910298873547 11.431229233285 9.99335546875 11.1229235828489 9.9933554869186 L 5.2624584665698 9.9933554869186 C 4.95415281613373 9.9933554869186 4.70431893168598 10.2910299055233 4.70431893168598 10.6578073037791 Z " fill-rule="nonzero" fill="#ffffff" stroke="none" transform="matrix(1 0 0 1 1271 113 )" />
</g>
</svg>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="14px" height="16px" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(1 0 0 1 -20 -113 )">
<path d="M 6.89803435773482 0.0122503798342564 C 5.95585189917128 0.0122503798342564 5.19135079419891 0.776771805939234 5.19135077693369 1.71893396063535 C 5.19135077693369 2.66121799033149 5.95577063190609 3.42561752417127 6.89803435773482 3.42561752417127 C 7.84031838743095 3.42561752417127 8.60471792127072 2.66121799033149 8.60471792127072 1.71893396063535 C 8.60471792127072 0.77667023480663 7.84023712016574 0.0122503970994501 6.89803435773482 0.0122503798342564 Z M 13.7246264157459 4.8531223756906 C 13.7246467368784 4.38204129834254 13.3423656940608 4.00158869129834 12.8713659012431 4 L 0.924682493093911 4 C 0.453601415745851 4.00158869129834 0.0714016574585514 4.38386971685082 0.0714016574585514 4.8548695269337 C 0.0714016574585514 5.32607249654697 0.453601415745851 5.70827225483426 0.924682493093911 5.70827225483426 L 4.42512284185082 5.70827225483426 C 4.62425759668508 5.74384509668508 4.89447707182322 5.84515961671271 5.03674810082873 6.21496679903315 C 5.20203686118785 6.64342548342542 5.12026605662984 7.40965341850828 5.01714342196132 8.05496217196132 L 4.88381130870167 8.81588770718233 C 4.88381130870167 8.81938200966852 4.88198289019337 8.8229372582873 4.88198289019337 8.82649252417127 L 3.80289274861877 14.9508714951657 C 3.72112194406077 15.4149436464088 4.03048983080112 15.857542058011 4.49456198204419 15.9393941298343 C 4.95845127762431 16.0210836671271 5.39586919889504 15.7117970476519 5.47753843232044 15.2478264675414 L 6.22424295580112 10.9829866022099 L 6.22424295580112 10.9882686809392 C 6.22424295580112 10.9882686809392 6.44645637085637 9.8327101519337 6.88021745511048 9.8327101519337 L 6.9193658667127 9.8327101519337 C 7.36198459944751 9.8327101519337 7.5753606871547 10.9882686809392 7.5753606871547 10.9882686809392 L 7.5753606871547 10.9847134323204 L 8.32196363950277 15.247806163674 C 8.40383601519338 15.7117767265193 8.8428994993094 16.0210633459945 9.3068700621547 15.9393738087017 C 9.77084062500001 15.8575014330111 10.0802085117403 15.4149030041436 9.99671087707182 14.9508511740331 L 8.91579233425415 8.82472505179558 L 8.91579233425415 8.82289663328729 C 8.91579233425415 8.8193413846685 8.91396391574585 8.81578613604972 8.91396391574585 8.81221056629835 L 8.77890495511051 8.05128501381215 C 8.67576201657459 7.40780467886741 8.59401153314917 6.64157674378453 8.75938154350828 6.21309775552486 C 8.90155100138122 5.84341248273481 9.17353794889502 5.74209794544198 9.37090523135359 5.70652510359116 L 12.8713455801105 5.70652510359116 C 13.3424266574586 5.70652510359116 13.7246264157459 5.32422375690608 13.7246264157459 4.8531223756906 Z " fill-rule="nonzero" fill="#ffffff" stroke="none" transform="matrix(1 0 0 1 20 113 )" />
</g>
</svg>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

View File

@ -16,7 +16,8 @@ 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'
}
// 添加时间戳防止缓存
@ -112,6 +113,11 @@ export const deviceAPI = {
return api.post('/api/devices/calibrate')
},
// 校准IMU头部姿态传感器
calibrateIMU() {
return api.post('/api/devices/calibrate/imu')
},
// 测试设备
testDevice() {
return api.post('/api/devices/test')
@ -594,7 +600,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'
}
}

View File

@ -34,14 +34,21 @@
</div>
<el-table ref="tableRef" :data="filteredPatients" style="width: 100%" border @cell-click="selectPatient"
highlight-current-row>
<el-table-column prop="name" label="姓名" min-width="60" />
<el-table-column prop="id" label="测试者ID" min-width="60" />
<el-table-column prop="updated_at" label="最后一次检查时间" min-width="60" />
<el-table-column prop="gender" label="性别" min-width="60" />
<el-table-column prop="num" label="测试次数" min-width="60" />
<el-table-column fixed="right" label="操作" width="80">
<el-table-column prop="name" label="姓名" width="150" align="center" />
<el-table-column prop="id" label="测试者ID" min-width="120" align="center" />
<el-table-column prop="updated_at" label="最后一次检查时间" min-width="100" align="center" />
<el-table-column prop="gender" label="性别" width="120" align="center" />
<el-table-column prop="num" label="测试次数" width="120" align="center" />
<el-table-column prop="status" label="测试状态" align="center">
<template #default="scope">
<el-button link type="primary" size="small" @click="delClick(scope.row.id)">删除</el-button>
<span v-if="!scope.row.status" style="font-size: 18px;color:#F59A23;">未处理</span>
<span v-else style="font-size: 18px;color:#ffffff;">已处理</span>
</template>
</el-table-column>
<el-table-column prop="doctor" label="测试医生" min-width="80" align="center" />
<el-table-column fixed="right" label="操作" width="100">
<template #default="scope">
<el-button link type="primary" style="font-size: 18px;" size="small" @click="delClick(scope.row.id)">删除</el-button>
</template>
</el-table-column>
</el-table>
@ -253,6 +260,7 @@ import { ElMessage, ElMessageBox } from 'element-plus'
import { patientAPI } from '../services/api.js'
import { useAuthStore } from '../stores/index.js'
import Header from '@/views/Header.vue'
import { color } from 'echarts'
const router = useRouter()
const authStore = useAuthStore()
@ -347,6 +355,7 @@ const filteredPatients = computed(() => {
if (!searchKeyword.value) {
return patients.value
}
return patients.value.filter(patient =>
patient.name.toLowerCase().includes(searchKeyword.value.toLowerCase())
)
@ -759,10 +768,10 @@ function delClick(id) {
}
.section-header {
display: flex;
justify-content: space-between;
/* display: flex;
justify-content: space-between; */
align-items: center;
margin-bottom: 20px;
margin-bottom: 15px;
}
.section-header h2 {
@ -773,6 +782,7 @@ function delClick(id) {
.search-box {
width: 250px;
margin-top: 15px;
}
.patient-list {
@ -971,18 +981,18 @@ function delClick(id) {
display: flex;
justify-content: center;
box-sizing: border-box;
padding-top: 10px;
padding-top: 13px;
width: 100%;
}
.basic-info-text {
width: 33%;
text-align: center;
font-size: 13px;
font-size: 20px;
}
.basic-info-textcolor {
color: rgb(48, 205, 223);
color: #30F3FF;
padding-bottom: 8px;
}
@ -1075,9 +1085,18 @@ function delClick(id) {
border-color: rgba(215, 215, 215, 1);
color: #FFFFFF;
}
:deep(.el-table th .cell){
color: #30F3FF ;
font-weight: 400;
font-size: 18px;
}
:deep(.el-table--border .el-table__inner-wrapper){
border-right: 1px solid #434343;
}
:deep(.el-table .cell){
font-size: 18px;
}
</style>
<style>
.dashboard-container.dashboard-container-home .el-table {
background: transparent !important;
@ -1145,7 +1164,7 @@ function delClick(id) {
}
.dashboard-container.dashboard-container-home .el-dialog {
background-color: rgba(85, 85, 85, 0.9);
background-color: rgba(85, 85, 85, 1);
}
.dashboard-container.dashboard-container-home .el-dialog__title {

File diff suppressed because it is too large Load Diff

View File

@ -4,7 +4,7 @@
<div class="header">
<div class="header-left">
<div class="system-logo">
<img src="@/assets/svg/logo.svg" alt="Logo" class="logo" />
<img src="@/assets/svg/u7.svg" alt="Logo" class="logo" />
</div>
<div class="system-title">平衡体态检测系统</div>
</div>
@ -105,13 +105,13 @@
.header {
height: 50px;
background: #000000;
border-bottom: 1px solid #434343;
background: #323232;
border-bottom: none;
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 20px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
/* box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); */
}
.header-left {
@ -127,18 +127,21 @@
}
.system-logo {
width: 32px;
height: 32px;
width: 26px;
height: 26px;
border-radius: 4px;
background: #136166;
background: #0099ff;
text-align: center;
padding-top: 3px;
}
.system-title {
font-size: 18px;
color: #AAAAAA;
margin: 0;
font-family: 微软雅黑, sans-serif;
font-weight: 400;
font-style: normal;
font-size: 22px;
color: rgb(255, 255, 255);
}
.header-right {

View File

@ -364,7 +364,6 @@ const handleSaveAndDetect = async () => {
}
.form-container {
flex: 1;
overflow-y: auto;
padding: 20px 20px 0px;
width: 100%;

View File

@ -19,143 +19,70 @@
{{}}
</div> -->
<!-- 患者基本信息 -->
<div v-if="patient" class="patient-info-card">
<div class="card-header">
<h2>基本信息</h2>
<el-button link @click="editPatient">
<el-icon><Edit /></el-icon>
编辑
</el-button>
</div>
<div class="info-grid">
<div class="info-item">
<label>姓名</label>
<span>{{ patient.name }}</span>
</div>
<div class="info-item">
<label>性别</label>
<span>{{ patient.gender }}</span>
</div>
<div class="info-item">
<label>年龄</label>
<span>{{ patient.age }}</span>
</div>
<div class="info-item">
<label>出生日期</label>
<span>{{ formatDate(patient.birth_date) || '未设置' }}</span>
</div>
<div class="info-item">
<label>身高</label>
<span>{{ patient.height }}cm</span>
</div>
<div class="info-item">
<label>体重</label>
<span>{{ patient.weight }}kg</span>
</div>
<div class="info-item">
<label>鞋码</label>
<span>{{ patient.shoe_size || '未设置' }}</span>
</div>
<div class="info-item">
<label>联系电话</label>
<span>{{ patient.phone }}</span>
</div>
<div class="info-item">
<label>主治医生</label>
<span>{{ patient.doctor || '未设置' }}</span>
</div>
<div class="info-item">
<label>创建时间</label>
<span>{{ formatDate(patient.createdAt) }}</span>
</div>
</div>
</div>
<!-- 检测记录 -->
<div class="detection-records-card">
<div class="card-header">
<h2>检测记录</h2>
<div class="header-actions">
<el-input
v-model="searchKeyword"
placeholder="搜索记录"
prefix-icon="Search"
clearable
style="width: 200px; margin-right: 10px;"
/>
<el-button type="primary" @click="startDetection">
新建检测
</el-button>
</div>
<div v-for="(item, index) in profileInfo" :key="index" class="content-info">
<div class="content-left">
<el-checkbox v-model="item.checked" label="" />
<div class="content-left-text1">{{ index + 1 }}</div>
<div class="content-left-text2">2025/04/01 14:35</div>
<div class="content-left-text3">初次就诊</div>
</div>
<div class="content-center">
<div class="records-list" v-if="filteredRecords.length > 0">
<div
v-for="record in filteredRecords"
:key="record.id"
class="record-item"
@click="viewRecord(record)"
>
<div class="record-header">
<div class="record-title">
<h4>检测记录 #{{ record.id }}</h4>
<el-tag :type="getRecordStatusType(record.status)">{{ record.status }}</el-tag>
</div>
<div class="content-right">
<div class="content-right-top">
<div class="content-right-top-title">
<div class="content-right-top-text">诊断信息</div>
<div style="display: flex;align-items: center;">
<div class="content-right-top-text2">未处理</div>
<div style="margin-left: 10px;" @click="editClick">
<img src="@/assets/svg/edit.svg" alt="">
</div>
</div>
<div class="record-time">{{ formatDate(record.createdAt) }}</div>
</div>
<div class="record-content">
<div class="record-stats">
<div class="stat-item">
<span class="stat-label">检测时长</span>
<span class="stat-value">{{ formatDuration(record.duration) }}</span>
<div class="content-right-top-content">
<el-form :model="diagnosticForm" label-width="50px">
<el-form-item label="记录">
<el-input v-model="diagnosticForm.diagnosis_info" disabled :rows="6" type="textarea"
placeholder="请输入" />
</el-form-item>
<el-form-item label="处理">
<el-input v-model="diagnosticForm.treatment_info" disabled :rows="6" type="textarea"
placeholder="请输入" />
</el-form-item>
<el-form-item label="建议">
<el-input v-model="diagnosticForm.suggestion_info" disabled :rows="6" type="textarea"
placeholder="请输入" />
</el-form-item>
</el-form>
</div>
</div>
<div class="content-right-bottom">
<div class="content-right-bottom-title">
<div class="content-right-bottom-text">保存数据列表</div>
</div>
<div class="content-right-bottom-content">
<div v-for="(item2, index2) in item.list" :key="index2" class="content-right-bottom-content-box">
<div class="content-right-bottom-img">截图</div>
<div style="margin-top: 15px;">
<div @click="patientdetails">
<img src="@/assets/svg/datalist.svg" alt="">
</div>
<div>
<img src="@/assets/svg/del.svg" alt="">
</div>
</div>
<div class="stat-item">
<span class="stat-label">截图数量</span>
<span class="stat-value">{{ record.screenshots?.length || 0 }}</span>
</div>
<div class="stat-item">
<span class="stat-label">检测医生</span>
<span class="stat-value">{{ record.doctor || '未记录' }}</span>
</div>
</div>
<div class="record-actions">
<el-button link @click.stop="playVideo(record)">
<el-icon><VideoPlay /></el-icon>
回放视频
</el-button>
<el-button link @click.stop="viewScreenshots(record)">
<el-icon><Picture /></el-icon>
查看截图
</el-button>
<el-button link @click.stop="exportReport(record)">
<el-icon><Download /></el-icon>
导出报告
</el-button>
</div>
</div>
</div>
</div>
<el-empty v-else description="暂无检测记录">
<el-button type="primary" @click="startDetection">开始首次检测</el-button>
</el-empty>
</div>
</div>
<!-- 视频播放对话框 -->
<el-dialog
v-model="videoDialogVisible"
title="检测视频回放"
width="80%"
:before-close="closeVideoDialog"
>
<el-dialog v-model="videoDialogVisible" title="检测视频回放" width="80%" :before-close="closeVideoDialog">
<div class="video-container" v-if="currentVideo">
<video
ref="videoPlayerRef"
:src="currentVideo.url"
controls
width="100%"
height="400"
>
<video ref="videoPlayerRef" :src="currentVideo.url" controls width="100%" height="400">
您的浏览器不支持视频播放
</video>
<div class="video-info">
@ -167,29 +94,24 @@
</el-dialog>
<!-- 截图查看对话框 -->
<el-dialog
v-model="screenshotDialogVisible"
title="检测截图"
width="90%"
:before-close="closeScreenshotDialog"
>
<el-dialog v-model="screenshotDialogVisible" title="检测截图" width="90%" :before-close="closeScreenshotDialog">
<div class="screenshot-container" v-if="currentScreenshots.length > 0">
<div class="screenshot-grid">
<div
v-for="(screenshot, index) in currentScreenshots"
:key="screenshot.id"
class="screenshot-item"
@click="previewScreenshotHandler(screenshot, index)"
>
<div v-for="(screenshot, index) in currentScreenshots" :key="screenshot.id" class="screenshot-item"
@click="previewScreenshotHandler(screenshot, index)">
<img :src="screenshot.thumbnail" :alt="`截图${index + 1}`" />
<div class="screenshot-overlay">
<div class="screenshot-time">{{ formatTime(screenshot.timestamp) }}</div>
<div class="screenshot-actions">
<el-button type="primary" size="small" @click.stop="downloadScreenshot(screenshot)">
<el-icon><Download /></el-icon>
<el-icon>
<Download />
</el-icon>
</el-button>
<el-button type="danger" size="small" @click.stop="deleteScreenshot(screenshot)">
<el-icon><Delete /></el-icon>
<el-icon>
<Delete />
</el-icon>
</el-button>
</div>
</div>
@ -200,12 +122,7 @@
</el-dialog>
<!-- 截图预览对话框 -->
<el-dialog
v-model="previewDialogVisible"
title="截图预览"
width="70%"
:before-close="closePreviewDialog"
>
<el-dialog v-model="previewDialogVisible" title="截图预览" width="70%" :before-close="closePreviewDialog">
<div class="preview-container" v-if="previewScreenshot">
<img :src="previewScreenshot.url" alt="截图预览" class="preview-image" />
<div class="preview-info">
@ -214,16 +131,192 @@
<div class="data-display" v-if="previewScreenshot.data">
<div class="data-item">
<span>头部姿态</span>
<span>Pitch: {{ previewScreenshot.data.pitch }}°, Yaw: {{ previewScreenshot.data.yaw }}°, Roll: {{ previewScreenshot.data.roll }}°</span>
<span>Pitch: {{ previewScreenshot.data.pitch }}°, Yaw: {{ previewScreenshot.data.yaw }}°, Roll: {{
previewScreenshot.data.roll }}°</span>
</div>
<div class="data-item">
<span>足底压力</span>
<span>左足: {{ previewScreenshot.data.leftPressure }}%, 右足: {{ previewScreenshot.data.rightPressure }}%</span>
<span>左足: {{ previewScreenshot.data.leftPressure }}%, 右足: {{ previewScreenshot.data.rightPressure
}}%</span>
</div>
</div>
</div>
</div>
</el-dialog>
<!-- 修改诊断信息 -->
<el-dialog v-model="dialogVisible" center title="诊断信息" width="600" :before-close="handleClose">
<div>
<div class="dialog-title">
<div class="dialog-title-item">
<div>用户ID:</div>{{ patient.id }}
</div>
<div class="dialog-title-item">
<div>姓名:{{ patient.name }}</div>
</div>
</div>
<div>
<el-form :model="diagnosticForm" label-width="50px">
<el-form-item label="记录">
<el-input v-model="diagnosticForm.diagnosis_info" :rows="6" type="textarea" placeholder="请输入" />
</el-form-item>
<el-form-item label="处理">
<el-input v-model="diagnosticForm.treatment_info" :rows="6" type="textarea" placeholder="请输入" />
</el-form-item>
<el-form-item label="建议">
<el-input v-model="diagnosticForm.suggestion_info" :rows="6" type="textarea" placeholder="请输入" />
</el-form-item>
</el-form>
</div>
<div style="display: flex;justify-content: flex-end;color: #ffffff;">测试医生李四</div>
</div>
<template #footer>
<span class="dialog-footer">
<el-button @click="dialogVisible = false">取消</el-button>
<el-button @click="handleDiagnosticInfo('diagnosed')">暂存</el-button>
<el-button type="primary" @click="handleDiagnosticInfo('completed')">
保存
</el-button>
</span>
</template>
</el-dialog>
<!-- 数据详情 -->
<el-dialog class="detailsDialog" v-model="detailsDialogVisible" top="5vh" title="当前保存数据" width="50%"
:before-close="detailshandleClose">
<div style="margin: 20px 50px; height: calc(100vh - 200px);overflow: auto;">
<div>
<div class="patient-detail-box">
<div class="detail-header">
<div class="module-title">
<div class="module-title-text">基础信息</div>
</div>
</div>
<div class="basic-info-box">
<div class="basic-info-content">
<div class="basic-info-text">
<div class="basic-info-textcolor">测试者ID</div>
<div>{{ selectedPatient.id || '-' }}</div>
</div>
<div class="basic-info-text">
<div class="basic-info-textcolor">姓名</div>
<div>{{ selectedPatient.name || '-' }}</div>
</div>
<div class="basic-info-text">
<div class="basic-info-textcolor">性别</div>
<div>{{ selectedPatient.gender || '-' }}</div>
</div>
</div>
<div class="basic-info-content">
<div class="basic-info-text">
<div class="basic-info-textcolor">出生日期</div>
<div>{{ selectedPatient.birth_date ? formatDate(selectedPatient.birth_date) : '-' }}</div>
</div>
<div class="basic-info-text">
<div class="basic-info-textcolor">年龄</div>
<div>{{ calculateAge(selectedPatient.birth_date) }}</div>
</div>
<div class="basic-info-text">
<div class="basic-info-textcolor">民族</div>
<div>{{ selectedPatient.nationality || '-' }}</div>
</div>
</div>
<div class="basic-info-content">
<div class="basic-info-text">
<div class="basic-info-textcolor">身高cm</div>
<div>{{ selectedPatient.height || '-' }}</div>
</div>
<div class="basic-info-text">
<div class="basic-info-textcolor">体重kg</div>
<div>{{ selectedPatient.weight || '-' }}</div>
</div>
<div class="basic-info-text">
<div class="basic-info-textcolor">鞋码</div>
<div>{{ selectedPatient.shoe_size || '-' }}</div>
</div>
</div>
<div class="basic-info-content">
<div class="basic-info-text">
<div class="basic-info-textcolor">电话号码</div>
<div>{{ selectedPatient.phone || '-' }}</div>
</div>
<div class="basic-info-text">
<div class="basic-info-textcolor">建档时间</div>
<div>{{ selectedPatient.created_at ? formatDate(selectedPatient.created_at) : '-' }}</div>
</div>
<div class="basic-info-text">
</div>
</div>
</div>
</div>
</div>
<div class="patient-profile-dialog-box">
<div class="detail-header">
<div class="module-title">
<div class="module-title-text">身体姿态</div>
</div>
</div>
<div>
图片
</div>
</div>
<div class="patient-profile-dialog-box" style="height: 230px;">
<div class="detail-header">
<div class="module-title">
<div class="module-title-text">头部姿态</div>
</div>
</div>
<div class="detail-head-content">
<div style="margin-right: 100px;">
<img src="@/assets/u45.png" style="width: 90px;height: 90px;" alt="">
</div>
<div>
<div>
最大旋转角<span class="detail-head-text">-55.2°</span>
<span class="detail-head-text">-55.2°</span>
</div>
<div style="margin-top: 15px;">最大倾斜角<span class="detail-head-text">-55.2°</span>
<span class="detail-head-text">-55.2°</span></div>
<div style="margin-top: 15px;">最大俯仰角<span class="detail-head-text">-55.2°</span>
<span class="detail-head-text">-55.2°</span></div>
</div>
</div>
</div>
<div class="patient-profile-dialog-box" style="height: 370px;">
<div class="detail-header">
<div class="module-title">
<div class="module-title-text">足底压力</div>
</div>
</div>
<div>
<div>
<div>左前足<span>54%</span></div>
<div>右前足<span>54%</span></div>
</div>
<div>
<div></div>
<div></div>
<div></div>
</div>
<div>
<div>左后足<span>54%</span></div>
<div>右后足<span>54%</span></div>
</div>
</div>
</div>
<div class="patient-profile-dialog-box" style="height: 370px;">
<div class="detail-header">
<div class="module-title">
<div class="module-title-text">视频图片</div>
</div>
</div>
<div>
图片
</div>
</div>
</div>
</el-dialog>
</div>
</template>
@ -254,12 +347,39 @@ const filteredRecords = computed(() => {
if (!searchKeyword.value) {
return detectionRecords.value
}
return detectionRecords.value.filter(record =>
return detectionRecords.value.filter(record =>
record.id.toString().includes(searchKeyword.value) ||
record.doctor?.includes(searchKeyword.value) ||
formatDate(record.createdAt).includes(searchKeyword.value)
)
})
const profileInfo = ref([{ list: [{}, {}] }, {}])
const diagnosticForm = ref({
diagnosis_info: '',
treatment_info: '',
suggestion_info: ''
})
const dialogVisible = ref(false)
const handleClose = () => {
dialogVisible.value = false
}
const detailsDialogVisible = ref(false)
const selectedPatient = ref({})
const detailshandleClose = () => {
detailsDialogVisible.value = false
}
//
const calculateAge = (birthDate) => {
if (!birthDate) return '-'
const today = new Date()
const birth = new Date(birthDate)
let age = today.getFullYear() - birth.getFullYear()
const monthDiff = today.getMonth() - birth.getMonth()
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birth.getDate())) {
age--
}
return age
}
//
const goBack = () => {
@ -294,9 +414,9 @@ const viewScreenshots = (record) => {
}
const previewScreenshotHandler = (screenshot, index) => {
previewScreenshot.value = screenshot
previewDialogVisible.value = true
}
previewScreenshot.value = screenshot
previewDialogVisible.value = true
}
const downloadScreenshot = (screenshot) => {
//
@ -313,7 +433,7 @@ const deleteScreenshot = async (screenshot) => {
cancelButtonText: '取消',
type: 'warning'
})
//
ElMessage.success('截图已删除')
//
@ -477,21 +597,236 @@ const loadDetectionRecords = async () => {
]
}
}
//
function editClick() {
dialogVisible.value = true
}
//
function patientdetails() {
detailsDialogVisible.value = true
}
async function handleDiagnosticInfo(status) {
try {
// // ID
// if (!patientInfo.value.sessionId) {
// throw new Error('Id')
// }
// // API
// const response = await fetch(`${BACKEND_URL}/api/detection/${patientInfo.value.sessionId}/save-info`, {
// method: 'POST',
// headers: {
// 'Content-Type': 'application/json'
// },
// body: JSON.stringify({
// diagnosis_info:diagnosticForm.diagnosis_info,
// treatment_info:diagnosticForm.treatment_info,
// suggestion_info:diagnosticForm.suggestion_info,
// status:status,
// session_id:patientInfo.value.sessionId,
// })
// })
// if (!response.ok) {
// throw new Error(`HTTP ${response.status}: ${response.statusText}`)
// }
// const result = await response.json()
// if (result.success) {
// //
// ElMessage.success({
// message: status + '',
// duration: 5000
// })
// patientInfo.value.sessionId = null
// } else {
// throw new Error(result.message || '')
// }
} catch (error) {
// ElMessage.error({
// message: errorMessage,
// duration: 5000
// })
// patientInfo.value.sessionId = null
} finally {
// patientInfo.value.sessionId = null
}
}
//
onMounted(() => {
loadPatientInfo()
loadDetectionRecords()
// loadDetectionRecords()
})
</script>
<style scoped>
.content-info {
display: flex;
padding: 10px 0px 10px 15px;
min-height: 700px;
}
.content-left {
width: 87px;
min-width: 87px;
height: 100%;
background: inherit;
background-color: rgba(85, 85, 85, 0.6);
font-family: 'Arial Negreta', 'Arial Normal', 'Arial', sans-serif;
font-weight: 700;
font-style: normal;
font-size: 15px;
color: #FFFFFF;
text-align: center;
display: flex;
flex-direction: column;
/* 垂直排列子元素 */
justify-content: center;
/* 垂直居中 */
align-items: center;
/* 水平居中 */
}
.content-left-text1 {}
.content-left-text2 {}
.content-left-text3 {}
.content-center {
width: calc(100% - 327px);
margin: 0px 15px;
background-color: rgba(85, 85, 85, 0.6);
}
.content-right {
width: 260px;
min-width: 260px;
height: 100%;
/* background-color: rgba(85, 85, 85, 0.6); */
}
.content-right-top {
width: 100%;
height: 50%;
background-color: rgba(85, 85, 85, 0.6);
}
.content-right-top-title {
display: flex;
align-items: center;
justify-content: space-between;
color: #ffffff;
padding: 15px;
}
.content-right-top-text {
font-family: 'Arial Negreta', 'Arial Normal', 'Arial', sans-serif;
font-weight: 700;
font-style: normal;
font-size: 16px;
color: #FFFFFF;
}
.content-right-top-text2 {
width: 62px;
height: 32px;
line-height: 32px;
background: rgba(230, 162, 60, 0.1);
color: #E6A23C;
text-align: center;
border-radius: 5px;
}
.content-right-top-content {
height: calc(100% - 75px);
overflow: auto;
}
:deep(.el-textarea__inner) {
background: transparent;
color: #ffffff;
}
:deep(.el-form-item__label) {
color: #ffffff;
}
:deep(.el-textarea.is-disabled .el-textarea__inner) {
background: transparent;
color: #ffffff;
}
.content-right-bottom {
margin-top: 10px;
width: 100%;
height: calc(50% - 10px);
background-color: rgba(85, 85, 85, 0.6);
}
.content-right-bottom-title {
display: flex;
align-items: center;
justify-content: space-between;
color: #ffffff;
padding: 15px 15px 0px;
}
.content-right-bottom-text {
font-family: 'Arial Negreta', 'Arial Normal', 'Arial', sans-serif;
font-weight: 700;
font-style: normal;
font-size: 16px;
color: #FFFFFF;
}
.content-right-bottom-content {
height: calc(100% - 75px);
overflow: auto;
padding: 0px 15px;
}
.content-right-bottom-content-box {
color: #ffffff;
display: flex;
justify-content: center;
margin-top: 10px;
}
.content-right-bottom-img {
width: 180px;
height: 74px;
border: 1px solid #434343;
margin-right: 10px;
}
.dialog-title {
display: flex;
justify-content: space-between;
margin-bottom: 20px;
color: #ffffff;
}
.dialog-title-item {
display: flex;
width: 200px;
color: #ffffff;
}
:deep(.el-dialog) {
background-color: #1D1b26;
}
:deep(.el-dialog__title) {
color: #ffffff;
}
.patient-profile-container {
height: 100vh;
display: flex;
flex-direction: column;
background: #000000;
}
.nav-container {
display: flex;
width: 100%;
@ -516,49 +851,12 @@ onMounted(() => {
color: #FFFFFF;
font-family: 'Arial Normal', 'Arial', sans-serif;
}
.header {
height: 60px;
background: #fff;
border-bottom: 1px solid #e4e7ed;
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 20px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
.header-left {
display: flex;
align-items: center;
gap: 15px;
}
.back-btn {
display: flex;
align-items: center;
gap: 5px;
color: #606266;
font-size: 14px;
}
.back-btn:hover {
color: #409eff;
}
.page-title {
font-size: 20px;
font-weight: 600;
color: #2c3e50;
margin: 0;
}
.main-content {
flex: 1;
overflow-y: auto;
padding: 20px;
padding: 10px;
display: flex;
flex-direction: column;
gap: 20px;
overflow: auto;
width: 100%;
}
.patient-info-card,
@ -787,6 +1085,7 @@ onMounted(() => {
.data-item:last-child {
margin-bottom: 0;
}
.main-dashboard-top {
display: flex;
width: 100%;
@ -809,4 +1108,105 @@ onMounted(() => {
color: #FFFFFF;
font-family: 'Arial Normal', 'Arial', sans-serif;
}
.patient-detail-box {
background: rgb(85, 85, 85);
border-radius: 8px;
padding: 20px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
display: flex;
flex-direction: column;
color: #fff;
}
.detail-header {
display: flex;
justify-content: space-between;
align-items: center;
padding-bottom: 15px;
/* border-bottom: 1px solid #434343; */
}
.detail-header h3 {
margin: 0;
color: #2c3e50;
font-size: 18px;
}
.detail-content {
flex: 1;
margin-bottom: 20px;
}
.module-title {
width: 120px;
display: flex;
align-items: center;
justify-content: center;
/* border: 2px solid #ffffff; */
background: linear-gradient(to right, rgb(245, 173, 7), rgb(160, 5, 216));
border-radius: 20px;
font-size: 16px;
font-weight: bold;
color: #ffffff;
padding: 2px;
}
.module-title-text {
display: flex;
align-items: center;
width: 116px;
background: rgb(85, 85, 85);
border-radius: 20px;
padding: 0px 25px;
}
.basic-info-box {
display: flex;
flex-wrap: wrap;
align-content: center;
height: 100%;
}
.basic-info-content {
display: flex;
justify-content: center;
box-sizing: border-box;
padding-top: 30px;
width: 100%;
}
.basic-info-text {
width: 33%;
text-align: center;
font-size: 20px;
}
.basic-info-textcolor {
color: #30F3FF;
padding-bottom: 8px;
}
:deep(.detailsDialog.el-dialog) {
background-color: rgba(85, 85, 85, 0.9);
}
.patient-profile-dialog-box {
background-color: rgba(85, 85, 85, 0.6);
padding: 20px;
border-radius: 5px;
height: 550px;
margin-top: 20px;
}
.detail-head-content{
display: flex;
color: #ffffff;
padding: 20px;
font-family: 'Arial Negreta', 'Arial Normal', 'Arial', sans-serif;
font-weight: 700;
font-size:14px;
}
.detail-head-text{
margin: 0px 20px;
}
</style>