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
d252294c
Commit
d252294c
authored
May 22, 2025
by
gengchunlei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
医生端 v1.2 1、工作台 慢特病季度随访
2、个人详情慢特病随访 3、慢特病表单及详情
parent
da4f6ce2
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
1665 additions
and
6 deletions
+1665
-6
slowSpecial.js
src/api/doctor/slowSpecial.js
+39
-0
Doctor.vue
src/doctor/Doctor.vue
+1
-1
Detail.vue
src/doctor/followUp/slowSpecialFU/detail/Detail.vue
+320
-0
DoctorInfo.vue
src/doctor/followUp/slowSpecialFU/form/DoctorInfo.vue
+164
-0
FormCont.vue
src/doctor/followUp/slowSpecialFU/form/FormCont.vue
+511
-0
Index.vue
src/doctor/followUp/slowSpecialFU/form/Index.vue
+148
-0
PatientDetail.vue
src/doctor/patientDetail/PatientDetail.vue
+20
-3
List.vue
...doctor/patientDetail/components/slowSpecialVisit/List.vue
+161
-0
Workbench.vue
src/doctor/workbench/Workbench.vue
+5
-2
SlowSeason.vue
src/doctor/workbench/tables/SlowSeason.vue
+285
-0
index.js
src/router/index.js
+11
-0
No files found.
src/api/doctor/slowSpecial.js
0 → 100644
View file @
d252294c
import
{
fetchBase
}
from
'@/api/doctor/doctorFetch'
// 主键查询
export
function
fetchSlowSpecialById
(
params
)
{
return
fetchBase
({
url
:
`/chronic-admin/v1/chronic-visit-special-diseases/record`
,
body
:
params
,
loading
:
true
})
}
// 新增慢特病随访
export
function
addSlowSpecial
(
params
)
{
return
fetchBase
({
url
:
`/chronic-admin/v1/chronic-visit-special-diseases/save`
,
body
:
params
,
loading
:
true
})
}
//修改慢特病随访
export
function
updateSlowSpecial
(
params
)
{
return
fetchBase
({
url
:
`/chronic-admin/v1/chronic-visit-special-diseases/update`
,
body
:
params
,
loading
:
true
})
}
// 列表查询
export
function
fetchSlowSpecialList
(
params
)
{
return
fetchBase
({
url
:
`/chronic-admin/v1/chronic-visit-special-diseases/record-list`
,
body
:
params
,
loading
:
true
})
}
//删除慢特病随访
export
function
delSlowSpecialById
(
params
)
{
return
fetchBase
({
url
:
`/chronic-admin/v1/chronic-visit-special-diseases/delete`
,
body
:
params
,
loading
:
true
})
}
// 慢特病季度随访分页查询
export
function
fetchSlowSeasonList
(
params
)
{
return
fetchBase
({
url
:
`/chronic-admin/v1/chronic-special-pending-visit/page`
,
body
:
params
,
loading
:
true
})
}
//慢特病季度随访修改
export
function
updateSlowSeason
(
params
)
{
return
fetchBase
({
url
:
`/chronic-admin/v1/chronic-special-pending-visit/update`
,
body
:
params
,
loading
:
true
})
}
\ No newline at end of file
src/doctor/Doctor.vue
View file @
d252294c
...
...
@@ -66,7 +66,7 @@ export default {
if
(
!
token
)
{
token
=
sessionStorage
.
getItem
(
'token'
)
if
(
process
.
env
.
NODE_ENV
!==
'production'
)
{
token
=
'
d0aa6147-b760-42b5-8871-91db55687b99
'
token
=
'
c7bd708b-d0a2-467d-a506-91544d5186fc
'
}
}
if
(
token
)
{
...
...
src/doctor/followUp/slowSpecialFU/detail/Detail.vue
0 → 100644
View file @
d252294c
<!--通用随访详情-->
<
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=
'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.medicalDirectoryCode || '-' }}
</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.visitWayName || '-' }}
</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.isConditionStableName || '-' }}
</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.isMedicationName || '-' }}
</span>
</span>
</div>
<div
class=
'flex justify-between py-1 border-bottom item'
v-if=
'info.isMedication == 1'
>
<span
class=
'shrink-0 mr-2 label'
>
是否有县域外购药情况
</span>
<span
class=
'text-end'
>
<span>
{{ info.isPurchaseMedicineAbroadName || '-' }}
</span>
</span>
</div>
<div
class=
'flex justify-between py-1 border-bottom item'
v-if=
' info.isMedication == 1 && info.isPurchaseMedicineAbroad == 1'
>
<span
class=
'shrink-0 mr-2 label'
>
购药途径
</span>
<span
class=
'text-end'
>
<span>
{{ info.waysPurchasingMedicineName || '-' }}
</span>
</span>
</div>
<div
class=
' py-1 border-bottom item'
v-if=
' info.isMedication == 1 && info.isPurchaseMedicineAbroad == 1'
>
<div
class=
'shrink-0 mr-2 label'
>
药物名称
</div>
<div
class=
'flex flex-wrap items-center gap-x-2.5 gap-y-2.5 mt-2'
>
<div
style=
'background: #FAFAFA;padding: 5px'
v-for=
'item in info.drugList'
>
{{ item.diseaseName || '-' }}
</div>
</div>
</div>
</div>
</van-collapse-item>
<van-collapse-item
key=
'3'
title=
'随访机构'
name=
'3'
>
<
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
{
fetchCurrencyById
,
messageResend
}
from
'@/api/doctor/generalFU'
import
{
fetchSlowSpecialById
}
from
'@/api/doctor/slowSpecial'
export
default
{
name
:
'SlowSpecialFUDetail'
,
data
()
{
return
{
activeCollapse
:
[],
detailInfo
:
{
publicizeType
:
[],
visitWayRules
:
[]
},
collapseList
:
[
{
title
:
'居民信息'
,
name
:
'1'
},
{
title
:
'随访信息'
,
name
:
'2'
},
{
title
:
'随访机构'
,
name
:
'3'
}
],
// 全部展开、收起
collapseAll
:
false
,
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
:
'visitUnitName'
},
{
title
:
'随访科室'
,
key
:
'visitOfficeName'
},
{
title
:
'随访医生'
,
key
:
'visitDoctorName'
}
],
// 控制音频同一时间只播放一个
activeMediaUrl
:
''
,
hideActiveMediaUrl
:
''
}
},
computed
:
{
id
()
{
return
this
.
$route
.
query
.
id
},
residentInfo
()
{
return
this
.
info
.
residentsRecord
||
{}
}
},
created
()
{
document
.
title
=
'慢特病随访详情'
this
.
load
()
},
methods
:
{
async
load
()
{
if
(
!
this
.
id
)
{
this
.
$message
.
info
(
'未获取到信息'
)
return
}
let
par
=
{
id
:
this
.
id
}
fetchSlowSpecialById
(
par
).
then
(
res
=>
{
let
result
=
res
.
data
||
{}
this
.
info
=
result
if
(
result
.
drugName
)
{
let
list
=
[]
result
.
drugName
.
split
(
','
).
forEach
(
item
=>
{
let
obj
=
{
diseaseName
:
item
}
list
.
push
(
obj
)
})
this
.
info
.
drugList
=
list
}
}).
finally
(()
=>
{
})
},
//重新发送
toReSend
()
{
let
par
=
{
id
:
this
.
id
}
messageResend
(
par
).
then
(()
=>
{
this
.
load
()
})
},
// 折叠面板切换
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
},
onBack
()
{
this
.
$router
.
back
()
}
}
}
</
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;
}
}
.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 {
.label {
min-width: 5em;
}
}
.card {
background-color: #F8FAFC;
padding: 4px 10px;
border-radius: 4px;
color: #4D5665;
}
</
style
>
src/doctor/followUp/slowSpecialFU/form/DoctorInfo.vue
0 → 100644
View file @
d252294c
<
template
>
<div
class=
"doctor-info"
>
<div
class=
"doc-form-label"
required
>
随访单位
</div>
<van-field
is-link
v-model=
'form.visitUnitName'
readonly
placeholder=
'请选择'
name=
"visitUnitId"
@
click=
"showUnit = true"
:rules=
"[
{ required: true, message: '请选择' }]"
/>
<DocUnit
v-model:show=
"showUnit"
v-model:value=
"form.visitUnitId"
:valueName=
"form?.visitUnitName"
@
change=
"unitChange"
/>
<div
class=
"doc-form-label"
required
>
随访科室
</div>
<van-field
is-link
v-model=
'form.visitOfficeName'
readonly
placeholder=
'请选择'
name=
"visitOfficeId"
@
click=
"showOffice = true"
:rules=
"[
{ required: true, message: '请选择' }]"
/>
<DocOffice
v-model:show=
"showOffice"
v-model:value=
"form.visitOfficeId"
:unitId=
"form.visitUnitId"
@
change=
"officeChange"
/>
<div
class=
"doc-form-label"
required
>
随访医生
</div>
<van-field
is-link
v-model=
'form.visitDoctorName'
readonly
placeholder=
'请选择'
name=
"visitDoctorId"
@
click=
"showDoctor = true"
:rules=
"[
{ required: true, message: '请选择' }]"
/>
<DocOfficeDoctor
v-model:show=
"showDoctor"
:allowClear=
"false"
v-model:value=
"form.visitDoctorId"
:unitId=
"form.visitUnitId"
:officeId=
"form.visitOfficeId"
@
change=
"(option) =>
{ form.visitDoctorName = 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
,
// 随访单位
visitUnitId
:
undefined
,
visitUnitName
:
undefined
,
// 随访科室
visitOfficeId
:
undefined
,
visitOfficeName
:
undefined
,
// 随访医生
visitDoctorId
:
undefined
,
visitDoctorName
:
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
.
visitUnitId
=
this
.
authInfo
.
unitId
this
.
form
.
visitUnitName
=
this
.
authInfo
.
unitName
// 随访科室
this
.
form
.
visitOfficeId
=
this
.
authInfo
.
officeId
this
.
form
.
visitOfficeName
=
this
.
authInfo
.
officeName
// 随访医生
this
.
form
.
visitDoctorId
=
this
.
authInfo
.
relationId
this
.
form
.
visitDoctorName
=
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
.
visitUnitName
=
option
.
unitName
this
.
form
.
visitDoctorId
=
undefined
this
.
form
.
visitDoctorName
=
undefined
this
.
form
.
visitOfficeId
=
undefined
this
.
form
.
visitOfficeName
=
undefined
},
officeChange
(
option
=
{})
{
this
.
form
.
visitOfficeName
=
option
.
officeName
this
.
form
.
visitDoctorId
=
undefined
this
.
form
.
visitDoctorName
=
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/followUp/slowSpecialFU/form/FormCont.vue
0 → 100644
View file @
d252294c
<
template
>
<div
class=
'slow-special-cont'
>
<van-form
ref=
'form'
class=
'doc-form'
>
<div
class=
'font-semibold'
>
随访信息
</div>
<div
class=
'doc-form-label'
>
医保目录代码
</div>
<van-field
:modelValue=
'form.medicalDirectoryCode'
name=
'currentAge'
type=
'digit'
placeholder=
'请输入医保目录代码'
readonly
>
</van-field>
<div
class=
'label-title mt-5'
>
随访方式
</div>
<van-field
v-model=
'form.visitWayName'
readonly
is-link
placeholder=
'请选择'
class=
'input-back mt-2 form-input'
@
click=
'showVisitWay = true'
:rules=
'rules.visitWayName'
>
<template
#
input
>
<span
class=
'text-end'
v-if=
'form.visitWayName'
>
{{
form
.
visitWayName
}}
</span>
<span
class=
'text-end'
v-if=
'!form.visitWayName'
style=
'color: #dfdfe1'
>
请选择
</span>
</
template
>
</van-field>
<van-popup
v-model:show=
'showVisitWay'
position=
'bottom'
class=
'min-h'
>
<div
class=
'p-4'
style=
'height: 100%'
>
<div
class=
'flex justify-between items-center mb-4 pop-title'
>
<div
class=
'greyColor'
@
click=
'showVisitWay = false'
style=
'font-weight: 400'
>
取消
</div>
<div>
随访方式(仅单选)
</div>
<div></div>
</div>
<div
style=
'height: 80%;overflow: auto'
>
<CheckBtn
clearable
column-2
:options=
"store.getDict('CP00197')"
v-model:value=
'form.visitWay'
:fieldNames=
"{text: 'name', value: 'value'}"
@
change=
'visitWayConfirm'
/>
</div>
</div>
</van-popup>
<div
class=
'label-title mt-5'
>
病情是否稳定
</div>
<van-field
v-model=
'form.isConditionStableName'
readonly
is-link
placeholder=
'请选择'
class=
'input-back mt-2 form-input'
@
click=
'showIsConditionStable = true'
:rules=
'rules.isConditionStableName'
>
<
template
#
input
>
<span
class=
'text-end'
v-if=
'form.isConditionStableName'
>
{{
form
.
isConditionStableName
}}
</span>
<span
class=
'text-end'
v-if=
'!form.isConditionStableName'
style=
'color: #dfdfe1'
>
请选择
</span>
</
template
>
</van-field>
<van-popup
v-model:show=
'showIsConditionStable'
position=
'bottom'
class=
'min-h'
>
<div
class=
'p-4'
style=
'height: 100%'
>
<div
class=
'flex justify-between items-center mb-4 pop-title'
>
<div
class=
'greyColor'
@
click=
'showIsConditionStable = false'
style=
'font-weight: 400'
>
取消
</div>
<div>
病情是否稳定(仅单选)
</div>
<div></div>
</div>
<div
style=
'height: 80%;overflow: auto'
>
<CheckBtn
clearable
column-2
:options=
"store.getDict('CP00120')"
v-model:value=
'form.isConditionStable'
:fieldNames=
"{text: 'name', value: 'value'}"
@
change=
'isConditionStableConfirm'
/>
</div>
</div>
</van-popup>
<div
class=
'label-title mt-5'
>
当前是否用药
</div>
<van-field
v-model=
'form.isMedicationName'
readonly
is-link
placeholder=
'请选择'
class=
'input-back mt-2 form-input'
@
click=
'showIsMedication = true'
:rules=
'rules.isMedicationName'
>
<
template
#
input
>
<span
class=
'text-end'
v-if=
'form.isMedicationName'
>
{{
form
.
isMedicationName
}}
</span>
<span
class=
'text-end'
v-if=
'!form.isMedicationName'
style=
'color: #dfdfe1'
>
请选择
</span>
</
template
>
</van-field>
<van-popup
v-model:show=
'showIsMedication'
position=
'bottom'
class=
'min-h'
>
<div
class=
'p-4'
style=
'height: 100%'
>
<div
class=
'flex justify-between items-center mb-4 pop-title'
>
<div
class=
'greyColor'
@
click=
'showIsMedication = false'
style=
'font-weight: 400'
>
取消
</div>
<div>
当前是否用药(仅单选)
</div>
<div></div>
</div>
<div
style=
'height: 80%;overflow: auto'
>
<CheckBtn
clearable
column-2
:options=
"store.getDict('CP00120')"
v-model:value=
'form.isMedication'
:fieldNames=
"{text: 'name', value: 'value'}"
@
change=
'isMedicationConfirm'
/>
</div>
</div>
</van-popup>
<div
v-if=
'form.isMedication == 1'
>
<div
class=
'no-req-label mt-5'
>
是否有县域外购药情况
</div>
<van-field
v-model=
'form.isPurchaseMedicineAbroadName'
readonly
is-link
placeholder=
'请选择'
class=
'input-back mt-2 form-input'
@
click=
'showIsPurchaseMedicineAbroad = true'
:rules=
'rules.isPurchaseMedicineAbroadName'
>
<
template
#
input
>
<span
class=
'text-end'
v-if=
'form.isPurchaseMedicineAbroadName'
>
{{
form
.
isPurchaseMedicineAbroadName
}}
</span>
<span
class=
'text-end'
v-if=
'!form.isPurchaseMedicineAbroadName'
style=
'color: #dfdfe1'
>
请选择
</span>
</
template
>
</van-field>
<van-popup
v-model:show=
'showIsPurchaseMedicineAbroad'
position=
'bottom'
class=
'min-h'
>
<div
class=
'p-4'
style=
'height: 100%'
>
<div
class=
'flex justify-between items-center mb-4 pop-title'
>
<div
class=
'greyColor'
@
click=
'showIsPurchaseMedicineAbroad = false'
style=
'font-weight: 400'
>
取消
</div>
<div>
是否有县域外购药情况(仅单选)
</div>
<div></div>
</div>
<div
style=
'height: 80%;overflow: auto'
>
<CheckBtn
clearable
column-2
:options=
"store.getDict('CP00120')"
v-model:value=
'form.isPurchaseMedicineAbroad'
:fieldNames=
"{text: 'name', value: 'value'}"
@
change=
'isPurchaseMedicineAbroadConfirm'
/>
</div>
</div>
</van-popup>
</div>
<div
v-if=
' form.isMedication == 1 && form.isPurchaseMedicineAbroad == 1'
>
<div
class=
'no-req-label mt-5'
>
购药途径
</div>
<van-field
v-model=
'form.waysPurchasingMedicineName'
readonly
is-link
placeholder=
'请选择'
class=
'input-back mt-2 form-input'
@
click=
'showWaysPurchasingMedicine = true'
:rules=
'rules.waysPurchasingMedicineName'
>
<
template
#
input
>
<span
class=
'text-end'
v-if=
'form.waysPurchasingMedicineName'
>
{{
form
.
waysPurchasingMedicineName
}}
</span>
<span
class=
'text-end'
v-if=
'!form.waysPurchasingMedicineName'
style=
'color: #dfdfe1'
>
请选择
</span>
</
template
>
</van-field>
<van-popup
v-model:show=
'showWaysPurchasingMedicine'
position=
'bottom'
class=
'min-h'
>
<div
class=
'p-4'
style=
'height: 100%'
>
<div
class=
'flex justify-between items-center mb-4 pop-title'
>
<div
class=
'greyColor'
@
click=
'showWaysPurchasingMedicine = false'
style=
'font-weight: 400'
>
取消
</div>
<div>
购药途径(仅单选)
</div>
<div></div>
</div>
<div
style=
'height: 80%;overflow: auto'
>
<CheckBtn
clearable
column-3
:options=
"store.getDict('CP00198')"
v-model:value=
'form.waysPurchasingMedicine'
:fieldNames=
"{text: 'name', value: 'value'}"
@
change=
'waysPurchasingMedicineConfirm'
/>
</div>
</div>
</van-popup>
</div>
<div
v-if=
' form.isMedication == 1 && form.isPurchaseMedicineAbroad == 1'
class=
'health mt-2'
>
<div
class=
'health-cell mt-2'
>
<div
class=
'no-req-label mb-2'
>
药品列表
</div>
<div
v-for=
'(item, index) in form.drugList'
:key=
'item._id'
:style=
"{marginTop: index == 0 ? '0': '.16rem'}"
>
<div
class=
'text-driver'
v-if=
'index'
></div>
<div
class=
'mt-4'
></div>
<van-field
v-model=
'item.diseaseName'
placeholder=
'请输入'
label=
'药品名称:'
class=
'input-back form-input'
style=
'flex: 1'
:rules=
'rules.diseaseName'
/>
<div
class=
'mt-2 text-center'
>
<van-button
type=
'primary'
plain
class=
'btn-br'
@
click=
'plusDiagnosis'
>
增加
</van-button>
<van-button
plain
class=
'btn-br'
@
click=
'onDel(item, index)'
v-if=
'form?.drugList?.length > 1'
style=
'margin-left: .16rem'
>
删除
</van-button>
</div>
</div>
</div>
</div>
<div
class=
'doc-form-label'
required
>
随访日期
</div>
<van-field
v-model=
'form.visitDate'
is-link
readonly
name=
'visitDate'
placeholder=
'请选择'
@
click=
'showVisitDate = true'
:rules=
'rules.visitDate'
/>
<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>
<DoctorInfo
:info=
'info'
ref=
'DoctorInfo'
/>
</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
,
medicalDirectoryCode
:
undefined
,
visitWay
:
undefined
,
visitWayName
:
undefined
,
isConditionStable
:
undefined
,
isConditionStableName
:
undefined
,
isMedication
:
undefined
,
isMedicationName
:
undefined
,
isPurchaseMedicineAbroad
:
undefined
,
isPurchaseMedicineAbroadName
:
undefined
,
waysPurchasingMedicine
:
undefined
,
waysPurchasingMedicineName
:
undefined
,
drugList
:
[],
drugName
:
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
:
{
visitWayName
:
[{
required
:
true
,
message
:
'请选择'
}],
isConditionStableName
:
[{
required
:
true
,
message
:
'请选择'
}],
isMedicationName
:
[{
required
:
true
,
message
:
'请选择'
}],
},
// 随访方式
showVisitWay
:
false
,
//病情是否稳定
showIsConditionStable
:
false
,
//当前是否用药
showIsMedication
:
false
,
//是否有县域外购药情况
showIsPurchaseMedicineAbroad
:
false
,
//购药途径
showWaysPurchasingMedicine
:
false
,
// 随访日期
showVisitDate
:
false
,
// 随访日期可选范围
visitDateRange
:
{
min
:
undefined
,
max
:
undefined
},
store
:
useStore
()
}
},
created
()
{
this
.
init
()
},
methods
:
{
init
()
{
const
date
=
dayjs
()
this
.
form
.
visitDate
=
date
.
format
(
'YYYY-MM-DD'
)
this
.
form
.
_visitDate
=
[
date
.
year
(),
date
.
month
()
+
1
,
date
.
date
()]
this
.
visitDateRange
.
max
=
new
Date
(
date
.
year
(),
date
.
month
(),
date
.
date
())
this
.
visitDateRange
.
min
=
new
Date
(
date
.
year
()
-
20
,
date
.
month
(),
date
.
date
())
},
async
submit
()
{
try
{
await
this
.
$refs
.
form
.
validate
()
let
drugName
=
''
let
list
=
[]
if
(
this
.
form
.
isMedication
==
1
&&
this
.
form
.
isPurchaseMedicineAbroad
==
1
)
{
this
.
form
.
drugList
.
forEach
(
item
=>
{
list
.
push
(
item
.
diseaseName
)
})
drugName
=
list
.
join
()
}
const
result
=
{
...
this
.
form
,
drugName
,
...
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
)
}
}
},
//随访方式
visitWayConfirm
()
{
this
.
store
.
getDict
(
'CP00197'
).
forEach
(
item
=>
{
if
(
item
.
value
==
this
.
form
.
visitWay
)
{
this
.
form
.
visitWayName
=
item
.
name
}
})
this
.
showVisitWay
=
false
},
//病情是否稳定
isConditionStableConfirm
()
{
this
.
store
.
getDict
(
'CP00120'
).
forEach
(
item
=>
{
if
(
item
.
value
==
this
.
form
.
isConditionStable
)
{
this
.
form
.
isConditionStableName
=
item
.
name
}
})
this
.
showIsConditionStable
=
false
},
//当前是否用药
isMedicationConfirm
()
{
this
.
store
.
getDict
(
'CP00120'
).
forEach
(
item
=>
{
if
(
item
.
value
==
this
.
form
.
isMedication
)
{
this
.
form
.
isMedicationName
=
item
.
name
}
})
this
.
showIsMedication
=
false
},
//是否有县域外购药情况
isPurchaseMedicineAbroadConfirm
()
{
this
.
store
.
getDict
(
'CP00120'
).
forEach
(
item
=>
{
if
(
item
.
value
==
this
.
form
.
isPurchaseMedicineAbroad
)
{
this
.
form
.
isPurchaseMedicineAbroadName
=
item
.
name
}
})
this
.
showIsPurchaseMedicineAbroad
=
false
},
//购药途径
waysPurchasingMedicineConfirm
()
{
this
.
store
.
getDict
(
'CP00198'
).
forEach
(
item
=>
{
if
(
item
.
value
==
this
.
form
.
waysPurchasingMedicine
)
{
this
.
form
.
waysPurchasingMedicineName
=
item
.
name
}
})
this
.
showWaysPurchasingMedicine
=
false
},
// 筛查日期
visitDateConfirm
({
selectedValues
})
{
this
.
form
.
visitDate
=
selectedValues
.
join
(
'-'
)
this
.
showVisitDate
=
false
},
plusDiagnosis
()
{
if
(
this
.
form
.
drugList
)
{
this
.
form
.
drugList
.
push
({})
}
else
{
this
.
form
.
drugList
=
[]
this
.
form
.
drugList
.
push
({})
}
},
onDel
(
index
)
{
this
.
form
.
drugList
.
splice
(
index
,
1
)
},
},
watch
:
{
info
:
{
handler
(
info
)
{
this
.
form
=
defaultForm
(
info
)
this
.
form
.
medicalDirectoryCode
=
this
.
info
.
medicalInsuranceCode
if
(
this
.
form
.
drugName
)
{
let
list
=
[]
this
.
form
.
drugName
.
split
(
","
).
forEach
(
item
=>
{
let
obj
=
{
diseaseName
:
item
}
list
.
push
(
obj
)
})
this
.
form
.
drugList
=
list
}
if
(
!
this
.
form
.
drugList
.
length
)
{
this
.
form
.
drugList
=
[{
diseaseName
:
null
,
}]
}
},
immediate
:
true
}
}
}
</
script
>
<
style
lang=
'less'
scoped
>
.min-h {
min-height: 25%;
}
.health {
padding: 1px 8px 8px 8px;
background: #FAFAFA;
border-radius: 8px;
.health-cell {
padding: 8px;
background: #FFFFFF;
border-radius: 8px;
}
}
.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;
}
.text-driver {
border: 1px solid #EEEEEE;
margin-bottom: 8px;
margin-top: 8px;
}
.btn-br {
border-radius: 38px;
width: 112px;
padding: 4px 8px;
height: 26px;
font-size: 13px;
}
.form-input {
padding: 8px 12px;
border-radius: 8px;
}
.input-back {
background: #FAFAFA;
}
</
style
>
src/doctor/followUp/slowSpecialFU/form/Index.vue
0 → 100644
View file @
d252294c
<
template
>
<div
class=
"h-full flex flex-col screening-first"
>
<DocNavBar
:title=
"`$
{id ? '修改' : '新增'}慢特病随访`" class="shrink-0"
:backFunc="onBack" >
</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=
"slowSpecialInfo"
v-else-if=
"step == 2"
ref=
"FormCont"
/>
</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
{
getChronicResidentsId
}
from
'@/api/doctor/generalFU'
import
{
fetchDataHandle
}
from
'@/utils/common.js'
import
{
useStore
}
from
'@/doctor/store'
import
{
addSlowSpecial
,
fetchSlowSpecialById
,
updateSlowSpecial
}
from
'@/api/doctor/slowSpecial'
export
default
{
components
:
{
DocNavBar
,
archiveCommon
,
FormCont
,
},
data
()
{
return
{
store
:
useStore
(),
step
:
1
,
// 患者基础信息
baseInfo
:
{},
// 慢特病信息
slowSpecialInfo
:
{},
// 结果
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
fetchSlowSpecialById
({
id
:
this
.
id
})
const
result
=
res
.
data
||
{}
this
.
slowSpecialInfo
=
result
this
.
baseInfo
=
this
.
slowSpecialInfo
.
residentsRecord
}
else
{
if
(
this
.
residentInfoId
)
{
debugger
let
res
=
await
getChronicResidentsId
(
this
.
residentInfoId
)
this
.
baseInfo
=
res
.
data
||
{}
this
.
slowSpecialInfo
.
residentInfoId
=
this
.
residentInfoId
this
.
slowSpecialInfo
.
medicalInsuranceCode
=
res
.
data
.
medicalInsuranceCode
}
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
,
{
})
query
.
residentsRecord
=
this
.
baseInfo
const
func
=
query
.
id
?
updateSlowSpecial
:
addSlowSpecial
func
(
query
).
then
(
res
=>
{
this
.
resultInfo
=
query
this
.
store
.
onRefreshMark
()
this
.
$router
.
replace
({
path
:
'/doctor/patient-detail'
,
query
:
{
residentInfoId
:
this
.
residentInfoId
}
})
})
})
}
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/patientDetail/PatientDetail.vue
View file @
d252294c
...
...
@@ -31,6 +31,11 @@
<span
class=
'label'
>
联系电话
</span>
<span>
{{ $phoneHide(residentInfo.telephone) || '-' }}
</span>
</div>
<div>
<span
class=
'label-slow'
>
医保是否办理慢特病
</span>
<span
v-if=
"residentInfo.chronicDiseases == 1"
>
是
</span>
<span
v-else
>
-
</span>
</div>
<!-- <div>
<span class="label">人群分类</span>
<span>{{ residentInfo.chronicCrowdName || '-' }}</span>
...
...
@@ -70,8 +75,10 @@
<GeneralList
v-else-if=
"activeTabItem.id === 'CURRENCY'"
/>
<ReferralList
v-else-if=
"activeTabItem.id === 'REFERRAL'"
/>
<ConsultationList
v-else-if=
"activeTabItem.id === 'CONSULTATION'"
/>
<SlowSpecialVisitList
v-else-if=
"activeTabItem.id === 'SLOWSPECIALVISIT'"
></SlowSpecialVisitList>
<DiseaseList
v-else
:key=
'activeTabItem.value'
:diseaseName=
'activeTabItem.name'
:diseaseType=
'activeTabItem.value'
/>
</div>
<van-popup
v-model:show=
'addVisible'
...
...
@@ -107,13 +114,14 @@ import GeneralList from './components/generalFU/List.vue'
import
ReferralList
from
'./components/referral/List.vue'
import
ConsultationList
from
'./components/consultation/List.vue'
import
DiseaseList
from
'./components/disease/Index.vue'
import
{
deleteFirstScreening
}
from
'@/api/doctor/screening'
import
{
saveResidentsDeath
}
from
'@/api/doctor/death'
import
SlowSpecialVisitList
from
'@/doctor/patientDetail/components/slowSpecialVisit/List'
export
default
{
name
:
'PatientDetail'
,
components
:
{
SlowSpecialVisitList
,
DocNavBar
,
ChronicTag
,
ScreeningList
,
...
...
@@ -144,7 +152,8 @@ export default {
{
name
:
'新增通用随访'
,
value
:
4
,
path
:
'/doctor/followUp/generalFU/add'
},
{
name
:
'新增死亡记录'
,
value
:
5
,
path
:
'/doctor/deathRecord/add'
},
// { name: '新增死亡记录详情', value: 6, path: '/doctor/deathRecord/detail' },
{
name
:
'新增专病随访'
,
value
:
7
,
path
:
'/doctor/followUp/separateFU/add'
}
{
name
:
'新增专病随访'
,
value
:
7
,
path
:
'/doctor/followUp/separateFU/add'
},
{
name
:
'新增慢特病随访'
,
value
:
8
,
path
:
'/doctor/followUp/slowSpecialFU/add'
}
]
}
},
...
...
@@ -173,7 +182,9 @@ export default {
const
result
=
[
{
name
:
'筛查管理'
,
id
:
'SCREENING'
},
...
this
.
diagnoseList
,
{
name
:
'通用随访'
,
id
:
'CURRENCY'
}
{
name
:
'通用随访'
,
id
:
'CURRENCY'
},
{
name
:
'慢特病随访'
,
id
:
'SLOWSPECIALVISIT'
},
// { name: '转诊记录', id: 'REFERRAL' },
// { name: '会诊记录', id: 'CONSULTATION' }
]
...
...
@@ -367,4 +378,10 @@ export default {
bottom: 22px;
}
}
.label-slow {
display: inline-block;
color: #8C8C8C;
min-width: 150px;
}
</
style
>
src/doctor/patientDetail/components/slowSpecialVisit/List.vue
0 → 100644
View file @
d252294c
<
template
>
<!-- 慢特病随访-->
<div
class=
"h-full overflow-y-auto general-list"
ref=
'list'
>
<van-pull-refresh
v-model=
'loadingRefresh'
@
refresh=
'onRefresh'
:disabled=
'isRefreshDisable'
style=
"min-height: 100%"
>
<van-list
v-model:loading=
'loading'
:finished=
'finished'
:finished-text=
"list.length ? '没有更多了' : ''"
:immediate-check=
'false'
@
load=
'onMore'
>
<div
class=
"flex flex-col"
>
<div
v-for=
'item in list'
:key=
"item.id"
@
click=
"toDetail(item)"
class=
"flex flex-col py-3 px-4 mb-3 doc-list-card"
style=
"row-gap: .04rem;line-height: 1.5;"
>
<div>
<span
class=
"label"
>
随访日期
</span>
<span>
{{
item
.
visitDate
}}
</span>
</div>
<div
class=
"flex"
>
<span
class=
"label shrink-0"
>
医保目录代码
</span>
<span
class=
"grow text-wrap"
>
{{
item
.
medicalDirectoryCode
||
'-'
}}
</span>
</div>
<div>
<span
class=
"label"
>
随访方式
</span>
<span>
{{
item
.
visitWayName
||
'-'
}}
</span>
</div>
<div>
<span
class=
"label"
>
是否县城外购药
</span>
<span>
{{
item
.
isPurchaseMedicineAbroadName
||
'-'
}}
</span>
</div>
<div>
<span
class=
"label"
>
随访医生
</span>
<span>
{{
item
.
visitDoctorName
||
'-'
}}
</span>
</div>
<div>
<span
class=
"label"
>
随访科室
</span>
<span>
{{
item
.
visitOfficeName
||
'-'
}}
</span>
</div>
<div
class=
"text-ellipsis"
>
<span
class=
"label"
>
随访单位
</span>
<span>
{{
item
.
visitUnitName
||
'-'
}}
</span>
</div>
<div
class=
"divider"
></div>
<div
class=
"bt-group"
>
<van-button
round
size=
"small"
class=
"doc-btn-primary"
@
click=
"toDetail(item)"
>
详情
</van-button>
<van-button
round
size=
"small"
class=
"doc-btn-primary"
@
click=
"editBtn(item)"
v-if=
"item.allowUpdate == 1"
>
修改
</van-button>
<van-button
round
size=
"small"
class=
"doc-btn-red"
@
click=
"delBtn(item)"
v-if=
"item.allowDelete ==1"
>
删除
</van-button>
</div>
</div>
</div>
</van-list>
<div
class=
'text-center shrink-0 empty'
v-if=
'!list.length'
>
<img
src=
'@/assets/image/doctor/empty.png'
alt=
''
style=
'width: 1.2rem;'
>
<p>
暂无数据
</p>
</div>
</van-pull-refresh>
</div>
</
template
>
<
script
>
import
{
delSlowSpecialById
,
fetchSlowSpecialList
}
from
'@/api/doctor/slowSpecial'
import
{
useStore
}
from
'@/doctor/store'
import
{
showConfirmDialog
}
from
'vant'
export
default
{
name
:
'SlowSpecialVisitList'
,
inject
:
[
'residentInfo'
],
data
()
{
return
{
store
:
useStore
(),
list
:
[],
loading
:
false
,
finished
:
false
,
loadingRefresh
:
false
,
isRefreshDisable
:
false
}
},
computed
:
{
residentInfoId
()
{
return
this
.
residentInfo
().
residentInfoId
}
},
created
()
{
this
.
load
()
},
mounted
()
{
const
list
=
this
.
$refs
.
list
list
.
addEventListener
(
'scroll'
,
()
=>
{
if
(
list
.
scrollTop
>
0
)
{
this
.
isRefreshDisable
=
true
}
else
{
this
.
isRefreshDisable
=
false
}
})
},
methods
:
{
load
(
loading
=
true
)
{
const
query
=
{
residentInfoId
:
this
.
residentInfoId
}
fetchSlowSpecialList
(
query
,
loading
).
then
(
res
=>
{
this
.
list
=
res
.
data
||
[]
this
.
finished
=
true
}).
finally
(()
=>
{
this
.
loading
=
false
this
.
loadingRefresh
=
false
})
},
onMore
()
{
this
.
load
(
false
)
},
onRefresh
()
{
this
.
load
(
false
)
},
toDetail
(
record
)
{
if
(
!
record
)
return
if
(
record
.
id
==
null
)
{
this
.
$message
.
info
(
'暂时无法查看 详情信息'
)
return
}
this
.
$router
.
push
({
path
:
'/doctor/followUp/slowSpecialFU/detail'
,
query
:
{
id
:
record
.
id
,
}
})
},
editBtn
(
record
)
{
this
.
$router
.
push
({
path
:
'/doctor/followUp/slowSpecialFU/add'
,
query
:
{
residentInfoId
:
this
.
residentInfoId
,
id
:
record
.
id
}
})
},
delBtn
(
record
)
{
showConfirmDialog
({
message
:
'确定要删除吗?'
}).
then
(()
=>
{
delSlowSpecialById
({
id
:
record
.
id
}).
then
(
res
=>
{
setTimeout
(()
=>
{
this
.
$message
.
info
(
'删除成功'
)
},
600
)
this
.
list
=
this
.
list
.
filter
(
e
=>
e
.
id
!==
record
.
id
)
})
}).
catch
((
err
)
=>
{
console
.
warn
(
'delSlowSpecialBtn'
,
err
)
})
},
},
watch
:
{
'store.refreshMark'
()
{
this
.
onRefresh
()
}
}
}
</
script
>
<
style
lang=
"less"
scoped
>
</
style
>
src/doctor/workbench/Workbench.vue
View file @
d252294c
...
...
@@ -51,6 +51,7 @@ import TableVisit from './tables/Visit.vue'
import
TableReceive
from
'./tables/Receive.vue'
import
TableFirstScreen
from
'./tables/FirstScreen.vue'
import
TableHighRisk
from
'./tables/HighRisk.vue'
import
TableSlowSeason
from
'@/doctor/workbench/tables/SlowSeason'
export
default
{
name
:
'Workbench'
,
...
...
@@ -60,7 +61,8 @@ export default {
TableVisit
,
TableReceive
,
TableFirstScreen
,
TableHighRisk
TableHighRisk
,
TableSlowSeason
,
},
data
()
{
return
{
...
...
@@ -70,7 +72,8 @@ export default {
{
key
:
'receive'
,
component
:
'TableReceive'
,
name
:
'待接诊居民'
},
// { key: 'screenRecord', component: 'TableScreenRecord', name: '当年待筛查记录' },
{
key
:
'firstScreen'
,
component
:
'TableFirstScreen'
,
name
:
'初筛高危待筛查'
},
{
key
:
'highRisk'
,
component
:
'TableHighRisk'
,
name
:
'慢病高危待诊断'
}
{
key
:
'highRisk'
,
component
:
'TableHighRisk'
,
name
:
'慢病高危待诊断'
},
{
key
:
'slowSeason'
,
component
:
'TableSlowSeason'
,
name
:
'慢特病季度待随访'
},
],
tabActive
:{},
configName
:
'慢病APP个性化配置'
,
...
...
src/doctor/workbench/tables/SlowSeason.vue
0 → 100644
View file @
d252294c
<
template
>
<div
class=
"h-full flex flex-col work"
>
<div
class=
"shrink-0 flex px-2 pb-2 pt-3 items-center"
>
<van-tabs
shrink
type=
"card"
class=
"grow doc-tab-round"
line
>
<van-tab
title=
"全部"
title-style=
"padding: 0 .2rem"
></van-tab>
</van-tabs>
<doc-icon
type=
"doc-menu"
style=
"font-size:.2rem;color:#03053D"
@
click=
'openSearch'
/>
</div>
<div
class=
'grow pt-1 relative min-h-0'
>
<div
class=
'h-full px-2 pb-3 overflow-y-auto'
ref=
'list'
>
<van-pull-refresh
v-model=
'loadingRefresh'
@
refresh=
'onRefresh'
:disabled=
'isRefreshDisable'
style=
"min-height: 100%"
>
<van-list
v-model:loading=
'loading'
:finished=
'finished'
:finished-text=
"list.length ? '没有更多了' : ''"
:immediate-check=
'false'
@
load=
'onMore'
>
<div
class=
"flex flex-col gap-y-2.5"
>
<div
class=
"py-3 px-4 doc-list-card"
v-for=
'item in list'
:key=
"item.id"
>
<div
class=
"mb-4"
@
click=
"toDetail(item)"
>
<span
class=
"name mr-2"
>
{{
item
.
residentName
}}
</span>
<span
class=
"tag mr-2"
>
{{
item
.
currentAge
}}
岁
</span>
<span
class=
"tag mr-2"
>
{{
item
.
genderName
}}
</span>
</div>
<div
class=
"flex flex-col gap-y-2.5"
@
click=
"toDetail(item)"
>
<div>
<span
class=
"label"
>
身份证号
</span>
<span>
{{
$idCardHide
(
item
.
idCard
)
||
'-'
}}
</span>
</div>
<div>
<span
class=
"label"
>
是否逾期
</span>
<span>
{{
item
.
isOverdueName
}}
</span>
</div>
<div>
<span
class=
"label"
>
逾期天数
</span>
<span>
{{
item
.
overdueDay
}}
</span>
</div>
<div>
<span
class=
"label"
>
随访季度
</span>
<span>
{{
item
.
visitQuarter
}}
</span>
</div>
<div>
<span
class=
"label"
>
计划随访日期
</span>
<span>
{{
item
.
planVisitDate
}}
</span>
</div>
</div>
<div
class=
"divider my-3"
></div>
<div
class=
"bt-group"
>
<van-button
round
size=
"small"
class=
"doc-btn-primary"
@
click=
"toDetail(item)"
>
详情
</van-button>
<van-button
round
size=
"small"
class=
"doc-btn-primary"
@
click=
"toSlowSeason(item)"
>
随访
</van-button>
<van-button
round
size=
"small"
class=
"doc-btn-primary"
@
click=
"onIgnore(item)"
>
忽略
</van-button>
</div>
</div>
</div>
</van-list>
<div
class=
'text-center shrink-0 empty'
v-if=
'!list.length'
>
<img
src=
'@/assets/image/doctor/empty.png'
alt=
''
style=
'width: 1.2rem;'
>
<p>
暂无数据
</p>
</div>
</van-pull-refresh>
</div>
<van-popup
v-model:show=
"searchVisible"
position=
"top"
:style=
"
{ height: '80%' }"
style="position: absolute;transition: none"
:overlay-style="{ position: 'absolute' }"
transition="viewer-fade"
:teleport="$refs.list">
<div
class=
"h-full flex flex-col workbench-search-box"
>
<div
class=
"px-4 py-3 grow overflow-y-auto"
style=
""
>
<div
class=
"mb-3"
>
身份证号
</div>
<van-field
v-model=
"form.idCard"
placeholder=
"请输入身份证号"
maxlength=
"20"
clearable
class=
"doc-input"
>
<template
#
right-icon
>
<IdCardScan
/>
</
template
>
</van-field>
<div
class=
"my-3"
>
居民姓名
</div>
<van-field
v-model=
"form.residentName"
placeholder=
"输入居民姓名"
maxlength=
"100"
clearable
class=
"doc-input"
/>
<div
class=
"my-3"
>
计划随访日期
</div>
<div
class=
"flex items-center"
>
<van-field
v-model=
"form.startPlanVisitDate"
placeholder=
"开始日期"
readonly
class=
"doc-input"
@
click=
"() => { dateShow = true, dateMark = 1 }"
/>
<span
class=
"px-2"
>
~
</span>
<van-field
v-model=
"form.endPlanVisitDate"
placeholder=
"结束日期"
readonly
class=
"doc-input"
@
click=
"() => { dateShow = true, dateMark = 2 }"
/>
</div>
<van-popup
v-model:show=
"dateShow"
position=
"bottom"
:teleport=
"$refs.list"
>
<van-date-picker
@
confirm=
"onDateConfirm"
@
cancel=
"dateShow = false"
/>
</van-popup>
<div
class=
"my-3"
>
是否逾期
</div>
<CheckBtn
:options=
"isNotList"
v-model:value=
"form.isOverdue"
column-3
class=
"check-btn-workbench"
/>
</div>
<div
class=
"text-16 flex shrink-0 text-center bt-group"
>
<div
class=
"grow py-3"
@
click=
"reset"
>
重置
</div>
<div
class=
"grow py-3 submit-btn"
@
click=
"search"
>
确定
</div>
</div>
</div>
</van-popup>
</div>
</div>
</template>
<
script
>
import
{
useStore
}
from
'@/doctor/store'
import
CheckBtn
from
'@/doctor/components/checkBtn/CheckBtn.vue'
import
IdCardScan
from
'@/doctor/components/idCardScan/IdCardScan.vue'
import
{
fetchSlowSeasonList
,
updateSlowSeason
}
from
'@/api/doctor/slowSpecial'
const
DefaultForm
=
{
// 数据来源,[DC00051]
isOverdue
:
undefined
,
// 服务类型
serviceType
:
undefined
,
// 服务日期-截止日期
startPlanVisitDate
:
undefined
,
// 服务日期-开始日期
endPlanVisitDate
:
undefined
,
// 姓名
residentName
:
undefined
,
// 身份证号
idCard
:
undefined
}
export
default
{
name
:
'TableSlowSeason'
,
props
:
{
searchType
:
{
default
:
1
}
},
components
:
{
CheckBtn
,
IdCardScan
},
data
()
{
return
{
store
:
useStore
(),
list
:
[],
pagination
:
{
total
:
0
,
pageIndex
:
1
,
pageSize
:
8
},
loading
:
false
,
finished
:
false
,
loadingRefresh
:
false
,
isRefreshDisable
:
false
,
// 搜索弹出框
searchVisible
:
false
,
// 时间选择
dateShow
:
false
,
// 判断对哪一个日期赋值
dateMark
:
0
,
form
:
{
...
DefaultForm
}
}
},
computed
:
{
isNotList
()
{
let
list
=
[]
this
.
store
.
getDict
(
'CP00120'
).
forEach
(
item
=>
list
.
push
(
item
))
list
.
unshift
({
name
:
'全部'
,
value
:
''
})
return
list
}
},
created
()
{
this
.
load
()
},
mounted
()
{
const
list
=
this
.
$refs
.
list
list
.
addEventListener
(
'scroll'
,
()
=>
{
if
(
list
.
scrollTop
>
0
)
{
this
.
isRefreshDisable
=
true
}
else
{
this
.
isRefreshDisable
=
false
}
})
},
methods
:
{
load
(
loading
=
true
)
{
const
query
=
{
pageIndex
:
this
.
pagination
.
pageIndex
,
pageSize
:
this
.
pagination
.
pageSize
,
searchType
:
this
.
searchType
,
...
this
.
form
}
fetchSlowSeasonList
(
query
,
loading
).
then
(
res
=>
{
if
(
this
.
pagination
.
pageIndex
===
1
)
{
this
.
list
=
[]
}
this
.
list
=
this
.
list
.
concat
(
res
.
data
.
dataList
||
[])
this
.
pagination
.
total
=
res
.
data
.
total
||
0
this
.
finished
=
this
.
list
.
length
>=
this
.
pagination
.
total
}).
finally
(()
=>
{
this
.
loading
=
false
this
.
loadingRefresh
=
false
})
},
search
()
{
this
.
pagination
.
pageIndex
=
1
this
.
load
()
this
.
searchVisible
=
false
},
reset
()
{
this
.
form
=
{
...
DefaultForm
}
this
.
search
()
},
onMore
()
{
this
.
pagination
.
pageIndex
++
this
.
load
(
false
)
},
onRefresh
()
{
this
.
pagination
.
pageIndex
=
1
this
.
load
(
false
)
},
openSearch
()
{
this
.
searchVisible
=
!
this
.
searchVisible
},
onDateConfirm
({
selectedValues
})
{
const
result
=
selectedValues
.
join
(
'-'
)
if
(
this
.
dateMark
===
1
)
{
this
.
form
.
startPlanVisitDate
=
result
}
else
if
(
this
.
dateMark
===
2
)
{
this
.
form
.
endPlanVisitDate
=
result
}
this
.
dateShow
=
false
this
.
dateMark
=
0
},
toDetail
(
record
)
{
if
(
!
record
)
return
if
(
record
.
residentInfoId
==
null
)
{
this
.
$message
.
info
(
'暂时无法查看 详情信息'
)
return
}
this
.
$router
.
push
({
path
:
'/doctor/patient-detail'
,
query
:
{
residentInfoId
:
record
.
residentInfoId
}
})
},
toSlowSeason
(
record
)
{
if
(
record
.
residentInfoId
==
null
)
{
this
.
$message
.
info
(
'暂时无法进行随访'
)
return
}
this
.
$router
.
push
({
path
:
'/doctor/followUp/slowSpecialFU/add'
,
query
:
{
residentInfoId
:
record
.
residentInfoId
}
})
},
onIgnore
(
record
)
{
let
params
=
{
id
:
record
.
id
,
status
:
'0'
,
}
updateSlowSeason
(
params
).
then
(()
=>
{
this
.
list
=
this
.
list
.
filter
(
e
=>
e
.
id
!==
record
.
id
)
setTimeout
(()
=>
{
this
.
$message
.
info
(
'操作成功'
)
},
800
);
})
}
},
watch
:
{
searchType
()
{
this
.
onRefresh
()
},
'store.refreshMark'
()
{
this
.
onRefresh
()
}
}
}
</
script
>
<
style
lang=
"less"
scoped
>
</
style
>
src/router/index.js
View file @
d252294c
...
...
@@ -147,6 +147,17 @@ const routes = [
name
:
'followUp-separateFU-add'
,
component
:
()
=>
import
(
/* webpackChunkName: "doctor" */
'@/doctor/followUp/separateFU/form/Index'
)
},
//慢特病随访
{
path
:
'followUp/slowSpecialFU/detail'
,
name
:
'followUp-slowSpecialFU-detail'
,
component
:
()
=>
import
(
/* webpackChunkName: "doctor" */
'@/doctor/followUp/slowSpecialFU/detail/Detail'
)
},
{
path
:
'followUp/slowSpecialFU/add'
,
name
:
'followUp-slowSpecialFU-add'
,
component
:
()
=>
import
(
/* webpackChunkName: "doctor" */
'@/doctor/followUp/slowSpecialFU/form/Index'
)
},
]
},
{
...
...
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