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
bdbca212
Commit
bdbca212
authored
May 22, 2025
by
芮自成
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'chronic-dev' of
http://gitlab.yiboshi.com/nightkis1995/frontend-h5
into chronic-dev
parents
8106c5c9
d252294c
Show 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 @
bdbca212
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 @
bdbca212
...
...
@@ -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 @
bdbca212
<!--通用随访详情-->
<
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 @
bdbca212
<
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 @
bdbca212
<
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 @
bdbca212
<
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 @
bdbca212
...
...
@@ -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 @
bdbca212
<
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 @
bdbca212
...
...
@@ -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 @
bdbca212
<
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 @
bdbca212
...
...
@@ -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