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
0aa96dcb
Commit
0aa96dcb
authored
5 months ago
by
songrui
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
医生端 工作台
parent
f5af8181
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
622 additions
and
8 deletions
+622
-8
index.html
public/index.html
+2
-2
workbench.js
src/api/doctor/workbench.js
+17
-0
doc-menu.svg
src/assets/icons/doctor/doc-menu.svg
+3
-0
Doctor.vue
src/doctor/Doctor.vue
+84
-3
DocNavBar.vue
src/doctor/components/docNavBar/DocNavBar.vue
+46
-0
Workbench.vue
src/doctor/workbench/Workbench.vue
+148
-3
Visit.vue
src/doctor/workbench/tables/Visit.vue
+182
-0
Work.vue
src/doctor/workbench/tables/Work.vue
+133
-0
index.js
src/router/index.js
+7
-0
No files found.
public/index.html
View file @
0aa96dcb
...
...
@@ -79,7 +79,7 @@
<!-- built files will be auto injected -->
</body>
<script>
var
vConsole
=
new
VConsole
();
console
.
log
(
'Hello world'
);
//
var vConsole =new VConsole();
//
console.log('Hello world');
</script>
</html>
This diff is collapsed.
Click to expand it.
src/api/doctor/workbench.js
0 → 100644
View file @
0aa96dcb
import
{
fetchBase
}
from
'@/api/doctor/doctorFetch'
// 查询最近工作记录
export
function
getWorkByPage
(
params
,
loading
)
{
return
fetchBase
({
url
:
`/chronic-admin/v1/chronic-workbench/lately-service`
,
body
:
params
,
loading
})
}
// 查询待随访列表
export
function
getVisitByPage
(
params
,
loading
)
{
return
fetchBase
({
url
:
`/chronic-admin/v1/chronic-visit-task/page`
,
body
:
params
,
loading
})
}
// 待随访列表忽略
export
function
delVisit
(
params
)
{
return
fetchBase
({
url
:
`/chronic-admin/v1/chronic-visit-task/delete`
,
body
:
params
,
loading
:
true
})
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
src/assets/icons/doctor/doc-menu.svg
0 → 100644
View file @
0aa96dcb
<svg
width=
"18"
height=
"16"
viewBox=
"0 0 18 16"
xmlns=
"http://www.w3.org/2000/svg"
>
<path
d=
"M0 0H18V2H0V0ZM0 7H18V9H0V7ZM0 14H18V16H0V14Z"
/>
</svg>
This diff is collapsed.
Click to expand it.
src/doctor/Doctor.vue
View file @
0aa96dcb
<
template
>
<van-config-provider
:theme-vars=
'themeVars'
class=
"h-full
"
>
<van-config-provider
:theme-vars=
'themeVars'
style=
"height: 100vh
"
>
<div
class=
'h-full resident-home'
>
<router-view
v-slot=
'
{ Component }'>
<Transition
name=
'route'
mode=
'out-in'
>
...
...
@@ -52,7 +52,7 @@ export default {
if
(
!
token
)
{
token
=
sessionStorage
.
getItem
(
'token'
)
if
(
process
.
env
.
NODE_ENV
!==
'production'
)
{
token
=
'
c44236d5-f78e-4b8c-a30b-d70018ce3c74
'
token
=
'
28015f4f-ce3f-4dee-934b-0a72a7804bc2
'
}
}
if
(
token
)
{
...
...
@@ -72,6 +72,87 @@ export default {
}
</
script
>
<
style
lang=
'less'
scoped
>
<
style
lang=
'less'
>
// 按钮样式
.doc-btn {
border: 0;
padding: 4px 12px;
height: 26px;
}
.doc-btn-primary {
.doc-btn();
color: var(--van-primary-color);
background: #F0F3FF;
}
.doc-btn-red {
.doc-btn();
color: #FF4D4F;
background: #FFF3F0;
}
// tab 样式
.doc-tab-round {
.van-tabs__nav--card {
column-gap: 10px;
border: 0;
margin: 0;
background: transparent;
}
.van-tab--card {
border: 0;
border-radius: 40px;
background: #fff;
color: #262626;
font-size: 14px;
line-height: 28px;
padding: 0 10px;
transition: all .2s;
}
.van-tab--card.van-tab--active {
color: #fff;
background: var(--van-primary-color);
font-weight: 500;
}
}
.doc-tab-round[line] {
.van-tab--card {
border: 1px solid #fff;
}
.van-tab--card.van-tab--active {
color: var(--van-primary-color);
border: 1px solid var(--van-primary-color);
background: #E6F0FF;
font-weight: 500;
}
}
// list列表中的card
.doc-list-card {
border-radius: 12px;
background-color: #fff;
.name {
font-size: 16px;
font-weight: 600;
}
.tag {
background: #F0F3FF;
padding: 4px 8px;
border-radius: 8px;
font-size: 12px;
line-height: 1;
}
.label {
display: inline-block;
color: #8C8C8C;
min-width: 104px;
}
.divider {
border-bottom: 1px solid #c0ccdf;
}
.bt-group {
display: flex;
justify-content: flex-end;
}
}
</
style
>
This diff is collapsed.
Click to expand it.
src/doctor/components/docNavBar/DocNavBar.vue
0 → 100644
View file @
0aa96dcb
<
template
>
<div
class=
"px-3 py-3 flex items-center doc-nav-bar"
>
<div
class=
"shrink-0 left"
>
<slot
name=
"left"
>
<span
class=
"back-btn"
@
click=
"goBack"
>
<doc-icon
type=
"doc-left-1"
style=
"color: #262626"
/>
</span>
</slot>
</div>
<div
class=
"grow text-center title"
>
<slot>
{{
title
}}
</slot>
</div>
<div
class=
"shrink-0 right"
>
<slot
name=
"right"
></slot>
</div>
</div>
</
template
>
<
script
>
export
default
{
name
:
'DocNavBar'
,
props
:
{
title
:
String
},
methods
:
{
goBack
()
{
this
.
$router
.
back
()
}
}
}
</
script
>
<
style
lang=
"less"
scoped
>
.doc-nav-bar {
background: transparent;
border-bottom: 1px solid #c0ccdf;
.left {
min-width: 24px;
}
.title {
font-size: 16px;
}
}
</
style
>
This diff is collapsed.
Click to expand it.
src/doctor/workbench/Workbench.vue
View file @
0aa96dcb
<
template
>
<div
class=
"workbench"
></div>
<div
class=
"h-full flex flex-col workbench"
>
<DocNavBar
title=
"慢病管理"
class=
"shrink-0"
>
<template
#
right
>
<doc-icon
type=
"doc-search"
style=
"color: #262626"
@
click=
"toSearch"
/>
</
template
>
</DocNavBar>
<div
class=
"grow flex flex-col"
style=
"min-height: 0"
>
<div
class=
"shrink-0 workbench-tab"
>
<div
class=
"back"
></div>
<div
class=
"flex workbench-tab-inner"
ref=
"tab-inner"
>
<div
v-for=
"(item, index) in configTab"
:key=
"item.key"
@
click=
"tabSelect(item, index)"
:class=
"['item', { 'item-active': item.key == tabActive.key }]"
>
{{item.name}}
</div>
</div>
</div>
<div
class=
"grow"
style=
"background: #F8FAFC;min-height: 0;"
>
<component
:is=
"tabActive.component"
:ref=
"tabActive.key"
/>
</div>
</div>
</div>
</template>
<
script
>
import
DocNavBar
from
'@/doctor/components/docNavBar/DocNavBar.vue'
import
TableWork
from
'./tables/Work.vue'
import
TableVisit
from
'./tables/Visit.vue'
export
default
{
components
:
{
DocNavBar
,
TableWork
,
TableVisit
},
data
()
{
return
{
configTab
:
[
{
key
:
'work'
,
component
:
'TableWork'
,
name
:
'工作记录'
},
{
key
:
'visit'
,
component
:
'TableVisit'
,
name
:
'慢病待随访'
},
{
key
:
'screenRecord'
,
component
:
'TableScreenRecord'
,
name
:
'当年待筛查记录'
},
{
key
:
'firstScreen'
,
component
:
'TableFirstScreen'
,
name
:
'初筛高危待筛查'
},
{
key
:
'receive'
,
component
:
'TableReceive'
,
name
:
'待接诊居民'
},
{
key
:
'highRisk'
,
component
:
'TableHighRisk'
,
name
:
'高危诊断'
}
],
tabActive
:{}
}
},
created
()
{
this
.
tabActive
=
this
.
configTab
[
0
]
},
methods
:
{
toSearch
()
{
},
tabSelect
(
item
,
index
)
{
this
.
tabActive
=
item
const
dom
=
this
.
$refs
[
'tab-inner'
]
if
(
!
dom
)
return
// console.log(dom.children[index].offsetLeft, dom.scrollLeft, dom.clientWidth, dom.scrollWidth, scrollNum)
// dom.children[index].scrollIntoView({ behavior: 'smooth', inline: 'start' })
const
scrollNum
=
dom
.
children
[
index
].
offsetLeft
-
(
dom
.
clientWidth
-
dom
.
children
[
index
].
clientWidth
)
/
2
dom
.
scrollTo
({
left
:
scrollNum
>
0
?
scrollNum
:
0
,
behavior
:
'smooth'
})
}
}
}
</
script
>
<
style
lang=
"less"
scoped
>
.workbench {
background: linear-gradient(to bottom, #C6DBF9, #EFF2F7);
}
.workbench-tab {
background: #C6DBF9;
padding-top: 10px;
position: relative;
.workbench-tab-inner {
align-items: flex-end;
position: relative;
overflow-x: auto;
overflow-y: hidden;
&::-webkit-scrollbar {
display: none;
}
}
.back {
position: absolute;
left: 0;
bottom: 0;
right: 0;
height: 42px;
background-color: #E7F1FF;
border-top-left-radius: 12px;
border-top-right-radius: 12px;
}
.item {
flex: 1 0 auto;
position: relative;
padding: 0 16px;
height: 42px;
line-height: 42px;
text-align: center;
&:first-child {
border-top-left-radius: 12px;
}
&:last-child {
border-top-right-radius: 12px;
}
}
.item-active:first-child {
border-top-left-radius: 12px;
&::before {
display: none;
}
}
.item-active:last-child {
border-top-right-radius: 12px;
&::after {
display: none;
}
}
.item-active {
background-color: #F8FAFC;
border-top-left-radius: 20px;
border-top-right-radius: 20px;
font-size: 16px;
height: 46px;
line-height: 46px;
&::after {
content: '';
display: inline-block;
position: absolute;
right: -26px;
bottom: 0;
background: url('@/assets/image/doctor/tab-bg.png') no-repeat;
background-size: auto 100%;
background-position-x: -20px;
height: 100%;
width: 34px;
z-index: 1;
}
&::before {
content: '';
display: inline-block;
position: absolute;
left: -26px;
bottom: 0;
background: url('@/assets/image/doctor/tab-bg.png') no-repeat;
background-size: auto 100%;
background-position-x: -20px;
height: 100%;
width: 34px;
z-index: 1;
transform: rotateY(180deg);
}
}
}
</
style
>
This diff is collapsed.
Click to expand it.
src/doctor/workbench/tables/Visit.vue
0 → 100644
View file @
0aa96dcb
<
template
>
<div
class=
"h-full flex flex-col px-2 py-3 work"
>
<div
class=
"shrink-0 flex pb-2 items-center"
>
<van-tabs
shrink
type=
"card"
class=
"grow doc-tab-round"
line
v-model:active=
"activeTab"
@
change=
"tabChange"
>
<van-tab
v-for=
"item in tabList"
:key=
"item.value"
:title=
"item.name"
></van-tab>
</van-tabs>
<div
class=
"shrink-0 pl-3"
style=
"border-left: 1px solid #A5AEBE;"
>
<doc-icon
type=
"doc-menu"
style=
"font-size:.2rem;color:#03053D"
/>
</div>
</div>
<div
class=
'grow pt-1 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"
>
<span
class=
"name mr-2"
>
{{
item
.
residentName
}}
</span>
<span
class=
"tag mr-2"
>
{{
item
.
age
}}
岁
</span>
<span
class=
"tag mr-2"
>
{{
item
.
genderName
||
'-'
}}
</span>
</div>
<div
class=
"flex flex-col gap-y-2.5"
>
<div>
<span
class=
"label"
>
身份证号
</span>
<span>
{{
$idCardHide
(
item
.
idCard
)
}}
</span>
</div>
<div>
<span
class=
"label"
>
是否逾期
</span>
<span>
{{
item
.
isOverdue
==
1
?
'是'
:
'否'
}}
</span>
</div>
<div>
<span
class=
"label"
>
逾期天数
</span>
<span>
{{
item
.
overdueDay
}}
</span>
</div>
<div
class=
"flex"
>
<span
class=
"label"
>
慢病标签
</span>
<span>
<ChronicTag
:list=
'item.chronicTagsArray'
/>
</span>
</div>
<div>
<span
class=
"label"
>
数据来源
</span>
<span>
{{
item
.
sourceName
||
'-'
}}
</span>
</div>
</div>
<div
class=
"divider my-3"
></div>
<div
class=
"bt-group"
>
<van-button
round
size=
"small"
class=
"doc-btn-primary"
>
详情
</van-button>
<span
class=
"mr-3"
></span>
<van-button
round
size=
"small"
class=
"doc-btn-primary"
>
通用随访
</van-button>
<span
class=
"mr-3"
></span>
<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>
</div>
</
template
>
<
script
>
import
{
getVisitByPage
,
delVisit
}
from
'@/api/doctor/workbench.js'
import
ChronicTag
from
'@/doctor/components/chronicTag/ChronicTag.vue'
import
{
showToast
}
from
'vant'
export
default
{
name
:
'TableVisit'
,
components
:
{
ChronicTag
},
data
()
{
return
{
list
:
[],
pagination
:
{
total
:
0
,
pageIndex
:
1
,
pageSize
:
8
},
loading
:
false
,
finished
:
false
,
loadingRefresh
:
false
,
isRefreshDisable
:
false
,
// 慢病tab列表
tabList
:
[
{
name
:
'高血压'
,
value
:
1
},
{
name
:
'糖尿病'
,
value
:
2
},
{
name
:
'冠心病'
,
value
:
3
},
{
name
:
'脑卒中'
,
value
:
4
},
{
name
:
'慢阻肺'
,
value
:
5
},
{
name
:
'慢性肾病'
,
value
:
6
},
{
name
:
'血脂异常'
,
value
:
7
}
],
activeTab
:
0
}
},
computed
:
{
activeTabItem
()
{
return
this
.
tabList
[
this
.
activeTab
]
||
{}
}
},
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
:
1
,
diseaseType
:
this
.
activeTabItem
.
value
}
getVisitByPage
(
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
})
},
onMore
()
{
this
.
pagination
.
pageIndex
++
this
.
load
(
false
)
},
onRefresh
()
{
this
.
pagination
.
pageIndex
=
1
this
.
load
()
},
tabChange
()
{
this
.
pagination
.
pageIndex
=
1
this
.
load
()
},
toDetail
(
record
)
{
if
(
!
record
)
return
// let path = `/residentWX/screening/firstDetail/${record.id}`
// if (this.activeTab == '2') {
// path = `/residentWX/screening/SecondDetail/${record.id}`
// }
// this.$router.push({ path })
},
onIgnore
(
record
)
{
delVisit
({
id
:
record
.
id
}).
then
(()
=>
{
this
.
list
=
this
.
list
.
filter
(
e
=>
e
.
id
!==
record
.
id
)
setTimeout
(()
=>
{
showToast
(
'操作成功'
)
},
800
);
})
}
}
}
</
script
>
<
style
lang=
"less"
scoped
>
</
style
>
This diff is collapsed.
Click to expand it.
src/doctor/workbench/tables/Work.vue
0 → 100644
View file @
0aa96dcb
<
template
>
<div
class=
"h-full flex flex-col px-2 py-3 work"
>
<div
class=
"shrink-0 flex pb-2 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"
/>
</div>
<div
class=
'grow pt-1 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"
>
<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"
>
<div>
<span
class=
"label"
>
身份证号
</span>
<span>
{{
item
.
idCard
}}
</span>
</div>
<div>
<span
class=
"label"
>
服务类型
</span>
<span>
{{
item
.
serviceTypeName
}}
</span>
</div>
<div>
<span
class=
"label"
>
服务日期
</span>
<span>
{{
item
.
serviceDate
}}
</span>
</div>
<div>
<span
class=
"label"
>
服务医生
</span>
<span>
{{
item
.
serviceDoctorName
}}
</span>
</div>
</div>
<div
class=
"divider my-3"
></div>
<div
class=
"bt-group"
>
<van-button
round
size=
"small"
class=
"doc-btn-primary"
>
详情
</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>
</div>
</
template
>
<
script
>
import
{
getWorkByPage
}
from
'@/api/doctor/workbench.js'
export
default
{
name
:
'TableWork'
,
data
()
{
return
{
list
:
[],
pagination
:
{
total
:
0
,
pageIndex
:
1
,
pageSize
:
8
},
loading
:
false
,
finished
:
false
,
loadingRefresh
:
false
,
isRefreshDisable
:
false
}
},
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
:
1
}
getWorkByPage
(
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
})
},
onMore
()
{
this
.
pagination
.
pageIndex
++
this
.
load
(
false
)
},
onRefresh
()
{
this
.
pagination
.
pageIndex
=
1
this
.
load
()
},
toDetail
(
record
)
{
if
(
!
record
)
return
// let path = `/residentWX/screening/firstDetail/${record.id}`
// if (this.activeTab == '2') {
// path = `/residentWX/screening/SecondDetail/${record.id}`
// }
// this.$router.push({ path })
}
}
}
</
script
>
<
style
lang=
"less"
scoped
>
</
style
>
This diff is collapsed.
Click to expand it.
src/router/index.js
View file @
0aa96dcb
...
...
@@ -40,6 +40,13 @@ const routes = [
name
:
'doctor'
,
component
:
()
=>
import
(
/* webpackChunkName: "doctor" */
'@/doctor/Doctor'
),
children
:
[
{
path
:
'workbench'
,
name
:
'doctor-workbench'
,
component
:
()
=>
import
(
/* webpackChunkName: "doctor" */
'@/doctor/workbench/Workbench.vue'
)
},
{
path
:
'followUp/list'
,
name
:
'followUp-list'
,
...
...
This diff is collapsed.
Click to expand it.
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