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
689a394f
Commit
689a394f
authored
Feb 07, 2025
by
芮自成
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
冠心病随访联调
parent
d513f99c
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
1830 additions
and
13 deletions
+1830
-13
separateFU.js
src/api/doctor/separateFU.js
+9
-0
Doctor.vue
src/doctor/Doctor.vue
+1
-1
FormCont.vue
src/doctor/followUp/separateFU/form/FormCont.vue
+25
-7
Index.vue
src/doctor/followUp/separateFU/form/Index.vue
+1
-1
CoronaryHeartDiseaseForm.vue
...p/separateFU/form/components/CoronaryHeartDiseaseForm.vue
+1334
-0
DiabetesForm.vue
...ctor/followUp/separateFU/form/components/DiabetesForm.vue
+460
-4
No files found.
src/api/doctor/separateFU.js
View file @
689a394f
...
...
@@ -4,3 +4,11 @@ import { fetchBase } from '@/api/doctor/doctorFetch'
export
function
addHypertensionForm
(
params
)
{
return
fetchBase
({
url
:
`/chronic-admin/v1/chronic-visit-hypertension/save`
,
body
:
params
,
loading
:
true
})
}
// 新增糖尿病随访
export
function
addDiabetesForm
(
params
)
{
return
fetchBase
({
url
:
`/chronic-admin/v1/chronic-visit-diabetes/save`
,
body
:
params
,
loading
:
true
})
}
// 新增冠心病随访
export
function
addCoronaryHeartDiseaseForm
(
params
)
{
return
fetchBase
({
url
:
`/chronic-admin/v1/chronic-visit-coronary/save`
,
body
:
params
,
loading
:
true
})
}
\ No newline at end of file
src/doctor/Doctor.vue
View file @
689a394f
...
...
@@ -66,7 +66,7 @@ export default {
if
(
!
token
)
{
token
=
sessionStorage
.
getItem
(
'token'
)
if
(
process
.
env
.
NODE_ENV
!==
'production'
)
{
token
=
'
2f3d10c8-d036-4a64-82e1-08d122359e94
'
token
=
'
6c127de6-c5d4-48aa-9fd1-3c46e77c28de
'
}
}
if
(
token
)
{
...
...
src/doctor/followUp/separateFU/form/FormCont.vue
View file @
689a394f
<
template
>
<div>
<HypertensionForm
v-if=
"diseaseInfo.diseaseType === 1"
ref=
"hypertensionForm"
></HypertensionForm>
<DiabetesForm
v-if=
"diseaseType === 2"
></DiabetesForm>
<DiabetesForm
v-if=
"diseaseInfo.diseaseType === 2"
ref=
"diabetesForm"
></DiabetesForm>
<CoronaryHeartDiseaseForm
v-if=
"diseaseInfo.diseaseType === 3"
ref=
"coronaryHeartDiseaseForm"
></CoronaryHeartDiseaseForm>
</div>
</
template
>
<
script
>
import
HypertensionForm
from
'./components/HypertensionForm.vue'
import
DiabetesForm
from
'./components/DiabetesForm.vue'
import
{
addHypertensionForm
}
from
'@/api/doctor/separateFU'
import
CoronaryHeartDiseaseForm
from
'./components/CoronaryHeartDiseaseForm.vue'
import
{
addHypertensionForm
,
addDiabetesForm
,
addCoronaryHeartDiseaseForm
}
from
'@/api/doctor/separateFU'
export
default
{
components
:
{
HypertensionForm
,
DiabetesForm
},
components
:
{
HypertensionForm
,
DiabetesForm
,
CoronaryHeartDiseaseForm
},
props
:
{
baseInfo
:
{
type
:
Object
,
...
...
@@ -22,7 +24,7 @@ export default {
},
data
()
{
return
{
diseaseType
:
2
//
diseaseType: 2
}
},
computed
:
{
...
...
@@ -32,15 +34,31 @@ export default {
},
methods
:
{
async
submit
()
{
const
hypertensionForm
=
await
this
.
$refs
.
hypertensionForm
.
submit
()
let
form
=
{
...
this
.
diseaseInfo
,
residentsRecord
:
this
.
baseInfo
,
...
hypertensionForm
,
residentInfoId
:
this
.
residentInfoId
,
source
:
2
}
return
await
addHypertensionForm
(
form
,
true
)
if
(
this
.
diseaseInfo
.
diseaseType
===
1
)
{
const
hypertensionForm
=
await
this
.
$refs
.
hypertensionForm
.
submit
()
return
await
addHypertensionForm
({
...
form
,
...
hypertensionForm
},
true
)
}
else
if
(
this
.
diseaseInfo
.
diseaseType
===
2
)
{
const
diabetesForm
=
await
this
.
$refs
.
diabetesForm
.
submit
()
return
await
addDiabetesForm
({
...
form
,
...
diabetesForm
},
true
)
}
else
if
(
this
.
diseaseInfo
.
diseaseType
===
3
)
{
const
coronaryHeartDiseaseForm
=
await
this
.
$refs
.
coronaryHeartDiseaseForm
.
submit
()
return
await
addCoronaryHeartDiseaseForm
({
...
form
,
...
coronaryHeartDiseaseForm
},
true
)
}
}
}
}
...
...
src/doctor/followUp/separateFU/form/Index.vue
View file @
689a394f
...
...
@@ -25,7 +25,7 @@ export default {
components
:
{
BaseInfo
,
FormCont
},
data
()
{
return
{
step
:
2
,
step
:
1
,
baseInfo
:
{},
diseaseInfo
:
{}
}
...
...
src/doctor/followUp/separateFU/form/components/CoronaryHeartDiseaseForm.vue
0 → 100644
View file @
689a394f
<
template
>
<van-form
ref=
"form"
>
<div
class=
"first-title"
>
<span
class=
"font-semibold"
>
随访信息
</span>
<div
class=
"btn-title"
>
引入数据
</div>
</div>
<!-- 随访方式 -->
<div
class=
"label-title mt-2"
required
>
随访方式
</div>
<van-field
v-model=
"form.visitWayName"
isLink
readonly
placeholder=
"请选择"
:rules=
"rules.visitWayName"
@
click=
"showVisitWay = true"
class=
"form-input"
/>
<van-popup
v-model:show=
"showVisitWay"
position=
"bottom"
>
<div
class=
"p-4"
style=
"height: 100%"
>
<div
class=
"flex justify-between items-center mb-4 pop-title"
>
<div
class=
"greyColor"
@
click=
"showVisitWay = false"
>
取消
</div>
<div>
随访方式(单选)
</div>
<div></div>
</div>
<div
style=
"height: 80%; overflow: auto"
>
<CheckBtn
clearable
column-1
:options=
"store.getDict('CP00052')"
v-model:value=
"form.visitWay"
:fieldNames=
"
{ text: 'name', value: 'value' }"
@change="visitWayChange"
/>
</div>
</div>
</van-popup>
<!-- 症状 -->
<div
class=
"label-title mt-2"
required
>
症状
</div>
<van-field
v-model=
"form.symptomName"
isLink
readonly
placeholder=
"请选择"
:rules=
"rules.symptomName"
@
click=
"showSymptom = true"
class=
"form-input"
/>
<van-popup
v-model:show=
"showSymptom"
position=
"bottom"
>
<div
class=
"p-4"
style=
"height: 100%"
>
<div
class=
"flex justify-between items-center mb-4 pop-title"
>
<div
class=
"greyColor"
@
click=
"showSymptom = false"
>
取消
</div>
<div>
症状(可多选)
</div>
<div
class=
"blueColor"
@
click=
"symptomConfirm"
>
确定
</div>
</div>
<div
style=
"height: 80%; overflow: auto"
>
<CheckBtn
multiple
column-2
:options=
"store.getDict('CP00060')"
v-model:value=
"form.symptom"
:fieldNames=
"
{ text: 'name', value: 'value' }"
@change="form.symptom = checkboxReject(form.symptom, [1])"
/>
</div>
</div>
</van-popup>
<template
v-if=
"(form.symptom || []).includes(99)"
>
<div
class=
"label-title mt-2"
>
其他症状
</div>
<van-field
v-model=
"form.symptomOther"
placeholder=
"请填写其他症状"
class=
"form-input"
/>
</
template
>
<!-- 血压 -->
<div
class=
"flex items-center justify-between tip-box mt-2 mb-2"
>
<div
class=
"label-title"
required
>
血压
</div>
<BloodPressurePanel
:pressureObj=
"pressureObj"
/>
</div>
<table
class=
"w-full mb-2"
>
<tr
class=
"sub-text"
>
<td>
收缩压(SBP)
</td>
<td
style=
"width: 1em"
></td>
<td>
舒张压(DBP)
</td>
</tr>
<tr>
<td
class=
"flex items-center"
>
<van-field
v-model=
"form.signSystolicPressure"
placeholder=
"60~300,整数"
:rules=
"rules.signSystolicPressure"
class=
"form-input"
>
<
template
#
extra
>
<span>
mmHg
</span>
</
template
>
</van-field>
</td>
<td
class=
"text-center"
>
<span
class=
"divide"
>
/
</span>
</td>
<td
class=
"flex items-center"
>
<van-field
v-model=
"form.signDiastolicPressure"
placeholder=
"30~300,整数"
:rules=
"rules.signDiastolicPressure"
class=
"form-input"
>
<
template
#
extra
>
<span>
mmHg
</span>
</
template
>
</van-field>
</td>
</tr>
</table>
<BloodPressureBt
:pressureObj=
"pressureObj"
@
getValue=
"setPressure"
>
开始测量
</BloodPressureBt>
<div
class=
"tip"
>
提示:点击“开始测量”按钮后将自动启动血压计设备,请勿再重复点击设备“开始/停止”按钮。
</div>
<!-- 身高 -->
<div
class=
"label-title mt-2"
required
>
身高
</div>
<van-field
v-model=
"form.signHeight"
placeholder=
"10~300,1位小数"
:rules=
"rules.signHeight"
class=
"form-input"
>
<
template
#
extra
>
<span>
cm
</span>
</
template
>
</van-field>
<!-- 体重 -->
<div
class=
"label-title mt-2"
required
>
体重
</div>
<van-field
v-model=
"form.signWeight"
placeholder=
"20~500,2位小数"
:rules=
"rules.signWeight"
class=
"form-input"
>
<
template
#
extra
>
<span>
kg
</span>
</
template
>
</van-field>
<!-- BMI -->
<div
class=
"label-title mt-2"
>
BMI(体质指数)
</div>
<van-field
readonly
v-model=
"form.signBmi"
placeholder=
"-"
class=
"form-input"
>
<
template
#
extra
>
<span>
kg/m²
</span>
</
template
>
</van-field>
<!-- 心率 -->
<div
class=
"label-title mt-2"
required
>
心率
</div>
<van-field
v-model=
"form.signHeartRate"
placeholder=
"10~200,整数"
:rules=
"rules.signHeartRate"
class=
"form-input"
>
<
template
#
extra
>
<span>
次/分
</span>
</
template
>
</van-field>
<!-- 其他体征 -->
<div
class=
"label-title mt-2"
>
其他
</div>
<van-field
type=
"textarea"
v-model=
"form.signOther"
:maxlength=
"120"
placeholder=
"如有其他体征情况请填写在此处,限120个字"
class=
"form-input"
/>
<!-- 吸烟 -->
<div
class=
"label-title mt-2"
required
>
吸烟
</div>
<div
class=
"bg-fa"
>
<div
class=
"label-title"
required
style=
"color: #262626; font-size: 14px"
>
是否正在吸烟
</div>
<van-field
:rules=
"rules.isSmoking"
style=
"padding: 0"
>
<
template
#
input
>
<van-radio-group
v-model=
"form.isSmoking"
shape=
"dot"
direction=
"horizontal"
class=
"doc-radio-group-now"
>
<van-radio
v-for=
"item in store.getDict('CP00066')"
:key=
"item.value"
:name=
"item.value"
label-position=
"left"
style=
"width: 100%"
>
{{
item
.
name
}}
</van-radio>
</van-radio-group>
</
template
>
</van-field>
</div>
<div
v-if=
"form.isSmoking === 1"
class=
"bg-fa mt-2"
>
<div
class=
"label-title"
style=
"color: #262626; font-size: 14px"
>
您大约从几岁起开始养成每天或基本每天都吸烟的习惯
</div>
<van-field
v-model=
"form.startSmokeAge"
placeholder=
"2~100,整数"
:rules=
"rules.startSmokeAge"
class=
"card-input"
>
<
template
#
extra
>
<span>
岁
</span>
</
template
>
</van-field>
</div>
<div
v-if=
"form.isSmoking === 1 || form.isSmoking === 2"
class=
"bg-fa mt-2"
>
<div
class=
"label-title"
style=
"color: #262626; font-size: 14px"
>
您最近7天是否吸烟
</div>
<van-field
style=
"padding: 0"
>
<
template
#
input
>
<van-radio-group
v-model=
"form.lastSevenSmoke"
shape=
"dot"
direction=
"horizontal"
class=
"doc-radio-group-now"
>
<van-radio
v-for=
"item in store.getDict('DC00001')"
:key=
"item.value"
:name=
"item.value"
label-position=
"left"
style=
"width: 48%"
>
{{
item
.
name
}}
</van-radio>
</van-radio-group>
</
template
>
</van-field>
</div>
<div
v-if=
"form.isSmoking === 1 || form.isSmoking === 2"
class=
"bg-fa mt-2"
>
<div
class=
"label-title"
style=
"color: #262626; font-size: 14px"
>
日吸烟量
</div>
<van-field
v-model=
"form.daySmoking"
placeholder=
"0~100,整数"
:rules=
"rules.daySmoking"
class=
"card-input"
>
<
template
#
extra
>
<span>
支
</span>
</
template
>
</van-field>
</div>
<div
v-if=
"form.isSmoking === 1 || form.isSmoking === 2"
class=
"bg-fa mt-2"
>
<div
class=
"label-title"
style=
"color: #262626; font-size: 14px"
>
目标日吸烟量
</div>
<van-field
v-model=
"form.goalDaySmoking"
placeholder=
"0~100,整数"
:rules=
"rules.goalDaySmoking"
class=
"card-input"
>
<
template
#
extra
>
<span>
支
</span>
</
template
>
</van-field>
</div>
<!-- 饮酒 -->
<div
class=
"label-title mt-2"
required
>
饮酒
</div>
<div
class=
"bg-fa"
>
<div
class=
"label-title"
required
style=
"color: #262626; font-size: 14px"
>
是否正在饮酒
</div>
<van-field
:rules=
"rules.isDrink"
style=
"padding: 0"
>
<
template
#
input
>
<van-radio-group
v-model=
"form.isDrink"
shape=
"dot"
direction=
"horizontal"
class=
"doc-radio-group-now"
>
<van-radio
v-for=
"item in store.getDict('CP00068')"
:key=
"item.value"
:name=
"item.value"
label-position=
"left"
style=
"width: 100%"
>
{{
item
.
name
}}
</van-radio>
</van-radio-group>
</
template
>
</van-field>
</div>
<div
v-if=
"form.isDrink === 1"
class=
"bg-fa mt-2"
>
<div
class=
"label-title"
style=
"color: #262626; font-size: 14px"
>
饮酒频率
</div>
<van-field
style=
"padding: 0"
>
<
template
#
input
>
<van-radio-group
v-model=
"form.drinkCondition"
shape=
"dot"
direction=
"horizontal"
class=
"doc-radio-group-now"
>
<van-radio
v-for=
"item in store.getDict('CP00069')"
:key=
"item.value"
:name=
"item.value"
label-position=
"left"
style=
"width: 100%"
>
{{
item
.
name
}}
</van-radio>
</van-radio-group>
</
template
>
</van-field>
</div>
<div
v-if=
"form.isDrink === 1 || form.isDrink === 2"
class=
"flex mt-2"
>
<div
class=
"bg-fa"
>
<div
class=
"label-title"
style=
"color: #262626; font-size: 14px"
>
日饮酒量
</div>
<van-field
v-model=
"form.dayDrink"
placeholder=
"0~3000,整数"
:rules=
"rules.dayDrink"
class=
"card-input"
>
<
template
#
extra
>
<span>
ml
</span>
</
template
>
</van-field>
</div>
<div
class=
"bg-fa ml-2"
>
<div
class=
"label-title"
style=
"color: #262626; font-size: 14px"
>
目标日饮酒量
</div>
<van-field
v-model=
"form.goalDayDrink"
placeholder=
"0~3000,整数"
:rules=
"rules.goalDayDrink"
class=
"card-input"
>
<
template
#
extra
>
<span>
ml
</span>
</
template
>
</van-field>
</div>
</div>
<div
v-if=
"form.isDrink === 1 || form.isDrink === 2"
class=
"bg-fa mt-2"
>
<div
class=
"label-title"
style=
"color: #262626; font-size: 14px"
>
饮酒种类
</div>
<van-field
label=
"白酒"
v-model=
"form.drinkLiquor"
placeholder=
"0~3000,整数"
:rules=
"rules.drinkLiquor"
class=
"card-input"
label-width=
"36px"
label-class=
"label-mr"
>
<
template
#
extra
>
<span>
ml/日
</span>
</
template
>
</van-field>
<van-field
label=
"啤酒"
v-model=
"form.drinkBeer"
placeholder=
"0~3000,整数"
:rules=
"rules.drinkBeer"
class=
"card-input mt-2"
label-width=
"36px"
label-class=
"label-mr"
>
<
template
#
extra
>
<span>
ml/日
</span>
</
template
>
</van-field>
<van-field
label=
"红酒"
v-model=
"form.drinkRed"
placeholder=
"0~3000,整数"
:rules=
"rules.drinkRed"
class=
"card-input mt-2"
label-width=
"36px"
label-class=
"label-mr"
>
<
template
#
extra
>
<span>
ml/日
</span>
</
template
>
</van-field>
<van-field
label=
"黄酒"
v-model=
"form.drinkYellow"
placeholder=
"0~3000,整数"
:rules=
"rules.drinkYellow"
class=
"card-input mt-2"
label-width=
"36px"
label-class=
"label-mr"
>
<
template
#
extra
>
<span>
ml/日
</span>
</
template
>
</van-field>
<van-field
label=
"其他"
v-model=
"form.drinkOther"
placeholder=
"0~3000,整数"
:rules=
"rules.drinkOther"
class=
"card-input mt-2"
label-width=
"36px"
label-class=
"label-mr"
>
<
template
#
extra
>
<span>
ml/日
</span>
</
template
>
</van-field>
</div>
<!-- 运动 -->
<div
class=
"label-title mt-2"
required
>
运动
</div>
<div
class=
"bg-fa"
>
<div
class=
"label-title"
required
style=
"color: #262626; font-size: 14px"
>
有无规律活动
</div>
<van-field
:rules=
"rules.regularExercise"
style=
"padding: 0"
>
<
template
#
input
>
<van-radio-group
v-model=
"form.regularExercise"
shape=
"dot"
direction=
"horizontal"
class=
"doc-radio-group-now"
>
<van-radio
v-for=
"item in store.getDict('DC00069')"
:key=
"item.value"
:name=
"item.value"
label-position=
"left"
style=
"width: 48%"
>
{{
item
.
name
}}
</van-radio>
</van-radio-group>
</
template
>
</van-field>
</div>
<div
v-if=
"form.regularExercise === 1"
class=
"bg-fa mt-2"
>
<div
class=
"label-title"
required
style=
"color: #262626; font-size: 14px"
>
运动强度
</div>
<van-field
:rules=
"rules.exerciseStrength"
style=
"padding: 0"
>
<
template
#
input
>
<van-radio-group
v-model=
"form.exerciseStrength"
shape=
"dot"
direction=
"horizontal"
class=
"doc-radio-group-now"
>
<van-radio
v-for=
"item in store.getDict('CP00070')"
:key=
"item.value"
:name=
"item.value"
label-position=
"left"
style=
"width: 48%"
>
{{
item
.
name
}}
</van-radio>
</van-radio-group>
</
template
>
</van-field>
</div>
<div
class=
"bg-fa mt-2"
>
<div
class=
"label-title"
required
style=
"color: #262626; font-size: 14px"
>
目前运动情况
</div>
<div
class=
"flex"
>
<van-field
v-model=
"form.nowExerciseWeek"
placeholder=
"0~50,整数"
:rules=
"rules.nowExerciseWeek"
class=
"card-input"
>
<
template
#
extra
>
<span>
次/周
</span>
</
template
>
</van-field>
<van-field
v-model=
"form.nowExerciseMinute"
placeholder=
"0~500,整数"
:rules=
"rules.nowExerciseMinute"
class=
"card-input ml-2"
>
<
template
#
extra
>
<span>
分钟/次
</span>
</
template
>
</van-field>
</div>
</div>
<div
class=
"bg-fa mt-2"
>
<div
class=
"label-title"
required
style=
"color: #262626; font-size: 14px"
>
目标运动情况
</div>
<div
class=
"flex"
>
<van-field
v-model=
"form.targetExerciseWeek"
placeholder=
"0~50,整数"
:rules=
"rules.targetExerciseWeek"
class=
"card-input"
>
<
template
#
extra
>
<span>
次/周
</span>
</
template
>
</van-field>
<van-field
v-model=
"form.targetExerciseMinute"
placeholder=
"0~500,整数"
:rules=
"rules.targetExerciseMinute"
class=
"card-input ml-2"
>
<
template
#
extra
>
<span>
分钟/次
</span>
</
template
>
</van-field>
</div>
</div>
<!-- 摄盐情况 -->
<div
class=
"label-title mt-2"
required
>
摄盐情况(咸淡)
</div>
<van-field
:rules=
"rules.saltIntake"
style=
"padding: 0"
>
<
template
#
input
>
<van-radio-group
v-model=
"form.saltIntake"
shape=
"dot"
direction=
"horizontal"
class=
"w-full doc-radio-group"
>
<van-radio
v-for=
"item in store.getDict('CP00071')"
:key=
"item.value"
:name=
"item.value"
label-position=
"left"
>
{{
item
.
name
}}
</van-radio>
</van-radio-group>
</
template
>
</van-field>
<!-- 心理调整 -->
<div
class=
"label-title mt-2"
required
>
心理调整
</div>
<van-field
:rules=
"rules.psychologicalRecovery"
style=
"padding: 0"
>
<
template
#
input
>
<van-radio-group
v-model=
"form.psychologicalRecovery"
shape=
"dot"
direction=
"horizontal"
class=
"w-full doc-radio-group"
>
<van-radio
v-for=
"item in store.getDict('CP00072')"
:key=
"item.value"
:name=
"item.value"
label-position=
"left"
>
{{
item
.
name
}}
</van-radio>
</van-radio-group>
</
template
>
</van-field>
<!-- 遵医行为 -->
<div
class=
"label-title mt-2"
required
>
遵医行为
</div>
<van-field
:rules=
"rules.doctorAdvice"
style=
"padding: 0"
>
<
template
#
input
>
<van-radio-group
v-model=
"form.doctorAdvice"
shape=
"dot"
direction=
"horizontal"
class=
"w-full doc-radio-group"
>
<van-radio
v-for=
"item in store.getDict('CP00072')"
:key=
"item.value"
:name=
"item.value"
label-position=
"left"
>
{{
item
.
name
}}
</van-radio>
</van-radio-group>
</
template
>
</van-field>
<!-- 服药依从性 -->
<div
class=
"label-title mt-2"
required
>
服药依从性
</div>
<van-field
:rules=
"rules.medicationCompliance"
style=
"padding: 0"
>
<
template
#
input
>
<van-radio-group
v-model=
"form.medicationCompliance"
shape=
"dot"
direction=
"horizontal"
class=
"w-full doc-radio-group"
>
<van-radio
v-for=
"item in store.getDict('CP00080')"
:key=
"item.value"
:name=
"item.value"
label-position=
"left"
>
{{
item
.
name
}}
</van-radio>
</van-radio-group>
</
template
>
</van-field>
<!-- 药物不良反应 -->
<div
class=
"label-title mt-2"
required
>
药物不良反应
</div>
<van-field
:rules=
"rules.drugsAdverse"
style=
"padding: 0"
>
<
template
#
input
>
<van-radio-group
v-model=
"form.drugsAdverse"
shape=
"dot"
direction=
"horizontal"
class=
"w-full doc-radio-group"
>
<van-radio
v-for=
"item in store.getDict('DC00069')"
:key=
"item.value"
:name=
"item.value"
label-position=
"left"
>
{{
item
.
name
}}
</van-radio>
</van-radio-group>
</
template
>
</van-field>
<div
v-if=
"form.drugsAdverse === 1"
class=
"bg-fa mt-2"
>
<div
class=
"label-title"
style=
"color: #262626; font-size: 14px"
>
不良反应
</div>
<van-field
type=
"textarea"
v-model=
"form.drugsAdverseOther"
:maxlength=
"120"
placeholder=
"请填写具体描述哪种药物,何种不良反应,限120字"
class=
"card-input"
/>
</div>
<!-- 此次随访分类 -->
<div
class=
"label-title mt-2"
required
>
此次随访分类
</div>
<van-field
:rules=
"rules.visitType"
style=
"padding: 0"
>
<
template
#
input
>
<van-radio-group
v-model=
"form.visitType"
shape=
"dot"
direction=
"horizontal"
class=
"w-full doc-radio-group"
>
<van-radio
v-for=
"item in store.getDict('CP00085')"
:key=
"item.value"
:name=
"item.value"
label-position=
"left"
style=
"width: 48%"
>
{{
item
.
name
}}
</van-radio>
</van-radio-group>
</
template
>
</van-field>
<!-- 目前诊断 -->
<div
class=
"label-title mt-2"
required
>
目前诊断
</div>
<van-field
v-model=
"form.currentDiagnosisName"
isLink
readonly
placeholder=
"请选择"
:rules=
"rules.currentDiagnosisName"
@
click=
"showCurrentDiagnosis = true"
class=
"form-input"
/>
<van-popup
v-model:show=
"showCurrentDiagnosis"
position=
"bottom"
>
<div
class=
"p-4"
style=
"height: 100%"
>
<div
class=
"flex justify-between items-center mb-4 pop-title"
>
<div
class=
"greyColor"
@
click=
"showCurrentDiagnosis = false"
>
取消
</div>
<div>
目前诊断(可多选)
</div>
<div
class=
"blueColor"
@
click=
"currentDiagnosisConfirm"
>
确定
</div>
</div>
<div
style=
"height: 80%; overflow: auto"
>
<CheckBtn
multiple
column-2
:options=
"store.getDict('CP00086')"
v-model:value=
"form.currentDiagnosis"
:fieldNames=
"{ text: 'name', value: 'value' }"
/>
</div>
</div>
</van-popup>
<!-- 转诊 -->
<div
class=
"label-title mt-2"
required
>
转诊
</div>
<van-field
:rules=
"rules.isReferral"
style=
"padding: 0"
>
<
template
#
input
>
<van-radio-group
v-model=
"form.isReferral"
shape=
"dot"
direction=
"horizontal"
class=
"w-full doc-radio-group"
>
<van-radio
v-for=
"item in store.getDict('DC00069')"
:key=
"item.value"
:name=
"item.value"
label-position=
"left"
>
{{
item
.
name
}}
</van-radio>
</van-radio-group>
</
template
>
</van-field>
<div
v-if=
"form.isReferral === 1"
class=
"bg-fa mt-2"
>
<div
style=
"background-color: #fff; padding: 8px; border-radius: 8px"
>
<div
style=
"color: #262626; font-size: 14px"
>
转诊原因
</div>
<van-field
type=
"textarea"
v-model=
"form.referralReason"
:maxlength=
"120"
placeholder=
"请填写具体描述转诊原因,限120字"
class=
"form-input mt-2"
/>
</div>
<div
style=
"background-color: #fff; padding: 8px; border-radius: 8px"
class=
"mt-2"
>
<div
style=
"color: #262626; font-size: 14px"
>
转诊机构
</div>
<van-field
v-model=
"form.referralUnitName"
is-link
readonly
placeholder=
"请选择"
@
click=
"showReferralUnit = true"
class=
"form-input mt-2"
/>
<DocUnit
v-model:show=
"showReferralUnit"
v-model:value=
"form.referralUnitId"
:valueName=
"form?.referralUnitName"
@
change=
"referralUnitChange"
/>
</div>
<div
style=
"background-color: #fff; padding: 8px; border-radius: 8px"
class=
"mt-2"
>
<div
style=
"color: #262626; font-size: 14px"
>
转诊科室
</div>
<van-field
v-model=
"form.referralOfficeName"
is-link
readonly
placeholder=
"请选择"
@
click=
"showReferralOffice = true"
class=
"form-input mt-2"
/>
<DocOffice
v-model:show=
"showReferralOffice"
v-model:value=
"form.referralOfficeId"
:unitId=
"form.referralUnitId"
@
change=
"referralOfficeChange"
/>
</div>
</div>
<!-- 现场随访照片 -->
<div
class=
"label-title mt-2"
>
现场随访照片
</div>
<DocImageUpload
description=
"最多支持上传8个文件,支持上传图片或PDF文件,图片支持上传jpg、png、jpeg格式,文件大小请勿超过10M。"
lengthMessage=
"抱歉,最多可上传8个文件。"
:imageData=
"[]"
@
change=
"(ids, option) => form.visitImage = ids"
:maxLength=
"8"
/>
<!-- 下次随访日期 -->
<div
class=
"label-title"
required
>
下次随访日期
</div>
<van-field
v-model=
"form.nextVisitDate"
isLink
readonly
placeholder=
"请选择"
:rules=
"rules.nextVisitDate"
@
click=
"showNextVisitDate = true"
class=
"form-input"
/>
<van-popup
v-model:show=
"showNextVisitDate"
position=
"bottom"
>
<van-date-picker
v-model=
"form._nextVisitDate"
:min-date=
"nextVisitDateRange.min"
:max-date=
"nextVisitDateRange.max"
@
confirm=
"nextVisitDateConfirm"
@
cancel=
"showNextVisitDate = false"
/>
</van-popup>
<!-- 随访日期 -->
<div
class=
"label-title mt-2"
>
随访日期
</div>
<van-field
v-model=
"form.visitDate"
isLink
readonly
placeholder=
"请选择"
:rules=
"rules.visitDate"
@
click=
"showVisitDate = true"
class=
"form-input"
/>
<van-popup
v-model:show=
"showVisitDate"
position=
"bottom"
>
<van-date-picker
v-model=
"form._visitDate"
:min-date=
"visitDateRange.min"
:max-date=
"visitDateRange.max"
@
confirm=
"visitDateConfirm"
@
cancel=
"showVisitDate = false"
/>
</van-popup>
<!-- 随访单位 -->
<div
class=
"label-title mt-2"
>
随访单位
</div>
<van-field
v-model=
"form.visitUnitName"
is-link
readonly
placeholder=
"请选择"
@
click=
"showVisitUnit = true"
class=
"form-input mt-2"
/>
<DocUnit
v-model:show=
"showVisitUnit"
v-model:value=
"form.visitUnitId"
:valueName=
"form?.visitUnitName"
@
change=
"visitUnitChange"
/>
<!-- 随访科室 -->
<div
class=
"label-title mt-2"
>
随访科室
</div>
<van-field
v-model=
"form.visitOfficeName"
is-link
readonly
placeholder=
"请选择"
@
click=
"showVisitOffice = true"
class=
"form-input mt-2"
/>
<DocOffice
v-model:show=
"showVisitOffice"
v-model:value=
"form.visitOfficeId"
:unitId=
"form.visitUnitId"
@
change=
"visitOfficeChange"
/>
<!-- 随访医生 -->
<div
class=
"label-title mt-2"
>
随访医生
</div>
<van-field
v-model=
"form.visitDoctorName"
is-link
readonly
placeholder=
"请选择"
@
click=
"showVisitDoctor = true"
class=
"form-input mt-2"
/>
<DocOfficeDoctor
v-model:show=
"showVisitDoctor"
:allowClear=
"false"
v-model:value=
"form.visitDoctorId"
:unitId=
"form.visitUnitId"
:officeId=
"form.visitOfficeId"
@
change=
"(option) => { form.visitDoctorName = option.staffName }"
/>
</van-form>
</template>
<
script
>
import
{
useStore
}
from
'@/doctor/store'
import
CheckBtn
from
'@/doctor/components/checkBtn/CheckBtn.vue'
import
{
checkboxReject
,
calculateBMI
,
fetchDataHandle
}
from
'@/utils/common'
import
BloodPressurePanel
from
'@/doctor/components/bloodPressure/BloodPressurePanel.vue'
import
BloodPressureBt
from
'@/doctor/components/bloodPressure/BloodPressureBt.vue'
import
DocImageUpload
from
'@/doctor/components/docImageUpload/DocImageUpload.vue'
import
DocUnit
from
'@/doctor/components/docUnit/DocUnit.vue'
import
DocOffice
from
'@/doctor/components/docOffice/DocOffice.vue'
import
DocOfficeDoctor
from
'@/doctor/components/docOfficeDoctor/DocOfficeDoctor.vue'
export
default
{
components
:
{
CheckBtn
,
BloodPressurePanel
,
BloodPressureBt
,
DocImageUpload
,
DocUnit
,
DocOffice
,
DocOfficeDoctor
},
inject
:
[
'pressureObj'
],
data
()
{
return
{
store
:
useStore
(),
form
:
{},
rules
:
{
visitWayName
:
[
{
required
:
true
,
message
:
'请选择随访方式'
}
],
symptomName
:
[
{
required
:
true
,
message
:
'请选择症状'
}
],
signSystolicPressure
:
[
{
required
:
true
,
message
:
'请填写收缩压'
}
],
signDiastolicPressure
:
[
{
required
:
true
,
message
:
'请填写舒张压'
}
],
signHeight
:
[
{
required
:
true
,
message
:
'请填写身高'
},
{
validator
:
(
value
,
rule
)
=>
{
let
res
=
true
const
regex
=
/^
\d
+
(\.\d{1})?
$/
if
(
value
&&
!
(
regex
.
test
(
value
)
&&
Number
(
value
)
>=
10
&&
Number
(
value
)
<=
300
))
{
res
=
false
}
return
res
},
message
:
`请输入10到300之间的数字,允许一位小数`
}
],
signWeight
:
[
{
required
:
true
,
message
:
'请填写体重'
},
{
validator
:
(
value
,
rule
)
=>
{
let
res
=
true
const
regex
=
/^
\d
+
(\.\d{1,2})?
$/
if
(
value
&&
!
(
regex
.
test
(
value
)
&&
Number
(
value
)
>=
20
&&
Number
(
value
)
<=
500
))
{
res
=
false
}
return
res
},
message
:
`请输入20到500之间的数字,允许两位小数`
}
],
signHeartRate
:
[
{
required
:
true
,
message
:
'请填写心率'
},
{
validator
:
(
value
,
rule
)
=>
{
let
res
=
true
const
regex
=
/^
\d
+$/
if
(
value
&&
!
(
regex
.
test
(
value
)
&&
Number
(
value
)
>=
10
&&
Number
(
value
)
<=
200
))
{
res
=
false
}
return
res
},
message
:
`请输入10到200之间的整数`
}
],
isSmoking
:
[
{
required
:
true
,
message
:
'请选择'
}
],
startSmokeAge
:
[
{
validator
:
(
value
,
rule
)
=>
{
let
res
=
true
const
regex
=
/^
\d
+$/
if
(
value
&&
!
(
regex
.
test
(
value
)
&&
Number
(
value
)
>=
2
&&
Number
(
value
)
<=
100
))
{
res
=
false
}
return
res
},
message
:
`请输入2到100之间的整数`
}
],
daySmoking
:
[
{
validator
:
(
value
,
rule
)
=>
{
let
res
=
true
const
regex
=
/^
\d
+$/
if
(
value
&&
!
(
regex
.
test
(
value
)
&&
Number
(
value
)
>=
0
&&
Number
(
value
)
<=
100
))
{
res
=
false
}
return
res
},
message
:
`请输入0到100之间的整数`
}
],
goalDaySmoking
:
[
{
validator
:
(
value
,
rule
)
=>
{
let
res
=
true
const
regex
=
/^
\d
+$/
if
(
value
&&
!
(
regex
.
test
(
value
)
&&
Number
(
value
)
>=
0
&&
Number
(
value
)
<=
100
))
{
res
=
false
}
return
res
},
message
:
`请输入0到100之间的整数`
}
],
isDrink
:
[
{
required
:
true
,
message
:
'请选择'
}
],
dayDrink
:
[
{
validator
:
(
value
,
rule
)
=>
{
let
res
=
true
const
regex
=
/^
\d
+$/
if
(
value
&&
!
(
regex
.
test
(
value
)
&&
Number
(
value
)
>=
0
&&
Number
(
value
)
<=
3000
))
{
res
=
false
}
return
res
},
message
:
`请输入0到3000之间的整数`
}
],
goalDayDrink
:
[
{
validator
:
(
value
,
rule
)
=>
{
let
res
=
true
const
regex
=
/^
\d
+$/
if
(
value
&&
!
(
regex
.
test
(
value
)
&&
Number
(
value
)
>=
0
&&
Number
(
value
)
<=
3000
))
{
res
=
false
}
return
res
},
message
:
`请输入0到3000之间的整数`
}
],
drinkLiquor
:
[
{
validator
:
(
value
,
rule
)
=>
{
let
res
=
true
const
regex
=
/^
\d
+$/
if
(
value
&&
!
(
regex
.
test
(
value
)
&&
Number
(
value
)
>=
0
&&
Number
(
value
)
<=
3000
))
{
res
=
false
}
return
res
},
message
:
`请输入0到3000之间的整数`
}
],
drinkBeer
:
[
{
validator
:
(
value
,
rule
)
=>
{
let
res
=
true
const
regex
=
/^
\d
+$/
if
(
value
&&
!
(
regex
.
test
(
value
)
&&
Number
(
value
)
>=
0
&&
Number
(
value
)
<=
3000
))
{
res
=
false
}
return
res
},
message
:
`请输入0到3000之间的整数`
}
],
drinkRed
:
[
{
validator
:
(
value
,
rule
)
=>
{
let
res
=
true
const
regex
=
/^
\d
+$/
if
(
value
&&
!
(
regex
.
test
(
value
)
&&
Number
(
value
)
>=
0
&&
Number
(
value
)
<=
3000
))
{
res
=
false
}
return
res
},
message
:
`请输入0到3000之间的整数`
}
],
drinkYellow
:
[
{
validator
:
(
value
,
rule
)
=>
{
let
res
=
true
const
regex
=
/^
\d
+$/
if
(
value
&&
!
(
regex
.
test
(
value
)
&&
Number
(
value
)
>=
0
&&
Number
(
value
)
<=
3000
))
{
res
=
false
}
return
res
},
message
:
`请输入0到3000之间的整数`
}
],
drinkOther
:
[
{
validator
:
(
value
,
rule
)
=>
{
let
res
=
true
const
regex
=
/^
\d
+$/
if
(
value
&&
!
(
regex
.
test
(
value
)
&&
Number
(
value
)
>=
0
&&
Number
(
value
)
<=
3000
))
{
res
=
false
}
return
res
},
message
:
`请输入0到3000之间的整数`
}
],
regularExercise
:
[
{
required
:
true
,
message
:
'请选择'
}
],
exerciseStrength
:
[
{
required
:
true
,
message
:
'请选择'
}
],
nowExerciseWeek
:
[
{
required
:
true
,
message
:
'请输入'
},
{
validator
:
(
value
,
rule
)
=>
{
let
res
=
true
const
regex
=
/^
\d
+$/
if
(
value
&&
!
(
regex
.
test
(
value
)
&&
Number
(
value
)
>=
0
&&
Number
(
value
)
<=
50
))
{
res
=
false
}
return
res
},
message
:
`请输入0到50之间的整数`
}
],
nowExerciseMinute
:
[
{
required
:
true
,
message
:
'请输入'
},
{
validator
:
(
value
,
rule
)
=>
{
let
res
=
true
const
regex
=
/^
\d
+$/
if
(
value
&&
!
(
regex
.
test
(
value
)
&&
Number
(
value
)
>=
0
&&
Number
(
value
)
<=
500
))
{
res
=
false
}
return
res
},
message
:
`请输入0到500之间的整数`
}
],
targetExerciseWeek
:
[
{
required
:
true
,
message
:
'请输入'
},
{
validator
:
(
value
,
rule
)
=>
{
let
res
=
true
const
regex
=
/^
\d
+$/
if
(
value
&&
!
(
regex
.
test
(
value
)
&&
Number
(
value
)
>=
0
&&
Number
(
value
)
<=
50
))
{
res
=
false
}
return
res
},
message
:
`请输入0到50之间的整数`
}
],
targetExerciseMinute
:
[
{
required
:
true
,
message
:
'请输入'
},
{
validator
:
(
value
,
rule
)
=>
{
let
res
=
true
const
regex
=
/^
\d
+$/
if
(
value
&&
!
(
regex
.
test
(
value
)
&&
Number
(
value
)
>=
0
&&
Number
(
value
)
<=
500
))
{
res
=
false
}
return
res
},
message
:
`请输入0到500之间的整数`
}
],
saltIntake
:
[
{
required
:
true
,
message
:
'请选择'
}
],
psychologicalRecovery
:
[
{
required
:
true
,
message
:
'请选择'
}
],
doctorAdvice
:
[
{
required
:
true
,
message
:
'请选择'
}
],
medicationCompliance
:
[
{
required
:
true
,
message
:
'请选择'
}
],
drugsAdverse
:
[
{
required
:
true
,
message
:
'请选择'
}
],
visitType
:
[
{
required
:
true
,
message
:
'请选择'
}
],
currentDiagnosisName
:
[
{
required
:
true
,
message
:
'请选择'
}
],
isReferral
:
[
{
required
:
true
,
message
:
'请选择'
}
],
nextVisitDate
:
[
{
required
:
true
,
message
:
'请选择'
}
]
},
showVisitWay
:
false
,
showPaperReasons
:
false
,
showSymptom
:
false
,
// showAuxiliaryExamination: false
showCurrentDiagnosis
:
false
,
showReferralUnit
:
false
,
showReferralOffice
:
false
,
showNextVisitDate
:
false
,
nextVisitDateRange
:
{
min
:
undefined
,
max
:
undefined
},
showVisitDate
:
false
,
visitDateRange
:
{
min
:
undefined
,
max
:
undefined
},
showVisitUnit
:
false
,
showVisitOffice
:
false
,
showVisitDoctor
:
false
}
},
methods
:
{
checkboxReject
,
calculateBMI
,
visitWayChange
()
{
this
.
store
.
getDict
(
'CP00052'
).
forEach
(
item
=>
{
if
(
item
.
value
===
this
.
form
.
visitWay
)
{
this
.
form
.
visitWayName
=
item
.
name
}
})
this
.
showVisitWay
=
false
},
symptomConfirm
()
{
let
list
=
[]
this
.
store
.
getDict
(
'CP00058'
).
forEach
(
item
=>
{
let
selected
=
this
.
form
.
symptom
.
filter
(
e
=>
e
===
item
.
value
)
if
(
selected
&&
selected
.
length
)
{
list
.
push
(
item
.
name
)
}
})
this
.
form
.
symptomName
=
list
.
join
()
this
.
showSymptom
=
false
},
currentDiagnosisConfirm
()
{
let
list
=
[]
this
.
store
.
getDict
(
'CP00086'
).
forEach
(
item
=>
{
let
selected
=
this
.
form
.
currentDiagnosis
.
filter
(
e
=>
e
===
item
.
value
)
if
(
selected
&&
selected
.
length
)
{
list
.
push
(
item
.
name
)
}
})
this
.
form
.
currentDiagnosisName
=
list
.
join
()
this
.
showCurrentDiagnosis
=
false
},
setPressure
(
val
)
{
if
(
!
val
)
return
this
.
form
.
signSystolicPressure
=
val
.
systolicPressure
this
.
form
.
signDiastolicPressure
=
val
.
diastolicPressure
},
referralUnitChange
(
option
=
{})
{
this
.
form
.
referralUnitName
=
option
.
unitName
},
referralOfficeChange
(
option
=
{})
{
this
.
form
.
referralOfficeName
=
option
.
officeName
},
nextVisitDateConfirm
({
selectedValues
})
{
this
.
form
.
nextVisitDate
=
selectedValues
.
join
(
'-'
)
this
.
showNextVisitDate
=
false
},
visitDateConfirm
({
selectedValues
})
{
this
.
form
.
visitDate
=
selectedValues
.
join
(
'-'
)
this
.
showVisitDate
=
false
},
visitUnitChange
(
option
=
{})
{
this
.
form
.
visitUnitName
=
option
.
unitName
},
visitOfficeChange
(
option
=
{})
{
this
.
form
.
visitOfficeName
=
option
.
officeName
},
submit
()
{
return
new
Promise
((
resolve
,
reject
)
=>
{
this
.
$refs
.
form
.
validate
().
then
(()
=>
{
const
form
=
fetchDataHandle
(
this
.
form
,
{
symptom
:
'arrToStr'
,
currentDiagnosis
:
'arrToStr'
})
resolve
(
form
)
}).
catch
(
e
=>
{
})
})
}
},
watch
:
{
'form.signHeight'
:
{
handler
()
{
this
.
form
.
signBmi
=
this
.
calculateBMI
(
this
.
form
.
signHeight
,
this
.
form
.
signWeight
)
}
},
'form.signWeight'
:
{
handler
()
{
this
.
form
.
signBmi
=
this
.
calculateBMI
(
this
.
form
.
signHeight
,
this
.
form
.
signWeight
)
}
},
}
}
</
script
>
<
style
lang=
"less"
scoped
>
.first-title {
display: flex;
align-items: center;
.btn-title {
background-color: #F0F3FF;
color: #607FF0;
border-radius: 9999px;
padding: 4px 16px;
margin-left: 8px;
}
}
.label-title {
font-size: 13px;
color: #595959;
font-weight: 500;
margin-bottom: 8px;
&[required] {
&::after {
content: '*';
color: #FF4D4F;
font-weight: bold;
margin-left: 4px;
}
}
}
.form-input {
background-color: #FAFAFA;
padding: 8px 12px;
border-radius: 8px;
}
:deep(.van-cell:after) {
border-bottom: 0px;
}
:deep(.van-popup) {
height: 50% !important;
}
.pop-title {
color: #262626;
font-size: 16px;
font-weight: 600;
}
.greyColor {
color: var(--van-text-color-2);
font-weight: 400;
}
.blueColor {
color: #607FF0;
font-weight: 500;
}
.sub-text {
color: #595959;
font-size: 13px;
font-weight: 400;
padding-bottom: 8px;
}
.tip {
color: #FA8C16;
font-size: 12px;
margin-top: 8px;
line-height: 16px;
}
.bg-fa {
background-color: #FAFAFA;
padding: 8px;
border-radius: 8px;
}
.doc-radio-group-now {
column-gap: 8px;
row-gap: 8px;
background-color: #FAFAFA;
width: 100%;
.van-radio {
background-color: #FFFFFF;
padding: 8px 12px;
border-radius: 8px;
justify-content: space-between;
margin-right: 0;
}
}
.card-input {
padding: 8px 12px;
border-radius: 8px;
}
:deep(.label-mr) {
margin-right: 8px;
}
</
style
>
\ No newline at end of file
src/doctor/followUp/separateFU/form/components/DiabetesForm.vue
View file @
689a394f
...
...
@@ -797,35 +797,451 @@
@
change=
"(ids, option) => form.visitImage = ids"
:maxLength=
"8"
/>
<!-- 下次随访日期 -->
<div
class=
"label-title"
required
>
下次随访日期
</div>
<van-field
v-model=
"form.nextVisitDate"
isLink
readonly
placeholder=
"请选择"
:rules=
"rules.nextVisitDate"
@
click=
"showNextVisitDate = true"
class=
"form-input"
/>
<van-popup
v-model:show=
"showNextVisitDate"
position=
"bottom"
>
<van-date-picker
v-model=
"form._nextVisitDate"
:min-date=
"nextVisitDateRange.min"
:max-date=
"nextVisitDateRange.max"
@
confirm=
"nextVisitDateConfirm"
@
cancel=
"showNextVisitDate = false"
/>
</van-popup>
<!-- 随访日期 -->
<div
class=
"label-title mt-2"
>
随访日期
</div>
<van-field
v-model=
"form.visitDate"
isLink
readonly
placeholder=
"请选择"
:rules=
"rules.visitDate"
@
click=
"showVisitDate = true"
class=
"form-input"
/>
<van-popup
v-model:show=
"showVisitDate"
position=
"bottom"
>
<van-date-picker
v-model=
"form._visitDate"
:min-date=
"visitDateRange.min"
:max-date=
"visitDateRange.max"
@
confirm=
"visitDateConfirm"
@
cancel=
"showVisitDate = false"
/>
</van-popup>
<!-- 随访单位 -->
<div
class=
"label-title mt-2"
>
随访单位
</div>
<van-field
v-model=
"form.visitUnitName"
is-link
readonly
placeholder=
"请选择"
@
click=
"showVisitUnit = true"
class=
"form-input mt-2"
/>
<DocUnit
v-model:show=
"showVisitUnit"
v-model:value=
"form.visitUnitId"
:valueName=
"form?.visitUnitName"
@
change=
"visitUnitChange"
/>
<!-- 随访科室 -->
<div
class=
"label-title mt-2"
>
随访科室
</div>
<van-field
v-model=
"form.visitOfficeName"
is-link
readonly
placeholder=
"请选择"
@
click=
"showVisitOffice = true"
class=
"form-input mt-2"
/>
<DocOffice
v-model:show=
"showVisitOffice"
v-model:value=
"form.visitOfficeId"
:unitId=
"form.visitUnitId"
@
change=
"visitOfficeChange"
/>
<!-- 随访医生 -->
<div
class=
"label-title mt-2"
>
随访医生
</div>
<van-field
v-model=
"form.visitDoctorName"
is-link
readonly
placeholder=
"请选择"
@
click=
"showVisitDoctor = true"
class=
"form-input mt-2"
/>
<DocOfficeDoctor
v-model:show=
"showVisitDoctor"
:allowClear=
"false"
v-model:value=
"form.visitDoctorId"
:unitId=
"form.visitUnitId"
:officeId=
"form.visitOfficeId"
@
change=
"(option) => { form.visitDoctorName = option.staffName }"
/>
</van-form>
</template>
<
script
>
import
{
useStore
}
from
'@/doctor/store'
import
CheckBtn
from
'@/doctor/components/checkBtn/CheckBtn.vue'
import
{
checkboxReject
}
from
'@/utils/common'
import
{
checkboxReject
,
calculateBMI
,
fetchDataHandle
}
from
'@/utils/common'
import
BloodPressurePanel
from
'@/doctor/components/bloodPressure/BloodPressurePanel.vue'
import
BloodPressureBt
from
'@/doctor/components/bloodPressure/BloodPressureBt.vue'
import
DocUnit
from
'@/doctor/components/docUnit/DocUnit.vue'
import
DocOffice
from
'@/doctor/components/docOffice/DocOffice.vue'
import
DocOfficeDoctor
from
'@/doctor/components/docOfficeDoctor/DocOfficeDoctor.vue'
import
DocImageUpload
from
'@/doctor/components/docImageUpload/DocImageUpload.vue'
export
default
{
components
:
{
CheckBtn
,
BloodPressurePanel
,
BloodPressureBt
,
DocUnit
,
DocOffice
,
DocImageUpload
},
components
:
{
CheckBtn
,
BloodPressurePanel
,
BloodPressureBt
,
DocUnit
,
DocOffice
,
Doc
OfficeDoctor
,
Doc
ImageUpload
},
inject
:
[
'pressureObj'
],
data
()
{
return
{
store
:
useStore
(),
form
:
{},
rules
:
{},
rules
:
{
visitWayName
:
[
{
required
:
true
,
message
:
'请选择随访方式'
}
],
symptomName
:
[
{
required
:
true
,
message
:
'请选择症状'
}
],
signSystolicPressure
:
[
{
required
:
true
,
message
:
'请填写收缩压'
}
],
signDiastolicPressure
:
[
{
required
:
true
,
message
:
'请填写舒张压'
}
],
signHeight
:
[
{
required
:
true
,
message
:
'请填写身高'
},
{
validator
:
(
value
,
rule
)
=>
{
let
res
=
true
const
regex
=
/^
\d
+
(\.\d{1})?
$/
if
(
value
&&
!
(
regex
.
test
(
value
)
&&
Number
(
value
)
>=
10
&&
Number
(
value
)
<=
300
))
{
res
=
false
}
return
res
},
message
:
`请输入10到300之间的数字,允许一位小数`
}
],
signWeight
:
[
{
required
:
true
,
message
:
'请填写体重'
},
{
validator
:
(
value
,
rule
)
=>
{
let
res
=
true
const
regex
=
/^
\d
+
(\.\d{1,2})?
$/
if
(
value
&&
!
(
regex
.
test
(
value
)
&&
Number
(
value
)
>=
20
&&
Number
(
value
)
<=
500
))
{
res
=
false
}
return
res
},
message
:
`请输入20到500之间的数字,允许两位小数`
}
],
signWaistline
:
[
{
required
:
true
,
message
:
'请填写腰围'
},
{
validator
:
(
value
,
rule
)
=>
{
let
res
=
true
const
regex
=
/^
\d
+
(\.\d{1})?
$/
if
(
value
&&
!
(
regex
.
test
(
value
)
&&
Number
(
value
)
>=
10
&&
Number
(
value
)
<=
150
))
{
res
=
false
}
return
res
},
message
:
`请输入10到150之间的数字,允许一位小数`
}
],
signArteryPulsationName
:
[
{
required
:
true
,
message
:
'请选择足背动脉搏动'
}
],
isSmoking
:
[
{
required
:
true
,
message
:
'请选择'
}
],
startSmokeAge
:
[
{
validator
:
(
value
,
rule
)
=>
{
let
res
=
true
const
regex
=
/^
\d
+$/
if
(
value
&&
!
(
regex
.
test
(
value
)
&&
Number
(
value
)
>=
2
&&
Number
(
value
)
<=
100
))
{
res
=
false
}
return
res
},
message
:
`请输入2到100之间的整数`
}
],
daySmoking
:
[
{
validator
:
(
value
,
rule
)
=>
{
let
res
=
true
const
regex
=
/^
\d
+$/
if
(
value
&&
!
(
regex
.
test
(
value
)
&&
Number
(
value
)
>=
0
&&
Number
(
value
)
<=
100
))
{
res
=
false
}
return
res
},
message
:
`请输入0到100之间的整数`
}
],
goalDaySmoking
:
[
{
validator
:
(
value
,
rule
)
=>
{
let
res
=
true
const
regex
=
/^
\d
+$/
if
(
value
&&
!
(
regex
.
test
(
value
)
&&
Number
(
value
)
>=
0
&&
Number
(
value
)
<=
100
))
{
res
=
false
}
return
res
},
message
:
`请输入0到100之间的整数`
}
],
isDrink
:
[
{
required
:
true
,
message
:
'请选择'
}
],
dayDrink
:
[
{
validator
:
(
value
,
rule
)
=>
{
let
res
=
true
const
regex
=
/^
\d
+$/
if
(
value
&&
!
(
regex
.
test
(
value
)
&&
Number
(
value
)
>=
0
&&
Number
(
value
)
<=
3000
))
{
res
=
false
}
return
res
},
message
:
`请输入0到3000之间的整数`
}
],
goalDayDrink
:
[
{
validator
:
(
value
,
rule
)
=>
{
let
res
=
true
const
regex
=
/^
\d
+$/
if
(
value
&&
!
(
regex
.
test
(
value
)
&&
Number
(
value
)
>=
0
&&
Number
(
value
)
<=
3000
))
{
res
=
false
}
return
res
},
message
:
`请输入0到3000之间的整数`
}
],
drinkLiquor
:
[
{
validator
:
(
value
,
rule
)
=>
{
let
res
=
true
const
regex
=
/^
\d
+$/
if
(
value
&&
!
(
regex
.
test
(
value
)
&&
Number
(
value
)
>=
0
&&
Number
(
value
)
<=
3000
))
{
res
=
false
}
return
res
},
message
:
`请输入0到3000之间的整数`
}
],
drinkBeer
:
[
{
validator
:
(
value
,
rule
)
=>
{
let
res
=
true
const
regex
=
/^
\d
+$/
if
(
value
&&
!
(
regex
.
test
(
value
)
&&
Number
(
value
)
>=
0
&&
Number
(
value
)
<=
3000
))
{
res
=
false
}
return
res
},
message
:
`请输入0到3000之间的整数`
}
],
drinkRed
:
[
{
validator
:
(
value
,
rule
)
=>
{
let
res
=
true
const
regex
=
/^
\d
+$/
if
(
value
&&
!
(
regex
.
test
(
value
)
&&
Number
(
value
)
>=
0
&&
Number
(
value
)
<=
3000
))
{
res
=
false
}
return
res
},
message
:
`请输入0到3000之间的整数`
}
],
drinkYellow
:
[
{
validator
:
(
value
,
rule
)
=>
{
let
res
=
true
const
regex
=
/^
\d
+$/
if
(
value
&&
!
(
regex
.
test
(
value
)
&&
Number
(
value
)
>=
0
&&
Number
(
value
)
<=
3000
))
{
res
=
false
}
return
res
},
message
:
`请输入0到3000之间的整数`
}
],
drinkOther
:
[
{
validator
:
(
value
,
rule
)
=>
{
let
res
=
true
const
regex
=
/^
\d
+$/
if
(
value
&&
!
(
regex
.
test
(
value
)
&&
Number
(
value
)
>=
0
&&
Number
(
value
)
<=
3000
))
{
res
=
false
}
return
res
},
message
:
`请输入0到3000之间的整数`
}
],
regularExercise
:
[
{
required
:
true
,
message
:
'请选择'
}
],
exerciseStrength
:
[
{
required
:
true
,
message
:
'请选择'
}
],
nowExerciseWeek
:
[
{
required
:
true
,
message
:
'请输入'
},
{
validator
:
(
value
,
rule
)
=>
{
let
res
=
true
const
regex
=
/^
\d
+$/
if
(
value
&&
!
(
regex
.
test
(
value
)
&&
Number
(
value
)
>=
0
&&
Number
(
value
)
<=
50
))
{
res
=
false
}
return
res
},
message
:
`请输入0到50之间的整数`
}
],
nowExerciseMinute
:
[
{
required
:
true
,
message
:
'请输入'
},
{
validator
:
(
value
,
rule
)
=>
{
let
res
=
true
const
regex
=
/^
\d
+$/
if
(
value
&&
!
(
regex
.
test
(
value
)
&&
Number
(
value
)
>=
0
&&
Number
(
value
)
<=
500
))
{
res
=
false
}
return
res
},
message
:
`请输入0到500之间的整数`
}
],
targetExerciseWeek
:
[
{
required
:
true
,
message
:
'请输入'
},
{
validator
:
(
value
,
rule
)
=>
{
let
res
=
true
const
regex
=
/^
\d
+$/
if
(
value
&&
!
(
regex
.
test
(
value
)
&&
Number
(
value
)
>=
0
&&
Number
(
value
)
<=
50
))
{
res
=
false
}
return
res
},
message
:
`请输入0到50之间的整数`
}
],
targetExerciseMinute
:
[
{
required
:
true
,
message
:
'请输入'
},
{
validator
:
(
value
,
rule
)
=>
{
let
res
=
true
const
regex
=
/^
\d
+$/
if
(
value
&&
!
(
regex
.
test
(
value
)
&&
Number
(
value
)
>=
0
&&
Number
(
value
)
<=
500
))
{
res
=
false
}
return
res
},
message
:
`请输入0到500之间的整数`
}
],
staplFood
:
[
{
required
:
true
,
message
:
'请输入'
},
{
validator
:
(
value
,
rule
)
=>
{
let
res
=
true
const
regex
=
/^
\d
+$/
if
(
value
&&
!
(
regex
.
test
(
value
)
&&
Number
(
value
)
>=
0
&&
Number
(
value
)
<=
5000
))
{
res
=
false
}
return
res
},
message
:
`请输入0到5000之间的整数`
}
],
targetStaplFood
:
[
{
required
:
true
,
message
:
'请输入'
},
{
validator
:
(
value
,
rule
)
=>
{
let
res
=
true
const
regex
=
/^
\d
+$/
if
(
value
&&
!
(
regex
.
test
(
value
)
&&
Number
(
value
)
>=
0
&&
Number
(
value
)
<=
5000
))
{
res
=
false
}
return
res
},
message
:
`请输入0到5000之间的整数`
}
],
psychologicalRecovery
:
[
{
required
:
true
,
message
:
'请选择'
}
],
doctorAdvice
:
[
{
required
:
true
,
message
:
'请选择'
}
],
medicationCompliance
:
[
{
required
:
true
,
message
:
'请选择'
}
],
drugsAdverse
:
[
{
required
:
true
,
message
:
'请选择'
}
],
glycopeniaReaction
:
[
{
required
:
true
,
message
:
'请选择'
}
],
visitType
:
[
{
required
:
true
,
message
:
'请选择'
}
],
currentDiagnosisName
:
[
{
required
:
true
,
message
:
'请选择'
}
],
isReferral
:
[
{
required
:
true
,
message
:
'请选择'
}
],
nextVisitDate
:
[
{
required
:
true
,
message
:
'请选择'
}
]
},
showVisitWay
:
false
,
showSymptom
:
false
,
showSignArteryPulsation
:
false
,
showCurrentDiagnosis
:
false
,
showReferralUnit
:
false
,
showReferralOffice
:
false
showReferralOffice
:
false
,
showNextVisitDate
:
false
,
nextVisitDateRange
:
{
min
:
undefined
,
max
:
undefined
},
showVisitDate
:
false
,
visitDateRange
:
{
min
:
undefined
,
max
:
undefined
},
showVisitUnit
:
false
,
showVisitOffice
:
false
,
showVisitDoctor
:
false
}
},
methods
:
{
checkboxReject
,
calculateBMI
,
visitWayChange
()
{
this
.
store
.
getDict
(
'CP00052'
).
forEach
(
item
=>
{
if
(
item
.
value
===
this
.
form
.
visitWay
)
{
...
...
@@ -875,6 +1291,46 @@ export default {
referralOfficeChange
(
option
=
{})
{
this
.
form
.
referralOfficeName
=
option
.
officeName
},
nextVisitDateConfirm
({
selectedValues
})
{
this
.
form
.
nextVisitDate
=
selectedValues
.
join
(
'-'
)
this
.
showNextVisitDate
=
false
},
visitDateConfirm
({
selectedValues
})
{
this
.
form
.
visitDate
=
selectedValues
.
join
(
'-'
)
this
.
showVisitDate
=
false
},
visitUnitChange
(
option
=
{})
{
this
.
form
.
visitUnitName
=
option
.
unitName
},
visitOfficeChange
(
option
=
{})
{
this
.
form
.
visitOfficeName
=
option
.
officeName
},
submit
()
{
return
new
Promise
((
resolve
,
reject
)
=>
{
this
.
$refs
.
form
.
validate
().
then
(()
=>
{
const
form
=
fetchDataHandle
(
this
.
form
,
{
symptom
:
'arrToStr'
,
currentDiagnosis
:
'arrToStr'
})
resolve
(
form
)
}).
catch
(
e
=>
{
})
})
}
},
watch
:
{
'form.signHeight'
:
{
handler
()
{
this
.
form
.
signBmi
=
this
.
calculateBMI
(
this
.
form
.
signHeight
,
this
.
form
.
signWeight
)
}
},
'form.signWeight'
:
{
handler
()
{
this
.
form
.
signBmi
=
this
.
calculateBMI
(
this
.
form
.
signHeight
,
this
.
form
.
signWeight
)
}
},
}
}
</
script
>
...
...
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