修改样式

This commit is contained in:
limengnan 2025-12-12 17:34:30 +08:00
parent 4ab00a7702
commit 6a45190e0b
20 changed files with 412 additions and 6590 deletions

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 546 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 460 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 450 B

View File

@ -9,7 +9,7 @@
<div class="AloneReportComparison-container-body" id="pdf-content"> <div class="AloneReportComparison-container-body" id="pdf-content">
<div style="height: 100%; padding:0 90px; box-sizing: border-box;"> <div style="height: 100%; padding:0 90px; box-sizing: border-box;">
<div class="AloneReportComparison-container-bodytitle">体态测量报告单</div> <div class="AloneReportComparison-container-bodytitle">体态测量报告单对比</div>
<div class="AloneReportComparison-container-display"> <div class="AloneReportComparison-container-display">
<!-- <div class="AloneReportComparison-container-userinfotext">检测时间{{ detectionInfo.start_time }}</div> <!-- <div class="AloneReportComparison-container-userinfotext">检测时间{{ detectionInfo.start_time }}</div>
<div class="AloneReportComparison-container-userinfotext">ID{{ detectionInfo.id }}</div> --> <div class="AloneReportComparison-container-userinfotext">ID{{ detectionInfo.id }}</div> -->
@ -202,7 +202,6 @@
</div> </div>
<div class="AloneReportComparison-footer"> <div class="AloneReportComparison-footer">
<!-- <div style="margin-right: 80px;">检测时间{{ leftInfo.created_at }}</div> -->
<div style="margin-right: 80px;">报告时间{{ getFormattedTime() }}</div> <div style="margin-right: 80px;">报告时间{{ getFormattedTime() }}</div>
<div>检测医生{{ leftInfo.creator_name }}</div> <div>检测医生{{ leftInfo.creator_name }}</div>
</div> </div>

View File

