Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
F
frontend-h5
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
songrui
frontend-h5
Commits
ccb8d0c1
Commit
ccb8d0c1
authored
Feb 21, 2025
by
gengchunlei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
医生端 v1.2 1、高危随访
parent
d365f0e8
Show whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
3261 additions
and
2 deletions
+3261
-2
Doctor.vue
src/doctor/Doctor.vue
+1
-1
FirstDetail.vue
src/doctor/screening/highVisit/detail/FirstDetail.vue
+273
-0
GeneralFUDetail.vue
src/doctor/screening/highVisit/detail/GeneralFUDetail.vue
+0
-0
SecondDetail.vue
src/doctor/screening/highVisit/detail/SecondDetail.vue
+1032
-0
DoctorInfo.vue
src/doctor/screening/highVisit/first/DoctorInfo.vue
+164
-0
FirstForm.vue
src/doctor/screening/highVisit/first/FirstForm.vue
+153
-0
FormCont.vue
src/doctor/screening/highVisit/first/FormCont.vue
+696
-0
Result.vue
src/doctor/screening/highVisit/first/Result.vue
+60
-0
BaseInfo.vue
src/doctor/screening/highVisit/second/BaseInfo.vue
+218
-0
CommonBottom.vue
src/doctor/screening/highVisit/second/CommonBottom.vue
+251
-0
DiseaseSelect.vue
src/doctor/screening/highVisit/second/DiseaseSelect.vue
+122
-0
FormCont.vue
src/doctor/screening/highVisit/second/FormCont.vue
+0
-0
Result.vue
src/doctor/screening/highVisit/second/Result.vue
+52
-0
SecondForm.vue
src/doctor/screening/highVisit/second/SecondForm.vue
+238
-0
index.js
src/router/index.js
+1
-1
No files found.
src/doctor/Doctor.vue
View file @
ccb8d0c1
...
@@ -66,7 +66,7 @@ export default {
...
@@ -66,7 +66,7 @@ export default {
if
(
!
token
)
{
if
(
!
token
)
{
token
=
sessionStorage
.
getItem
(
'token'
)
token
=
sessionStorage
.
getItem
(
'token'
)
if
(
process
.
env
.
NODE_ENV
!==
'production'
)
{
if
(
process
.
env
.
NODE_ENV
!==
'production'
)
{
token
=
'
e8999387-4edf-49fa-9ff7-6281825a25bb
'
token
=
'
87476f6c-66a6-46cf-aa95-f4dd7c98567d
'
}
}
}
}
if
(
token
)
{
if
(
token
)
{
...
...
src/doctor/screening/highVisit/detail/FirstDetail.vue
0 → 100644
View file @
ccb8d0c1
<
template
>
<div
class=
"flex flex-col"
style=
"height: 100vh"
>
<div
class=
"p-3 text-black text-center shrink-0 doc-nav-bar"
>
<span
@
click=
"onBack"
class=
"text-12 back-bt"
>
<doc-icon
type=
"doc-left2"
/>
</span>
<span>
主要慢病筛查详情
</span>
</div>
<div
class=
"px-4 py-3 flex shrink-0 base-info"
>
<div
class=
"flex w-full"
>
<div
class=
"grow flex flex-col justify-between"
>
<div
class=
"flex justify-between"
>
<span
class=
"name"
>
{{
collapseList
[
0
].
info
.
residentName
}}
</span>
</div>
<div
class=
'lh-22'
>
<div
class=
'mt-3'
>
筛查日期:
<span
class=
'color-26'
>
{{
info
.
screenDate
||
'-'
}}
</span></div>
<span>
慢病高危评估结果:
</span>
<span
:class=
"
{'text-red': info.screenResult !== 1, 'color-26': info.screenResult === 1 }">
{{
info
.
screenResultName
}}
</span>
</div>
</div>
</div>
</div>
<div
class=
"p-3 grow cont-box"
>
<div
class=
"p-3 h-full cont-inner"
>
<div
class=
"flex justify-between collapse-head mt-2"
>
<span
class=
"text-16 font-semibold"
>
全部内容
</span>
<span
@
click=
"toggleAll"
>
<span
v-if=
"!collapseAll"
>
展开全部
</span>
<span
v-else
>
展开收起
</span>
<span
:class=
"['ml-2 icon-down',
{ 'icon-down-expanded': collapseAll }]">
<doc-icon
type=
"doc-down"
/>
</span>
</span>
</div>
<van-collapse
:model-value=
"activeCollapse"
ref=
"collapse"
class=
"doc-collapse"
@
change=
"collapseChange"
>
<van-collapse-item
v-for=
"collapse in collapseList"
:key=
"collapse.name"
:title=
"collapse.title"
:name=
"collapse.name"
>
<template
#
right-icon
>
<doc-icon
type=
"doc-down"
/>
</
template
>
<div
class=
"list"
>
<div
v-for=
"item in collapse.columns"
:key=
"item.key"
>
<div
v-if=
"item.key == 'pressure'"
class=
"pt-3"
>
<table
class=
"w-full"
>
<tr>
<td
style=
"width: 7.1em"
>
血压值(mmHg)
</td>
<td>
收缩压(高压)
</td>
<td></td>
<td>
舒张压(低压)
</td>
</tr>
<tr>
<td>
第1次测量
</td>
<td>
{{ info.pressureOneSbp || '-' }}
</td>
<td>
/
</td>
<td>
{{ info.pressureOneDbp || '-' }}
</td>
</tr>
<tr>
<td>
第2次测量
</td>
<td
class=
"flex"
>
{{ info.pressureTwoSbp || '-' }}
</td>
<td>
/
</td>
<td>
{{ info.pressureTwoDbp || '-' }}
</td>
</tr>
</table>
</div>
<div
v-else
class=
"flex justify-between py-1 border-bottom item"
>
<span
class=
"shrink-0 mr-2 label"
>
{{ item.title }}
</span>
<span
v-if=
"item.key === 'idCard'"
>
{{ $idCardHide(collapse.info.idCard) || '-' }}
</span>
<span
class=
"text-end"
v-else
>
<span>
{{ collapse.info[item.key] || '-' }}
</span>
<span
v-if=
"item.unit"
class=
"ml-1"
>
{{ item.unit }}
</span>
</span>
</div>
</div>
</div>
</van-collapse-item>
</van-collapse>
</div>
</div>
</div>
</template>
<
script
>
import
{
showNotify
}
from
'vant'
import
{
firstScreenDetail
}
from
'@/api/doctor/screening.js'
import
{
useStore
}
from
'@/doctor/store'
export
default
{
data
()
{
return
{
store
:
useStore
(),
activeCollapse
:
[],
collapseList
:
[
{
title
:
'居民信息'
,
name
:
'1'
,
columns
:
[
{
title
:
'姓名'
,
key
:
'residentName'
},
{
title
:
'证件号码'
,
key
:
'idCard'
},
{
title
:
'性别'
,
key
:
'genderName'
},
{
title
:
'出生日期'
,
key
:
'dataBirth'
},
{
title
:
'年龄'
,
key
:
'currentAge'
},
{
title
:
'民族'
,
key
:
'nationalName'
},
{
title
:
'本人电话'
,
key
:
'telephone'
},
{
title
:
'现住址'
,
key
:
'presentCodeName'
},
{
title
:
'详细地址'
,
key
:
'nowAddress'
},
{
title
:
'户籍地址'
,
key
:
'registeredCodeName'
},
{
title
:
'详细地址'
,
key
:
'permanentAddress'
}
],
info
:
{}
},
{
title
:
'筛查信息'
,
name
:
'2'
,
columns
:
[
{
title
:
'年龄'
,
key
:
'currentAge'
,
unit
:
'岁'
},
{
title
:
'既往史'
,
key
:
'medicalHistoryName'
},
{
title
:
'身高'
,
key
:
'height'
,
unit
:
'cm'
},
{
title
:
'体重'
,
key
:
'weight'
,
unit
:
'kg'
},
{
title
:
'BMI'
,
key
:
'bmi'
,
unit
:
'kg/m²'
},
{
title
:
'腰围'
,
key
:
'waistline'
,
unit
:
'cm'
},
{
title
:
'是否吸烟'
,
key
:
'isSmokingName'
},
{
title
:
'家族史'
,
key
:
'familyHistoryName'
},
{
title
:
'血压值'
,
key
:
'pressure'
},
{
title
:
'空腹血糖'
,
key
:
'fastingGlucose'
,
unit
:
'mmol/L'
},
{
title
:
'低密度脂蛋白胆固醇'
,
key
:
'ldlCholesterin'
,
unit
:
'mmol/L'
},
{
title
:
'血清总胆固醇'
,
key
:
'serumCholesterin'
,
unit
:
'mmol/L'
},
{
title
:
'高密度脂蛋白胆固醇'
,
key
:
'hdlCholesterin'
,
unit
:
'mmol/L'
},
{
title
:
'运动'
,
key
:
'exerciseIntensityName'
},
{
title
:
'慢病高危评估结果'
,
key
:
'screenResultName'
}
],
info
:
{}
},
{
title
:
'筛查机构'
,
name
:
'3'
,
columns
:
[
{
title
:
'筛查机构'
,
key
:
'screenUnitName'
},
{
title
:
'筛查科室'
,
key
:
'screenOfficeName'
},
{
title
:
'筛查医生'
,
key
:
'screenDoctorName'
},
{
title
:
'筛查日期'
,
key
:
'screenDate'
}
],
info
:
{}
}
],
// 全部展开、收起
collapseAll
:
false
,
info
:
{}
}
},
computed
:
{
id
()
{
return
this
.
$route
.
query
.
id
}
},
created
()
{
document
.
title
=
'筛查详情'
if
(
!
this
.
id
)
{
showNotify
({
type
:
'warning'
,
message
:
'未获取到查询信息'
})
return
}
this
.
init
()
},
methods
:
{
init
()
{
firstScreenDetail
({
id
:
this
.
id
}).
then
(
res
=>
{
this
.
info
=
res
.
data
||
{}
this
.
collapseList
[
0
].
info
=
this
.
info
?.
residentsRecord
this
.
collapseList
[
1
].
info
=
this
.
info
this
.
collapseList
[
2
].
info
=
this
.
info
})
},
onBack
()
{
this
.
$router
.
back
()
},
// 折叠面板切换
collapseChange
(
val
)
{
// console.log(val, this.activeCollapse)
if
(
val
&&
val
.
length
<=
2
)
{
this
.
activeCollapse
=
val
.
slice
(
val
.
length
-
1
)
}
else
{
if
(
this
.
activeCollapse
.
length
>
val
.
length
)
{
this
.
activeCollapse
=
val
}
if
(
this
.
activeCollapse
.
length
<
val
.
length
)
{
this
.
activeCollapse
=
val
.
slice
(
val
.
length
-
1
)
}
}
if
(
val
&&
val
.
length
===
this
.
collapseList
.
length
)
{
this
.
collapseAll
=
true
}
else
{
this
.
collapseAll
=
false
}
},
// 全部展开、收起
toggleAll
()
{
if
(
this
.
collapseAll
)
{
this
.
activeCollapse
=
[]
}
else
{
this
.
activeCollapse
=
this
.
collapseList
.
map
(
e
=>
e
.
name
)
}
this
.
collapseAll
=
!
this
.
collapseAll
}
}
}
</
script
>
<
style
lang=
"less"
scoped
>
@import url('../../utils/common.less');
.base-info {
background: linear-gradient(to bottom, #F0F6FF , #fff 50%);
color: #8c8c8c;
.name {
font-weight: 600;
color: #000;
font-size: 18px;
}
}
.cont-box {
background-color: #f9f9f9;
.cont-inner {
background: linear-gradient(to bottom, #F0F6FF , #fff .6rem);
border-top-left-radius: .08rem;
border-top-right-radius: .08rem;
}
}
.collapse-head {
.icon-down {
vertical-align: middle;
font-size: .12rem;
.svg-icon {
transition: all .2s;
}
}
.icon-down-expanded {
.svg-icon {
transform: rotate(-180deg);
}
}
}
table {
text-align: left;
// border-bottom: 1px solid var(--van-cell-border-color);
>tr {
>td {
padding-left: 14px;
padding-bottom: 12px;
&:first-child {
text-align: right;
padding-left: 0;
}
}
}
}
.list {
color: #262626;
.label {
min-width: 5em;
}
}
.lh-22 {
line-height: 22px;
}
.color-26 {
color: #262626;
}
</
style
>
src/doctor/screening/detail/GeneralFUDetail.vue
→
src/doctor/screening/
highVisit/
detail/GeneralFUDetail.vue
View file @
ccb8d0c1
File moved
src/doctor/screening/highVisit/detail/SecondDetail.vue
0 → 100644
View file @
ccb8d0c1
<
template
>
<div
class=
'flex flex-col'
style=
'height: 100vh'
>
<div
class=
'p-3 text-black text-center shrink-0 doc-nav-bar'
>
<span
@
click=
'onBack'
class=
'text-12 back-bt'
>
<doc-icon
type=
'doc-left2'
/>
</span>
<span>
专病筛查详情
</span>
</div>
<div
class=
'px-4 py-3 flex shrink-0 base-info'
>
<div
class=
'flex w-full'
>
<div
class=
'grow flex flex-col justify-between'
>
<div
class=
'flex justify-between'
>
<span
class=
'name'
>
{{
residentInfo
.
residentName
}}
</span>
</div>
<div
class=
'top-label mt-3'
>
<span>
报告日期:
<span
class=
'color-b'
>
{{
info
.
screenDate
||
'-'
}}
</span></span>
</div>
<div
class=
'top-label'
>
<span>
慢病高危评估结果:
</span>
</div>
<div
class=
'top-label color-b'
>
<span
v-if=
'info.specialScreenResult && info.specialScreenResult !=9'
>
您存在
<span
class=
'color-red'
>
{{
info
.
specialScreenResultName
}}
</span>
风险,请及时前往医院诊断确认。
</span>
<span
v-if=
'info.specialScreenResult ==9'
>
您并未存在高危风险。
</span>
</div>
<div
v-if=
'info.specialScreenResult && info.specialScreenResult !=9'
class=
'flex items-center flex-wrap gap-x-2.5 gap-y-1 mt-2'
>
<div
v-for=
'(item, index) in highRiskList'
:key=
'index'
class=
'tag tag-red'
@
click=
'toShowHighRisk(item)'
>
<span>
{{
item
.
name
}}
:
</span><span
class=
'color-red'
>
{{
item
.
num
||
0
}}
项
</span>
</div>
</div>
</div>
</div>
<van-popup
v-model:show=
'showRiskHighItem'
position=
'bottom'
>
<div
class=
'p-4'
style=
'height: 100%'
>
<div
class=
'flex justify-between items-center mb-4 pop-title'
>
<div></div>
<div>
存在以下风险元素
</div>
<div
@
click=
'showRiskHighItem = false'
style=
'font-weight: 400'
>
取消
</div>
</div>
<!--
<div
class=
''
></div>
-->
<div
style=
'height: 80%;overflow: auto'
>
<div
class=
'pt-3 pb-3 bg-white h-full'
>
<div
v-for=
'(item, index) in riskHighItemList'
:key=
'item.id'
>
<div
class=
'detail-content flex'
>
<div>
{{
index
+
1
}}
、
</div>
<div>
{{
item
.
name
}}
</div>
</div>
</div>
</div>
</div>
</div>
</van-popup>
</div>
<div
class=
'p-3 grow cont-box'
>
<div
class=
'p-3 h-full cont-inner'
>
<div
class=
'flex justify-between collapse-head mt-2'
>
<span
class=
'text-16 font-semibold'
>
全部内容
</span>
<span
@
click=
'toggleAll'
>
<span
v-if=
'!collapseAll'
>
展开全部
</span>
<span
v-else
>
展开收起
</span>
<span
:class=
"['ml-2 icon-down',
{ 'icon-down-expanded': collapseAll }]">
<doc-icon
type=
'doc-down'
/>
</span>
</span>
</div>
<van-collapse
:model-value=
'activeCollapse'
ref=
'collapse'
class=
'doc-collapse'
@
change=
'collapseChange'
>
<van-collapse-item
key=
'1'
title=
'居民信息'
name=
'1'
>
<template
#
right-icon
>
<doc-icon
type=
'doc-down'
/>
</
template
>
<div
class=
'list'
>
<div
v-for=
'item in columnsBase'
:key=
'item.key'
>
<div
class=
'flex justify-between py-1 border-bottom item'
>
<span
class=
'shrink-0 mr-2 label'
>
{{ item.title }}
</span>
<span
v-if=
"item.key === 'idCard'"
>
{{ $idCardHide(residentInfo.idCard) || '-'
}}
</span>
<span
class=
'text-end'
v-else
>
<span>
{{ residentInfo[item.key] || '-' }}
</span>
<span
v-if=
'item.unit'
class=
'ml-1'
>
{{ item.unit }}
</span>
</span>
</div>
</div>
</div>
</van-collapse-item>
<van-collapse-item
key=
'2'
title=
'筛查病种'
name=
'2'
>
<
template
#
right-icon
>
<doc-icon
type=
'doc-down'
/>
</
template
>
<div
class=
'list'
>
<div
class=
'flex justify-between py-1 border-bottom item'
>
<span
class=
'shrink-0 mr-2 label'
>
筛查病种
</span>
<span
class=
'text-end'
>
<span>
{{ info.diseaseArraysName || '-' }}
</span>
</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item
key=
'3'
title=
'病史'
name=
'3'
v-if=
'medicalHistoryShow'
>
<
template
#
right-icon
>
<doc-icon
type=
'doc-down'
/>
</
template
>
<div
class=
'list'
>
<div
class=
'flex justify-between py-1 border-bottom item'
>
<span
class=
'shrink-0 mr-2 label'
>
病史
</span>
<span
class=
'text-end'
>
<span>
{{ info.medicalHistoryName || '-' }}
</span>
</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item
key=
'4'
title=
'家族史'
name=
'4'
v-if=
'familyHistoryShow'
>
<
template
#
right-icon
>
<doc-icon
type=
'doc-down'
/>
</
template
>
<div
class=
'list'
>
<div
class=
'flex justify-between py-1 border-bottom item'
>
<span
class=
'shrink-0 mr-2 label'
>
家族史
</span>
<span
class=
'text-end'
>
<span>
{{ info.familyHistoryName || '-' }}
</span>
</span>
</div>
<div>
<div
class=
'flex items-center'
v-for=
'item in info.diseaseRelativeList'
>
<
template
v-if=
'item.relativeAgeList.filter(e => e.age).length'
>
<div
class=
'mt-2'
>
{{
item
.
diseaseTypeName
}}
:
</div>
<div
class=
'mt-2'
>
<span
v-for=
'item1 in item.relativeAgeList'
>
<span
v-if=
'item1.age'
>
{{
item1
.
relativeTypeName
}}
:
</span>
<span
v-if=
'item1.age'
>
{{
item1
.
age
||
'-'
}}
岁;
</span>
</span>
</div>
</
template
>
</div>
</div>
</div>
</van-collapse-item>
<van-collapse-item
key=
'5'
title=
'身高'
name=
'5'
v-if=
'highShow'
>
<
template
#
right-icon
>
<doc-icon
type=
'doc-down'
/>
</
template
>
<div
class=
'list'
>
<div
class=
'flex justify-between py-1 border-bottom item'
>
<span
class=
'shrink-0 mr-2 label'
>
身高
</span>
<span
class=
'text-end'
>
<span>
{{ info.height || '-' }} cm
</span>
</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item
key=
'6'
title=
'体重'
name=
'6'
v-if=
'highShow'
>
<
template
#
right-icon
>
<doc-icon
type=
'doc-down'
/>
</
template
>
<div
class=
'list'
>
<div
class=
'flex justify-between py-1 border-bottom item'
>
<span
class=
'shrink-0 mr-2 label'
>
体重
</span>
<span
class=
'text-end'
>
<span>
{{ info.weight || '-' }} kg
</span>
</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item
key=
'7'
title=
'BMI(体质指数)'
name=
'7'
v-if=
'highShow'
>
<
template
#
right-icon
>
<doc-icon
type=
'doc-down'
/>
</
template
>
<div
class=
'list'
>
<div
class=
'flex justify-between py-1 border-bottom item'
>
<span
class=
'shrink-0 mr-2 label'
>
BMI(体质指数)
</span>
<span
class=
'text-end'
>
<span>
{{ info.bmi || '-' }} kg/m²
</span>
</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item
key=
'8'
title=
'腰围'
name=
'8'
v-if=
'waistShow'
>
<
template
#
right-icon
>
<doc-icon
type=
'doc-down'
/>
</
template
>
<div
class=
'list'
>
<div
class=
'flex justify-between py-1 border-bottom item'
>
<span
class=
'shrink-0 mr-2 label'
>
腰围
</span>
<span
class=
'text-end'
>
<span>
{{ info.waistline || '-' }} cm
</span>
</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item
key=
'9'
title=
'锻炼频率'
name=
'9'
v-if=
'exerciseShow'
>
<
template
#
right-icon
>
<doc-icon
type=
'doc-down'
/>
</
template
>
<div
class=
'list'
>
<div
class=
'flex justify-between py-1 border-bottom item'
>
<span
class=
'shrink-0 mr-2 label'
>
锻炼频率
</span>
<span
class=
'text-end'
>
<span>
{{ info.exerciseFrequencyName || '-' }}
</span>
<span
v-if=
'info.exerciseFrequency == 2 && info.isExerciseFiveName'
>
({{ info.isExerciseFiveName }})
</span>
</span>
</div>
<div
class=
'flex justify-between py-1 border-bottom item'
v-if=
'[1,2,3].includes(info.exerciseFrequency) && exerciseShow'
>
<span
class=
'shrink-0 mr-2 label'
>
每次锻炼时间
</span>
<span
class=
'text-end'
>
<span>
{{ info.everyExercise || '-' }} 分钟
</span>
</span>
</div>
<div
class=
'flex justify-between py-1 border-bottom item'
v-if=
'[1,2,3].includes(info.exerciseFrequency) && exerciseShow'
>
<span
class=
'shrink-0 mr-2 label'
>
可达到中等及以上运动强度
</span>
<span
class=
'text-end'
>
<span>
{{ info.mediumStrengthName }}
</span>
</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item
key=
'10'
title=
'女性病史'
name=
'10'
v-if=
'womanMHShow'
>
<
template
#
right-icon
>
<doc-icon
type=
'doc-down'
/>
</
template
>
<div
class=
'list'
>
<div
class=
'flex justify-between py-1 border-bottom item'
>
<span
class=
'shrink-0 mr-2 label'
>
女性病史
</span>
<span
class=
'text-end'
>
<span>
{{ info.femaleMedicalHistoryName || '-' }}
</span>
</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item
key=
'11'
title=
'用药史'
name=
'11'
v-if=
'medicationHShow'
>
<
template
#
right-icon
>
<doc-icon
type=
'doc-down'
/>
</
template
>
<div
class=
'list'
>
<div
class=
'flex justify-between py-1 border-bottom item'
>
<span
class=
'shrink-0 mr-2 label'
>
用药史
</span>
<span
class=
'text-end'
>
<span>
{{ info.medicineHistoryName || '-' }}
</span>
</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item
key=
'12'
title=
'高密度脂蛋白胆固醇'
name=
'12'
v-if=
'triglycerideShow'
>
<
template
#
right-icon
>
<doc-icon
type=
'doc-down'
/>
</
template
>
<div
class=
'list'
>
<div
class=
'flex justify-between py-1 border-bottom item'
>
<span
class=
'shrink-0 mr-2 label'
>
高密度脂蛋白胆固醇
</span>
<span
class=
'text-end'
>
<span>
{{ info.hdlCholesterin || '-' }} mmol/L
</span>
</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item
key=
'13'
title=
'甘油三酯'
name=
'13'
v-if=
'triglycerideShow'
>
<
template
#
right-icon
>
<doc-icon
type=
'doc-down'
/>
</
template
>
<div
class=
'list'
>
<div
class=
'flex justify-between py-1 border-bottom item'
>
<span
class=
'shrink-0 mr-2 label'
>
甘油三酯
</span>
<span
class=
'text-end'
>
<span>
{{ info.triglyceride || '-' }} mmol/L
</span>
</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item
key=
'14'
title=
'总胆固醇'
name=
'14'
v-if=
'triglycerideShow'
>
<
template
#
right-icon
>
<doc-icon
type=
'doc-down'
/>
</
template
>
<div
class=
'list'
>
<div
class=
'flex justify-between py-1 border-bottom item'
>
<span
class=
'shrink-0 mr-2 label'
>
总胆固醇
</span>
<span
class=
'text-end'
>
<span>
{{ info.serumCholesterin || '-' }} mmol/L
</span>
</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item
key=
'15'
title=
'有害物质接触或婴幼儿时期病史'
name=
'15'
v-if=
'babyMHShow'
>
<
template
#
right-icon
>
<doc-icon
type=
'doc-down'
/>
</
template
>
<div
class=
'list'
>
<div
class=
'flex justify-between py-1 border-bottom item'
>
<span>
<span>
{{ info.touchHarmfulName || '-' }}
</span>
</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item
key=
'16'
title=
'血压(左侧右侧)值(SBP/DBP)'
name=
'16'
v-if=
'bloodPressureShow'
>
<
template
#
right-icon
>
<doc-icon
type=
'doc-down'
/>
</
template
>
<div
class=
'list'
>
<div
class=
'flex justify-between py-1 border-bottom item'
>
<div>
<div>
第一次:{{ info.pressureOneSbp }}-{{ info.pressureOneDbp }} mmHg;
</div>
<div
class=
'mt-2'
>
第二次:{{ info.pressureTwoSbp }}-{{ info.pressureTwoDbp }} mmHg
</div>
</div>
</div>
</div>
</van-collapse-item>
<van-collapse-item
key=
'17'
title=
'饮食习惯'
name=
'17'
v-if=
'eatHabitShow'
>
<
template
#
right-icon
>
<doc-icon
type=
'doc-down'
/>
</
template
>
<div
class=
'list'
>
<div
class=
'flex justify-between py-1 border-bottom item'
>
<span
class=
'shrink-0 mr-2 label'
>
饮食习惯
</span>
<span
class=
'text-end'
>
<span>
{{ info.dietaryHabitName || '-' }}
</span>
</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item
key=
'18'
title=
'饮酒情况'
name=
'18'
v-if=
'drinkShow'
>
<
template
#
right-icon
>
<doc-icon
type=
'doc-down'
/>
</
template
>
<div
class=
'list'
>
<div
class=
'flex justify-between py-1 border-bottom item'
>
<span
class=
'shrink-0 mr-2 label'
>
饮酒频率
</span>
<span
class=
'text-end'
>
<span>
{{ info.drinkFrequencyName || '-' }}
</span>
</span>
</div>
<div
v-if=
'[2,3,4].includes(info.drinkFrequency)'
>
<div
class=
'flex justify-between py-1 border-bottom item'
>
<span
class=
'shrink-0 mr-2 label'
>
饮酒种类
</span>
<span
class=
'text-end'
>
<span>
{{ $addrJoin(info.drinkKindName, info.drinkKindOther) || '-' }}
</span>
</span>
</div>
<div
class=
'flex justify-between py-1 border-bottom item'
>
<div
class=
'shrink-0 mr-2 label'
>
日饮酒量
</div>
<div
class=
'text-end'
>
<div
v-for=
'item in (info.drinkKindCapacityList || [])'
:key=
'item.drinkKind'
>
<span>
{{ item.drinkKindName }}:
</span>
<span>
{{ item.drinkCapacity || '-' }} mL
</span>
</div>
<div>
<span>
平均:
</span><span>
{{ info.dayDrink || '-' }} mL
</span>
</div>
</div>
</div>
<div
class=
'flex justify-between py-1 border-bottom item'
>
<span
class=
'shrink-0 mr-2 label'
>
开始饮酒年龄
</span>
<span
class=
'text-end'
>
<span>
{{ info.startDrinkAge || '-' }} 岁
</span>
</span>
</div>
<div
class=
'flex justify-between py-1 border-bottom item'
>
<span
class=
'shrink-0 mr-2 label'
>
是否戒酒
</span>
<span
class=
'text-end'
>
<span>
{{ info.giveDrinkName || '-' }}
</span>
</span>
</div>
<div
class=
'flex justify-between py-1 border-bottom item'
v-if=
'info.giveDrink == 1'
>
<span
class=
'shrink-0 mr-2 label'
>
戒酒年龄
</span>
<span
class=
'text-end'
>
<span>
{{ info.giveDrinkStart || '-' }} 岁
</span>
</span>
</div>
</div>
</div>
</van-collapse-item>
<van-collapse-item
key=
'19'
title=
'吸烟情况'
name=
'19'
v-if=
'smokeShow'
>
<
template
#
right-icon
>
<doc-icon
type=
'doc-down'
/>
</
template
>
<div
class=
'list'
>
<div
class=
'flex justify-between py-1 border-bottom item'
>
<span
class=
'shrink-0 mr-2 label'
>
吸烟情况
</span>
<span
class=
'text-end'
>
<span>
{{ info.isSmokingName || '-' }}
</span>
</span>
</div>
<div
class=
'flex justify-between py-1 border-bottom item'
v-if=
'info.isSmoking == 3 && smokeShow'
>
<span
class=
'shrink-0 mr-2 label'
>
日吸烟量
</span>
<span
class=
'text-end'
>
<span>
{{ info.daySmoking || '-' }} 支
</span>
</span>
</div>
<div
class=
'flex justify-between py-1 border-bottom item'
v-if=
'info.isSmoking == 3 && smokeShow'
>
<span
class=
'shrink-0 mr-2 label'
>
开始吸烟年龄
</span>
<span
class=
'text-end'
>
<span>
{{ info.startSmoking || '-' }} 岁
</span>
</span>
</div>
<div
class=
'flex justify-between py-1 border-bottom item'
v-if=
'info.isSmoking == 2 && smokeShow'
>
<span
class=
'shrink-0 mr-2 label'
>
戒烟年龄
</span>
<span
class=
'text-end'
>
<span>
{{ info.giveSmokingAge || '-' }} 岁
</span>
</span>
</div>
<div
class=
'flex justify-between py-1 border-bottom item'
v-if=
'smokeShow && info?.diseaseArrays?.includes(1)'
>
<span
class=
'shrink-0 mr-2 label'
>
经常吸入二手烟
</span>
<span
class=
'text-end'
>
<span>
{{ info.secondSmokingName || '-' }}
</span>
</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item
key=
'20'
title=
'黑棘皮病'
name=
'20'
v-if=
'blackSpinySkinShow'
>
<
template
#
right-icon
>
<doc-icon
type=
'doc-down'
/>
</
template
>
<div
class=
'list'
>
<div
class=
'flex justify-between py-1 border-bottom item'
>
<span
class=
'shrink-0 mr-2 label'
>
黑棘皮病
</span>
<span
class=
'text-end'
>
<span>
{{ info.blackSpinySkinName || '-' }}
</span>
</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item
key=
'21'
title=
'长期精神紧张'
name=
'21'
v-if=
'mentalTensionShow'
>
<
template
#
right-icon
>
<doc-icon
type=
'doc-down'
/>
</
template
>
<div
class=
'list'
>
<div
class=
'flex justify-between py-1 border-bottom item'
>
<span
class=
'shrink-0 mr-2 label'
>
长期精神紧张
</span>
<span
class=
'text-end'
>
<span>
{{ info.mentalTensionName || '-' }}
</span>
</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item
key=
'22'
title=
'皮肤或肌腱黄色瘤'
name=
'22'
v-if=
'xanthomaShow'
>
<
template
#
right-icon
>
<doc-icon
type=
'doc-down'
/>
</
template
>
<div
class=
'list'
>
<div
class=
'flex justify-between py-1 border-bottom item'
>
<span
class=
'shrink-0 mr-2 label'
>
皮肤或肌腱黄色瘤
</span>
<span
class=
'text-end'
>
<span>
{{ info.xanthomaName || '-' }}
</span>
</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item
key=
'23'
title=
'跟腱增厚'
name=
'23'
v-if=
'tendoIncrassationShow'
>
<
template
#
right-icon
>
<doc-icon
type=
'doc-down'
/>
</
template
>
<div
class=
'list'
>
<div
class=
'flex justify-between py-1 border-bottom item'
>
<span
class=
'shrink-0 mr-2 label'
>
跟腱增厚
</span>
<span
class=
'text-end'
>
<span>
{{ info.tendoIncrassationName || '-' }}
</span>
</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item
key=
'24'
title=
'中国糖尿病风险评分'
name=
'24'
v-if=
'riskScoreShow'
>
<
template
#
right-icon
>
<doc-icon
type=
'doc-down'
/>
</
template
>
<div
class=
'list'
>
<div
class=
'flex justify-between py-1 border-bottom item'
>
<span
class=
'shrink-0 mr-2 label'
>
中国糖尿病风险评分
</span>
<span
class=
'text-end'
>
<span>
{{ info.riskScoreName || '-' }}
</span>
</span>
</div>
</div>
</van-collapse-item>
<van-collapse-item
key=
'25'
title=
'知情同意书'
name=
'25'
>
<
template
#
right-icon
>
<doc-icon
type=
'doc-down'
/>
</
template
>
<div>
<image-preview
:img-list=
'info.informedConsentUrl'
></image-preview>
</div>
</van-collapse-item>
<van-collapse-item
key=
'26'
title=
'筛查机构'
name=
'26'
>
<
template
#
right-icon
>
<doc-icon
type=
'doc-down'
/>
</
template
>
<div
class=
'list'
>
<div
v-for=
'item in columnsOrg'
:key=
'item.key'
>
<div
class=
'flex justify-between py-1 border-bottom item'
>
<span
class=
'shrink-0 mr-2 label'
>
{{ item.title }}
</span>
<span
class=
'text-end'
>
<span>
{{ info[item.key] || '-' }}
</span>
</span>
</div>
</div>
</div>
</van-collapse-item>
</van-collapse>
</div>
</div>
</div>
</template>
<
script
>
import
{
showNotify
}
from
'vant'
import
{
secondScreenDetail
}
from
'@/api/doctor/screening.js'
import
{
useStore
}
from
'@/doctor/store'
import
{
fetchDataHandle
}
from
'@/utils/common'
import
ImagePreview
from
'@/doctor/components/imagePreview/imagePreview'
export
default
{
components
:
{
ImagePreview
},
data
()
{
return
{
store
:
useStore
(),
activeCollapse
:
[],
collapseList
:
[
{
title
:
'居民信息'
,
name
:
'1'
},
{
title
:
'筛查病种'
,
name
:
'2'
},
{
title
:
'病史'
,
name
:
'3'
},
{
title
:
'家族史'
,
name
:
'4'
},
{
title
:
'身高'
,
name
:
'5'
},
{
title
:
'体重'
,
name
:
'6'
},
{
title
:
'BMI'
,
name
:
'7'
},
{
title
:
'腰围'
,
name
:
'8'
},
{
title
:
'锻炼频率'
,
name
:
'9'
},
{
title
:
'女性病史'
,
name
:
'10'
},
{
title
:
'用药史'
,
name
:
'11'
},
{
title
:
'高密度脂蛋白胆固醇'
,
name
:
'12'
},
{
title
:
'甘油三酯'
,
name
:
'13'
},
{
title
:
'总胆固醇'
,
name
:
'14'
},
{
title
:
'有害物质接触或婴幼儿时期病史'
,
name
:
'15'
},
{
title
:
'现测血压(左侧右侧)值(SBP/DBP)'
,
name
:
'16'
},
{
title
:
'饮食习惯'
,
name
:
'17'
},
{
title
:
'饮酒情况'
,
name
:
'18'
},
{
title
:
'吸烟情况'
,
name
:
'19'
},
{
title
:
'黑棘皮病'
,
name
:
'20'
},
{
title
:
'长期精神紧张'
,
name
:
'21'
},
{
title
:
'皮肤或肌腱黄色瘤'
,
name
:
'22'
},
{
title
:
'跟腱增厚'
,
name
:
'23'
},
{
title
:
'中国糖尿病风险评分'
,
name
:
'24'
},
{
title
:
'知情同意书'
,
name
:
'25'
},
{
title
:
'筛查机构'
,
name
:
'26'
}
],
// 全部展开、收起
collapseAll
:
false
,
showRiskHighItem
:
false
,
riskHighItemList
:
[],
info
:
{},
columnsBase
:
[
{
title
:
'姓名'
,
key
:
'residentName'
},
{
title
:
'证件号码'
,
key
:
'idCard'
},
{
title
:
'性别'
,
key
:
'genderName'
},
{
title
:
'出生日期'
,
key
:
'dataBirth'
},
{
title
:
'年龄'
,
key
:
'currentAge'
},
{
title
:
'民族'
,
key
:
'nationalName'
},
{
title
:
'本人电话'
,
key
:
'telephone'
},
{
title
:
'现住址'
,
key
:
'presentCodeName'
},
{
title
:
'详细地址'
,
key
:
'nowAddress'
},
{
title
:
'户籍地址'
,
key
:
'registeredCodeName'
},
{
title
:
'详细地址'
,
key
:
'permanentAddress'
}
],
columnsOrg
:
[
{
title
:
'筛查单位'
,
key
:
'screenUnitName'
},
{
title
:
'筛查科室'
,
key
:
'screenOfficeName'
},
{
title
:
'筛查医生'
,
key
:
'screenDoctorName'
}
],
highRiskList
:
[]
}
},
computed
:
{
id
()
{
return
this
.
$route
.
query
.
id
},
residentInfo
()
{
return
this
.
info
.
residentsRecord
||
{}
},
//判断病史显示隐藏
medicalHistoryShow
()
{
let
res
=
false
const
{
diseaseArrays
=
[]
}
=
this
.
info
if
(
diseaseArrays
.
includes
(
1
)
||
diseaseArrays
.
includes
(
2
)
||
diseaseArrays
.
includes
(
3
)
||
diseaseArrays
.
includes
(
4
)
||
diseaseArrays
.
includes
(
5
)
||
diseaseArrays
.
includes
(
6
)
||
diseaseArrays
.
includes
(
7
))
{
res
=
true
}
return
res
},
//判断家族史显示隐藏
familyHistoryShow
()
{
let
res
=
false
const
{
diseaseArrays
=
[]
}
=
this
.
info
if
(
diseaseArrays
.
includes
(
1
)
||
diseaseArrays
.
includes
(
2
)
||
diseaseArrays
.
includes
(
3
)
||
diseaseArrays
.
includes
(
4
)
||
diseaseArrays
.
includes
(
5
)
||
diseaseArrays
.
includes
(
6
)
||
diseaseArrays
.
includes
(
7
))
{
res
=
true
}
return
res
},
//判断身高、体重、BMI显示隐藏
highShow
()
{
let
res
=
false
const
{
diseaseArrays
=
[]
}
=
this
.
info
if
(
diseaseArrays
.
includes
(
1
)
||
diseaseArrays
.
includes
(
2
)
||
diseaseArrays
.
includes
(
4
)
||
diseaseArrays
.
includes
(
6
)
||
diseaseArrays
.
includes
(
7
))
{
res
=
true
}
return
res
},
//判断腰围显示隐藏
waistShow
()
{
let
res
=
false
const
{
diseaseArrays
=
[]
}
=
this
.
info
if
(
diseaseArrays
.
includes
(
1
)
||
diseaseArrays
.
includes
(
2
))
{
res
=
true
}
return
res
},
//判断锻炼频率显示隐藏
exerciseShow
()
{
let
res
=
false
const
{
diseaseArrays
=
[]
}
=
this
.
info
if
(
diseaseArrays
.
includes
(
1
)
||
diseaseArrays
.
includes
(
2
)
||
diseaseArrays
.
includes
(
4
))
{
res
=
true
}
return
res
},
//判断女性病史显示隐藏
womanMHShow
()
{
let
res
=
false
const
{
diseaseArrays
=
[]
}
=
this
.
info
if
(
diseaseArrays
.
includes
(
2
))
{
res
=
true
}
return
res
},
//判断用药史显示隐藏
medicationHShow
()
{
let
res
=
false
const
{
diseaseArrays
=
[]
}
=
this
.
info
if
(
diseaseArrays
.
includes
(
2
)
||
diseaseArrays
.
includes
(
4
)
||
diseaseArrays
.
includes
(
6
))
{
res
=
true
}
return
res
},
//判断高密度脂蛋白胆固醇、甘油三酯、总胆固醇显示隐藏
triglycerideShow
()
{
let
res
=
false
const
{
diseaseArrays
=
[]
}
=
this
.
info
if
(
diseaseArrays
.
includes
(
2
))
{
res
=
true
}
return
res
},
//判断有害物质接触或婴幼儿时期病史显示隐藏
babyMHShow
()
{
let
res
=
false
const
{
diseaseArrays
=
[]
}
=
this
.
info
if
(
diseaseArrays
.
includes
(
5
))
{
res
=
true
}
return
res
},
//判断血压显示隐藏
bloodPressureShow
()
{
let
res
=
false
const
{
diseaseArrays
=
[]
}
=
this
.
info
if
(
diseaseArrays
.
includes
(
1
))
{
res
=
true
}
return
res
},
//判断饮食习惯显示隐藏
eatHabitShow
()
{
let
res
=
false
const
{
diseaseArrays
=
[]
}
=
this
.
info
if
(
diseaseArrays
.
includes
(
1
))
{
res
=
true
}
return
res
},
//判断饮酒情况显示隐藏
drinkShow
()
{
let
res
=
false
const
{
diseaseArrays
=
[]
}
=
this
.
info
if
(
diseaseArrays
.
includes
(
1
))
{
res
=
true
}
return
res
},
//判断吸烟情况显示隐藏
smokeShow
()
{
let
res
=
false
const
{
diseaseArrays
=
[]
}
=
this
.
info
if
(
diseaseArrays
.
includes
(
1
)
||
diseaseArrays
.
includes
(
3
)
||
diseaseArrays
.
includes
(
4
)
||
diseaseArrays
.
includes
(
5
)
||
diseaseArrays
.
includes
(
7
))
{
res
=
true
}
return
res
},
//判断黑棘皮病显示隐藏
blackSpinySkinShow
()
{
let
res
=
false
const
{
diseaseArrays
=
[]
}
=
this
.
info
if
(
diseaseArrays
.
includes
(
2
))
{
res
=
true
}
return
res
},
//判断长期精神紧张显示隐藏
mentalTensionShow
()
{
let
res
=
false
const
{
diseaseArrays
=
[]
}
=
this
.
info
if
(
diseaseArrays
.
includes
(
1
))
{
res
=
true
}
return
res
},
//判断皮肤或肌腱黄色瘤显示隐藏
xanthomaShow
()
{
let
res
=
false
const
{
diseaseArrays
=
[]
}
=
this
.
info
if
(
diseaseArrays
.
includes
(
7
))
{
res
=
true
}
return
res
},
//判断跟腱增厚显示隐藏
tendoIncrassationShow
()
{
let
res
=
false
const
{
diseaseArrays
=
[]
}
=
this
.
info
if
(
diseaseArrays
.
includes
(
7
))
{
res
=
true
}
return
res
},
//判断中国糖尿病风险评分显示隐藏
riskScoreShow
()
{
let
res
=
false
const
{
diseaseArrays
=
[]
}
=
this
.
info
if
(
diseaseArrays
.
includes
(
2
))
{
res
=
true
}
return
res
}
},
created
()
{
document
.
title
=
'筛查详情'
if
(
!
this
.
id
)
{
showNotify
({
type
:
'warning'
,
message
:
'未获取到查询信息'
})
return
}
this
.
init
()
},
methods
:
{
init
()
{
secondScreenDetail
({
id
:
this
.
id
}).
then
(
res
=>
{
let
result
=
res
.
data
||
{}
this
.
info
=
result
this
.
highRiskListHandle
(
result
)
})
},
highRiskListHandle
(
result
)
{
this
.
highRiskList
=
[]
let
obj
=
fetchDataHandle
(
result
,
{
diseaseArrays
:
'strToArrNum'
,
hypertensionHighItem
:
'strToArrNum'
,
diabetesHighItem
:
'strToArrNum'
,
coronaryHighItem
:
'strToArrNum'
,
strokeHighItem
:
'strToArrNum'
,
pulmonaryHighItem
:
'strToArrNum'
,
nephrosisHighItem
:
'strToArrNum'
,
dyslipemiaHighItem
:
'strToArrNum'
})
const
{
hypertensionHighItem
=
[],
diabetesHighItem
=
[],
coronaryHighItem
=
[],
strokeHighItem
=
[],
pulmonaryHighItem
=
[],
nephrosisHighItem
=
[],
dyslipemiaHighItem
=
[]
}
=
obj
let
list
=
[]
let
o
=
{
name
:
''
,
num
:
0
}
if
(
hypertensionHighItem
.
length
)
{
o
=
{
id
:
1
,
name
:
'高血压风险因素'
,
num
:
hypertensionHighItem
.
length
,
highItem
:
hypertensionHighItem
,
dict
:
`CP00141`
}
list
.
push
(
o
)
}
if
(
diabetesHighItem
.
length
)
{
o
=
{
id
:
2
,
name
:
'糖尿病风险因素'
,
num
:
diabetesHighItem
.
length
,
highItem
:
diabetesHighItem
,
dict
:
`CP00142`
}
list
.
push
(
o
)
}
if
(
coronaryHighItem
.
length
)
{
o
=
{
id
:
3
,
name
:
'冠心病风险因素'
,
num
:
coronaryHighItem
.
length
,
highItem
:
coronaryHighItem
,
dict
:
`CP00143`
}
list
.
push
(
o
)
}
if
(
strokeHighItem
.
length
)
{
o
=
{
id
:
4
,
name
:
'脑卒中风险因素'
,
num
:
strokeHighItem
.
length
,
highItem
:
strokeHighItem
,
dict
:
`CP00144`
}
list
.
push
(
o
)
}
if
(
pulmonaryHighItem
.
length
)
{
o
=
{
id
:
5
,
name
:
'慢阻肺风险因素'
,
num
:
pulmonaryHighItem
.
length
,
highItem
:
pulmonaryHighItem
,
dict
:
`CP00145`
}
list
.
push
(
o
)
}
if
(
nephrosisHighItem
.
length
)
{
o
=
{
id
:
6
,
name
:
'慢性肾脏病风险因素'
,
num
:
nephrosisHighItem
.
length
,
highItem
:
nephrosisHighItem
,
dict
:
`CP00146`
}
list
.
push
(
o
)
}
if
(
dyslipemiaHighItem
.
length
)
{
o
=
{
id
:
7
,
name
:
'血脂异常风险因素'
,
num
:
dyslipemiaHighItem
.
length
,
highItem
:
dyslipemiaHighItem
,
dict
:
`CP00147`
}
list
.
push
(
o
)
}
this
.
highRiskList
=
list
},
onBack
()
{
this
.
$router
.
back
()
},
// 折叠面板切换
collapseChange
(
val
)
{
if
(
val
&&
val
.
length
<=
2
)
{
this
.
activeCollapse
=
val
.
slice
(
val
.
length
-
1
)
}
else
{
if
(
this
.
activeCollapse
.
length
>
val
.
length
)
{
this
.
activeCollapse
=
val
}
if
(
this
.
activeCollapse
.
length
<
val
.
length
)
{
this
.
activeCollapse
=
val
.
slice
(
val
.
length
-
1
)
}
}
if
(
val
&&
val
.
length
===
this
.
collapseList
.
length
)
{
this
.
collapseAll
=
true
}
else
{
this
.
collapseAll
=
false
}
},
// 全部展开、收起
toggleAll
()
{
if
(
this
.
collapseAll
)
{
this
.
activeCollapse
=
[]
}
else
{
this
.
activeCollapse
=
this
.
collapseList
.
map
(
e
=>
e
.
name
)
}
this
.
collapseAll
=
!
this
.
collapseAll
},
toShowHighRisk
(
val
)
{
let
res
=
[]
let
dictInfo
=
this
.
store
.
getDict
(
val
.
dict
)
let
highItemList
=
val
.
highItem
||
[]
highItemList
.
forEach
(
item
=>
{
let
infoList
=
dictInfo
.
filter
(
e
=>
e
.
value
==
item
)
if
(
infoList
&&
infoList
.
length
)
{
res
.
push
(
infoList
[
0
])
}
})
this
.
riskHighItemList
=
res
this
.
showRiskHighItem
=
true
}
}
}
</
script
>
<
style
lang=
'less'
scoped
>
@import url('../../utils/common.less');
.base-info {
background: linear-gradient(to bottom, #F0F6FF, #fff 50%);
color: #8c8c8c;
.name {
font-weight: 600;
color: #000;
font-size: 18px;
}
.top-label {
font-size: 13px;
line-height: 22px;
}
.color-b {
color: #262626;
}
.color-red {
color: #F5222D;
}
.tag {
border-radius: 2px;
padding: 3px 8px;
font-size: 12px;
line-height: 18px;
}
.tag-red {
border: 1px solid #EFF2F7;
color: #262626;
background-color: #EFF2F7;
}
}
.cont-box {
background-color: #f9f9f9;
.cont-inner {
background: linear-gradient(to bottom, #F0F6FF, #fff .6rem);
border-top-left-radius: .08rem;
border-top-right-radius: .08rem;
}
}
.collapse-head {
.icon-down {
vertical-align: middle;
font-size: .12rem;
.svg-icon {
transition: all .2s;
}
}
.icon-down-expanded {
.svg-icon {
transform: rotate(-180deg);
}
}
}
table {
text-align: left;
// border-bottom: 1px solid var(--van-cell-border-color);
> tr {
> td {
padding-left: 14px;
padding-bottom: 12px;
&:first-child {
text-align: right;
padding-left: 0;
}
}
}
}
.list {
color: #262626;
.label {
min-width: 5em;
}
}
.gap-y-1 {
row-gap: 4px;
}
.pop-title {
color: #262626;
font-size: 16px;
line-height: 24px;
font-weight: bold;
}
.de-driver {
border: 1px solid #D7D8DA;
}
.bg-white {
background: #FFFFFF;
padding: 12px 16px;
border-radius: 8px;
}
.detail-content {
color: #F5222D;
font-size: 16px;
line-height: 1.5;
}
:deep(.van-popup) {
height: 50% !important;
background: #F5F5F5;
}
</
style
>
src/doctor/screening/highVisit/first/DoctorInfo.vue
0 → 100644
View file @
ccb8d0c1
<
template
>
<div
class=
"doctor-info"
>
<div
class=
"doc-form-label"
required
>
筛查单位
</div>
<van-field
is-link
v-model=
'form.screenUnitName'
readonly
placeholder=
'请选择'
name=
"screenUnitId"
@
click=
"showUnit = true"
:rules=
"[
{ required: true, message: '请选择' }]"
/>
<DocUnit
v-model:show=
"showUnit"
v-model:value=
"form.screenUnitId"
:valueName=
"form?.screenUnitName"
@
change=
"unitChange"
/>
<div
class=
"doc-form-label"
required
>
筛查科室
</div>
<van-field
is-link
v-model=
'form.screenOfficeName'
readonly
placeholder=
'请选择'
name=
"screenOfficeId"
@
click=
"showOffice = true"
:rules=
"[
{ required: true, message: '请选择' }]"
/>
<DocOffice
v-model:show=
"showOffice"
v-model:value=
"form.screenOfficeId"
:unitId=
"form.screenUnitId"
@
change=
"officeChange"
/>
<div
class=
"doc-form-label"
required
>
筛查医生
</div>
<van-field
is-link
v-model=
'form.screenDoctorName'
readonly
placeholder=
'请选择'
name=
"screenDoctorId"
@
click=
"showDoctor = true"
:rules=
"[
{ required: true, message: '请选择' }]"
/>
<DocOfficeDoctor
v-model:show=
"showDoctor"
:allowClear=
"false"
v-model:value=
"form.screenDoctorId"
:unitId=
"form.screenUnitId"
:officeId=
"form.screenOfficeId"
@
change=
"(option) =>
{ form.screenDoctorName = option.staffName }"
/>
</div>
</
template
>
<
script
>
import
{
useStore
}
from
'@/doctor/store'
import
dayjs
from
'dayjs'
import
DocUnit
from
'@/doctor/components/docUnit/DocUnit.vue'
import
DocOffice
from
'@/doctor/components/docOffice/DocOffice.vue'
import
DocOfficeDoctor
from
'@/doctor/components/docOfficeDoctor/DocOfficeDoctor.vue'
const
defaultForm
=
(
info
=
{})
=>
{
const
form
=
{
createDate
:
undefined
,
// 随访单位
screenUnitId
:
undefined
,
screenUnitName
:
undefined
,
// 随访科室
screenOfficeId
:
undefined
,
screenOfficeName
:
undefined
,
// 随访医生
screenDoctorId
:
undefined
,
screenDoctorName
:
undefined
,
// 录入单位
createUnitId
:
undefined
,
createUnitName
:
undefined
,
// 录入科室
createOfficeId
:
undefined
,
createOfficeName
:
undefined
,
// 录入医生
createDoctorId
:
undefined
,
createDoctorName
:
undefined
}
Reflect
.
ownKeys
(
form
).
forEach
(
key
=>
{
if
(
info
[
key
]
!=
undefined
)
{
form
[
key
]
=
info
[
key
]
}
})
return
form
}
export
default
{
components
:
{
DocUnit
,
DocOffice
,
DocOfficeDoctor
},
props
:
{
info
:
{
default
:
()
=>
({})
}
},
data
()
{
return
{
form
:
{},
store
:
useStore
(),
showUnit
:
false
,
showOffice
:
false
,
showDoctor
:
false
}
},
computed
:
{
authInfo
()
{
return
this
.
store
.
authInfo
}
},
methods
:
{
initForm
()
{
this
.
form
.
createDate
=
dayjs
().
format
(
'YYYY-MM-DD'
)
// 随访单位
this
.
form
.
screenUnitId
=
this
.
authInfo
.
unitId
this
.
form
.
screenUnitName
=
this
.
authInfo
.
unitName
// 随访科室
this
.
form
.
screenOfficeId
=
this
.
authInfo
.
officeId
this
.
form
.
screenOfficeName
=
this
.
authInfo
.
officeName
// 随访医生
this
.
form
.
screenDoctorId
=
this
.
authInfo
.
relationId
this
.
form
.
screenDoctorName
=
this
.
authInfo
.
nickName
// 录入单位
this
.
form
.
createUnitId
=
this
.
authInfo
.
unitId
this
.
form
.
createUnitName
=
this
.
authInfo
.
unitName
// 录入科室
this
.
form
.
createOfficeId
=
this
.
authInfo
.
officeId
this
.
form
.
createOfficeName
=
this
.
authInfo
.
officeName
// 录入医生
this
.
form
.
createDoctorId
=
this
.
authInfo
.
relationId
this
.
form
.
createDoctorName
=
this
.
authInfo
.
nickName
},
unitChange
(
option
=
{})
{
this
.
form
.
screenUnitName
=
option
.
unitName
this
.
form
.
screenDoctorId
=
undefined
this
.
form
.
screenDoctorName
=
undefined
this
.
form
.
screenOfficeId
=
undefined
this
.
form
.
screenOfficeName
=
undefined
},
officeChange
(
option
=
{})
{
this
.
form
.
screenOfficeName
=
option
.
officeName
this
.
form
.
screenDoctorId
=
undefined
this
.
form
.
screenDoctorName
=
undefined
},
submit
()
{
return
this
.
form
}
},
watch
:
{
info
:
{
handler
(
info
)
{
this
.
form
=
defaultForm
(
info
)
if
(
!
this
.
info
.
id
)
{
this
.
initForm
()
}
},
immediate
:
true
}
}
}
</
script
>
<
style
lang=
"less"
scoped
></
style
>
src/doctor/screening/highVisit/first/FirstForm.vue
0 → 100644
View file @
ccb8d0c1
<
template
>
<div
class=
"h-full flex flex-col screening-first"
>
<DocNavBar
:title=
"`$
{id ? '修改' : '新增'}主要慢病高危筛查`" class="shrink-0"
:backFunc="onBack" :hideBack="step == 3">
</DocNavBar>
<div
class=
"p-4 overflow-y-auto grow"
ref=
"all"
>
<archiveCommon
:info=
"baseInfo"
v-if=
"step == 1"
ref=
"archiveCommon"
></archiveCommon>
<FormCont
:resident-info=
"baseInfo"
:info=
"screenInfo"
v-else-if=
"step == 2"
ref=
"FormCont"
/>
<Result
v-else-if=
"step == 3"
:info=
"resultInfo"
/>
</div>
<div
class=
"shrink-0"
v-if=
"step !== 3"
>
<div
class=
'bottom-small-line'
></div>
<div
class=
'px-5 py-2 grow flex justify-between'
>
<template
v-if=
'step == 1'
>
<van-button
type=
'primary'
block
round
@
click=
'toNext(2)'
>
下一步
</van-button>
</
template
>
<
template
v-else
>
<van-button
type=
'primary'
block
round
@
click=
'toNext(3)'
>
提交
</van-button>
</
template
>
</div>
</div>
</div>
</template>
<
script
>
import
DocNavBar
from
'@/doctor/components/docNavBar/DocNavBar.vue'
import
archiveCommon
from
'@/doctor/components/archiveCommon/archiveCommon.vue'
import
FormCont
from
'./FormCont.vue'
import
Result
from
'./Result.vue'
import
{
getChronicResidentsId
}
from
'@/api/doctor/generalFU'
import
{
firstScreenDetail
,
saveFirstScreening
,
updateFirstScreening
}
from
'@/api/doctor/screening.js'
import
{
fetchDataHandle
}
from
'@/utils/common.js'
import
{
useStore
}
from
'@/doctor/store'
export
default
{
components
:
{
DocNavBar
,
archiveCommon
,
FormCont
,
Result
},
data
()
{
return
{
store
:
useStore
(),
step
:
1
,
// 患者基础信息
baseInfo
:
{},
// 筛查信息
screenInfo
:
{},
// 结果
resultInfo
:
{}
}
},
computed
:
{
id
()
{
return
this
.
$route
.
query
.
id
},
residentInfoId
()
{
return
this
.
$route
.
query
.
residentInfoId
},
idCard
()
{
return
this
.
$route
.
query
.
idCard
},
},
// 路由守卫
beforeRouteLeave
(
to
,
from
)
{
// showConfirmDialog({
// message: '已填写的表单不会保存,确定要离开吗?'})
// .then(() => {
// next()
// })
// .catch(() => {
// next(false)
// })
if
(
this
.
step
===
2
)
{
this
.
onBack
()
return
false
}
return
true
},
created
()
{
this
.
init
()
},
methods
:
{
async
init
()
{
if
(
this
.
id
)
{
const
res
=
await
firstScreenDetail
({
id
:
this
.
id
})
const
result
=
res
.
data
||
{}
this
.
screenInfo
=
fetchDataHandle
(
result
,
{
medicalHistory
:
'strToArrNum'
,
familyHistory
:
'strToArrNum'
,
highItem
:
'strToArrNum'
})
this
.
baseInfo
=
this
.
screenInfo
.
residentsRecord
console
.
log
(
this
.
screenInfo
)
}
else
{
if
(
this
.
residentInfoId
)
{
let
res
=
await
getChronicResidentsId
(
this
.
residentInfoId
)
this
.
baseInfo
=
res
.
data
||
{}
this
.
screenInfo
.
currentAge
=
this
.
baseInfo
.
currentAge
this
.
screenInfo
.
residentInfoId
=
this
.
residentInfoId
}
else
if
(
this
.
idCard
)
{
// 新建用户
this
.
baseInfo
.
idCard
=
this
.
idCard
}
}
},
toNext
(
val
)
{
if
(
val
==
2
)
{
// 基础信息
this
.
$refs
.
archiveCommon
.
onSubmit
().
then
(
res
=>
{
this
.
baseInfo
=
res
this
.
step
=
val
this
.
$refs
.
all
.
scrollTo
(
0
,
0
)
})
}
else
if
(
val
==
3
)
{
// 筛查信息
this
.
$refs
.
FormCont
.
submit
().
then
(
res
=>
{
if
(
!
res
)
return
console
.
log
(
'FormCont.submit'
,
res
)
const
query
=
fetchDataHandle
(
res
,
{
familyHistory
:
'arrToStr'
,
medicalHistory
:
'arrToStr'
,
highItem
:
'arrToStr'
})
query
.
residentsRecord
=
this
.
baseInfo
const
func
=
query
.
id
?
updateFirstScreening
:
saveFirstScreening
func
(
query
).
then
(
res
=>
{
this
.
resultInfo
=
query
this
.
store
.
onRefreshMark
()
this
.
step
=
val
})
})
}
else
{
this
.
step
=
val
this
.
$refs
.
all
.
scrollTo
(
0
,
0
)
}
},
onBack
()
{
if
(
this
.
step
==
1
)
{
this
.
$router
.
back
()
}
else
{
this
.
step
--
}
}
}
}
</
script
>
<
style
lang=
"less"
scoped
>
</
style
>
src/doctor/screening/highVisit/first/FormCont.vue
0 → 100644
View file @
ccb8d0c1
<
template
>
<div
class=
"screening-first-cont"
>
<van-form
ref=
'form'
class=
"doc-form"
>
<div
class=
'font-semibold'
>
筛查信息
</div>
<div
class=
'doc-form-label'
required
>
既往史
</div>
<van-field
is-link
v-model=
'form.medicalHistoryName'
readonly
placeholder=
'请选择'
name=
"medicalHistory"
:rules=
'rules.medicalHistory'
@
click=
"showMedical = true"
/>
<van-popup
v-model:show=
"showMedical"
position=
"bottom"
>
<div
class=
"pt-4 pb-4 popup-checkbox"
>
<div
class=
"flex justify-between pb-2"
>
<button
class=
"van-picker__cancel van-haptics-feedback"
@
click=
"showMedical = false"
>
取消
</button>
<span
class=
"text-16"
>
既往史(可多选)
</span>
<button
class=
"van-picker__confirm van-haptics-feedback"
@
click=
"medicalConfirm"
>
确认
</button>
</div>
<div
class=
"bottom-small-line"
></div>
<!--
<van-checkbox-group
v-model=
"form.medicalHistory"
class=
"px-4 pb-4 pt-2"
>
<van-checkbox
v-for=
"(item, index) in store.getDict('CP00118')"
:key=
"index"
@
click=
"medicalChange"
:name=
"item.value"
class=
"mb-3"
>
{{
item
.
name
}}
</van-checkbox>
</van-checkbox-group>
-->
<CheckBtn
v-model:value=
"form.medicalHistory"
:options=
"medicalHistoryArray"
multiple
round
column-1
class=
"py-3 px-4"
@
change=
"medicalChange"
/>
</div>
</van-popup>
<div
class=
"flex tip-box"
>
<div
class=
'doc-form-label shrink-0'
required
>
家族史
</div>
<span
class=
"grow text-end text-ellipsis"
>
若一级家属(如父母)有家族病史,则请选择
</span>
</div>
<van-field
is-link
v-model=
'form.familyHistoryName'
name=
"familyHistory"
readonly
placeholder=
'请选择'
:rules=
'rules.familyHistory'
@
click=
"showFamily = true"
/>
<van-popup
v-model:show=
"showFamily"
position=
"bottom"
>
<div
class=
"pt-4 pb-4 popup-checkbox"
>
<div
class=
"flex justify-between pb-2"
>
<button
class=
"van-picker__cancel van-haptics-feedback"
@
click=
"showFamily = false"
>
取消
</button>
<span
class=
"text-16"
>
家族史(可多选)
</span>
<button
class=
"van-picker__confirm van-haptics-feedback"
@
click=
"familyConfirm"
>
确认
</button>
</div>
<div
class=
"bottom-small-line"
></div>
<!--
<van-checkbox-group
v-model=
"form.familyHistory"
class=
"p-4"
>
<van-checkbox
v-for=
"(item, index) in store.getDict('CP00167').filter(e => e.value != 7)"
:key=
"index"
@
click=
"familyChange"
:name=
"item.value"
class=
"mb-3"
>
{{
item
.
name
}}
</van-checkbox>
</van-checkbox-group>
-->
<CheckBtn
v-model:value=
"form.familyHistory"
:options=
"familyHistoryArray"
multiple
round
column-1
class=
"py-3 px-4"
@
change=
"familyChange"
/>
</div>
</van-popup>
<div
class=
'doc-form-label'
>
年龄
</div>
<van-field
:modelValue=
"form.currentAge"
name=
"currentAge"
type=
"digit"
placeholder=
"请输入年龄"
readonly
maxlength=
"10"
>
<template
#
extra
>
<span
class=
"ml-1"
>
岁
</span>
</
template
>
</van-field>
<div
class=
'doc-form-label'
required
>
身高
</div>
<van-field
required
v-model=
"form.height"
name=
"height"
type=
"number"
placeholder=
"输入值10~300,1位小数"
maxlength=
"10"
:rules=
"rules.height"
>
<
template
#
extra
>
<span
class=
"ml-1"
>
cm
</span>
</
template
>
</van-field>
<div
class=
'doc-form-label'
required
>
体重
</div>
<van-field
required
v-model=
"form.weight"
name=
"weight"
type=
"number"
placeholder=
"输入值20~500,2位小数"
maxlength=
"10"
:rules=
"rules.weight"
>
<
template
#
extra
>
<span
class=
"ml-1"
>
kg
</span>
</
template
>
</van-field>
<div
class=
'doc-form-label'
>
BMI
</div>
<van-field
v-model=
"form.bmi"
name=
"bmi"
type=
"number"
placeholder=
"请输入"
maxlength=
"10"
readonly
>
<
template
#
extra
>
<span
class=
"ml-1"
>
kg/m²
</span>
</
template
>
</van-field>
<div
class=
'doc-form-label'
>
腰围
</div>
<van-field
v-model=
"form.waistline"
name=
"waistline"
type=
"number"
placeholder=
"输入值10~150,1位小数"
maxlength=
"10"
:rules=
"rules.waistline"
>
<
template
#
extra
>
<span
class=
"ml-1"
>
cm
</span>
</
template
>
</van-field>
<div
class=
'doc-form-label'
required
>
是否吸烟
</div>
<van-field
name=
"isSmoking"
class=
"no-back"
style=
"padding: 0"
:rules=
"rules.isSmoking"
>
<
template
#
input
>
<van-radio-group
v-model=
"form.isSmoking"
direction=
"horizontal"
shape=
"dot"
class=
"w-full doc-radio-group"
>
<van-radio
v-for=
"item in store.getDict('CP00120')"
:key=
"item.value"
:name=
"item.value"
label-position=
"left"
>
{{
item
.
name
}}
</van-radio>
</van-radio-group>
</
template
>
</van-field>
<div
class=
"flex items-center justify-between tip-box"
>
<div
class=
'doc-form-label shrink-0'
>
现测血压(mmHg)
</div>
<BloodPressurePanel
:pressureObj=
"pressureObj"
/>
</div>
<div
class=
"sub-text my-3"
>
第一次
</div>
<table
class=
"w-full mb-2"
>
<tr
class=
"sub-text"
>
<td>
收缩压(高压)
</td>
<td
style=
"width: 1em"
></td>
<td>
舒张压(低压)
</td>
</tr>
<tr>
<td
class=
"flex items-center"
>
<van-field
v-model=
"form.pressureOneSbp"
name=
"pressureOneSbp"
label=
""
type=
"number"
placeholder=
"60~300,整数"
maxlength=
"10"
:rules=
"rules.pressureDbp"
error-message-align=
"left"
input-align=
"left"
class=
"table-field"
/>
</td>
<td
class=
"text-center"
>
<span
class=
"divide"
>
/
</span>
</td>
<td>
<van-field
v-model=
"form.pressureOneDbp"
name=
"pressureOneDbp"
label=
""
type=
"number"
placeholder=
"30~300,整数"
maxlength=
"10"
:rules=
"rules.pressureSbp"
error-message-align=
"left"
input-align=
"left"
class=
"table-field"
/>
</td>
</tr>
</table>
<BloodPressureBt
:pressureObj=
"pressureObj"
@
getValue=
"setPressureOne"
>
第一次测量
</BloodPressureBt>
<div
class=
"sub-text my-3"
>
第二次
</div>
<table
class=
"w-full mb-2"
>
<tr
class=
"sub-text"
>
<td>
收缩压(高压)
</td>
<td
style=
"width: 1em"
></td>
<td>
舒张压(低压)
</td>
</tr>
<tr>
<td>
<van-field
v-model=
"form.pressureTwoSbp"
name=
"pressureTwoSbp"
label=
""
type=
"number"
placeholder=
"60~300,整数"
maxlength=
"10"
:rules=
"rules.pressureDbp"
error-message-align=
"left"
input-align=
"left"
class=
"table-field"
/>
</td>
<td
class=
"text-center"
>
<span
class=
"divide"
>
/
</span>
</td>
<td>
<van-field
v-model=
"form.pressureTwoDbp"
name=
"pressureTwoDbp"
label=
""
type=
"number"
placeholder=
"30~300,整数"
maxlength=
"10"
:rules=
"rules.pressureSbp"
error-message-align=
"left"
input-align=
"left"
class=
"table-field"
/>
</td>
</tr>
</table>
<BloodPressureBt
:pressureObj=
"pressureObj"
@
getValue=
"setPressureTwo"
>
第二次测量
</BloodPressureBt>
<div
class=
'doc-form-label'
>
空腹血糖
</div>
<van-field
v-model=
"form.fastingGlucose"
name=
"fastingGlucose"
type=
"number"
placeholder=
"输入值0~50,2位小数"
maxlength=
"10"
:rules=
"rules.fastingGlucose"
>
<
template
#
extra
>
<span
class=
"ml-1"
>
mmol/L
</span>
</
template
>
</van-field>
<div
class=
'doc-form-label'
>
低密度脂蛋白胆固醇
</div>
<van-field
v-model=
"form.ldlCholesterin"
name=
"ldlCholesterin"
type=
"number"
placeholder=
"输入值0~50,2位小数"
maxlength=
"10"
:rules=
"rules.ldlCholesterin"
>
<
template
#
extra
>
<span
class=
"ml-1"
>
mmol/L
</span>
</
template
>
</van-field>
<div
class=
'doc-form-label'
>
血清总胆固醇
</div>
<van-field
v-model=
"form.serumCholesterin"
name=
"serumCholesterin"
type=
"number"
placeholder=
"输入值0~50,1位小数"
maxlength=
"10"
:rules=
"rules.serumCholesterin"
>
<
template
#
extra
>
<span
class=
"ml-1"
>
mmol/L
</span>
</
template
>
</van-field>
<div
class=
'doc-form-label'
>
高密度脂蛋白胆固醇
</div>
<van-field
v-model=
"form.hdlCholesterin"
name=
"hdlCholesterin"
type=
"number"
placeholder=
"输入值0~50,1位小数"
maxlength=
"10"
:rules=
"rules.hdlCholesterin"
>
<
template
#
extra
>
<span
class=
"ml-1"
>
mmol/L
</span>
</
template
>
</van-field>
<div
class=
"flex tip-box"
>
<div
class=
'doc-form-label shrink-0'
required
>
运动
</div>
<span
class=
"grow text-end text-ellipsis"
>
每周保持150分钟内中等或75分钟内的高强度身体活动
</span>
</div>
<van-field
name=
"exerciseIntensity"
class=
"no-back"
style=
"padding: 0"
:rules=
"rules.exerciseIntensity"
>
<
template
#
input
>
<van-radio-group
v-model=
"form.exerciseIntensity"
direction=
"horizontal"
shape=
"dot"
class=
"w-full doc-radio-group"
>
<van-radio
v-for=
"item in store.getDict('CP00120')"
:key=
"item.value"
:name=
"item.value"
label-position=
"left"
>
{{
item
.
name
}}
</van-radio>
</van-radio-group>
</
template
>
</van-field>
<div
class=
'doc-form-label'
required
>
高危评估结果
</div>
<van-field
name=
"screenResult"
class=
"no-back"
style=
"padding: 0"
:rules=
"rules.screenResult"
>
<
template
#
input
>
<van-radio-group
v-model=
"form.screenResult"
direction=
"horizontal"
shape=
"dot"
class=
"w-full doc-radio-group"
>
<van-radio
v-for=
"item in store.getDict('CP00119')"
:key=
"item.value"
:name=
"item.value"
label-position=
"left"
>
{{
item
.
name
}}
</van-radio>
</van-radio-group>
</
template
>
</van-field>
<DoctorInfo
:info=
"info"
ref=
"DoctorInfo"
/>
<div
class=
'doc-form-label'
required
>
筛查日期
</div>
<van-field
v-model=
"form.screenDate"
is-link
readonly
name=
"screenDate"
placeholder=
"请选择"
@
click=
"showScreenDate = true"
:rules=
"rules.screenDate"
/>
<van-popup
v-model:show=
"showScreenDate"
position=
"bottom"
>
<van-date-picker
v-model=
"form._screenDate"
:min-date=
"screenDateRange.min"
:max-date=
"screenDateRange.max"
@
confirm=
"screenDateConfirm"
@
cancel=
"showScreenDate = false"
/>
</van-popup>
</van-form>
</div>
</template>
<
script
>
import
{
useStore
}
from
'@/doctor/store'
import
{
checkboxReject
}
from
'@/utils/common.js'
import
dayjs
from
'dayjs'
import
DoctorInfo
from
'./DoctorInfo.vue'
import
CheckBtn
from
'@/doctor/components/checkBtn/CheckBtn.vue'
import
{
BloodPressurePanel
,
BloodPressureBt
}
from
'@/doctor/components/bloodPressure/index.js'
const
defaultForm
=
(
info
=
{})
=>
{
const
form
=
{
id
:
undefined
,
residentInfoId
:
undefined
,
// 年龄
currentAge
:
undefined
,
// 既往史
medicalHistory
:
[],
medicalHistoryName
:
undefined
,
// 身高
height
:
undefined
,
// 体重
weight
:
undefined
,
bmi
:
undefined
,
// 腰围
waistline
:
undefined
,
// 是否吸烟
isSmoking
:
undefined
,
// 家族史
familyHistory
:
[],
familyHistoryName
:
undefined
,
// 空腹血糖
fastingGlucose
:
undefined
,
// 血清总胆固醇
serumCholesterin
:
undefined
,
// 低密度脂蛋白胆固醇
ldlCholesterin
:
undefined
,
// 高密度脂蛋白胆固醇
hdlCholesterin
:
undefined
,
// 运动
exerciseIntensity
:
undefined
,
// 筛查日期
screenDate
:
undefined
,
_screenDate
:
undefined
,
// 血压第一次
pressureOneDbp
:
undefined
,
pressureOneSbp
:
undefined
,
// 血压第二次
pressureTwoDbp
:
undefined
,
pressureTwoSbp
:
undefined
,
// 高危评估结果(1:一般人群(小于3个指标);2:高危人群(大于等于3个指标))
screenResult
:
1
,
// 高危项目 CP00113
highItem
:
undefined
,
gender
:
undefined
}
Reflect
.
ownKeys
(
form
).
forEach
(
key
=>
{
if
(
info
[
key
]
!=
undefined
)
{
form
[
key
]
=
info
[
key
]
}
})
return
form
}
export
default
{
components
:
{
CheckBtn
,
DoctorInfo
,
BloodPressurePanel
,
BloodPressureBt
},
props
:
{
info
:
{
default
:
()
=>
({})
},
residentInfo
:
{
default
:
()
=>
({})
},
},
inject
:
[
'pressureObj'
],
data
()
{
return
{
form
:
defaultForm
(),
rules
:
{
medicalHistory
:
[{
required
:
true
,
message
:
'请选择'
}],
familyHistory
:
[{
required
:
true
,
message
:
'请选择'
}],
exerciseIntensity
:
[{
required
:
true
,
message
:
'请选择'
}],
isSmoking
:
[{
required
:
true
,
message
:
'请选择'
}],
screenResult
:
[{
required
:
true
,
message
:
'请选择'
}],
screenDate
:
[{
required
:
true
,
message
:
'请选择'
}],
height
:
[{
required
:
true
,
message
:
'请输入'
},
{
pattern
:
/^
([
1-9
]\d{1}(?:\.\d{1})?
|
[
1-2
]\d{2}(?:\.\d{1})?
|300
)
$/
,
message
:
'输入值在10~300内,1位小数'
}],
weight
:
[{
required
:
true
,
message
:
'请输入'
},
{
pattern
:
/^
([
2-9
]\d{1}(?:\.\d{1,2})?
|
[
1-4
]\d{2}(?:\.\d{1,2})?
|500
)
$/
,
message
:
'输入值在20~500内,2位小数'
}],
waistline
:
[{
pattern
:
/^
([
1-9
]\d{1}(?:\.\d{1})?
|
[
1
][
0-4
]\d(?:\.\d{1})?
|150
)
$/
,
message
:
'输入值在10~150内,1位小数'
,
validateEmpty
:
false
}],
fastingGlucose
:
[{
pattern
:
/^
(?:
0
(?:\.\d{1,2})?
|
[
1-4
]\d{0,1}(?:\.\d{1,2})?
|
[
1-9
]{0,1}(?:\.\d{1,2})?
|50
)
$/
,
message
:
'输入值0~50,2位小数'
,
validateEmpty
:
false
}],
serumCholesterin
:
[{
pattern
:
/^
(?:
0
(?:\.\d{1})?
|
[
1-4
]\d{0,1}(?:\.\d{1})?
|
[
1-9
]{0,1}(?:\.\d{1})?
|50
)
$$/
,
message
:
'输入值0~50,1位小数'
,
validateEmpty
:
false
}],
ldlCholesterin
:
[{
pattern
:
/^
(?:
0
(?:\.\d{1,2})?
|
[
1-4
]\d{0,1}(?:\.\d{1,2})?
|
[
1-9
]{0,1}(?:\.\d{1,2})?
|50
)
$/
,
message
:
'输入值0~50,2位小数'
,
validateEmpty
:
false
}],
hdlCholesterin
:
[{
pattern
:
/^
(?:
0
(?:\.\d{1})?
|
[
1-4
]\d{0,1}(?:\.\d{1})?
|
[
1-9
]{0,1}(?:\.\d{1})?
|50
)
$$/
,
message
:
'输入值0~50,1位小数'
,
validateEmpty
:
false
}],
pressureDbp
:
[{
pattern
:
/^
([
6-9
]\d{1}
|
[
1-2
]\d{2}
|300
)
$/
,
message
:
'60~300,整数'
,
validateEmpty
:
false
}],
pressureSbp
:
[{
pattern
:
/^
([
3-9
]\d{1}
|
[
1-2
]\d{2}
|300
)
$/
,
message
:
'30~300,整数'
,
validateEmpty
:
false
}],
},
// 既往史
showMedical
:
false
,
// 家族史
showFamily
:
false
,
// 筛查日期
showScreenDate
:
false
,
// 筛查日期可选范围
screenDateRange
:
{
min
:
undefined
,
max
:
undefined
},
store
:
useStore
()
}
},
computed
:
{
// BMI
bmi
()
{
const
{
height
,
weight
}
=
this
.
form
return
height
&&
weight
?
(
weight
/
(
height
/
100
*
height
/
100
)).
toFixed
(
2
)
:
undefined
},
// 既往史
medicalHistoryArray
()
{
const
result
=
[]
this
.
store
.
getDict
(
'CP00118'
).
forEach
(
e
=>
{
if
(
e
.
value
==
9
)
{
result
.
unshift
(
e
)
return
}
result
.
push
(
e
)
})
return
result
},
// 家族史
familyHistoryArray
()
{
const
result
=
[]
this
.
store
.
getDict
(
'CP00167'
).
forEach
(
e
=>
{
if
(
e
.
value
==
9
)
{
result
.
unshift
(
e
)
return
}
result
.
push
(
e
)
})
return
result
},
// 筛查高危项目
highItem
()
{
const
{
currentAge
,
waistline
,
familyHistory
=
[],
isSmoking
,
gender
,
pressureOneSbp
,
pressureOneDbp
,
pressureTwoSbp
,
pressureTwoDbp
,
fastingGlucose
,
ldlCholesterin
,
serumCholesterin
}
=
this
.
form
let
list
=
[]
if
(
currentAge
>=
50
)
{
list
.
push
(
1
)
}
let
bmi
=
parseFloat
(
this
.
bmi
)
if
((
bmi
>=
24
)
||
(
gender
==
2
&&
waistline
>=
80
)
||
(
gender
==
1
&&
waistline
>=
85
)
){
list
.
push
(
2
)
}
if
(
isSmoking
==
1
)
{
list
.
push
(
3
)
}
if
(
familyHistory
&&
familyHistory
.
length
&&
(
familyHistory
.
includes
(
1
)
||
familyHistory
.
includes
(
2
)
||
familyHistory
.
includes
(
3
)
||
familyHistory
.
includes
(
4
)
||
familyHistory
.
includes
(
5
)
||
familyHistory
.
includes
(
6
)))
{
list
.
push
(
4
)
}
if
((
pressureOneSbp
>=
130
||
pressureTwoSbp
>=
130
)
||
(
pressureOneDbp
>=
85
||
pressureTwoDbp
>=
85
)
)
{
list
.
push
(
5
)
}
if
(
fastingGlucose
>=
6.1
)
{
list
.
push
(
6
)
}
// if (ldlCholesterin >= 3.4) {
// list.push(7)
// }
if
(
serumCholesterin
>=
5.2
)
{
list
.
push
(
7
)
}
list
=
Array
.
from
(
new
Set
(
list
))
return
list
}
},
created
()
{
this
.
init
()
},
methods
:
{
init
()
{
const
date
=
dayjs
()
this
.
form
.
screenDate
=
date
.
format
(
'YYYY-MM-DD'
)
this
.
form
.
_screenDate
=
[
date
.
year
(),
date
.
month
()
+
1
,
date
.
date
()]
this
.
screenDateRange
.
max
=
new
Date
(
date
.
year
(),
date
.
month
(),
date
.
date
())
this
.
screenDateRange
.
min
=
new
Date
(
date
.
year
()
-
20
,
date
.
month
(),
date
.
date
())
},
async
submit
()
{
try
{
await
this
.
$refs
.
form
.
validate
()
const
result
=
{
...
this
.
form
,
...
this
.
$refs
.
DoctorInfo
.
submit
()
}
return
result
}
catch
(
err
)
{
console
.
warn
(
err
)
this
.
$message
.
info
(
'表单校验不通过'
)
const
array
=
err
||
[]
if
(
array
.
length
)
{
this
.
$refs
.
form
.
scrollToField
(
array
[
0
].
name
)
}
}
},
// 既往史
medicalConfirm
()
{
this
.
form
.
medicalHistoryName
=
this
.
store
.
getDict
(
'CP00118'
).
map
(
e
=>
{
return
this
.
form
.
medicalHistory
.
includes
(
e
.
value
)
?
e
.
name
:
''
}).
filter
(
e
=>
e
).
join
(
'、'
)
this
.
showMedical
=
false
},
medicalChange
(
val
)
{
this
.
form
.
medicalHistory
=
checkboxReject
(
this
.
form
.
medicalHistory
,
[
9
])
},
// 家族史
familyConfirm
()
{
this
.
form
.
familyHistoryName
=
this
.
store
.
getDict
(
'CP00167'
).
map
(
e
=>
{
return
this
.
form
.
familyHistory
.
includes
(
e
.
value
)
?
e
.
name
:
''
}).
filter
(
e
=>
e
).
join
(
'、'
)
this
.
showFamily
=
false
},
familyChange
()
{
this
.
form
.
familyHistory
=
checkboxReject
(
this
.
form
.
familyHistory
,
[
9
])
},
// 筛查日期
screenDateConfirm
({
selectedValues
})
{
this
.
form
.
screenDate
=
selectedValues
.
join
(
'-'
)
this
.
showScreenDate
=
false
},
// resultHandle() {
// const {currentAge, waistline, familyHistory = [], isSmoking, gender,
// pressureOneSbp, pressureOneDbp, pressureTwoSbp, pressureTwoDbp,
// fastingGlucose, ldlCholesterin, serumCholesterin} = this.form
// let list = []
// if (currentAge >= 50) {
// list.push(1)
// }
// let bmi = parseFloat(this.bmi)
// if ((bmi >= 24)||
// (gender == 2 && waistline >=80) ||
// (gender == 1 && waistline >=85) ){
// list.push(2)
// }
// if (isSmoking == 1) {
// list.push(3)
// }
// if (familyHistory && familyHistory.length && (familyHistory.includes(1) || familyHistory.includes(2) ||
// familyHistory.includes(3) || familyHistory.includes(4) || familyHistory.includes(5) || familyHistory.includes(6))) {
// list.push(4)
// }
// if ((pressureOneSbp >= 130 || pressureTwoSbp >= 130) ||
// (pressureOneDbp >= 85 || pressureTwoDbp >= 85)
// ) {
// list.push(5)
// }
// if (fastingGlucose >= 6.1) {
// list.push(6)
// }
// // if (ldlCholesterin >= 3.4) {
// // list.push(7)
// // }
// if (serumCholesterin >= 5.2) {
// list.push(7)
// }
// list = Array.from(new Set(list))
// this.form.highItem = list
// if (list.length >= 3){
// this.form.screenResult = 2
// }else {
// this.form.screenResult = 1
// }
// },
setPressureOne
(
val
)
{
if
(
!
val
)
return
this
.
form
.
pressureOneSbp
=
val
.
systolicPressure
this
.
form
.
pressureOneDbp
=
val
.
diastolicPressure
},
setPressureTwo
(
val
)
{
if
(
!
val
)
return
this
.
form
.
pressureTwoSbp
=
val
.
systolicPressure
this
.
form
.
pressureTwoDbp
=
val
.
diastolicPressure
}
},
watch
:
{
info
:
{
handler
(
info
)
{
this
.
form
=
defaultForm
(
info
)
},
immediate
:
true
},
bmi
:
{
handler
()
{
this
.
form
.
bmi
=
this
.
bmi
},
immediate
:
true
},
highItem
:
{
handler
(
val
)
{
this
.
form
.
highItem
=
val
if
(
val
.
length
>=
3
){
this
.
form
.
screenResult
=
2
}
else
{
this
.
form
.
screenResult
=
1
}
},
immediate
:
true
}
}
}
</
script
>
<
style
lang=
"less"
scoped
>
table {
text-align: left;
>tr {
>td {
padding-bottom: 4px;
}
&:last-child {
>td {
padding-bottom: 0;
}
}
}
.divide {
transform: translateY(2px);
padding: 0 2px;
.sub-text()
}
}
.sub-text {
color: #595959;
}
</
style
>
src/doctor/screening/highVisit/first/Result.vue
0 → 100644
View file @
ccb8d0c1
<
template
>
<div
class=
"screening-first-result text-center pt-3 px-3"
>
<doc-icon
type=
"doc-check-circle"
style=
"font-size: .46rem;"
/>
<div
class=
"mt-3"
>
筛查完成
</div>
<div
class=
"text-start mt-5"
>
<span
style=
"color: #595959;"
>
通过筛查,您的慢病高危评估结果为:
</span>
<span
v-if=
"info.screenResult == 2"
class=
"text-red"
>
高危人群
</span>
<span
v-else
>
一般人群
</span>
</div>
<div
style=
"margin-top: .48rem"
>
<van-button
type=
'primary'
block
round
plain
@
click=
'toScreen'
>
专病高危筛查
</van-button>
<div
class=
"pt-3"
></div>
<van-button
type=
'primary'
block
round
plain
@
click=
'toDetail'
>
查看居民详情
</van-button>
<div
class=
"text-16 pt-5"
style=
"color: #8c8c8c;"
@
click=
"toWorkbench"
>
返回工作台
</div>
</div>
</div>
</
template
>
<
script
>
export
default
{
props
:
{
info
:
{
default
:
()
=>
({})
}
},
computed
:
{
residentInfoId
()
{
return
this
.
info
.
residentInfoId
}
},
methods
:
{
toScreen
()
{
this
.
$router
.
replace
({
path
:
'/doctor/screening/secondForm'
,
query
:
{
residentInfoId
:
this
.
residentInfoId
}
})
},
toDetail
()
{
this
.
$router
.
replace
({
path
:
'/doctor/patient-detail'
,
query
:
{
residentInfoId
:
this
.
residentInfoId
}
})
},
toWorkbench
()
{
this
.
$router
.
replace
({
path
:
'/doctor/workbench'
})
}
}
}
</
script
>
<
style
lang=
"less"
scoped
>
</
style
>
src/doctor/screening/highVisit/second/BaseInfo.vue
0 → 100644
View file @
ccb8d0c1
<
template
>
<div>
<van-form
ref=
'form'
>
<archive-common
:info=
'info'
ref=
'archive'
></archive-common>
<div
class=
'flex justify-between items-center mt-5 mb-20'
>
<div
class=
'title'
>
筛查信息
</div>
<div>
<van-button
plain
size=
'small'
type=
'primary'
@
click=
'toLast'
>
引入上一次筛查数据
</van-button>
</div>
</div>
<div
class=
'label-title mt-5'
>
筛查病种
</div>
<van-field
v-model=
'form.diseaseArraysName'
readonly
is-link
placeholder=
'请选择'
class=
'input-back mt-2 form-input'
:rules=
'rules.diseaseArraysName'
@
click=
'showGroupsArrays= true'
>
<template
#
input
>
<span
class=
'text-end'
v-if=
'form.diseaseArraysName'
>
{{
form
.
diseaseArraysName
}}
</span>
<span
class=
'text-end'
v-if=
'!form.diseaseArraysName'
style=
'color: #dfdfe1'
>
请选择
</span>
</
template
>
</van-field>
<van-popup
v-model:show=
'showGroupsArrays'
position=
'bottom'
>
<div
class=
'p-4'
>
<div
class=
'flex justify-between items-center mb-4 pop-title'
>
<div
class=
'greyColor'
@
click=
'showGroupsArrays = false'
style=
'font-weight: 400'
>
取消
</div>
<div>
筛查病种(可多选)
</div>
<div
class=
'blueColor'
@
click=
'groupsArraysConfirm'
>
确定
</div>
</div>
<CheckBtn
multiple
column-1
:options=
'groupArrList'
v-model:value=
'checkGroupsArrays'
:fieldNames=
"{text: 'name', value: 'value'}"
/>
</div>
</van-popup>
</van-form>
</div>
</template>
<
script
>
import
ArchiveCommon
from
'@/doctor/components/archiveCommon/archiveCommon'
import
{
useStore
}
from
'@/doctor/store'
import
CheckBtn
from
'@/doctor/components/checkBtn/CheckBtn'
export
default
{
name
:
'BaseInfo'
,
props
:
{
info
:
Object
},
components
:
{
CheckBtn
,
ArchiveCommon
},
data
()
{
return
{
store
:
useStore
(),
form
:
{
diseaseArrays
:
[],
diseaseArraysName
:
undefined
},
rules
:
{
diseaseArraysName
:
[{
required
:
true
,
message
:
'请选择'
}]
},
showGroupsArrays
:
false
,
//筛查病种组件双向绑定变量
checkGroupsArrays
:
[]
}
},
computed
:
{
//筛查病种
groupArrList
()
{
let
res
=
[]
res
=
this
.
store
.
getDict
(
'CP00117'
)
return
res
}
},
watch
:
{
'info'
:
{
handler
()
{
this
.
init
()
},
immediate
:
true
}
},
methods
:
{
init
()
{
if
(
!
this
.
info
.
id
)
{
//是否是引用上一次复筛数据
if
(
this
.
info
.
flag
&&
this
.
info
.
flag
==
'lastInfo'
)
{
this
.
setDis
(
this
.
info
.
diseaseArrays
)
}
else
{
//新增时
this
.
setDis
([
1
,
2
,
3
,
4
,
5
,
6
,
7
])
}
}
else
{
this
.
setDis
(
this
.
info
.
diseaseArrays
)
}
},
setDis
(
diseaseArrays
)
{
if
(
diseaseArrays
)
{
this
.
form
.
diseaseArrays
=
diseaseArrays
this
.
checkGroupsArrays
=
this
.
form
.
diseaseArrays
let
res
=
[]
this
.
groupArrList
.
forEach
(
item
=>
{
let
list
=
this
.
form
.
diseaseArrays
.
filter
(
i
=>
i
==
item
.
value
)
if
(
list
&&
list
.
length
)
{
res
.
push
(
item
.
name
)
}
})
this
.
form
.
diseaseArraysName
=
res
.
join
()
}
},
groupsArraysConfirm
()
{
let
res
=
[]
this
.
groupArrList
.
forEach
(
item
=>
{
let
selected
=
this
.
checkGroupsArrays
.
filter
(
i
=>
i
==
item
.
value
)
if
(
selected
&&
selected
.
length
)
{
res
.
push
(
item
.
name
)
}
})
if
(
this
.
checkGroupsArrays
&&
this
.
checkGroupsArrays
.
length
)
{
this
.
form
.
diseaseArrays
=
this
.
checkGroupsArrays
this
.
form
.
diseaseArraysName
=
res
.
join
()
}
else
{
this
.
form
.
diseaseArrays
=
[]
this
.
form
.
diseaseArraysName
=
''
}
this
.
showGroupsArrays
=
false
},
toLast
()
{
this
.
$emit
(
'getLast'
,
true
)
},
async
onSubmit
()
{
let
baseInfo
=
{}
try
{
baseInfo
=
await
this
.
$refs
.
archive
.
onSubmit
()
}
catch
(
e
)
{
}
return
new
Promise
((
resolve
,
reject
)
=>
{
this
.
$refs
.
form
.
validate
().
then
(()
=>
{
let
par
=
{
residentsRecord
:
{
// ...this.info,
...
baseInfo
,
id
:
this
.
info
.
personId
},
diseaseArrays
:
this
.
form
.
diseaseArrays
}
resolve
(
par
)
}).
catch
((
e
)
=>
{
console
.
warn
(
'baseInfo error'
,
e
)
})
})
}
}
}
</
script
>
<
style
scoped
lang=
'less'
>
.title {
font-weight: bold;
}
.mb-20 {
margin-bottom: 20px;
}
.label-title {
font-size: 13px;
color: #595959;
font-weight: 500;
&::after {
content: "*";
color: red;
font-weight: bold;
margin-left: 4px;
}
}
.no-req-label {
font-size: 13px;
color: #595959;
font-weight: 500;
}
.form-input {
padding: 8px 12px;
border-radius: 8px;
}
.input-back {
background: #FAFAFA;
}
.pop-title {
color: #262626;
font-size: 16px;
line-height: 24px;
font-weight: bold;
}
:deep(.van-popup) {
min-height: 30% !important;
}
:deep(.van-cell-group--inset) {
overflow: visible;
}
:deep(.van-cell) {
overflow: visible;
}
:deep(.van-cell:after) {
border-bottom: 0px;
}
</
style
>
\ No newline at end of file
src/doctor/screening/highVisit/second/CommonBottom.vue
0 → 100644
View file @
ccb8d0c1
<
template
>
<div>
<van-form
ref=
'form'
>
<div
:class=
"['label-title', 'mt-5']"
>
随访单位
</div>
<van-field
v-model=
'form.screenUnitName'
is-link
readonly
placeholder=
'随访单位'
class=
'input-back mt-2 form-input'
:rules=
'rules.screenUnitName'
@
click=
'show1 = true'
/>
<DocUnit
v-model:show=
'show1'
v-model:value=
'form.screenUnitId'
@
change=
'changeUnit'
/>
<div
class=
'label-title mt-5'
>
随访科室
</div>
<van-field
v-model=
'form.screenOfficeName'
is-link
readonly
placeholder=
'随访科室'
class=
'input-back mt-2 form-input'
:rules=
'rules.screenOfficeName'
@
click=
'show2 = true'
/>
<DocOffice
v-model:show=
'show2'
v-model:value=
'form.screenOfficeId'
@
change=
'changeOffice'
:unitId=
'form.screenUnitId'
/>
<div
class=
'label-title mt-5'
>
随访医生
</div>
<van-field
v-model=
'form.screenDoctorName'
is-link
readonly
placeholder=
'随访医生'
class=
'input-back mt-2 form-input'
:rules=
'rules.screenDoctorName'
@
click=
'show3 = true'
/>
<DocOfficeDoctor
v-model:show=
'show3'
v-model:value=
'form.screenDoctorId'
@
change=
'changeDoctor'
:unitId=
'form.screenUnitId'
:officeId=
'form.screenOfficeId'
/>
</van-form>
</div>
</
template
>
<
script
>
import
dayjs
from
'dayjs'
import
{
useStore
}
from
'@/doctor/store'
import
DocUnit
from
'@/doctor/components/docUnit/DocUnit'
import
DocOffice
from
'@/doctor/components/docOffice/DocOffice'
import
DocOfficeDoctor
from
'@/doctor/components/docOfficeDoctor/DocOfficeDoctor'
import
CheckBtn
from
'@/doctor/components/checkBtn/CheckBtn'
import
DocImageUpload
from
'@/doctor/components/docImageUpload/DocImageUpload'
export
default
{
name
:
'CommonBottom'
,
components
:
{
DocImageUpload
,
CheckBtn
,
DocOfficeDoctor
,
DocOffice
,
DocUnit
},
props
:
{
info
:
{
default
:
()
=>
{
return
{}
}
},
},
data
()
{
return
{
store
:
useStore
(),
show1
:
false
,
show2
:
false
,
show3
:
false
,
form
:
{
},
rules
:
{
}
}
},
watch
:
{
'info'
:
{
handler
()
{
this
.
form
=
this
.
setForm
(
this
.
info
)
},
immediate
:
true
},
},
computed
:
{
authInfo
()
{
return
this
.
store
.
$state
.
authInfo
},
},
methods
:
{
setForm
(
info
)
{
const
form
=
{
screenDate
:
new
dayjs
().
format
(
"YYYY-MM-DD"
),
createDate
:
new
dayjs
().
format
(
"YYYY-MM-DD"
),
// 随访单位
screenUnitId
:
this
.
authInfo
.
unitId
,
screenUnitName
:
this
.
authInfo
.
unitName
,
// 随访科室
screenOfficeId
:
this
.
authInfo
.
officeId
,
screenOfficeName
:
this
.
authInfo
.
officeName
,
// 随访医生
screenDoctorId
:
this
.
authInfo
.
relationId
,
screenDoctorName
:
this
.
authInfo
.
nickName
,
// 录入单位
createUnitId
:
this
.
authInfo
.
unitId
,
createUnitName
:
this
.
authInfo
.
unitName
,
// 录入科室
createOfficeId
:
this
.
authInfo
.
officeId
,
createOfficeName
:
this
.
authInfo
.
officeName
,
// 录入医生
createDoctorId
:
this
.
authInfo
.
relationId
,
createDoctorName
:
this
.
authInfo
.
nickName
,
}
Reflect
.
ownKeys
(
form
).
forEach
(
key
=>
{
if
(
info
[
key
]
!=
undefined
)
{
form
[
key
]
=
info
[
key
]
}
})
return
form
},
changeUnit
(
val
)
{
this
.
form
.
screenUnitName
=
val
.
unitName
this
.
form
.
screenUnitId
=
val
.
id
this
.
form
.
screenOfficeId
=
undefined
this
.
form
.
screenOfficeName
=
undefined
this
.
form
.
screenDoctorId
=
undefined
this
.
form
.
screenDoctorName
=
undefined
this
.
show1
=
false
},
changeOffice
(
val
)
{
this
.
form
.
screenOfficeId
=
val
.
id
this
.
form
.
screenOfficeName
=
val
.
officeName
this
.
form
.
screenDoctorId
=
undefined
this
.
form
.
screenDoctorName
=
undefined
this
.
show2
=
false
},
changeDoctor
(
val
)
{
this
.
form
.
screenDoctorId
=
val
.
id
this
.
form
.
screenDoctorName
=
val
.
staffName
this
.
show3
=
false
},
onSubmit
()
{
return
new
Promise
((
resolve
,
reject
)
=>
{
this
.
$refs
.
form
.
validate
().
then
(()
=>
{
let
par
=
{
...
this
.
form
,
}
resolve
(
par
)
}).
catch
((
e
)
=>
{
console
.
warn
(
'error'
,
e
)
})
})
}
}
}
</
script
>
<
style
scoped
lang=
'less'
>
.title {
font-weight: bold;
margin-bottom: 20px;
}
.label-title {
font-size: 13px;
color: #595959;
font-weight: 500;
&::after {
content: "*";
color: red;
font-weight: bold;
margin-left: 4px;
}
}
.push-lab {
line-height: 20px;
color: #8C8C8C;
font-size: 12px
}
.no-req-label {
font-size: 13px;
color: #595959;
font-weight: 500;
}
.form-input {
padding: 8px 12px;
border-radius: 8px;
}
.input-back {
background: #FAFAFA;
}
.tel-back {
background: #F5F5F5;
padding: 8px;
border-radius: 0px 0px 8px 8px;
}
.tel {
background: #FFFFFF;
padding: 8px;
border-radius: 8px;
}
.tel-label {
color: #607FF0;
font-weight: bold;
}
.p-12-0 {
padding: 12px 0px;
}
.vx-cb {
position: absolute;
right: 10px;
top: 23px;
}
.ms-cb {
position: absolute;
right: 10px;
top: 97px;
}
:deep(.van-cell-group--inset) {
overflow: visible;
}
:deep(.van-cell) {
overflow: visible;
}
/*:deep(.van-field__error-message) {
position: absolute;
margin-top: 3px;
}*/
:deep(.van-cell:after) {
border-bottom: 0px;
}
</
style
>
\ No newline at end of file
src/doctor/screening/highVisit/second/DiseaseSelect.vue
0 → 100644
View file @
ccb8d0c1
<
template
>
<div
class=
'disease-select'
>
<div
class=
'label-title mb-4'
>
请选择慢病类型
</div>
<div
v-for=
"(item, index) in store.getDict('CP00117')"
:key=
'index'
:class=
"['flex justify-between items-center text-16 mb-3 disease-checked',
{ 'disease-checked-active': isSelect(item)},
]"
@click='onSelect(item)'>
<span>
{{
item
.
name
}}
</span>
</div>
<div
class=
'warn-error'
v-if=
'showWarn'
>
请选择
</div>
</div>
</
template
>
<
script
>
import
{
useStore
}
from
'@/doctor/store/index.js'
export
default
{
props
:
{
infoValue
:
String
},
data
()
{
return
{
store
:
useStore
(),
// 选中的疾病类型
innerValue
:
[],
//显示校验
showWarn
:
false
}
},
watch
:
{
infoValue
:
{
handler
(
value
)
{
if
(
value
)
{
this
.
innerValue
=
value
.
split
(
','
)
}
},
immediate
:
true
}
},
created
()
{
this
.
init
()
},
methods
:
{
init
()
{
if
(
!
(
this
.
innerValue
&&
this
.
innerValue
.
length
))
{
this
.
innerValue
=
this
.
store
.
getDict
(
'CP00117'
).
map
(
e
=>
e
.
value
)
}
},
// 是否选中
isSelect
(
item
)
{
return
this
.
innerValue
.
includes
(
item
.
value
)
},
onSelect
(
val
)
{
if
(
this
.
innerValue
.
includes
(
val
.
value
))
{
this
.
innerValue
=
this
.
innerValue
.
filter
(
e
=>
e
!==
val
.
value
)
}
else
{
this
.
innerValue
.
push
(
val
.
value
)
}
if
(
this
.
innerValue
&&
this
.
innerValue
.
length
)
{
this
.
showWarn
=
false
}
else
{
this
.
showWarn
=
true
}
},
onSubmit
()
{
return
new
Promise
((
resolve
,
reject
)
=>
{
if
(
!
(
this
.
innerValue
&&
this
.
innerValue
.
length
))
{
this
.
showWarn
=
true
return
}
resolve
(
this
.
innerValue
)
})
}
}
}
</
script
>
<
style
lang=
'less'
scoped
>
.label-title {
font-size: 14px;
color: #262626;
font-weight: 500;
&::after {
content: "*";
color: red;
font-weight: bold;
margin-left: 4px;
}
}
.no-req-label {
font-size: 13px;
color: #595959;
font-weight: 500;
}
.disease-checked {
border: 1px solid #BFBFBF;
border-radius: 40px;
color: #595959;
background-color: #fff;
padding: 10px 16px;
line-height: 22.4px;
}
.disease-checked-active {
color: var(--van-primary-color);
border-color: var(--van-primary-color);
}
.disease-checked-disabled {
border-color: #EFF2F7;
background-color: #EFF2F7;
}
.warn-error {
color: #FF4D4F;
}
</
style
>
src/doctor/screening/highVisit/second/FormCont.vue
0 → 100644
View file @
ccb8d0c1
This source diff could not be displayed because it is too large. You can
view the blob
instead.
src/doctor/screening/highVisit/second/Result.vue
0 → 100644
View file @
ccb8d0c1
<
template
>
<div
class=
"screening-first-result text-center pt-3 px-3"
>
<doc-icon
type=
"doc-check-circle"
style=
"font-size: .46rem;"
/>
<div
class=
"mt-3"
>
筛查完成
</div>
<div
class=
"text-start mt-5"
>
<span
style=
"color: #595959;"
>
通过筛查,您的慢病高危评估结果为:
</span>
<div
class=
"text-red mt-2"
style=
'line-height: 24px'
>
{{
specialScreenResultList
.
join
(
"、"
)
}}
</div>
</div>
<div
style=
"margin-top: .48rem"
>
<van-button
type=
'primary'
block
round
plain
@
click=
'toDetail'
>
查看居民详情
</van-button>
<div
class=
"text-16 pt-5"
style=
"color: #8c8c8c;"
@
click=
"toWorkbench"
>
返回工作台
</div>
</div>
</div>
</
template
>
<
script
>
export
default
{
props
:
{
residentInfoId
:
String
,
specialScreenResultList
:
Array
,
},
methods
:
{
toScreen
()
{
this
.
$router
.
replace
({
path
:
'/doctor/screening/secondForm'
,
query
:
{
residentInfoId
:
this
.
residentInfoId
}
})
},
toDetail
()
{
this
.
$router
.
replace
({
path
:
'/doctor/patient-detail'
,
query
:
{
residentInfoId
:
this
.
residentInfoId
}
})
},
toWorkbench
()
{
this
.
$router
.
replace
({
path
:
'/doctor/workbench'
})
}
}
}
</
script
>
<
style
lang=
"less"
scoped
>
</
style
>
src/doctor/screening/highVisit/second/SecondForm.vue
0 → 100644
View file @
ccb8d0c1
<
template
>
<div
class=
'h-full flex flex-col screening-second'
>
<DocNavBar
:title=
"`$
{id ? '修改' : '新增'}专病高危筛查`" class='shrink-0' :backFunc='onBack'>
</DocNavBar>
<div
class=
'p-4 overflow-y-auto grow'
ref=
'all'
>
<BaseInfo
:info=
'info'
v-show=
'step ==1'
@
getLast=
'getLastData'
ref=
'baseInfo'
></BaseInfo>
<form-cont
:info=
'info'
:disease-arrays-info=
'diseaseArraysInfo'
v-show=
'step == 2'
ref=
'formInfo'
></form-cont>
<common-bottom
v-if=
'step == 3'
ref=
'commonBottom'
></common-bottom>
<result
:residentInfoId=
'residentInfoId'
:specialScreenResultList=
'specialScreenResultList'
v-show=
'step == 4'
></result>
</div>
<div
class=
'bottom-small-line'
></div>
<div
class=
'pt-2 pb-2'
>
<div
class=
'px-5 grow flex flex-col justify-end'
v-if=
'step == 1'
>
<van-button
type=
'primary'
block
round
@
click=
'toNext(2)'
>
下一步
</van-button>
</div>
<div
class=
'px-5 flex align-center justify-around'
v-if=
'step == 2'
>
<van-button
type=
'primary'
round
plain
style=
'width: 44%'
@
click=
'toNext(1)'
>
上一步
</van-button>
<van-button
type=
'primary'
round
style=
'width: 44%'
@
click=
'toNext(3)'
>
下一步
</van-button>
</div>
<div
class=
'px-5 grow flex flex-col justify-end'
v-if=
'step == 3'
>
<van-button
type=
'primary'
block
round
@
click=
'onsubmit'
>
提交
</van-button>
</div>
</div>
</div>
</
template
>
<
script
>
import
DocNavBar
from
'@/doctor/components/docNavBar/DocNavBar.vue'
import
ArchiveCommon
from
'@/doctor/components/archiveCommon/archiveCommon'
import
{
getChronicResidentsId
}
from
'@/api/doctor/generalFU'
import
FormCont
from
'@/doctor/screening/second/FormCont'
import
Result
from
'@/doctor/screening/second/Result'
import
DiseaseSelect
from
'@/doctor/screening/second/DiseaseSelect'
import
BaseInfo
from
'@/doctor/screening/second/BaseInfo'
import
{
fetchDataHandle
}
from
'@/utils/common'
import
{
getLastScreen
,
saveSecondScreening
,
secondScreenDetail
,
updateSecondScreening
}
from
'@/api/doctor/screening'
import
{
showToast
}
from
'vant'
import
CommonBottom
from
'@/doctor/screening/second/CommonBottom'
import
{
useStore
}
from
'@/doctor/store'
export
default
{
components
:
{
CommonBottom
,
BaseInfo
,
DiseaseSelect
,
Result
,
FormCont
,
ArchiveCommon
,
DocNavBar
},
data
()
{
return
{
store
:
useStore
(),
step
:
1
,
info
:
{},
residentInfo
:
{},
diseaseArraysInfo
:
[],
specialScreenResultList
:
[],
}
},
computed
:
{
id
()
{
return
this
.
$route
.
query
.
id
},
residentInfoId
()
{
return
this
.
$route
.
query
.
residentInfoId
}
},
created
()
{
this
.
init
()
},
methods
:
{
async
init
()
{
this
.
info
=
{}
if
(
this
.
id
)
{
const
res
=
await
secondScreenDetail
({
id
:
this
.
id
})
let
result
=
res
.
data
||
{}
const
{
residentsRecord
=
{}
}
=
result
const
{
id
,
...
others
}
=
residentsRecord
let
obj
=
this
.
dataHandle
(
result
)
this
.
info
=
{
...
others
,
personId
:
id
,
...
obj
}
this
.
residentInfo
=
{
...
others
,
personId
:
id
,
}
}
else
{
const
res
=
await
getChronicResidentsId
(
this
.
residentInfoId
)
const
{
id
,
createDate
,
createDoctorId
,
createDoctorName
,
createOfficeId
,
createOfficeName
,
createUnitId
,
createUnitName
,
updated
,
...
others
}
=
res
.
data
this
.
residentInfo
=
{
personId
:
id
,
...
others
}
this
.
info
=
{
personId
:
id
,
...
others
}
}
},
//获取上一次筛查数据
getLastData
()
{
let
par
=
{
residentInfoId
:
this
.
residentInfoId
}
getLastScreen
(
par
).
then
(
res
=>
{
let
result
=
res
.
data
||
{}
if
(
Object
.
keys
(
result
).
length
===
0
)
{
showToast
(
'暂无上一次筛查数据'
)
return
}
let
obj
=
this
.
dataHandle
(
result
)
this
.
info
=
{
...
obj
,
...
this
.
residentInfo
,
flag
:
'lastInfo'
,
id
:
null
}
})
},
//数据处理
dataHandle
(
result
)
{
let
obj
=
fetchDataHandle
(
result
,
{
diseaseArrays
:
'strToArrNum'
,
medicalHistory
:
'strToArrNum'
,
familyHistory
:
'strToArrNum'
,
relativeType
:
'strToArrNum'
,
femaleMedicalHistory
:
'strToArrNum'
,
medicineHistory
:
'strToArrNum'
,
touchHarmful
:
'strToArrNum'
,
dietaryHabit
:
'strToArrNum'
,
drinkKind
:
'strToArrNum'
,
specialScreenResult
:
'strToArrNum'
,
highItem
:
'strToArrNum'
,
hypertensionHighItem
:
'strToArrNum'
,
diabetesHighItem
:
'strToArrNum'
,
coronaryHighItem
:
'strToArrNum'
,
strokeHighItem
:
'strToArrNum'
,
pulmonaryHighItem
:
'strToArrNum'
,
nephrosisHighItem
:
'strToArrNum'
,
dyslipemiaHighItem
:
'strToArrNum'
,
})
return
obj
},
async
toNext
(
val
)
{
this
.
$refs
.
all
.
scrollTo
(
0
,
0
)
if
(
val
==
2
)
{
let
obj
=
await
this
.
$refs
.
baseInfo
.
onSubmit
()
this
.
diseaseArraysInfo
=
obj
.
diseaseArrays
||
[]
}
if
(
val
==
3
)
{
await
this
.
$refs
.
formInfo
.
onSubmit
()
}
this
.
step
=
val
},
//提交所有表单
async
onsubmit
()
{
let
baseInfo
=
await
this
.
$refs
.
baseInfo
.
onSubmit
()
let
formInfo
=
await
this
.
$refs
.
formInfo
.
onSubmit
()
let
commonBottom
=
await
this
.
$refs
.
commonBottom
.
onSubmit
()
let
params
=
{
...
formInfo
,
...
commonBottom
,
...
baseInfo
,
diseaseArrays
:
baseInfo
.
diseaseArrays
?
baseInfo
.
diseaseArrays
.
join
()
:
''
,
source
:
2
}
if
(
formInfo
.
specialScreenResult
)
{
let
list
=
formInfo
.
specialScreenResult
.
split
(
","
)
list
.
forEach
(
item
=>
{
let
res
=
this
.
store
.
getDict
(
`CP00137`
).
filter
(
e
=>
e
.
value
==
item
)
if
(
res
&&
res
.
length
)
{
this
.
specialScreenResultList
.
push
(
res
[
0
].
name
)
}
})
}
if
(
!
params
.
id
)
{
saveSecondScreening
(
params
).
then
(
res
=>
{
this
.
$message
.
success
(
'新增成功'
)
this
.
toNext
(
4
)
})
}
else
{
updateSecondScreening
(
params
).
then
(
res
=>
{
this
.
$message
.
success
(
'修改成功'
)
this
.
toNext
(
4
)
})
}
},
onBack
()
{
if
(
this
.
step
==
1
)
{
this
.
$router
.
back
()
}
else
{
this
.
step
--
}
}
}
}
</
script
>
<
style
lang=
'less'
scoped
>
</
style
>
src/router/index.js
View file @
ccb8d0c1
...
@@ -88,7 +88,7 @@ const routes = [
...
@@ -88,7 +88,7 @@ const routes = [
{
{
path
:
'screening/highVisit/GeneralFUDetail'
,
path
:
'screening/highVisit/GeneralFUDetail'
,
name
:
'screening-highVisit-GeneralFUDetail'
,
name
:
'screening-highVisit-GeneralFUDetail'
,
component
:
()
=>
import
(
/* webpackChunkName: "doctor" */
'@/doctor/screening/detail/GeneralFUDetail'
)
component
:
()
=>
import
(
/* webpackChunkName: "doctor" */
'@/doctor/screening/
highVisit/
detail/GeneralFUDetail'
)
},
},
{
{
path
:
'followUp/detail'
,
path
:
'followUp/detail'
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment