修改档案

This commit is contained in:
limengnan 2025-12-04 12:01:24 +08:00
parent 95cdd967cc
commit 3b6280b7c5
12 changed files with 259 additions and 214 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 334 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 334 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 387 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 401 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 401 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 445 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 460 B

View File

@ -630,6 +630,10 @@ export const historyAPI = {
sessionsPage(params) { sessionsPage(params) {
return api.get('/api/history/sessions', { params }) return api.get('/api/history/sessions', { params })
}, },
// 获取会话详细数据(一个)
sessionsById(session_id) {
return api.get(`/api/history/sessions/${session_id}`)
},
// 删除检测数据记录 // 删除检测数据记录
detectionDelById(id) { detectionDelById(id) {
return api.delete(`/api/detection/data/${id}`, {}) return api.delete(`/api/detection/data/${id}`, {})

View File

@ -45,7 +45,6 @@
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-pagination background layout="prev, pager, next" <el-pagination background layout="prev, pager, next"
:size="size"
:page-size="size" :page-size="size"
:total="patienttotal" :total="patienttotal"
@current-change="handleCurrentChange" @current-change="handleCurrentChange"
@ -204,14 +203,6 @@
@click="startDetection"> @click="startDetection">
开始检测 开始检测
</div> </div>
<!-- <el-button v-if="selectedPatient" type="primary" class="primary-view-profile"
@click="viewPatientProfile">
查看档案
</el-button>
<el-button v-if="selectedPatient" type="primary" class="primary-view-profile"
@click="startDetection">
开始检测
</el-button> -->
</div> </div>
</div> </div>
@ -226,7 +217,8 @@
<Detection v-if="isDetection" :selectedPatient="selectedPatient" <Detection v-if="isDetection" :selectedPatient="selectedPatient"
@endChange="endChange"></Detection> @endChange="endChange"></Detection>
</div> </div>
<PatientProfile v-if="isPatientProfile" <PatientProfile
v-if="isPatientProfile"
:archiveType="false" :archiveType="false"
:selectedPatient="selectedPatient" :selectedPatient="selectedPatient"
@closePatientProfile="closePatientProfile"/> @closePatientProfile="closePatientProfile"/>

View File

@ -480,7 +480,7 @@ import { getBackendUrl, patientAPI } from '../services/api.js'
import noImageSvg from '@/assets/detection/no-image.png' import noImageSvg from '@/assets/detection/no-image.png'
import DiagnosticMessage from '@/views/DiagnosticMessage.vue' import DiagnosticMessage from '@/views/DiagnosticMessage.vue'
import PatientCreate from '@/views/PatientCreate.vue' import PatientCreate from '@/views/PatientCreate.vue'
import HistoryDashboard from '@/views/PatientProfile.vue' import PatientProfile from '@/views/PatientProfile.vue'
import Model from './model.vue' import Model from './model.vue'
import ViewUserInfo from '@/views/ViewUser.vue' import ViewUserInfo from '@/views/ViewUser.vue'

View File

@ -6,82 +6,84 @@
<div class="patientprofiletext2" style="margin-right: 20px;">{{ selectedPatient.name }}</div> <div class="patientprofiletext2" style="margin-right: 20px;">{{ selectedPatient.name }}</div>
<div class="patientprofiletext3">{{ selectedPatient.gender }}</div> <div class="patientprofiletext3">{{ selectedPatient.gender }}</div>
<div class="username-line"></div> <div class="username-line"></div>
<div class="patientprofiletext3">{{ calculateAge(selectedPatient.birth_date) }}</div> <div class="patientprofiletext3">{{ calculateAge(selectedPatient.birth_date) }}</div>
</div> </div>
<img src="@/assets/new/close.png" alt="" style="cursor: pointer;" @click="handleCancel"> <img src="@/assets/archive/close.png" alt="" style="cursor: pointer;" @click="handleCancel">
</div> </div>
<div class="patientprofile-container"> <div class="patientprofile-container">
<div style="height: 100%;width: 500px;margin-right: 15px;"> <div style="height: 100%;width: 500px;margin-right: 15px;">
<div class="patientprofile-container-leftbox"> <div class="patientprofile-container-leftbox">
<div class="patientprofile-title-display" style="margin-bottom:30px"> <div class="patientprofile-title-display" style="margin-bottom:10px">
<div class="patientprofile-son-display"> <div class="patientprofile-son-display">
<img src="@/assets/new/title4.svg" alt="" style="margin-right: 8px;"> <img src="@/assets/archive/usericon.png" alt="" style="margin-right: 8px;">
<div class="body-posture-text">用户信息</div> <div class="profile-text">用户信息</div>
</div> </div>
<div class="patientprofile-son-display"></div> <div class="patientprofile-son-display"></div>
</div> </div>
<div class="patientprofile-userinfo-box"> <div class="patientprofile-userinfo-box">
<div class="patientprofile-userinfo-text1">用户姓名</div> <div class="patientprofile-userinfo-text1">性别</div>
<div class="patientprofile-userinfo-text2">{{ selectedPatient.name }}</div>
<div class="patientprofile-userinfo-text1">用户ID</div>
<div class="patientprofile-userinfo-text2">{{ selectedPatient.id }}</div>
</div>
<div class="patientprofile-userinfo-box">
<div class="patientprofile-userinfo-text1">性别</div>
<div class="patientprofile-userinfo-text2">{{ selectedPatient.gender }}</div> <div class="patientprofile-userinfo-text2">{{ selectedPatient.gender }}</div>
<div class="patientprofile-userinfo-text1">出生日期</div> <div class="patientprofile-userinfo-text3">出生日期</div>
<div class="patientprofile-userinfo-text2">{{ selectedPatient.birth_date }}</div> <div class="patientprofile-userinfo-text2">{{ formatDate(selectedPatient.birth_date) }}</div>
</div> </div>
<div class="patientprofile-userinfo-box"> <div class="patientprofile-userinfo-box">
<div class="patientprofile-userinfo-text1">年龄</div> <div class="patientprofile-userinfo-text1">年龄</div>
<div class="patientprofile-userinfo-text2">{{ calculateAge(selectedPatient.birth_date) }}</div> <div class="patientprofile-userinfo-text2">{{ calculateAge(selectedPatient.birth_date) }}</div>
<div class="patientprofile-userinfo-text1">民族</div> <div class="patientprofile-userinfo-text3">民族</div>
<div class="patientprofile-userinfo-text2">{{ selectedPatient.nationality }}</div> <div class="patientprofile-userinfo-text2">{{ selectedPatient.nationality }}</div>
</div> </div>
<div class="patientprofile-userinfo-box"> <div class="patientprofile-userinfo-box">
<div class="patientprofile-userinfo-text1">居住地</div> <div class="patientprofile-userinfo-text1">居住地</div>
<div class="patientprofile-userinfo-text2">{{ selectedPatient.residence }}</div> <div class="patientprofile-userinfo-text2">{{ selectedPatient.residence }}</div>
<div class="patientprofile-userinfo-text1">身高</div> <div class="patientprofile-userinfo-text3">身高</div>
<div class="patientprofile-userinfo-text2">{{ selectedPatient.height }}cm</div> <div class="patientprofile-userinfo-text2">{{ selectedPatient.height }}cm</div>
</div> </div>
<div class="patientprofile-userinfo-box"> <div class="patientprofile-userinfo-box">
<div class="patientprofile-userinfo-text1">体重</div> <div class="patientprofile-userinfo-text1">体重</div>
<div class="patientprofile-userinfo-text2">{{ selectedPatient.weight }}kg</div> <div class="patientprofile-userinfo-text2">{{ selectedPatient.weight }}kg</div>
<div class="patientprofile-userinfo-text1">鞋码</div> <div class="patientprofile-userinfo-text3">鞋码</div>
<div class="patientprofile-userinfo-text2">{{ selectedPatient.shoe_size }}</div> <div class="patientprofile-userinfo-text2">{{ selectedPatient.shoe_size }}</div>
</div> </div>
<div class="patientprofile-userinfo-box"> <div class="patientprofile-userinfo-box">
<div class="patientprofile-userinfo-text1">电话</div> <div class="patientprofile-userinfo-text1">电话</div>
<div class="patientprofile-userinfo-text2">{{ selectedPatient.phone }}</div> <div class="patientprofile-userinfo-text2">{{ selectedPatient.phone }}</div>
<div class="patientprofile-userinfo-text1">邮箱</div> <div class="patientprofile-userinfo-text3">邮箱</div>
<div class="patientprofile-userinfo-text2">{{ selectedPatient.email }}</div> <div class="patientprofile-userinfo-text2">{{ selectedPatient.email }}</div>
</div> </div>
<div class="patientprofile-userinfo-box"> <div class="patientprofile-userinfo-box">
<div class="patientprofile-userinfo-text1">职业</div> <div class="patientprofile-userinfo-text1">职业</div>
<div class="patientprofile-userinfo-text2">{{ selectedPatient.occupation }}</div> <div class="patientprofile-userinfo-text2">{{ selectedPatient.occupation }}</div>
<div class="patientprofile-userinfo-text1">证件号</div> <div class="patientprofile-userinfo-text3">证件号</div>
<div class="patientprofile-userinfo-text2">{{ selectedPatient.workplace }}</div> <div class="patientprofile-userinfo-text2">{{ selectedPatient.workplace }}</div>
</div> </div>
</div> </div>
<div class="patientprofile-container-leftbottombox"> <div class="patientprofile-container-leftbottombox">
<div class="patientprofile-title-display"> <div class="patientprofile-title-display">
<div class="patientprofile-son-display"> <div class="patientprofile-son-display">
<img src="@/assets/new/history2.svg" alt="" style="margin-right: 8px;"> <img src="@/assets/archive/table.png" alt="" style="margin-right: 8px;">
<div class="body-posture-text">检测记录9</div> <div class="profile-text">检测记录
<span style="padding-left:5px; font-family: 'Noto Sans SC';
font-weight: 400;
font-style: normal;
font-size: 14px;
color: rgba(255, 255, 255, 0.5);">共计{{recordData.length}}
</span>
</div>
</div> </div>
<div class="patientprofile-son-display"> <div class="patientprofile-son-display">
<el-button v-if="selectedPatient" type="primary" <el-button v-if="selectedPatient" type="primary"
:class="selectedData.length == 2? 'patientprofile-selectedbutotn':'patientprofile-butotn'" :class="selectedData.length == 2? 'patientprofile-selectedbutotn':'patientprofile-butotn'"
@click="viewPatientProfile"> @click="viewPatientProfile">
<img v-if="selectedData.length == 2" src="@/assets/new/bi2.png" alt="" style="margin-right: 8px;"> <img v-if="selectedData.length == 2" src="@/assets/archive/bi2.png" alt="" style="margin-right: 8px;">
<img v-else src="@/assets/new/bi.png" alt="" style="margin-right: 8px;"> <img v-else src="@/assets/archive/bi.png" alt="" style="margin-right: 8px;" class="opacity50">
报告对比 报告对比
</el-button> </el-button>
<el-button v-if="selectedPatient" type="primary" <el-button v-if="selectedPatient" type="primary"
:class="selectedData.length>0? 'patientprofile-selectedbutotn':'patientprofile-butotn'" :class="selectedData.length>0? 'patientprofile-selectedbutotn':'patientprofile-butotn'"
@click="viewPatientProfile"> @click="viewPatientProfile">
<img v-if="selectedData.length>0" src="@/assets/new/del2.png" alt="" style="margin-right: 8px;"> <img v-if="selectedData.length>0" src="@/assets/archive/del2.png" alt=""
<img v-else src="@/assets/new/del.png" alt="" style="margin-right: 8px;"> style="margin-right: 8px;" >
<img v-else src="@/assets/archive/del.png" alt="" style="margin-right: 8px;" class="opacity50">
删除记录 删除记录
</el-button> </el-button>
</div> </div>
@ -93,21 +95,21 @@
@cell-click="selectRecord" @selection-change="handleSelectionChange" @cell-click="selectRecord" @selection-change="handleSelectionChange"
highlight-current-row> highlight-current-row>
<el-table-column type="selection" width="30" /> <el-table-column type="selection" width="30" />
<el-table-column prop="id" label="患者ID" width="70" /> <el-table-column prop="start_time" label="就诊时间" width="160" align="center" />
<el-table-column prop="created_at" label="就诊时间" width="100" align="center" /> <el-table-column prop="creator_name" label="测试医生" min-width="80" align="center" />
<el-table-column prop="doctor" label="测试医生" min-width="80" align="center" />
<el-table-column prop="report" label="报告" width="60"> <el-table-column prop="report" label="报告" width="60">
<template #default="scope"> <template #default="scope">
<div <div
v-if="scope.row.report == null" v-if="scope.row.detection_report == null"
style="width:28px; style="width:28px;
font-weight: 400; font-family: 'Noto Sans SC';
font-style: normal; font-weight: 400;
font-size: 14px; font-style: normal;
color: #266FFF; font-size: 14px;
color: #14AAFF;
line-height: 18px; line-height: 18px;
cursor: pointer;">生成报告</div> cursor: pointer;">生成报告</div>
<div class="patientprofile-file-box" v-if="scope.row.report != null"> <div class="patientprofile-file-box" v-if="scope.row.detection_report != null">
<img src="@/assets/new/file.png" alt="" @click="fileClick(scope.row)"> <img src="@/assets/new/file.png" alt="" @click="fileClick(scope.row)">
<img src="@/assets/new/del.png" class="patientprofile-del" alt="" <img src="@/assets/new/del.png" class="patientprofile-del" alt=""
@click="deleteClick(scope.row)"> @click="deleteClick(scope.row)">
@ -116,13 +118,8 @@
</el-table-column> </el-table-column>
<el-table-column label="操作" width="60"> <el-table-column label="操作" width="60">
<template #default="scope"> <template #default="scope">
<span <img src="@/assets/archive/del.png"
style="font-weight: 400; style="cursor: pointer;" @click.stop="deleteClick(scope.row)">
font-style: normal;
font-size: 14px;
color: #FF3300;
cursor: pointer;"
@click="deleteClick(scope.row.id)">删除</span>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -132,12 +129,12 @@
<div class="patientprofile-title-display"> <div class="patientprofile-title-display">
<div class="patientprofile-son-display"> <div class="patientprofile-son-display">
<img src="@/assets/new/history3.svg" alt="" style="margin-right: 8px;"> <img src="@/assets/new/history3.svg" alt="" style="margin-right: 8px;">
<div class="body-posture-text">就诊档案</div> <div class="profile-text">就诊档案</div>
</div> </div>
<div class="patientprofile-son-display"> <div class="patientprofile-son-display">
<div class="patientprofile-son-text">测试医生李莉莉</div> <div class="patientprofile-son-text">测试医生{{ selectedRecord.creator_name }}</div>
<div class="patientprofile-son-text">就诊时间2025年10月20日 10:48:23</div> <div class="patientprofile-son-text">就诊时间{{ selectedRecord.start_time }}</div>
<div class="patientprofile-son-text">档案ID25002</div> <div class="patientprofile-son-text">档案ID{{ selectedPatient.id }}</div>
<div v-if="archiveType == true" class="patientprofile-son-detectiontext">正在检测</div> <div v-if="archiveType == true" class="patientprofile-son-detectiontext">正在检测</div>
</div> </div>
@ -167,16 +164,16 @@
</el-button> </el-button>
</div> </div>
</div> </div>
<div class="patientprofile-container-databg"> <div v-if="useImgList.length>0" class="patientprofile-container-databg">
<div class="patientprofile-arrowbox"> <div class="patientprofile-arrowbox">
<div class="leftjiantou" @click="handleUpward"></div> <div class="leftjiantou" @click="handleUpward"></div>
</div> </div>
<div class="patientprofile-imgbgbox"> <div class="patientprofile-imgbgbox">
<el-checkbox-group v-model="checkboxGroup" size="large" @change="selectedChange" > <el-checkbox-group v-model="checkboxGroup" size="large" @change="selectedChange" >
<div v-for="(item, index) in useImgList" :key="index" <div v-for="(item, index) in useImgList" :key="index"
class="patientprofile-imgbox"> class="patientprofile-imgbox">
<div class="patientprofile-imgactive"> <div class="patientprofile-imgactive">
<img src="@/assets/new/test.png" alt=""> <img :src="BACKEND_URL+'/' + item.foot_data_image" alt="" style="width: 100%;height: 100%;">
</div> </div>
<div class="patientprofile-imgtextbox"> <div class="patientprofile-imgtextbox">
<el-checkbox <el-checkbox
@ -186,6 +183,9 @@
</el-checkbox> </el-checkbox>
</div> </div>
</div> </div>
<div class="patientprofile-imgbox" v-if="useImgList.length < 2"></div>
<div class="patientprofile-imgbox" v-if="useImgList.length < 3"></div>
<div class="patientprofile-imgbox" v-if="useImgList.length < 4"></div>
</el-checkbox-group> </el-checkbox-group>
</div> </div>
<div class="patientprofile-arrowbox"> <div class="patientprofile-arrowbox">
@ -193,6 +193,7 @@
</div> </div>
</div> </div>
<div v-else class="patientprofile-container-databg"></div>
</div> </div>
<div class="patientprofile-container-video"> <div class="patientprofile-container-video">
<div class="patientprofile-container-data-displaycup"> <div class="patientprofile-container-data-displaycup">
@ -208,16 +209,19 @@
删除 删除
</el-button> </el-button>
</div> </div>
<div class="patientprofile-container-databg"> <div v-if="useVideoList.length>0" class="patientprofile-container-databg" >
<div class="patientprofile-arrowbox"> <div class="patientprofile-arrowbox">
<div class="leftjiantou" @click="handleVideoUpward"></div> <div class="leftjiantou" @click="handleVideoUpward"></div>
</div> </div>
<div class="patientprofile-imgbgbox"> <div class="patientprofile-imgbgbox">
<el-checkbox-group v-model="checkboxVideo" size="large" @change="selectedChange" > <el-checkbox-group v-model="checkboxVideo" size="large" @change="selectedChange" >
<div v-for="(item, index) in useVideoList" :key="index" <div v-for="(item, index) in useVideoList" :key="index"
class="patientprofile-imgbox"> class="patientprofile-imgbox">
<div class="patientprofile-imgactive"> <div class="patientprofile-imgactive">
<img src="@/assets/new/test.png" alt=""> {{ BACKEND_URL+'/' + item.screen_video.replace(/\\/g, '/') }}
<video ref="videoPlayerRef" :src="item.screen_video ? BACKEND_URL+'/' + item.screen_video.replace(/\\/g, '/') : ''" controls width="100%" height="100%">
您的浏览器不支持视频播放
</video>
</div> </div>
<div class="patientprofile-imgtextbox"> <div class="patientprofile-imgtextbox">
<el-checkbox <el-checkbox
@ -227,6 +231,9 @@
</el-checkbox> </el-checkbox>
</div> </div>
</div> </div>
<div class="patientprofile-imgbox" v-if="useVideoList.length < 2"></div>
<div class="patientprofile-imgbox" v-if="useVideoList.length < 3"></div>
<div class="patientprofile-imgbox" v-if="useVideoList.length < 4"></div>
</el-checkbox-group> </el-checkbox-group>
</div> </div>
<div class="patientprofile-arrowbox"> <div class="patientprofile-arrowbox">
@ -234,6 +241,7 @@
</div> </div>
</div> </div>
<div v-else class="patientprofile-container-databg"></div>
</div> </div>
<div class="patientprofile-container-info"> <div class="patientprofile-container-info">
<div class="patientprofile-container-data-displaycup"> <div class="patientprofile-container-data-displaycup">
@ -282,6 +290,11 @@ import { useRouter, useRoute } from 'vue-router'
import { ElMessage, ElMessageBox } from 'element-plus' import { ElMessage, ElMessageBox } from 'element-plus'
import { patientAPI, detectionAPI,historyAPI,getBackendUrl } from '@/services/api.js' import { patientAPI, detectionAPI,historyAPI,getBackendUrl } from '@/services/api.js'
import { useAuthStore } from '@/stores/index.js' import { useAuthStore } from '@/stores/index.js'
const formatDate = (date) => {
return new Date(date).toLocaleDateString('zh-CN')
}
//
const BACKEND_URL = getBackendUrl()
const emit = defineEmits([ 'endChange']); const emit = defineEmits([ 'endChange']);
const props = defineProps({ const props = defineProps({
selectedPatient: { selectedPatient: {
@ -298,55 +311,22 @@ const props = defineProps({
const archiveType =ref(false) const archiveType =ref(false)
const profileInfo = ref({}) // const profileInfo = ref({}) //
const selectedRecord = ref({}) const selectedRecord = ref({})
const recordData =ref([{ const recordData =ref([])
id: 1,
name: '张三',
sex: '男',
age: 18,
phone: '12345678901',
address: '中国',
description: '这是一个测试患者',
created_at: '2021-01-01 00:00:00',
updateTime: '2021-01-01 00:00:00',
status: '正常',
isDeleted: false,
},{
id: 2,
name: '张三',
sex: '男',
age: 18,
phone: '12345678901',
address: '中国',
description: '这是一个测试患者',
created_at: '2021-01-01 00:00:00',
updateTime: '2021-01-01 00:00:00',
report: '正常',
isDeleted: false,
}
])
const checkboxGroup = ref([]) // const checkboxGroup = ref([]) //
const checkboxVideo =ref([]) // const checkboxVideo =ref([]) //
const imageList = ref([]) const imageList = ref([])
for (let i = 0; i < 10; i++) { const videoList = ref([])
imageList.value.push({ const activeImgIndex = ref(0)
id: i, const activeVideoIndex = ref(0)
name: '图片' + i,
url: '',
description: '这是一个测试图片',
})
}
const tempImgList = ref([]) const tempImgList = ref([])
tempImgList.value = [...imageList.value] const tempVideoList = ref([])
// tempImgList.value = [...imageList.value]
const useImgList = ref([])// const useImgList = ref([])//
const useVideoList = ref([])// const useVideoList = ref([])//
useImgList.value =[...tempImgList.value.slice(0, 4)] // // useImgList.value =[...tempImgList.value.slice(0, 4)] //
useVideoList.value =[...tempImgList.value.slice(0, 4)] // // useVideoList.value =[...tempImgList.value.slice(0, 4)] //
const selectedData = ref([]) // const selectedData = ref([]) //
@ -379,6 +359,8 @@ const handleSubmit = (item) => {
function selectRecord(data){ // function selectRecord(data){ //
selectedRecord.value = data selectedRecord.value = data
sessionsById(data.id)
} }
const handleSelectionChange = (val) => { // const handleSelectionChange = (val) => { //
selectedData.value = val selectedData.value = val
@ -387,34 +369,73 @@ const handleSelectionChange = (val) => { // 列表多选
const sessionsInit = async () => { const sessionsInit = async () => {
try { try {
let params ={ let params ={
patient_id: props.selectedPatient.id patient_id: props.selectedPatient.id,
size: 99
} }
// //
const response = await historyAPI.sessionsPage(params) const response = await historyAPI.sessionsPage(params)
if (response.success) { if (response.success) {
response.data.sessions.forEach(element => { // response.data.sessions.forEach(element => {
element.list = [{}] // element.list = [{}]
}); // });
recordData.value = response.data.sessions recordData.value = response.data.sessions
} }
} catch (error) { } catch (error) {
ElMessage.error('获取失败') ElMessage.error('获取失败')
} }
} }
const sessionsById = async (session_id) => {
try {
imageList.value = []
videoList.value = []
tempImgList.value = []
tempVideoList.value = []
useImgList.value = []
useVideoList.value = []
activeImgIndex.value = 0
activeVideoIndex.value = 0
//
const response = await historyAPI.sessionsById(session_id)
if (response.success) {
imageList.value = response.data.data
videoList.value = response.data.videos
tempImgList.value = [...imageList.value]
tempVideoList.value = [...videoList.value]
if(tempImgList.value.length>4){
useImgList.value =[...tempImgList.value.slice(0, 4)]
}else{
useImgList.value =[...tempImgList.value]
}
if(useVideoList.value.length>4){
useVideoList.value =[...tempVideoList.value.slice(0, 4)]
}else{
useVideoList.value =[...tempVideoList.value]
}
}
} catch (error) {
ElMessage.error('获取失败')
}
}
onMounted(() => { onMounted(() => {
archiveType.value = props.archiveType archiveType.value = props.archiveType
// sessionsInit() sessionsInit()
}) })
function deleteClick(row){ function deleteClick(row){
// checking // checking
if (row.status === 'checking') { // if (row.status === 'checking') {
ElMessage.warning({ // ElMessage.warning({
message: '平衡体态检查中,不能删除!', // message: '',
duration: 3000 // duration: 3000
}); // });
return; // return;
} // }
ElMessageBox.confirm( ElMessageBox.confirm(
'确定义删除此条数据?', '确定义删除此条数据?',
@ -425,17 +446,17 @@ function deleteClick(row){
type: 'warning', type: 'warning',
} }
).then(() => { ).then(() => {
historyAPI.sessionsDelById(row.id).then((response)=>{ historyAPI.sessionsDelById(row.id).then((response)=>{
if(response.success){ if(response.success){
ElMessage.success({ ElMessage.success({
message: response.message, message: response.message,
duration: 5000 duration: 5000
}); });
sessionsInit() sessionsInit()
} }
}).catch(()=>{ }).catch(()=>{
})
}) })
})
} }
function fileClick(row){ function fileClick(row){
ElMessage.success({ ElMessage.success({
@ -447,10 +468,15 @@ function fileClick(row){
function selectedChange(val){ function selectedChange(val){
console.log(val) console.log(val)
} }
const activeImgIndex = ref(0)
const activeVideoIndex = ref(0) function handleNext(){ //
function handleNext(){ if( useImgList.value.length<4){
ElMessage.success({
message: '已最后一页',
duration: 3000
});
return
}
if(activeImgIndex.value + 4 >= imageList.value.length){ if(activeImgIndex.value + 4 >= imageList.value.length){
ElMessage.success({ ElMessage.success({
message: '已最后一页', message: '已最后一页',
@ -461,63 +487,53 @@ function handleNext(){
activeImgIndex.value = activeImgIndex.value + 1 activeImgIndex.value = activeImgIndex.value + 1
tempImgList.value = [...imageList.value] tempImgList.value = [...imageList.value]
useImgList.value =[...tempImgList.value.slice(activeImgIndex.value, activeImgIndex.value+4)] useImgList.value =[...tempImgList.value.slice(activeImgIndex.value, activeImgIndex.value+4)]
ElMessage.success({
message: '下一页',
duration: 3000
});
} }
function handleUpward(){ function handleUpward(){ //
if(activeImgIndex.value + 4 <= 4){ if(activeImgIndex.value + 4 <= 4){
ElMessage.success({ ElMessage.success({
message: '已第一页', message: '已第一页',
duration: 3000 duration: 1000
}); });
return return
} }
activeImgIndex.value = activeImgIndex.value - 1 activeImgIndex.value = activeImgIndex.value - 1
tempImgList.value = [...imageList.value] tempImgList.value = [...imageList.value]
useImgList.value =[...tempImgList.value.slice(activeImgIndex.value, activeImgIndex.value+4)] useImgList.value =[...tempImgList.value.slice(activeImgIndex.value, activeImgIndex.value+4)]
ElMessage.success({
message: '下一页',
duration: 3000
});
} }
function handleVideoNext(){ function handleVideoNext(){ //
if(activeVideoIndex.value + 4 >= imageList.value.length){ if( useVideoList.value.length<4){
ElMessage.success({ ElMessage.success({
message: '已最后一页', message: '已最后一页',
duration: 3000 duration: 1000
});
return
}
if(activeVideoIndex.value + 4 >= videoList.value.length){
ElMessage.success({
message: '已最后一页',
duration: 1000
}); });
return return
} }
activeVideoIndex.value = activeVideoIndex.value + 1 activeVideoIndex.value = activeVideoIndex.value + 1
tempImgList.value = [...imageList.value] tempImgList.value = [...videoList.value]
useVideoList.value = [...tempImgList.value.slice(activeVideoIndex.value, activeVideoIndex.value+4)] useVideoList.value = [...tempImgList.value.slice(activeVideoIndex.value, activeVideoIndex.value+4)]
ElMessage.success({
message: '下一页',
duration: 3000
});
} }
function handleVideoUpward(){ function handleVideoUpward(){ //
if(activeVideoIndex.value + 4 <= 4){ if(activeVideoIndex.value + 4 <= 4){
ElMessage.success({ ElMessage.success({
message: '已第一页', message: '已第一页',
duration: 3000 duration: 1000
}); });
return return
} }
activeVideoIndex.value = activeVideoIndex.value - 1 activeVideoIndex.value = activeVideoIndex.value - 1
tempImgList.value = [...imageList.value] tempImgList.value = [...videoList.value]
useVideoList.value = [...tempImgList.value.slice(activeVideoIndex.value, activeVideoIndex.value+4)] useVideoList.value = [...tempImgList.value.slice(activeVideoIndex.value, activeVideoIndex.value+4)]
ElMessage.success({
message: '下一页',
duration: 3000
});
} }
@ -568,7 +584,9 @@ async function handleDiagnosticInfo(status) { // 保存诊断信息
} finally { } finally {
} }
} }
function viewPatientProfile() { //
}
</script> </script>
<style scoped> <style scoped>
@ -579,7 +597,7 @@ async function handleDiagnosticInfo(status) { // 保存诊断信息
left: 0; left: 0;
width: 100vw; width: 100vw;
height: 100vh; height: 100vh;
background: #101010; background: rgba(25, 29, 40, 1);
} }
.patient-profile-header{ .patient-profile-header{
width: 100%; width: 100%;
@ -591,27 +609,30 @@ async function handleDiagnosticInfo(status) { // 保存诊断信息
padding: 0 20px; padding: 0 20px;
} }
.patientprofiletext1{ .patientprofiletext1{
font-family: 'Noto Sans SC Bold', 'Noto Sans SC Regular', 'Noto Sans SC';
font-weight: 700; font-weight: 700;
font-style: normal; font-style: normal;
color: #266FFF; font-size: 24px;
font-size: 18px; color: #0B94D5;
text-align: left; text-align: left;
} }
.patientprofiletext2{ .patientprofiletext2{
font-family: 'Noto Sans SC Bold', 'Noto Sans SC Regular', 'Noto Sans SC';
font-weight: 700; font-weight: 700;
font-style: normal; font-style: normal;
font-size: 22px; font-size: 20px;
color: #FFFFFF; color: #FFFFFF;
} }
.patientprofiletext3{ .patientprofiletext3{
font-weight: 400; font-family: 'Noto Sans SC Bold', 'Noto Sans SC Regular', 'Noto Sans SC';
font-weight: 700;
font-style: normal; font-style: normal;
font-size: 16px; font-size: 20px;
color: #FFFFFF; color: #FFFFFF;
} }
.username-line { .username-line {
width: 2px; width: 2px;
height: 15px; height: 22px;
margin: 0 10px; margin: 0 10px;
background-color: #fff; background-color: #fff;
} }
@ -625,28 +646,27 @@ async function handleDiagnosticInfo(status) { // 保存诊断信息
} }
.patientprofile-container-leftbox{ .patientprofile-container-leftbox{
width: 500px; width: 500px;
height: 395px; height: 350px;
background-color: rgba(40, 40, 40, 1); background: linear-gradient(135deg, rgba(42, 54, 73, 1) 0%, rgba(42, 54, 73, 1) 0%, rgba(34, 43, 56, 1) 100%, rgba(34, 43, 56, 1) 100%);
border-radius: 5px; border-radius: 5px;
} }
.patientprofile-container-leftbottombox{ .patientprofile-container-leftbottombox{
margin-top: 15px; margin-top: 15px;
width: 500px; width: 500px;
height: calc(100% - 395px - 15px) ; height: calc(100% - 350px - 15px) ;
background-color: rgba(40, 40, 40, 1); background: linear-gradient(135deg, rgba(42, 54, 73, 1) 0%, rgba(42, 54, 73, 1) 0%, rgba(34, 43, 56, 1) 100%, rgba(34, 43, 56, 1) 100%);
border-radius: 5px; border-radius: 5px;
} }
.patientprofile-container-rightbox{ .patientprofile-container-rightbox{
width: calc(100% - 500px - 15px) ; width: calc(100% - 500px - 15px) ;
height: 100%; height: 100%;
background-color: rgba(40, 40, 40, 1); background: linear-gradient(135deg, rgba(42, 54, 73, 1) 0%, rgba(42, 54, 73, 1) 0%, rgba(34, 43, 56, 1) 100%, rgba(34, 43, 56, 1) 100%);
border-radius: 5px; border-radius: 5px;
} }
.patientprofile-title-display{ .patientprofile-title-display{
width: 100%; width: 100%;
height: 50px; height: 60px;
border-bottom: 1px solid #000;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
@ -675,40 +695,50 @@ async function handleDiagnosticInfo(status) { // 保存诊断信息
margin-bottom: 22px; margin-bottom: 22px;
} }
.patientprofile-userinfo-text1{ .patientprofile-userinfo-text1{
width: 75px; width: 60px;
font-family: 'Noto Sans SC';
font-weight: 400; font-weight: 400;
font-style: normal; font-style: normal;
font-size: 14px; font-size: 14px;
color: #949494; color: rgba(255, 255, 255, 0.6);
} }
.patientprofile-userinfo-text2{ .patientprofile-userinfo-text2{
width: 150px; width: 150px;
font-family: 'Noto Sans SC';
font-weight: 400;
font-style: normal;
font-size: 16px;
color: #FFFFFF;
}
.patientprofile-userinfo-text3{
width: 70px;
font-family: 'Noto Sans SC';
font-weight: 400; font-weight: 400;
font-style: normal; font-style: normal;
font-size: 14px; font-size: 14px;
color: #FFFFFF; color: rgba(255, 255, 255, 0.6);
} }
.patientprofile-butotn{ .patientprofile-butotn{
width: 98px; width: 98px;
height: 30px; height: 40px;
background: inherit; background: inherit;
background-color: rgba(64, 64, 64, 1); background-color: rgba(55, 65, 81, 1);
border-radius: 4px; border-radius: 4px;
box-shadow: 0 0 0 rgba(64, 64, 64, 1); box-shadow: 0 0 0 rgba(55, 65, 81, 1);
border-color: rgba(64, 64, 64, 1); border-color: rgba(55, 65, 81, 1);
font-weight: 400; font-weight: 400;
font-style: normal; font-style: normal;
font-size: 14px; font-size: 14px;
color: rgb(120, 120, 120); color: rgba(255, 255, 255, 0.5);
cursor: default; cursor: default;
} }
.patientprofile-selectedbutotn{ .patientprofile-selectedbutotn{
width: 98px; width: 98px;
height: 30px; height: 40px;
background-color: rgba(38, 111, 255, 1); background-color: #0b94d5;
border-radius: 4px; border-radius: 4px;
box-shadow: 0 0 0 rgba(38, 111, 255, 1); box-shadow: 0 0 0 #0b94d5;
border-color: rgba(38, 111, 255, 1); border-color: #0b94d5;
font-weight: 400; font-weight: 400;
font-style: normal; font-style: normal;
font-size: 14px; font-size: 14px;
@ -739,17 +769,23 @@ async function handleDiagnosticInfo(status) { // 保存诊断信息
} }
.patient-profile-container .el-table th.el-table__cell.is-leaf { .patient-profile-container .el-table th.el-table__cell.is-leaf {
background-color: rgb(70, 70, 70) !important; background-color: #374151!important;
font-family: 'Noto Sans SC Bold', 'Noto Sans SC Regular', 'Noto Sans SC';
font-weight: 700;
font-style: normal;
font-size: 14px;
color: rgba(255, 255, 255, 0.6);
height: 50px;
} }
.patient-profile-container .el-table th.el-table__cell.is-leaf{ .patient-profile-container .el-table th.el-table__cell.is-leaf{
border-bottom: 1px solid rgba(54, 54, 54, 1); border-bottom: 1px solid #374151;
} }
.patient-profile-container .el-table td.el-table__cell { .patient-profile-container .el-table td.el-table__cell {
background-color: #282828 !important; background-color: transparent !important;
border-bottom: 1px solid rgba(54, 54, 54, 1); border-bottom: 1px solid #374151;
} }
.patient-profile-container .el-table td.el-table__cell:hover { .patient-profile-container .el-table td.el-table__cell:hover {
background-color: #363636 !important; /* 自定义浅蓝底色 */ background-color: #1f2a45 !important; /* 自定义浅蓝底色 */
} }
.patient-profile-container .el-table .cell{ .patient-profile-container .el-table .cell{
font-size: 14px !important; font-size: 14px !important;
@ -822,20 +858,20 @@ async function handleDiagnosticInfo(status) { // 保存诊断信息
height: 16px; height: 16px;
} }
.patient-profile-container .el-checkbox__input.is-indeterminate .el-checkbox__inner{ .patient-profile-container .el-checkbox__input.is-indeterminate .el-checkbox__inner{
background-color: rgba(38, 111, 255, 1); background-color: #0b94d5;
border-color: rgba(38, 111, 255, 1); border-color: #0b94d5;
} }
.patient-profile-container .el-checkbox__input.is-indeterminate .el-checkbox__inner:before{ .patient-profile-container .el-checkbox__input.is-indeterminate .el-checkbox__inner:before{
top: 6px; top: 6px;
} }
.patient-profile-container .el-checkbox__input.is-checked .el-checkbox__inner{ .patient-profile-container .el-checkbox__input.is-checked .el-checkbox__inner{
background-color: rgba(38, 111, 255, 1); background-color: #0b94d5;
border-color: rgba(38, 111, 255, 1); border-color: #0b94d5;
} }
.patient-profile-container .el-table--enable-row-hover .el-table__body tr:hover>td.el-table__cell{ .patient-profile-container .el-table--enable-row-hover .el-table__body tr:hover>td.el-table__cell{
background-color: #363636 !important; background-color: #1f2a45 !important;
} }
.patientprofile-son-text{ .patientprofile-son-text{
font-weight: 700; font-weight: 700;
@ -858,21 +894,21 @@ async function handleDiagnosticInfo(status) { // 保存诊断信息
.patientprofile-container-databg{ .patientprofile-container-databg{
width: 100%; width: 100%;
height: calc(100% - 40px); height: calc(100% - 40px);
background-color: rgba(27, 27, 27, 1); background-color: rgba(55, 65, 81, 1);
border-radius: 10px; border-radius: 10px;
display: flex; display: flex;
align-items: center; align-items: center;
padding: 10px 0px; padding: 10px 0px;
} }
.patientprofile-container-dataInfobg{ .patientprofile-container-dataInfobg{
width: 100%; width: 100%;
height: calc(100% - 40px); height: calc(100% - 40px);
background-color: rgba(27, 27, 27, 1); /* background-color: rgba(55, 65, 81, 1); */
border-radius: 10px; border-radius: 10px;
display: flex; display: flex;
align-items: center; align-items: center;
padding: 10px; padding: 10px;
padding-left: 0;
} }
@ -901,7 +937,7 @@ async function handleDiagnosticInfo(status) { // 保存诊断信息
.patientprofile-container-data-line{ .patientprofile-container-data-line{
width: 4px; width: 4px;
height: 13px; height: 13px;
background-color: rgba(38, 111, 255, 1); background-color: #0b94d5;
margin-right: 3px; margin-right: 3px;
} }
.patientprofile-container-data-title{ .patientprofile-container-data-title{
@ -942,7 +978,7 @@ async function handleDiagnosticInfo(status) { // 保存诊断信息
border-radius: 4px; border-radius: 4px;
} }
.patientprofile-imgactive:hover{ .patientprofile-imgactive:hover{
border: 2px solid rgba(38, 111, 255, 1); border: 2px solid #0b94d5;
} }
.patientprofile-imgtextbox{ .patientprofile-imgtextbox{
width: 100%; width: 100%;
@ -1000,10 +1036,11 @@ async function handleDiagnosticInfo(status) { // 保存诊断信息
justify-items: center; justify-items: center;
} }
.patientprofile-container-dataInfobg-lefttext{ .patientprofile-container-dataInfobg-lefttext{
font-family: 'Noto Sans SC';
font-weight: 400; font-weight: 400;
font-style: normal; font-style: normal;
font-size: 14px; font-size: 14px;
color: #787878; color: rgba(255, 255, 255, 0.6);
width: 60px; width: 60px;
text-align: center; text-align: center;
padding-top: 10px; padding-top: 10px;
@ -1018,15 +1055,15 @@ async function handleDiagnosticInfo(status) { // 保存诊断信息
.patientprofile-container-dataInfobg-textarea .el-textarea__inner{ .patientprofile-container-dataInfobg-textarea .el-textarea__inner{
width: 100% ; width: 100% ;
height: 100%; height: 100%;
background: #282828; background: #191D28;
box-shadow: 0 0 0 1px rgb(54, 54, 54) inset; box-shadow: 0 0 0 1px #191D28 inset;
color: #fff; color: #fff;
} }
.patientprofile-container-dataInfobg-textarea .el-textarea__inner:hover{ .patientprofile-container-dataInfobg-textarea .el-textarea__inner:hover{
width: 100% ; width: 100% ;
height: 100%; height: 100%;
background: #282828; background: #191D28;
box-shadow: 0 0 0 1px rgba(38, 111, 255, 1) inset; box-shadow: 0 0 0 1px #0b94d5 inset;
} }
.patientprofile-container-dataInfobg-rightbox{ .patientprofile-container-dataInfobg-rightbox{
@ -1037,12 +1074,12 @@ async function handleDiagnosticInfo(status) { // 保存诊断信息
} }
.patientprofile-container-dataInfobg .el-select__wrapper{ .patientprofile-container-dataInfobg .el-select__wrapper{
height: 40px; height: 40px;
background: #282828; background: #191D28;
box-shadow: 0 0 0 1px rgb(54, 54, 54) inset; box-shadow: 0 0 0 1px #191D28 inset;
} }
.patientprofile-container-dataInfobg .el-select__wrapper:hover{ .patientprofile-container-dataInfobg .el-select__wrapper:hover{
background: #282828; background: #191D28;
box-shadow: 0 0 0 1px rgba(38, 111, 255, 1) inset !important; box-shadow: 0 0 0 1px #0b94d5 inset !important;
} }
.patientprofile-container-dataInfobg-rightbottombox{ .patientprofile-container-dataInfobg-rightbottombox{
display: flex; display: flex;
@ -1060,4 +1097,15 @@ async function handleDiagnosticInfo(status) { // 保存诊断信息
color: #00CC00; color: #00CC00;
margin-left: 20px; margin-left: 20px;
} }
.profile-text{
font-family: 'Noto Sans SC Bold', 'Noto Sans SC Regular', 'Noto Sans SC';
font-weight: 700;
font-style: normal;
font-size: 20px;
color: #FFFFFF;
}
.opacity50{
opacity: 0.5;
}
</style> </style>

View File

@ -515,10 +515,11 @@ function getDayNum(date2,index){
const sessionsInit = async () => { const sessionsInit = async () => {
try { try {
let params ={ let params ={
patient_id: route.params.id patient_id: '202511270002'
} }
// //
const response = await historyAPI.sessionsPage(params) const response = await historyAPI.sessionsPage(params)
debugger
if (response.success) { if (response.success) {
response.data.sessions.forEach(element => { response.data.sessions.forEach(element => {
element.list = [{}] element.list = [{}]