@ -118,7 +118,7 @@
<div class="patient-detail-display"> <div class="patient-detail-display">
<div class="patient-detailinfo-leftbox"> <div class="patient-detailinfo-leftbox">
<div class="patient-detailinfo-key">居住地</div> <div class="patient-detailinfo-key">居住地</div>
<div class="patient-detailinfo-value"> <div class="patient-detailinfo-value" :title="selectedPatient.residence">
{{ selectedPatient.residence== null || selectedPatient.residence== '' ? '—':selectedPatient.residence }} {{ selectedPatient.residence== null || selectedPatient.residence== '' ? '—':selectedPatient.residence }}
</div> </div>
</div> </div>
@ -183,9 +183,10 @@
</div> </div>
</div> </div>
<div class="patient-detailinfo-rightbox"> <div class="patient-detailinfo-rightbox">
<div class="patient-detailinfo-key">职业</div> <div class="patient-detailinfo-key" title="asdas">职业</div>
<div class="patient-detailinfo-value"> <div class="patient-detailinfo-value" >
<span v-if="selectedPatient && selectedPatient.occupation"> <span v-if="selectedPatient && selectedPatient.occupation"
>
{{ selectedPatient.occupation }} {{ selectedPatient.occupation }}
</span> </span>
<span v-else></span> <span v-else></span>
@ -1345,6 +1346,9 @@ function editClick(){
font-style: normal; font-style: normal;
font-size: 16px; font-size: 16px;
color: rgb(255, 255, 255); color: rgb(255, 255, 255);
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
} }
.patient-detailinfo-leftbox{ .patient-detailinfo-leftbox{
width: 235px; width: 235px;

View File

@ -172,7 +172,7 @@
<div class="body-foot-box"> <div class="body-foot-box">
<div class="body-title-display"> <div class="body-title-display">
<div class="body-son-display"> <div class="body-son-display">
<img src="@/assets/detection/title1.png" alt="" style="margin-right: 8px;"> <img src="@/assets/detection/title3.png" alt="" style="margin-right: 8px;">
<div class="body-posture-text">足部压力</div> <div class="body-posture-text">足部压力</div>
</div> </div>
<div class="body-son-display"> <div class="body-son-display">
@ -255,8 +255,8 @@
<div class="body-userinfo-box"> <div class="body-userinfo-box">
<div class="body-title-display"> <div class="body-title-display">
<div class="body-son-display"> <div class="body-son-display">
<img src="@/assets/detection/title1.png" alt="" style="margin-right: 8px;"> <img src="@/assets/detection/title4.png" alt="" style="margin-right: 8px;">
<div class="body-posture-text">用户信息</div> <div class="body-posture-text">患者信息</div>
</div> </div>
<div class="body-son-display"></div> <div class="body-son-display"></div>
</div> </div>
@ -286,10 +286,10 @@
class="userinfo-edit-img" style="cursor: pointer;" class="userinfo-edit-img" style="cursor: pointer;"
@click="viewClick"> @click="viewClick">
<ViewUserInfo v-if="isViewUser" :patientInfo="patientInfo" <ViewUserInfo v-if="isViewUser" :patientInfo="patientInfo"
@closeViewUserInfo="closeViewUserInfo"/> @closeViewUserInfo="closeViewUserInfo"/>
<div class="userinfo-disyplay1"> <div class="userinfo-disyplay1">
<div class="userinfo-text4">居住地</div> <div class="userinfo-text4">居住地</div>
<div class="userinfo-text5"> <div class="userinfo-text5" :title="patientInfo.residence">
{{ patientInfo.residence ==''||patientInfo.residence ==null ?'—':patientInfo.residence}} {{ patientInfo.residence ==''||patientInfo.residence ==null ?'—':patientInfo.residence}}
</div> </div>
</div> </div>
@ -317,7 +317,7 @@
<div class="body-video-box"> <div class="body-video-box">
<div class="body-title-display"> <div class="body-title-display">
<div class="body-son-display"> <div class="body-son-display">
<img src="@/assets/detection/title1.png" alt="" style="margin-right: 8px;"> <img src="@/assets/detection/title5.png" alt="" style="margin-right: 8px;">
<div class="body-posture-text">视频</div> <div class="body-posture-text">视频</div>
</div> </div>
<div class="body-son-display"> <div class="body-son-display">
@ -440,27 +440,21 @@
</div> </div>
</div> </div>
</div> </div>
<!-- -->
<!-- <el-dialog class="historyDialogVisible" v-model="historyDialogVisible" center title="查看档案" width="100%">
<HistoryDashboard v-if="historyDialogVisible" :patientId="patientId"/>
</el-dialog> -->
<PatientProfile v-if="historyDialogVisible" <PatientProfile v-if="historyDialogVisible"
:archiveType="true" :archiveType="true"
:selectedPatient="selectedPatient" :selectedPatient="selectedPatient"
@closePatientProfile="closePatientProfile"/> @closePatientProfile="closePatientProfile"/>
<div v-if="isBig1" style="position: fixed;top: 0;right: 0; <div v-if="isBig1" style="position: fixed;top: 122px;right: 0;
width: 100%;height: 100vh;z-index: 9999;background: red;border: 2px solid #b0b0b0"> background: #323232;
width: 100%;height:calc(100% - 122px);z-index: 9999;border: 2px solid #b0b0b0">
<svg @click="isBig1=false" style="position: absolute;right: 10px;top:10px;cursor: pointer;" t="1760175800150" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5743" width="24" height="24"><path d="M796 163.1L511.1 448l-285-285-63.9 64 285 285-285 285 63.8 63.8 285-285 285 285 63.8-63.8-285-285 285-285-63.8-63.9z" fill="#ffffff" p-id="5744"></path></svg> <svg @click="isBig1=false" style="position: absolute;right: 10px;top:10px;cursor: pointer;" t="1760175800150" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5743" width="24" height="24"><path d="M796 163.1L511.1 448l-285-285-63.9 64 285 285-285 285 63.8 63.8 285-285 285 285 63.8-63.8-285-285 285-285-63.8-63.9z" fill="#ffffff" p-id="5744"></path></svg>
<img v-if="isBig1" :src="camera1ImgSrc" alt="" <img v-if="isBig1" :src="camera1ImgSrc" alt=""
style="width: 100%;height: calc(100%);object-fit:contain;background:#323232;" /> style="width: 100%;height: calc(100%);object-fit:contain;background:#323232;" />
</div> </div>
<div v-if="isBig2" style="position: fixed;top: 0;right: 0; <div v-if="isBig2" style="position: fixed;top: 122px;right: 0;
width: 100%;height: 100vh;z-index: 9999;background: red;border: 2px solid #b0b0b0"> width: 100%;height:calc(100% - 122px);z-index: 9999;background: #323232;border: 2px solid #b0b0b0">
<svg @click="isBig2=false" style="position: absolute;right: 10px;top:10px;cursor: pointer;" t="1760175800150" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5743" width="24" height="24"><path d="M796 163.1L511.1 448l-285-285-63.9 64 285 285-285 285 63.8 63.8 285-285 285 285 63.8-63.8-285-285 285-285-63.8-63.9z" fill="#ffffff" p-id="5744"></path></svg> <svg @click="isBig2=false" style="position: absolute;right: 10px;top:10px;cursor: pointer;" t="1760175800150" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5743" width="24" height="24"><path d="M796 163.1L511.1 448l-285-285-63.9 64 285 285-285 285 63.8 63.8 285-285 285 285 63.8-63.8-285-285 285-285-63.8-63.9z" fill="#ffffff" p-id="5744"></path></svg>
<img v-if="isBig2" :src="camera2ImgSrc" alt="" <img v-if="isBig2" :src="camera2ImgSrc" alt=""
style="width: 100%;height: calc(100%);object-fit:contain;background:#323232;" /> style="width: 100%;height: calc(100%);object-fit:contain;background:#323232;" />
@ -1575,9 +1569,6 @@ async function saveDetectionData() {
let titile_height = 24 let titile_height = 24
try { try {
screenshotLoading.value = true screenshotLoading.value = true
//
ElMessage.info('正在保存检测截图数据...')
// ID // ID
if (!patientInfo.value.sessionId) { if (!patientInfo.value.sessionId) {
throw new Error('请先开始检测再进行数据保存') throw new Error('请先开始检测再进行数据保存')
@ -1939,6 +1930,9 @@ const cameraSubmit = async () => {
} else { } else {
ElMessage.error(result.message) ElMessage.error(result.message)
} }
}else {
const result = await response.json()
ElMessage.error(result.message)
} }
} }
@ -2598,6 +2592,9 @@ function viewClick(){
font-style: normal; font-style: normal;
font-size: 16px; font-size: 16px;
color: rgb(255, 255, 255); color: rgb(255, 255, 255);
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
} }
.userinfo-line{ .userinfo-line{
width: 2px; width: 2px;

View File

@ -11,7 +11,7 @@
平衡体态检测系统 平衡体态检测系统
<span v-if="licenseBadge" :class="['license-badge', licenseClass]">{{ licenseBadge }}</span> <span v-if="licenseBadge" :class="['license-badge', licenseClass]">{{ licenseBadge }}</span>
<button v-if="showActivateButton" class="activate-btn" @click="goActivate">激活</button> <button v-if="showActivateButton" class="activate-btn" @click="goActivate">激活</button>
<!-- <span class="trial-text">试用期2</span> --> <span v-if="isTrialText" class="trial-text">{{ trialText }}</span>
</div> </div>
</div> </div>
<div class="header-right"> <div class="header-right">
@ -19,7 +19,7 @@
<div class="user-line"></div> <div class="user-line"></div>
<div class="user-info"> <div class="user-info">
<img src="@/assets/new/u13.png" alt="Avatar" style="width: 30px;height: 30px;"> <img src="@/assets/new/u13.png" alt="Avatar" style="width: 30px;height: 30px;">
<span class="username">{{ userInfo.name }}</span> <span class="username" @click="isUpdateUserInfo = true">{{ userInfo.name }}</span>
<div class="user-line"></div> <div class="user-line"></div>
<span class="username user-return" @click="isTip = true">退出登录</span> <span class="username user-return" @click="isTip = true">退出登录</span>
</div> </div>
@ -58,6 +58,31 @@
</div> </div>
</div> </div>
</div> </div>
<div class="pop-up-mask updateUserInfo-up-mask" v-if="isUpdateUserInfo">
<div class="pop-up-tip-container">
<div class="pop-up-tip-header">
<div>修改用户信息</div>
<img src="@/assets/header/closepage.png" alt="" style="cursor: pointer;"
@click="userCancel">
</div>
<el-form :model="userInfo" :rules="formRules" label-width="80px"
style="padding-right:40px;padding-top: 10px;">
<el-form-item label="账号">
<el-input v-model="userInfo.username" placeholder="请输入" style="color: #fff !important " disabled />
</el-form-item>
<el-form-item label="姓名">
<el-input v-model="userInfo.name" placeholder="请输入"/>
</el-form-item>
<el-form-item label="电话">
<el-input v-model="userInfo.phone" placeholder="请输入"/>
</el-form-item>
</el-form>
<div class="tipconfirmbutton-box">
<div class="pop-up-tip-cancelbutton" @click="userCancel">取消</div>
<el-button type="primary" class="tipconfirmbutton" @click="userConfirm">确定</el-button>
</div>
</div>
</div>
</div> </div>
</template> </template>
@ -70,10 +95,12 @@
import License from '@/views/License.vue' import License from '@/views/License.vue'
const isLicense = ref(false) const isLicense = ref(false)
const isTip = ref(false) // const isTip = ref(false) //
const isUpdateUserInfo =ref(false)
const router = useRouter() const router = useRouter()
const authStore = useAuthStore() const authStore = useAuthStore()
const time = ref(""); const time = ref("");
const isTrialText =ref(false)
const trialText = ref('')
const userInfo = reactive({ const userInfo = reactive({
username: '医生', username: '医生',
avatar: '' avatar: ''
@ -154,7 +181,9 @@
if ((data.license_type || '').toLowerCase() === 'trial') { if ((data.license_type || '').toLowerCase() === 'trial') {
const exp = data.expires_at ? new Date(data.expires_at) : null const exp = data.expires_at ? new Date(data.expires_at) : null
const expStr = exp ? `${exp.getFullYear()}-${String(exp.getMonth()+1).padStart(2,'0')}-${String(exp.getDate()).padStart(2,'0')}` : '' const expStr = exp ? `${exp.getFullYear()}-${String(exp.getMonth()+1).padStart(2,'0')}-${String(exp.getDate()).padStart(2,'0')}` : ''
licenseBadge.value = expStr ? `试用版(截止 ${expStr}` : '试用版' licenseBadge.value = '试用'
isTrialText.value = true
trialText.value = `试用版(截止 ${expStr}`
licenseClass.value = 'badge-trial' licenseClass.value = 'badge-trial'
licenseType.value = 'trial' licenseType.value = 'trial'
showActivateButton.value = true showActivateButton.value = true
@ -189,6 +218,12 @@ function tipCancel(){
function tipLogin(){ function tipLogin(){
handleLogout() handleLogout()
isTip.value = false isTip.value = false
}
function userCancel(){
isUpdateUserInfo.value = false
}
function userConfirm(){
isUpdateUserInfo.value = false
} }
</script> </script>
@ -260,6 +295,7 @@ function tipLogin(){
.username { .username {
font-size: 14px; font-size: 14px;
color: #fff; color: #fff;
cursor: pointer;
} }
.user-dropdown { .user-dropdown {
@ -485,4 +521,190 @@ function tipLogin(){
.patientprofile-container-info .el-select__placeholder{ .patientprofile-container-info .el-select__placeholder{
color: #fff; color: #fff;
} }
.updateUserInfo-up-mask{
position: fixed;
z-index: 99;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
background: rgba(0, 0, 0, 0.7);
}
.updateUserInfo-up-mask .pop-up-tip-container {
width: 500px;
height:320px;
position: absolute;
top: 0;
right: 0;
left: 0;
bottom: 0;
margin: auto;
border-radius: 10px;
background: linear-gradient(135deg, rgba(53, 67, 90, 1) 0%, rgba(53, 67, 90, 1) 0%, rgba(62, 79, 105, 1) 99%, rgba(62, 79, 105, 1) 100%);
}
.updateUserInfo-up-mask .pop-up-camera-container{
width: 608px;
height:495px;
position: absolute;
top: 0;
right: 0;
left: 0;
bottom: 0;
margin: auto;
background: linear-gradient(135deg, rgb(53, 67, 90) 0%, rgb(53, 67, 90) 0%, rgb(62, 79, 105) 99%, rgb(62, 79, 105) 100%);
border-radius: 10px;
box-shadow: rgb(17, 24, 33) 0px 0px 10px;
}
.updateUserInfo-up-mask .pop-up-camera-header{
width: 100%;
height: 60px;
display: flex;
align-items: center;
justify-content: space-between;
box-sizing: border-box;
padding: 0 40px;
font-family: 'Noto Sans SC';
font-weight: 700;
font-style: normal;
font-size: 20px;
color: #FFFFFF;
text-align: left;
border-radius:10px 10px 0 0;
}
.updateUserInfo-up-mask .pop-up-tip-header{
width: 100%;
height: 60px;
display: flex;
align-items: center;
justify-content: space-between;
box-sizing: border-box;
padding: 0 30px;
font-family: 'Noto Sans SC';
font-weight: 700;
font-style: normal;
font-size: 20px;
color: #FFFFFF;
text-align: left;
}
.updateUserInfo-up-mask .tipconfirmbutton-box{
width:100%;
display:flex;
align-items: center;
justify-content: flex-end;
padding: 0 30px;
padding-top: 10px;
}
.updateUserInfo-up-mask .tipconfirmbutton{
font-weight: 400;
font-style: normal;
font-size: 14px;
color: rgb(255, 255, 255);
background:#0b94d5;
border:1px solid #0b94d5;
width: 80px;
height: 40px;
}
.updateUserInfo-up-mask .tipconfirmbutton:hover{
background:#14aaff;
border:1px solid #14aaff;
}
.updateUserInfo-up-mask .pop-up-tip-text{
width:100%;
font-weight: 400;
font-style: normal;
font-size: 16px;
color: #FFFFFF;
text-align: left;
height: 80px;
box-sizing: border-box;
padding-left: 30px;
padding-right: 30px;
padding-top:20px ;
/* padding:20px 10px 30px; */
}
.updateUserInfo-up-mask .pop-up-tip-cancelbutton{
width: 80px;
height: 40px;
background-color: #597194;
border-radius: 4px;
color: rgba(255, 255, 255, 0.6);
font-weight: 400;
font-style: normal;
font-size: 16px;
display: flex;
align-items: center;
justify-content: center;
margin-right: 20px;
cursor: pointer;
}
.updateUserInfo-up-mask .pop-up-tip-cancelbutton:hover{
background-color: #14aaff;
color: #fff;
}
.updateUserInfo-up-mask :deep(.el-input__inner) {
color: #ffffff;
font-size: 14px;
height: 40px;
}
.updateUserInfo-up-mask :deep(.el-input.is-disabled .el-input__inner) {
color: #787878;
}
.updateUserInfo-up-mask :deep(.el-select__placeholder) {
color: #ffffff;
font-size: 14px;
}
:deep(.el-input.is-disabled .el-input__wrapper) {
background-color: #2a3649;
box-shadow: none;
border-width: 1px;
border-style: solid;
border-color: transparent;
}
</style>
<style>
.updateUserInfo-up-mask .el-select__placeholder {
color: #ffffff;
font-size: 14px;
}
.updateUserInfo-up-mask .el-input.is-disabled .el-input__wrapper {
background-color: #2a3649;
box-shadow: none;
border-width: 1px;
border-style: solid;
border-color: transparent;
}
.updateUserInfo-up-mask .el-input__wrapper {
background-color: #2a3649;
border-width: 1px;
border-style: solid;
border-color: rgb(54, 54, 54);
border-radius: 4px;
box-shadow: none;
height: 40px;
}
.updateUserInfo-up-mask .el-input__inner {
color: #ffffff;
}
.updateUserInfo-up-mask .el-form-item__label {
font-size: 14px !important;
font-family: 'Noto Sans SC';
font-weight: 400 !important;
font-style: normal !important;
color: #FFFFFF !important;
line-height: 40px !important;
}
</style> </style>

View File

@ -74,7 +74,7 @@
color: #FFFFFF; color: #FFFFFF;
padding-bottom: 10px;">视频2</div> padding-bottom: 10px;">视频2</div>
<div style="width: 640px;height: 360px;display: flex;justify-content: center;align-items: center;"> <div style="width: 640px;height: 360px;display: flex;justify-content: center;align-items: center;">
<img :src="BACKEND_URL+'/' + ImageDetailsInfo.foot1_image" alt="" style="width: 100%;height: 100%;object-fit:contain;"> <img :src="BACKEND_URL+'/' + ImageDetailsInfo.foot2_image" alt="" style="width: 100%;height: 100%;object-fit:contain;">
</div> </div>
</div> </div>

View File

@ -126,14 +126,14 @@
<div class="ImageDetailsCompare-content-title">{{ ImageDetailsInfoLeft.id }}视频1</div> <div class="ImageDetailsCompare-content-title">{{ ImageDetailsInfoLeft.id }}视频1</div>
<img :src="BACKEND_URL+'/' + ImageDetailsInfoLeft.foot1_image" alt="" <img :src="BACKEND_URL+'/' + ImageDetailsInfoLeft.foot1_image" alt=""
style="width: 500px;height:281px"> style="width: 500px;height:281px">
<div class="ImageDetailsCompare-content-title" style="margin-top: 30px;">{{ ImageDetailsInfoRight.id }}视频1</div> <div class="ImageDetailsCompare-content-title" style="margin-top: 30px;">{{ ImageDetailsInfoLeft.id }}视频2</div>
<img :src="BACKEND_URL+'/' + ImageDetailsInfoRight.foot1_image" alt="" <img :src="BACKEND_URL+'/' + ImageDetailsInfoLeft.foot2_image" alt=""
style="width: 500px;height:281px"> style="width: 500px;height:281px">
</div> </div>
<div class="ImageDetailsCompare-content-imgbox" <div class="ImageDetailsCompare-content-imgbox"
style="width: 500px;height: 100%;margin-left: 50px;"> style="width: 500px;height: 100%;margin-left: 50px;">
<div class="ImageDetailsCompare-content-title">{{ ImageDetailsInfoLeft.id }}视频2</div> <div class="ImageDetailsCompare-content-title">{{ ImageDetailsInfoRight.id }}视频1</div>
<img :src="BACKEND_URL+'/' + ImageDetailsInfoLeft.foot2_image" alt="" <img :src="BACKEND_URL+'/' + ImageDetailsInfoRight.foot1_image" alt=""
style="width: 500px;height:281px"> style="width: 500px;height:281px">
<div class="ImageDetailsCompare-content-title" style="margin-top: 30px;">{{ ImageDetailsInfoRight.id }}视频2</div> <div class="ImageDetailsCompare-content-title" style="margin-top: 30px;">{{ ImageDetailsInfoRight.id }}视频2</div>
<img :src="BACKEND_URL+'/' + ImageDetailsInfoRight.foot2_image" alt="" <img :src="BACKEND_URL+'/' + ImageDetailsInfoRight.foot2_image" alt=""

View File

@ -17,7 +17,7 @@
@click="handleTabClick('activate')"> @click="handleTabClick('activate')">
<img v-if="activeTab == 'request'" src="@/assets/license/tab2.png" alt=""> <img v-if="activeTab == 'request'" src="@/assets/license/tab2.png" alt="">
<img v-else src="@/assets/license/tab2_1.png" alt=""> <img v-else src="@/assets/license/tab2_1.png" alt="">
<span class="license_tabtext">授权申请</span> <span class="license_tabtext">激活授权</span>
</div> </div>
</div> </div>
<div v-if="activeTab == 'request'" class="tab-content"> <div v-if="activeTab == 'request'" class="tab-content">

View File

@ -35,7 +35,10 @@
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="年龄"> <el-form-item label="年龄">
<el-input v-model="calculatedAge" placeholder="自动计算" readonly suffix-icon="Calendar" /> <el-input v-model="calculatedAge" placeholder="自动计算" readonly>
<template #suffix></template>
</el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
@ -48,7 +51,15 @@
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="居住地" prop="residence"> <el-form-item label="居住地" prop="residence">
<el-input v-model="patientForm.residence" placeholder="请输入" clearable /> <el-cascader
v-model="selectedOptions"
:options="options"
:props="customprops"
placeholder="请选择省市区"
@change="handleChange"
style="width:100%"
/>
<!-- <el-input v-model="patientForm.residence" placeholder="请输入" clearable /> -->
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
@ -67,7 +78,9 @@
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="鞋码" prop="shoe_size"> <el-form-item label="鞋码" prop="shoe_size">
<el-input v-model="patientForm.shoe_size" placeholder="请输入" clearable /> <el-input v-model="patientForm.shoe_size" placeholder="请输入" clearable>
<template #suffix></template>
</el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
@ -113,6 +126,8 @@ import { ref, reactive, computed, onMounted } from 'vue'
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router'
import { ElMessage, ElMessageBox } from 'element-plus' import { ElMessage, ElMessageBox } from 'element-plus'
import { patientAPI } from '../services/api.js' import { patientAPI } from '../services/api.js'
import { regionData } from 'element-china-area-data';
const emit = defineEmits([ 'closecreatbox']); const emit = defineEmits([ 'closecreatbox']);
const router = useRouter() const router = useRouter()
const props = defineProps({ const props = defineProps({
@ -127,6 +142,20 @@ const props = defineProps({
default: null default: null
}, },
}) })
const selectedOptions = ref([]);
const options = ref(regionData);
const customprops = {
checkStrictly: true, //
expandTrigger: 'hover',
value: 'label', //
label: 'label', //
children: 'children' //
};
function handleChange (e){
}
// //
const patientFormRef = ref() const patientFormRef = ref()
// //
@ -151,12 +180,18 @@ const saveAndDetectLoading = ref(false)
const patienttitle = ref("新建患者档案") const patienttitle = ref("新建患者档案")
// //
onMounted(() => { onMounted(() => {
// //
if (props.patienttype == 'edit') { if (props.patienttype == 'edit') {
patienttitle.value = '编辑患者档案' patienttitle.value = '编辑患者档案'
let tempInfo = props.selectedPatient let tempInfo = props.selectedPatient
tempInfo.age = calculateAgeres(tempInfo.birth_date ) tempInfo.age = calculateAgeres(tempInfo.birth_date )
Object.assign(patientForm, tempInfo) Object.assign(patientForm, tempInfo)
if(props.selectedPatient.residence !='' &&props.selectedPatient.residence !=null
){
selectedOptions.value = props.selectedPatient.residence.split('-')
}
} }
@ -331,7 +366,9 @@ const savePatient = async () => {
medical_history: '', // medical_history: '', //
notes: '' // notes: '' //
} }
if(selectedOptions.value.length >0 ){
patientData.residence = selectedOptions.value.join('-')
}
try { try {
const response = await patientAPI.createPatient(patientData) const response = await patientAPI.createPatient(patientData)
if (response.success) { if (response.success) {
@ -363,6 +400,9 @@ const updatePatient = async () => {
residence: patientForm.residence, residence: patientForm.residence,
idcode: patientForm.idcode idcode: patientForm.idcode
} }
if(selectedOptions.value.length >0 ){
patientData.residence = selectedOptions.value.join('-')
}
try { try {
const response = await patientAPI.updatePatient(patientForm.id, patientData) const response = await patientAPI.updatePatient(patientForm.id, patientData)
if (response.success) { if (response.success) {

View File

@ -16,7 +16,7 @@
<div class="patientprofile-title-display" style="margin-bottom:10px"> <div class="patientprofile-title-display" style="margin-bottom:10px">
<div class="patientprofile-son-display"> <div class="patientprofile-son-display">
<img src="@/assets/archive/usericon.png" alt="" style="margin-right: 8px;"> <img src="@/assets/archive/usericon.png" alt="" style="margin-right: 8px;">
<div class="profile-text">用户信息</div> <div class="profile-text">患者信息</div>
</div> </div>
<div class="patientprofile-son-display"></div> <div class="patientprofile-son-display"></div>
</div> </div>
@ -34,7 +34,7 @@
</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" :title="selectedPatient.residence">{{ selectedPatient.residence }}</div>
<div class="patientprofile-userinfo-text3">身高</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>
@ -48,13 +48,13 @@
<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-text3">邮箱</div> <div class="patientprofile-userinfo-text3">邮箱</div>
<div class="patientprofile-userinfo-text2">{{ selectedPatient.email }}</div> <div class="patientprofile-userinfo-text2" :title="selectedPatient.email">{{ 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-text3">身份证号</div> <div class="patientprofile-userinfo-text3">身份证号</div>
<div class="patientprofile-userinfo-text2">{{ selectedPatient.idcode }}</div> <div class="patientprofile-userinfo-text2" :title="selectedPatient.idcode">{{ selectedPatient.idcode }}</div>
</div> </div>
</div> </div>
<div class="patientprofile-container-leftbottombox"> <div class="patientprofile-container-leftbottombox">
@ -135,7 +135,7 @@
<div class="patientprofile-son-display"> <div class="patientprofile-son-display">
<div class="patientprofile-son-text">测试医生{{ selectedRecord.creator_name }}</div> <div class="patientprofile-son-text">测试医生{{ selectedRecord.creator_name }}</div>
<div class="patientprofile-son-text">就诊时间{{ selectedRecord.start_time }}</div> <div class="patientprofile-son-text">就诊时间{{ selectedRecord.start_time }}</div>
<div class="patientprofile-son-text">档案ID{{ selectedPatient.id }}</div> <div class="patientprofile-son-text">档案ID{{ selectedRecord.id }}</div>
<div v-if="archiveType == true" class="patientprofile-son-detectiontext">正在检测</div> <div v-if="archiveType == true" class="patientprofile-son-detectiontext">正在检测</div>
</div> </div>
@ -180,7 +180,7 @@
<el-checkbox <el-checkbox
:value="item.id" size="large" style="display:flex; align-items: center; justify-content: space-between"> :value="item.id" size="large" style="display:flex; align-items: center; justify-content: space-between">
<div>{{ item.id }}</div> <div>{{ item.id }}</div>
<span>{{ item.timestamp }}</span> <span>{{ getTime(item.timestamp) }}</span>
</el-checkbox> </el-checkbox>
</div> </div>
</div> </div>
@ -227,7 +227,7 @@
<el-checkbox <el-checkbox
:value="item.id" size="large" style="display:flex; align-items: center; justify-content: space-between"> :value="item.id" size="large" style="display:flex; align-items: center; justify-content: space-between">
<div>{{ item.id }}</div> <div>{{ item.id }}</div>
<span>{{ item.timestamp }}</span> <span>{{ getTime(item.timestamp) }}</span>
</el-checkbox> </el-checkbox>
</div> </div>
</div> </div>
@ -266,9 +266,12 @@
<div style="width: 50%;height: calc(100% - 10px) "> <div style="width: 50%;height: calc(100% - 10px) ">
<div class="patientprofile-container-dataInfobg-rightbox"> <div class="patientprofile-container-dataInfobg-rightbox">
<div class="patientprofile-container-dataInfobg-lefttext" style="padding-top:0px">处理</div> <div class="patientprofile-container-dataInfobg-lefttext" style="padding-top:0px">处理</div>
<el-select v-model="profileInfo.treatment_info" placeholder="请选择"> <el-select v-model="profileInfo.treatment_info" placeholder="请选择"
<el-option :label="'保持观察,不予处理'" :value="'保持观察,不予处理'" /> style="width: calc(100% - 80px);">
</el-select> <el-option :label="'保持观察,不予处理'" :value="'保持观察,不予处理'" />
</el-select>
<img src="@/assets/detection/set.png" alt=""
style="width: 24px;margin-left: 5px;cursor: pointer;">
</div> </div>
<div class="patientprofile-container-dataInfobg-rightbottombox"> <div class="patientprofile-container-dataInfobg-rightbottombox">
<div class="patientprofile-container-dataInfobg-lefttext" style="padding-top:0px">建议</div> <div class="patientprofile-container-dataInfobg-lefttext" style="padding-top:0px">建议</div>
@ -384,6 +387,14 @@ const useImgList = ref([])// 图片
const useVideoList = ref([])// const useVideoList = ref([])//
const selectedData = ref([]) // const selectedData = ref([]) //
function getTime(time){
let date = ""
if(time != null && time != ''){
date = time.split(' ')[1]
}
return date
}
function getNo(order) { function getNo(order) {
if(order<10){ if(order<10){
return '0'+order return '0'+order
@ -943,7 +954,7 @@ historyAPI.VideoDelById(ids).then((response)=>{
display: flex; display: flex;
align-items: center; align-items: center;
box-sizing: border-box; box-sizing: border-box;
padding-left: 30px; padding-left: 20px;
margin-bottom: 22px; margin-bottom: 22px;
} }
.patientprofile-userinfo-text1{ .patientprofile-userinfo-text1{
@ -955,12 +966,15 @@ historyAPI.VideoDelById(ids).then((response)=>{
color: rgba(255, 255, 255, 0.6); color: rgba(255, 255, 255, 0.6);
} }
.patientprofile-userinfo-text2{ .patientprofile-userinfo-text2{
width: 150px; width: 166px;
font-family: 'Noto Sans SC'; font-family: 'Noto Sans SC';
font-weight: 400; font-weight: 400;
font-style: normal; font-style: normal;
font-size: 16px; font-size: 16px;
color: #FFFFFF; color: #FFFFFF;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
} }
.patientprofile-userinfo-text3{ .patientprofile-userinfo-text3{
width: 70px; width: 70px;

View File

@ -122,7 +122,6 @@
<div class="PopUpOnlyReport-title2">备注</div> <div class="PopUpOnlyReport-title2">备注</div>
<div class="PopUpOnlyReport-border3">{{ detectionInfo.suggestion_info }}</div> <div class="PopUpOnlyReport-border3">{{ detectionInfo.suggestion_info }}</div>
<div class="PopUpOnlyReport-footer"> <div class="PopUpOnlyReport-footer">
<div style="margin-right: 80px;">检测时间{{ detectionInfo.created_at }}</div>
<div style="margin-right: 80px;">报告时间{{ getFormattedTime() }}</div> <div style="margin-right: 80px;">报告时间{{ getFormattedTime() }}</div>
<div>检测医生{{ detectionInfo.creator_name }}</div> <div>检测医生{{ detectionInfo.creator_name }}</div>
</div> </div>

View File

@ -185,7 +185,6 @@
<div class="PopUpReport-title2">备注</div> <div class="PopUpReport-title2">备注</div>
<div class="PopUpReport-border3">{{ detectionInfo.suggestion_info }}</div> <div class="PopUpReport-border3">{{ detectionInfo.suggestion_info }}</div>
<div class="PopUpReport-footer"> <div class="PopUpReport-footer">
<div style="margin-right: 80px;">检测时间{{ detectionInfo.created_at }}</div>
<div style="margin-right: 80px;">报告时间{{ getFormattedTime() }}</div> <div style="margin-right: 80px;">报告时间{{ getFormattedTime() }}</div>
<div>检测医生{{ detectionInfo.creator_name }}</div> <div>检测医生{{ detectionInfo.creator_name }}</div>
</div> </div>

View File

@ -8,7 +8,7 @@
@click="generatePDF"> @click="generatePDF">
<div class="ReportComparison-container-body" id="pdf-content"> <div class="ReportComparison-container-body" id="pdf-content">
<div style="height: 100%; padding:0 90px; box-sizing: border-box;"> <div style="height: 100%; padding:0 90px; box-sizing: border-box;">
<div class="ReportComparison-container-bodytitle">体态测量报告单</div> <div class="ReportComparison-container-bodytitle">体态测量报告单对比</div>
<div class="ReportComparison-container-display"> <div class="ReportComparison-container-display">
<!-- <div class="ReportComparison-container-userinfotext">检测时间{{ detectionInfo.start_time }}</div> <!-- <div class="ReportComparison-container-userinfotext">检测时间{{ detectionInfo.start_time }}</div>
<div class="ReportComparison-container-userinfotext">ID{{ detectionInfo.id }}</div> --> <div class="ReportComparison-container-userinfotext">ID{{ detectionInfo.id }}</div> -->
@ -341,7 +341,6 @@
</div> </div>
</div> </div>
<div class="ReportComparison-footer"> <div class="ReportComparison-footer">
<!-- <div style="margin-right: 80px;">检测时间{{ rightInfo.created_at }}</div> -->
<div style="margin-right: 80px;">报告时间{{ getFormattedTime() }}</div> <div style="margin-right: 80px;">报告时间{{ getFormattedTime() }}</div>
<div>检测医生{{ rightInfo.creator_name }}</div> <div>检测医生{{ rightInfo.creator_name }}</div>
</div> </div>

View File

@ -17,7 +17,7 @@
<el-checkbox <el-checkbox
:value="item.id" size="large" style="display:flex; align-items: center; justify-content: space-between"> :value="item.id" size="large" style="display:flex; align-items: center; justify-content: space-between">
<div>{{ item.id }}</div> <div>{{ item.id }}</div>
<span>{{ item.timestamp }}</span> <span>{{ getTime(item.timestamp) }}</span>
</el-checkbox> </el-checkbox>
</div> </div>
</div> </div>
@ -56,6 +56,13 @@ const selectIndex = ref(0) // 图片详情选中的索引
onMounted(() => { onMounted(() => {
useImgList.value = props.imageList useImgList.value = props.imageList
}) })
function getTime(time){
let date = ""
if(time != null && time != ''){
date = time.split(' ')[1]
}
return date
}
function cancel(is) { function cancel(is) {
if(is == true && selectInfo.value.id !=null){ if(is == true && selectInfo.value.id !=null){
emit("closeSelectData",true,selectInfo.value) emit("closeSelectData",true,selectInfo.value)

View File

@ -0,0 +1,69 @@
<template>
<div class="SetProcess-dialog">
<div class="SetProcess-container">
<div class="form-container-header">
<div>设置处理信息</div>
<img src="@/assets/header/closepage.png" alt="" style="cursor: pointer;" @click="handleCancel">
</div>
<div>
<div v-for="(item, index) in processData" class="process-item">
<div style="width: 30px;">{{ index + 1 }}</div>
<el-input v-model="item.name" placeholder="请输入" clearable></el-input>
</div>
</div>
</div>
</div>
</template>
<script setup>
import { ref, reactive, onMounted } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { systemAPI } from '../services/api.js'
import { licenseAPI } from '../services/api.js'
const emit = defineEmits([ 'closeSetProcess']);
onMounted(async () => {
})
const processData = ref([{name:'1'}])
function handleCancel() {
emit('closeSetProcess', true);
}
function handleConfirm() {
emit('closeSetProcess', true);
}
</script>
<style>
.SetProcess-dialog{
position: absolute;
top: 0;
left: 0;
height: 100vh;
width: 100vw;
background-color: rgba(0,0,0,0.7);
z-index: 9999;
}
.SetProcess-container {
width: 800px;
height:654px;
position: absolute;
top: 0;
right: 0;
left: 0;
bottom: 0;
margin: auto;
background: #394860;
border-radius: 10px;
box-shadow: 0px 0px 16px rgba(17, 24, 33, 1);
color: #fff;
}
.process-item{
display: flex;
align-items: center;
padding: 10px;
}
</style>

View File

@ -58,7 +58,7 @@
<div class="ViewUserInfo-detail-display"> <div class="ViewUserInfo-detail-display">
<div class="ViewUserInfo-detailinfo-leftbox"> <div class="ViewUserInfo-detailinfo-leftbox">
<div class="ViewUserInfo-detailinfo-key">居住地</div> <div class="ViewUserInfo-detailinfo-key">居住地</div>
<div class="ViewUserInfo-detailinfo-value"> <div class="ViewUserInfo-detailinfo-value" :title="patientInfo.residence">
{{ patientInfo.residence== null || patientInfo.residence== '' ? '—':patientInfo.residence }} {{ patientInfo.residence== null || patientInfo.residence== '' ? '—':patientInfo.residence }}
</div> </div>
</div> </div>
@ -205,7 +205,8 @@ const formatDate = (date) => {
.ViewUserInfo-content-top{ .ViewUserInfo-content-top{
position: relative; position: relative;
width: calc(100%); width: calc(100%);
height: 130px; height: 80px;
margin-bottom: 20px;
display: flex; display: flex;
align-items: center; align-items: center;
box-sizing: border-box; box-sizing: border-box;
@ -292,5 +293,8 @@ const formatDate = (date) => {
font-style: normal; font-style: normal;
font-size: 16px; font-size: 16px;
color: rgb(255, 255, 255); color: rgb(255, 255, 255);
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
} }
</style> </style>