档案页修改
This commit is contained in:
parent
52a387437f
commit
7dd5545ba0
6
frontend/src/renderer/src/assets/svg/datalist.svg
Normal file
6
frontend/src/renderer/src/assets/svg/datalist.svg
Normal 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>
|
6
frontend/src/renderer/src/assets/svg/del.svg
Normal file
6
frontend/src/renderer/src/assets/svg/del.svg
Normal 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>
|
6
frontend/src/renderer/src/assets/svg/edit.svg
Normal file
6
frontend/src/renderer/src/assets/svg/edit.svg
Normal 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>
|
@ -33,7 +33,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<el-table ref="tableRef" :data="filteredPatients" style="width: 100%" border @cell-click="selectPatient"
|
||||
highlight-current-row :header-cell-style="{color:'#000000 !important'}">
|
||||
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" />
|
||||
@ -768,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 {
|
||||
@ -782,6 +782,7 @@ function delClick(id) {
|
||||
|
||||
.search-box {
|
||||
width: 250px;
|
||||
margin-top: 15px;
|
||||
}
|
||||
|
||||
.patient-list {
|
||||
@ -987,11 +988,11 @@ function delClick(id) {
|
||||
.basic-info-text {
|
||||
width: 33%;
|
||||
text-align: center;
|
||||
font-size: 13px;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.basic-info-textcolor {
|
||||
color: rgb(48, 205, 223);
|
||||
color: #30F3FF;
|
||||
padding-bottom: 8px;
|
||||
}
|
||||
|
||||
@ -1084,12 +1085,15 @@ function delClick(id) {
|
||||
border-color: rgba(215, 215, 215, 1);
|
||||
color: #FFFFFF;
|
||||
}
|
||||
:deep(.el-table th){
|
||||
color: #000000 !important;
|
||||
:deep(.el-table th .cell){
|
||||
color: #30F3FF ;
|
||||
font-weight: 400;
|
||||
font-size: 14px;
|
||||
}
|
||||
:deep(.el-table--border .el-table__inner-wrapper){
|
||||
border-right: 1px solid #434343;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
<style>
|
||||
.dashboard-container.dashboard-container-home .el-table {
|
||||
background: transparent !important;
|
||||
|
@ -364,7 +364,6 @@ const handleSaveAndDetect = async () => {
|
||||
}
|
||||
|
||||
.form-container {
|
||||
flex: 1;
|
||||
overflow-y: auto;
|
||||
padding: 20px 20px 0px;
|
||||
width: 100%;
|
||||
|
@ -19,143 +19,68 @@
|
||||
{{}}
|
||||
</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="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>
|
||||
<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 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>
|
||||
<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 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>
|
||||
<div>
|
||||
<img src="@/assets/svg/datalist.svg" alt="">
|
||||
</div>
|
||||
<div>
|
||||
<img src="@/assets/svg/del.svg" alt="">
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</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 +92,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 +120,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 +129,88 @@
|
||||
<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.sessionId }}
|
||||
</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 v-model="dialogVisible" center title="诊断信息" width="600" :before-close="handleClose">
|
||||
<div>
|
||||
<div class="dialog-title">
|
||||
<div class="dialog-title-item">
|
||||
<div>用户ID:</div>{{ patient.sessionId }}
|
||||
</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>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@ -254,12 +241,22 @@ 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 goBack = () => {
|
||||
@ -294,9 +291,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 +310,7 @@ const deleteScreenshot = async (screenshot) => {
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
|
||||
|
||||
// 删除截图逻辑
|
||||
ElMessage.success('截图已删除')
|
||||
// 重新加载截图列表
|
||||
@ -477,7 +474,54 @@ const loadDetectionRecords = async () => {
|
||||
]
|
||||
}
|
||||
}
|
||||
function editClick(){
|
||||
dialogVisible.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()
|
||||
@ -486,12 +530,157 @@ onMounted(() => {
|
||||
</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 +705,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 +939,7 @@ onMounted(() => {
|
||||
.data-item:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.main-dashboard-top {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
|
Loading…
Reference in New Issue
Block a user