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
dc4b62eb
Commit
dc4b62eb
authored
Dec 30, 2024
by
songrui
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
初筛表单
parent
0723fc54
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
947 additions
and
197 deletions
+947
-197
Doctor.vue
src/doctor/Doctor.vue
+51
-1
archiveCommon.vue
src/doctor/components/archiveCommon/archiveCommon.vue
+178
-185
DocOffice.vue
src/doctor/components/docOffice/DocOffice.vue
+2
-2
DocOfficeDoctor.vue
src/doctor/components/docOfficeDoctor/DocOfficeDoctor.vue
+2
-2
DocUnit.vue
src/doctor/components/docUnit/DocUnit.vue
+2
-2
DoctorInfo.vue
src/doctor/screening/first/DoctorInfo.vue
+164
-0
FormCont.vue
src/doctor/screening/first/FormCont.vue
+542
-3
FristForm.vue
src/doctor/screening/first/FristForm.vue
+6
-2
No files found.
src/doctor/Doctor.vue
View file @
dc4b62eb
...
@@ -57,7 +57,7 @@ export default {
...
@@ -57,7 +57,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
=
'
6cc7a6e9-e78f-49f2-947b-91fc3e163f55
'
token
=
'
572426d2-302f-4e35-ba69-edc612a205bf
'
}
}
}
}
if
(
token
)
{
if
(
token
)
{
...
@@ -190,4 +190,54 @@ export default {
...
@@ -190,4 +190,54 @@ export default {
display: none;
display: none;
}
}
}
}
// form表单
.doc-form {
.doc-form-label {
color: #595959;
margin-top: 20px;
margin-bottom: 8px;
&[required]::after {
content: "*";
color: red;
font-weight: bold;
margin-left: 4px;
}
}
.van-field {
background-color: #FAFAFA;
padding: 8px 12px;
border-radius: 8px;
&::after {
display: none;
}
}
.no-back {
background-color: #fff;
}
.tip-box {
margin-top: 20px;
margin-bottom: 8px;
.doc-form-label {
margin: 0
}
>span {
color: #8C8C8C;
font-size: 12px;
}
}
}
// 单选
.doc-radio-group {
column-gap: 10px;
.van-radio {
background-color: #FAFAFA;
padding: 8px 12px;
border-radius: 8px;
justify-content: space-between;
margin-right: 0;
flex-grow: 1;
}
}
</
style
>
</
style
>
src/doctor/components/archiveCommon/archiveCommon.vue
View file @
dc4b62eb
<
template
>
<
template
>
<div>
<van-form
ref=
'form'
>
<van-form
ref=
'form'
>
<div
class=
'title'
>
居民信息
</div>
<div
class=
'title'
>
居民信息
</div>
<!--
<div
class=
'label-title'
>
证件类型
</div>
<!--
<div
class=
'label-title'
>
证件类型
</div>
<van-field
<van-field
v-model=
'form.certificateTypeName'
v-model=
'form.certificateTypeName'
is-link
is-link
readonly
readonly
placeholder=
'证件类型'
placeholder=
'证件类型'
class=
'input-back mt-2 form-input'
class=
'input-back mt-2 form-input'
:rules=
'rules.certificateTypeName'
:rules=
'rules.certificateTypeName'
/>
-->
/>
-->
<div
class=
'label-title mt-5'
>
证件号码
</div>
<div
class=
'label-title mt-5'
>
证件号码
</div>
<van-field
<van-field
v-model=
'form.idCard'
v-model=
'form.idCard'
readonly
readonly
placeholder=
'证件号码'
placeholder=
'证件号码'
class=
'input-back mt-2 form-input'
class=
'input-back mt-2 form-input'
:rules=
'rules.idCard'
:rules=
'rules.idCard'
/>
/>
<div
class=
'label-title mt-5'
>
姓名
</div>
<div
class=
'label-title mt-5'
>
姓名
</div>
<van-field
<van-field
v-model=
'form.residentName'
v-model=
'form.residentName'
clearable
clearable
placeholder=
'姓名'
placeholder=
'姓名'
class=
'input-back mt-2 form-input'
class=
'input-back mt-2 form-input'
:rules=
'rules.residentName'
:rules=
'rules.residentName'
/>
/>
<div
class=
'label-title mt-5'
>
性别
</div>
<div
class=
'label-title mt-5'
>
性别
</div>
<van-field
<van-field
v-model=
'form.genderName'
v-model=
'form.genderName'
is-link
is-link
readonly
readonly
placeholder=
'性别'
placeholder=
'性别'
class=
'input-back mt-2 form-input'
class=
'input-back mt-2 form-input'
:rules=
'rules.genderName'
:rules=
'rules.genderName'
/>
/>
<div
class=
'label-title mt-5'
>
出生日期
</div>
<div
class=
'label-title mt-5'
>
出生日期
</div>
<van-field
<van-field
v-model=
'form.dataBirth'
v-model=
'form.dataBirth'
is-link
is-link
readonly
readonly
placeholder=
'出生日期'
placeholder=
'出生日期'
class=
'input-back mt-2 form-input'
class=
'input-back mt-2 form-input'
:rules=
'rules.dataBirth'
:rules=
'rules.dataBirth'
/>
/>
<div
class=
'label-title mt-5'
>
本人电话
</div>
<div
class=
'label-title mt-5'
>
本人电话
</div>
<van-field
<van-field
v-model=
'form.telephone'
v-model=
'form.telephone'
clearable
clearable
placeholder=
'本人电话'
placeholder=
'本人电话'
class=
'input-back mt-2 form-input'
class=
'input-back mt-2 form-input'
:rules=
'rules.telephone'
:rules=
'rules.telephone'
/>
/>
<div
class=
'label-title mt-5'
>
民族
</div>
<div
class=
'label-title mt-5'
>
民族
</div>
<van-field
<van-field
v-model=
'form.nationalName'
v-model=
'form.nationalName'
is-link
is-link
readonly
readonly
name=
'national'
name=
'national'
placeholder=
'请选择'
placeholder=
'请选择'
class=
'input-back mt-2 form-input'
class=
'input-back mt-2 form-input'
:rules=
'rules.nationalName'
:rules=
'rules.nationalName'
@
click=
'showNational = true'
/>
@
click=
'showNational = true'
/>
<van-popup
v-model:show=
'showNational'
position=
'bottom'
>
<van-popup
v-model:show=
'showNational'
position=
'bottom'
>
<van-picker
<van-picker
:columns-field-names=
"
{ text: 'name', value: 'value' }"
:columns-field-names=
"
{ text: 'name', value: 'value' }"
:columns="store.getDict('DC00006')"
:columns="store.getDict('DC00006')"
@confirm='nationalConfirm'
@confirm='nationalConfirm'
@cancel='showNational = false'
@cancel='showNational = false'
/>
</van-popup>
<div
class=
'label-title mt-5'
>
年龄
</div>
<van-field
v-model=
'form.currentAge'
readonly
placeholder=
'年龄'
class=
'input-back mt-2 form-input'
:rules=
'rules.currentAge'
/>
/>
</van-popup>
<div
class=
'label-title mt-5'
>
年龄
</div>
<van-field
v-model=
'form.currentAge'
readonly
placeholder=
'年龄'
class=
'input-back mt-2 form-input'
:rules=
'rules.currentAge'
/>
<div
class=
'label-title mt-5'
>
现住址
</div>
<div
class=
'label-title mt-5'
>
现住址
</div>
<van-field
<van-field
v-model=
'form.presentCodeName'
v-model=
'form.presentCodeName'
is-link
is-link
readonly
readonly
placeholder=
'请选择所在地区'
placeholder=
'请选择所在地区'
class=
'input-back mt-2 form-input'
class=
'input-back mt-2 form-input'
:rules=
'rules.presentCodeName'
:rules=
'rules.presentCodeName'
@
click=
'showPresent = true'
@
click=
'showPresent = true'
>
>
<template
#
input
>
<template
#
input
>
<span
class=
'text-end'
>
{{
form
.
presentCodeName
}}
</span>
<span
class=
'text-end'
>
{{
form
.
presentCodeName
}}
</span>
</
template
>
</
template
>
</van-field>
</van-field>
<van-popup
v-model:show=
'showPresent'
:close-on-click-overlay=
'false'
position=
'bottom'
>
<van-popup
v-model:show=
'showPresent'
:close-on-click-overlay=
'false'
position=
'bottom'
>
<DocAddress
v-model:value=
'form.presentCode'
@
close=
'showPresent = false'
<DocAddress
v-model:value=
'form.presentCode'
@
close=
'showPresent = false'
:viewData=
'addressRecord.presentCode'
:viewData=
'addressRecord.presentCode'
@
change=
'presentChange'
/>
@
change=
'presentChange'
/>
</van-popup>
</van-popup>
<div
class=
'no-req-label mt-5'
>
详细地址
</div>
<div
class=
'no-req-label mt-5'
>
详细地址
</div>
<van-field
<van-field
v-model=
'form.nowAddress'
v-model=
'form.nowAddress'
clearable
clearable
class=
'input-back mt-2 form-input'
class=
'input-back mt-2 form-input'
placeholder=
'请填写详细地址'
placeholder=
'请填写详细地址'
maxlength=
'50'
maxlength=
'50'
/>
/>
<div
class=
'flex items-center justify-between mt-5'
>
<div
class=
'flex items-center justify-between mt-5'
>
<div
class=
'label-title '
>
户口地址
</div>
<div
class=
'label-title '
>
户口地址
</div>
<van-button
size=
'mini'
plain
type=
'primary'
<van-button
size=
'mini'
plain
type=
'primary'
@
click=
'setRegisteredAddress'
>
同步现住址
@
click=
'setRegisteredAddress'
>
同步现住址
</van-button>
</van-button>
</div>
</div>
<van-field
<van-field
v-model=
'form.registeredCodeName'
v-model=
'form.registeredCodeName'
is-link
is-link
readonly
readonly
placeholder=
'请选择所在地区'
placeholder=
'请选择所在地区'
class=
'input-back mt-2 form-input'
class=
'input-back mt-2 form-input'
:rules=
'rules.registeredCode'
:rules=
'rules.registeredCode'
@
click=
'showRegistered = true'
@
click=
'showRegistered = true'
>
>
<
template
#
input
>
<
template
#
input
>
<span
class=
'text-end'
>
{{
form
.
registeredCodeName
}}
</span>
<span
class=
'text-end'
>
{{
form
.
registeredCodeName
}}
</span>
</
template
>
</
template
>
</van-field>
</van-field>
<van-popup
v-model:show=
'showRegistered'
:close-on-click-overlay=
'false'
position=
'bottom'
>
<van-popup
v-model:show=
'showRegistered'
:close-on-click-overlay=
'false'
position=
'bottom'
>
<DocAddress
v-model:value=
'form.registeredCode'
@
close=
'showRegistered = false'
<DocAddress
v-model:value=
'form.registeredCode'
@
close=
'showRegistered = false'
:viewData=
'addressRecord.registeredCode'
:viewData=
'addressRecord.registeredCode'
@
change=
'registeredChange'
/>
@
change=
'registeredChange'
/>
</van-popup>
</van-popup>
<div
class=
'no-req-label mt-5'
>
详细地址
</div>
<div
class=
'no-req-label mt-5'
>
详细地址
</div>
<van-field
<van-field
v-model=
'form.permanentAddress'
v-model=
'form.permanentAddress'
clearable
clearable
class=
'input-back mt-2 form-input'
class=
'input-back mt-2 form-input'
placeholder=
'请填写详细地址'
placeholder=
'请填写详细地址'
maxlength=
'50'
maxlength=
'50'
/>
<div
class=
'title mt-5'
>
联系人信息
</div>
<div
class=
'no-req-label mt-5'
>
联系人姓名
</div>
<van-field
v-model=
'form.contactName'
clearable
placeholder=
'联系人姓名'
class=
'input-back mt-2 form-input'
:rules=
'rules.contactName'
/>
<div
class=
'no-req-label mt-5'
>
与居民关系
</div>
<van-field
v-model=
'form.relationName'
readonly
is-link
placeholder=
'与居民关系'
class=
'input-back mt-2 form-input'
@
click=
'showRelation= true'
/>
<van-popup
v-model:show=
'showRelation'
position=
'bottom'
>
<van-picker
:columns-field-names=
"{ text: 'name', value: 'value' }"
:columns=
"store.getDict('DC00023')"
@
confirm=
'relationlConfirm'
@
cancel=
'showRelation = false'
/>
/>
<div
class=
'title mt-5'
>
联系人信息
</div>
</van-popup>
<div
class=
'no-req-label mt-5'
>
联系人姓名
</div>
<van-field
<van-field
v-if=
'form.relation == 99'
v-model=
'form.contactName'
v-model=
'form.relationOther'
clearable
clearable
placeholder=
'联系人姓名'
placeholder=
'其他关系'
class=
'input-back mt-2 form-input'
class=
'input-back mt-2 form-input'
:rules=
'rules.contactName'
/>
/>
<div
class=
'no-req-label mt-5'
>
联系电话
</div>
<div
class=
'no-req-label mt-5'
>
与居民关系
</div>
<van-field
<van-field
v-model=
'form.contactPhone'
v-model=
'form.relationName'
clearable
readonly
placeholder=
'联系电话'
is-link
class=
'input-back mt-2 form-input'
placeholder=
'与居民关系'
:rules=
'rules.contactPhone'
class=
'input-back mt-2 form-input'
/>
@
click=
'showRelation= true'
</van-form>
/>
<van-popup
v-model:show=
'showRelation'
position=
'bottom'
>
<van-picker
:columns-field-names=
"{ text: 'name', value: 'value' }"
:columns=
"store.getDict('DC00023')"
@
confirm=
'relationlConfirm'
@
cancel=
'showRelation = false'
/>
</van-popup>
<van-field
v-if=
'form.relation == 99'
v-model=
'form.relationOther'
clearable
placeholder=
'其他关系'
class=
'input-back mt-2 form-input'
/>
<div
class=
'no-req-label mt-5'
>
联系电话
</div>
<van-field
v-model=
'form.contactPhone'
clearable
placeholder=
'联系电话'
class=
'input-back mt-2 form-input'
:rules=
'rules.contactPhone'
/>
</van-form>
</div>
</template>
</template>
<
script
>
<
script
>
...
@@ -385,11 +383,6 @@ export default {
...
@@ -385,11 +383,6 @@ export default {
</
script
>
</
script
>
<
style
scoped
lang=
'less'
>
<
style
scoped
lang=
'less'
>
.h-overflow {
height: calc(100vh - 110px);
overflow-y: auto;
}
.title {
.title {
font-weight: bold;
font-weight: bold;
margin-bottom: 20px;
margin-bottom: 20px;
...
...
src/doctor/components/docOffice/DocOffice.vue
View file @
dc4b62eb
...
@@ -57,8 +57,8 @@ export default {
...
@@ -57,8 +57,8 @@ export default {
})
})
},
},
onConfirm
({
selectedValues
,
selectedOptions
})
{
onConfirm
({
selectedValues
,
selectedOptions
})
{
this
.
$emit
(
'update:value'
,
selectedValues
[
0
])
this
.
$emit
(
'update:value'
,
selectedValues
[
0
]
||
{}
)
this
.
$emit
(
'change'
,
selectedOptions
[
0
])
this
.
$emit
(
'change'
,
selectedOptions
[
0
]
||
{}
)
this
.
$emit
(
'update:show'
,
false
)
this
.
$emit
(
'update:show'
,
false
)
},
},
onCancel
()
{
onCancel
()
{
...
...
src/doctor/components/docOfficeDoctor/DocOfficeDoctor.vue
View file @
dc4b62eb
...
@@ -64,8 +64,8 @@ export default {
...
@@ -64,8 +64,8 @@ export default {
})
})
},
},
onConfirm
({
selectedValues
,
selectedOptions
})
{
onConfirm
({
selectedValues
,
selectedOptions
})
{
this
.
$emit
(
'update:value'
,
selectedValues
[
0
])
this
.
$emit
(
'update:value'
,
selectedValues
[
0
]
||
{}
)
this
.
$emit
(
'change'
,
selectedOptions
[
0
])
this
.
$emit
(
'change'
,
selectedOptions
[
0
]
||
{}
)
this
.
$emit
(
'update:show'
,
false
)
this
.
$emit
(
'update:show'
,
false
)
},
},
onCancel
()
{
onCancel
()
{
...
...
src/doctor/components/docUnit/DocUnit.vue
View file @
dc4b62eb
...
@@ -74,8 +74,8 @@ export default {
...
@@ -74,8 +74,8 @@ export default {
return
getUnitByName
(
query
)
return
getUnitByName
(
query
)
},
},
onConfirm
({
selectedValues
,
selectedOptions
})
{
onConfirm
({
selectedValues
,
selectedOptions
})
{
this
.
$emit
(
'update:value'
,
selectedValues
[
0
])
this
.
$emit
(
'update:value'
,
selectedValues
[
0
]
||
{}
)
this
.
$emit
(
'change'
,
selectedOptions
[
0
])
this
.
$emit
(
'change'
,
selectedOptions
[
0
]
||
{}
)
this
.
$emit
(
'update:show'
,
false
)
this
.
$emit
(
'update:show'
,
false
)
this
.
searchStr
=
''
this
.
searchStr
=
''
},
},
...
...
src/doctor/screening/first/DoctorInfo.vue
0 → 100644
View file @
dc4b62eb
<
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/first/FormCont.vue
View file @
dc4b62eb
<
template
>
<
template
>
<div
class=
"screening-first-cont"
>
<div
class=
"screening-first-cont"
>
form
<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 popup-checkbox"
>
<div
class=
"flex justify-between"
>
<button
class=
"van-picker__cancel van-haptics-feedback"
@
click=
"showMedical = false"
>
取消
</button>
<button
class=
"van-picker__confirm van-haptics-feedback"
@
click=
"medicalConfirm"
>
确认
</button>
</div>
<van-checkbox-group
v-model=
"form.medicalHistory"
class=
"p-4"
>
<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>
</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 popup-checkbox"
>
<div
class=
"flex justify-between"
>
<button
class=
"van-picker__cancel van-haptics-feedback"
@
click=
"showFamily = false"
>
取消
</button>
<button
class=
"van-picker__confirm van-haptics-feedback"
@
click=
"familyConfirm"
>
确认
</button>
</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>
</div>
</van-popup>
<div
class=
'doc-form-label'
>
年龄
</div>
<van-field
v-model=
"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"
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'
>
现测血压(mmHg)
</div>
<table
class=
"w-full"
>
<tr>
<td
style=
"width: 3em"
></td>
<td>
收缩压(高压)
</td>
<td>
舒张压(低压)
</td>
</tr>
<tr>
<td>
第1次
<br
/>
测量
</td>
<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"
/>
<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>
<tr>
<td
class=
"text-center"
>
第2次
<br
/>
测量
</td>
<td
class=
"flex items-center"
>
<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"
/>
<span
class=
"divide"
>
/
</span>
</td>
<td>
<div
class=
"h-full flex"
>
<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"
/>
</div>
</td>
</tr>
</table>
<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"
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"
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
/>
<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>
</div>
</template>
</template>
<
script
>
<
script
>
import
{
useStore
}
from
'@/doctor/store'
import
{
checkboxReject
,
fetchDataHandle
}
from
'@/utils/common.js'
import
dayjs
from
'dayjs'
import
DoctorInfo
from
'./DoctorInfo.vue'
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
{
export
default
{
components
:
{
DoctorInfo
},
props
:
{
info
:
{
default
:
()
=>
({})
}
},
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
}
},
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
())
},
submit
()
{
return
this
.
$refs
.
form
.
validate
()
},
// 既往史
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
(
e
)
{
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
,
height
=
0
,
weight
=
0
,
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
}
}
},
watch
:
{
info
:
{
handler
(
info
)
{
this
.
form
=
defaultForm
(
info
)
},
immediate
:
true
},
bmi
:
{
handler
()
{
this
.
form
.
bmi
=
this
.
bmi
},
immediate
:
true
}
}
}
}
</
script
>
</
script
>
<
style
lang=
"less"
scoped
>
<
style
lang=
"less"
scoped
>
table {
text-align: center;
>tr {
>td {
padding-bottom: 8px;
}
&:last-child {
>td {
padding-bottom: 0;
}
}
}
.divide {
transform: translateY(2px);
padding: 0 2px;
color: #595959;
}
}
</
style
>
</
style
>
src/doctor/screening/first/FristForm.vue
View file @
dc4b62eb
...
@@ -4,7 +4,7 @@
...
@@ -4,7 +4,7 @@
:backFunc="onBack">
</DocNavBar>
:backFunc="onBack">
</DocNavBar>
<div
class=
"p-4 overflow-y-auto grow"
ref=
"all"
>
<div
class=
"p-4 overflow-y-auto grow"
ref=
"all"
>
<archiveCommon
:info=
"baseInfo"
v-if=
"step == 1"
></archiveCommon>
<archiveCommon
:info=
"baseInfo"
v-if=
"step == 1"
></archiveCommon>
<FormCont
v-else-if=
"step == 2"
/>
<FormCont
v-else-if=
"step == 2"
ref=
"FormCont"
/>
<Result
v-else-if=
"step == 3"
:residentInfoId=
"residentInfoId"
/>
<Result
v-else-if=
"step == 3"
:residentInfoId=
"residentInfoId"
/>
</div>
</div>
<div
class=
"shrink-0"
v-if=
"step !== 3"
>
<div
class=
"shrink-0"
v-if=
"step !== 3"
>
...
@@ -65,8 +65,12 @@ export default {
...
@@ -65,8 +65,12 @@ export default {
}
}
},
},
toNext
(
val
)
{
toNext
(
val
)
{
this
.
$refs
.
all
.
scrollTo
(
0
,
0
)
if
(
val
==
3
)
{
this
.
$refs
.
FormCont
.
submit
()
return
}
this
.
step
=
val
this
.
step
=
val
this
.
$refs
.
all
.
scrollTo
(
0
,
0
)
},
},
onBack
()
{
onBack
()
{
if
(
this
.
step
==
1
)
{
if
(
this
.
step
==
1
)
{
...
...
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