Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
A
agcs2.0-web
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
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
liang
agcs2.0-web
Commits
e7cc4f5a
Commit
e7cc4f5a
authored
2 years ago
by
miaojiale
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'dev' into dev_Miaojiale
parents
b34d8d8f
617144fe
dev_Miaojiale
dev
No related merge requests found
Changes
21
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
2232 additions
and
545 deletions
+2232
-545
followup.js
src/api/followup.js
+17
-8
download.png
src/assets/img/Home/download.png
+0
-0
file.png
src/assets/img/Home/file.png
+0
-0
trustee.png
src/assets/img/Home/trustee.png
+0
-0
FormItemText.vue
src/components/FormComponents/CustomForm/FormItemText.vue
+2
-1
index.vue
src/views/Home/index.vue
+179
-165
AllianceApply.vue
src/views/Home/notice/components/AllianceApply.vue
+190
-0
HospitalsList.vue
src/views/Home/notice/components/HospitalsList.vue
+258
-0
tpl.js
src/views/Home/notice/components/tpl.js
+339
-0
index.vue
src/views/Home/notice/index.vue
+116
-0
index.vue
src/views/audit-qualitycontrol/index.vue
+4
-0
publicDialog.vue
src/views/followupentry/components/publicDialog.vue
+13
-2
followaudit.vue
src/views/followupentry/followaudit.vue
+455
-271
index.vue
src/views/followupentry/index.vue
+3
-2
FollowUpDetail.vue
src/views/followupquery/FollowUpDetail.vue
+56
-0
FollowReview.vue
src/views/followupquery/components/FollowReview.vue
+324
-0
MyCustomForm.vue
src/views/followupquery/components/MyCustomForm.vue
+196
-0
index.vue
src/views/followupquery/index.vue
+76
-91
index.vue
src/views/followupresearch/index.vue
+1
-2
ConfigForms.vue
src/views/screening/components/ConfigForms.vue
+1
-2
FormTab.vue
src/views/screening/components/FormTab.vue
+2
-1
No files found.
src/api/followup.js
View file @
e7cc4f5a
import
request
from
"
@/utils/request
"
;
import
request
from
"
@/utils/request
"
/**
* 随访
...
...
@@ -10,7 +10,7 @@ export function getFollowSearch(params = {}) {
url
:
"
/disease-data/follow/search
"
,
method
:
"
get
"
,
params
,
})
;
})
}
//随访调查 列表
export
function
getFollowSurvey
(
params
=
{})
{
...
...
@@ -18,7 +18,7 @@ export function getFollowSurvey(params = {}) {
url
:
"
/disease-data/follow/survey
"
,
method
:
"
get
"
,
params
,
})
;
})
}
///////////////审核质控/////////////////////
//随访已审核列表
...
...
@@ -27,7 +27,7 @@ export function getFollowCheck(params = {}) {
url
:
"
/disease-data/dataCheck/follow/check
"
,
method
:
"
get
"
,
params
,
})
;
})
}
//随访待审核列表
export
function
getFollowUncheck
(
params
=
{})
{
...
...
@@ -35,19 +35,19 @@ export function getFollowUncheck(params = {}) {
url
:
"
/disease-data/dataCheck/follow/unCheck
"
,
method
:
"
get
"
,
params
,
})
;
})
}
//随访病例待审核(详情数据)
export
function
getFollowUnCheckDetail
(
id
)
{
return
request
({
url
:
`/disease-data/dataCheck/follow/unCheck/detail/
${
id
}
`
,
method
:
"
get
"
,
})
;
})
}
//随访病例审核
export
function
putFollowCheck
(
data
=
{})
{
return
request
({
url
:
"
/disease-data/dataCheck/follow/check
"
,
url
:
"
/disease-data/dataCheck/follow/
un
check
"
,
method
:
"
put
"
,
data
,
})
...
...
@@ -59,4 +59,13 @@ export function putFollowCheckAdvice(data = {}) {
method
:
"
put
"
,
data
,
})
}
\ No newline at end of file
}
// 随访查询详情list
export
function
getFollowRecord
(
params
=
{})
{
return
request
({
url
:
"
/disease-data/follow/search/detail
"
,
method
:
"
get
"
,
params
,
})
}
This diff is collapsed.
Click to expand it.
src/assets/img/Home/download.png
0 → 100644
View file @
e7cc4f5a
604 Bytes
This diff is collapsed.
Click to expand it.
src/assets/img/Home/file.png
0 → 100644
View file @
e7cc4f5a
507 Bytes
This diff is collapsed.
Click to expand it.
src/assets/img/Home/trustee.png
0 → 100644
View file @
e7cc4f5a
260 KB
This diff is collapsed.
Click to expand it.
src/components/FormComponents/CustomForm/FormItemText.vue
View file @
e7cc4f5a
...
...
@@ -76,7 +76,8 @@ export default {
},
methods
:
{
handleUnionName
(
v
)
{
return
this
.
unionLists
.
filter
((
e
)
=>
e
.
id
==
v
)[
0
].
unionName
const
union
=
this
.
unionList
.
find
((
e
)
=>
e
.
id
==
v
)
||
{}
return
union
.
unionName
||
""
},
},
filters
:
{
...
...
This diff is collapsed.
Click to expand it.
src/views/Home/index.vue
View file @
e7cc4f5a
This diff is collapsed.
Click to expand it.
src/views/Home/notice/components/AllianceApply.vue
0 → 100644
View file @
e7cc4f5a
<
template
>
<div
class=
"container"
>
<h2>
申请加入国家消化道早癌防治中心联盟
</h2>
<div
class=
"sub_title"
>
申请阶段
</div>
<div
class=
"content"
>
<h3>
1、下载申请材料
</h3>
<div
class=
"upload_item"
v-for=
"item in list"
:key=
"item.id"
>
<div
class=
"img-file"
>
<img
src=
"@/assets/img/Home/file.png"
alt=
""
/>
</div>
<div
style=
"float: left"
class=
"upload_label"
>
<strong>
{{
item
.
label
}}
</strong>
<span>
{{
item
.
size
}}
</span>
</div>
<div
class=
"img-load"
@
click=
"download(item)"
>
<img
src=
"@/assets/img/Home/download.png"
alt=
""
/>
</div>
</div>
<h3>
2、发送至邮箱
</h3>
<p>
service@gecachina.cn
</p>
<h3>
3、定期参与入盟培训
</h3>
<p>
培训内容:新系统使用、筛查方法及医患沟通等
</p>
<h3>
4、材料认证 - 开通账户
</h3>
<p>
a. 回复确认入盟邀请函
</p>
<p>
b. 账户开通:门诊、体检、、社区
</p>
<h3>
5、数据审核
</h3>
<p>
a.
按要求上传足量病例后,联盟官网将公示入盟医院:三甲医院需上传100例数据,非三甲医院需上传50例
</p>
<p>
b. 目前已入联盟但未公示的医院,需补充病例才可公示
</p>
<h3>
6、官网公示 - 申请成功
</h3>
</div>
<div
class=
"sub_title"
>
运行阶段
</div>
<div
class=
"content"
>
<h3>
1、定期沟通会 - 数据上传
</h3>
<p>
a. 根据指导建议做出积极响应:制定后续跟进计划
</p>
<p>
b. 已在官网公示名单中的医院将定期开启回溯重申,如不合格将从名单中摘除
</p>
<h3>
2、正式授牌
</h3>
<p>
正式入盟后需要定期上传筛查数据(高质量且有效)才可获得授牌
</p>
</div>
</div>
</
template
>
<
script
>
export
default
{
data
()
{
return
{
list
:
[
{
id
:
1
,
url
:
"
http://www.ncrcgastro.org/d/file/coordination/apply/2020-05-27/67235e21623910e9e0c04f23fa3314d6.docx
"
,
label
:
"
国家消化道早癌防治中心”(早期胃癌筛查项目)申请表.docx
"
,
size
:
"
35.7 KB
"
,
},
{
id
:
2
,
url
:
"
http://www.ncrcgastro.org/d/file/coordination/apply/2019-06-05/3ecfa10aa09afdf73526d41cda151d0f.pdf
"
,
label
:
"
早期胃癌筛查项目 申请表填写标准(1).pdf
"
,
size
:
"
351 KB
"
,
},
{
id
:
3
,
url
:
"
http://www.ncrcgastro.org/d/file/coordination/apply/2019-06-05/a18cf8ea29d870da693ea8bd79d2ce33.docx
"
,
label
:
"
信息系统账号申请表(2).docx
"
,
size
:
"
22 KB
"
,
},
{
id
:
4
,
url
:
"
http://www.ncrcgastro.org/d/file/coordination/apply/2019-06-12/206be4b4d462aa5812dbba723e69f518.docx
"
,
label
:
"
GECA联盟申请Q&A问答汇总.docx
"
,
size
:
"
216 KB
"
,
},
],
}
},
methods
:
{
download
({
url
,
label
})
{
const
el
=
document
.
createElement
(
"
a
"
)
el
.
download
=
label
el
.
target
=
"
_blank
"
el
.
style
.
display
=
"
none
"
el
.
href
=
url
document
.
body
.
appendChild
(
el
)
el
.
click
()
URL
.
revokeObjectURL
(
el
.
href
)
document
.
body
.
removeChild
(
el
)
},
},
mounted
()
{},
watch
:
{},
}
</
script
>
<
style
lang=
"scss"
scoped
>
.container
{
padding
:
30px
10px
;
h2
{
font-weight
:
bold
;
font-size
:
28px
;
text-align
:
center
;
height
:
36px
;
font-size
:
32px
;
font-family
:
AlibabaPuHuiTiB
;
letter-spacing
:
3px
;
margin-bottom
:
50px
;
color
:
#4e68ff
;
line-height
:
36px
;
}
.content
{
padding-left
:
30px
;
letter-spacing
:
1px
;
h3
{
font-size
:
18px
;
font-weight
:
bold
;
color
:
#333333
;
line-height
:
50px
;
margin-top
:
10px
;
}
p
{
line-height
:
20px
;
padding-left
:
15px
;
}
}
.upload_item
{
width
:
780px
;
height
:
60px
;
background
:
#f5f5f5
;
border-radius
:
8px
;
line-height
:
60px
;
overflow
:
hidden
;
margin-bottom
:
20px
;
.img-file
{
float
:
left
;
padding
:
0
10px
;
width
:
60px
;
line-height
:
60px
;
img
{
transform
:
translateY
(
10px
);
width
:
40px
;
height
:
40px
;
}
}
.upload_label
{
float
:
left
;
}
.img-load
{
float
:
right
;
width
:
60px
;
height
:
60px
;
background-color
:
#ebeeff
;
text-align
:
center
;
cursor
:
pointer
;
img
{
transform
:
translateY
(
10px
);
width
:
28px
;
height
:
28px
;
}
}
strong
{
color
:
#333333
;
font-size
:
16px
;
margin-right
:
10px
;
}
}
.sub_title
{
font-size
:
18px
;
font-weight
:
bold
;
color
:
#333333
;
margin
:
10px
;
padding-left
:
15px
;
letter-spacing
:
2px
;
position
:
relative
;
&
:
:
before
{
content
:
" "
;
border-left
:
4px
solid
#4e68ff
;
position
:
absolute
;
height
:
18px
;
top
:
4px
;
left
:
0
;
}
}
}
</
style
>
This diff is collapsed.
Click to expand it.
src/views/Home/notice/components/HospitalsList.vue
0 → 100644
View file @
e7cc4f5a
<
template
>
<div
class=
"container"
>
<h2>
GECA联盟理事及医院名单
</h2>
<div
v-for=
"row in list"
:key=
"row.label"
>
<div
class=
"sub_title"
>
{{
row
.
label
}}
</div>
<div
class=
"content"
>
<span
v-for=
"item in row.items"
:key=
"item"
>
{{
item
}}
</span>
</div>
</div>
<div
style=
"padding-left: 48px"
>
<img
src=
"@/assets/img/Home/trustee.png"
alt=
""
/>
</div>
<div
class=
"sub_title"
>
CEGA联盟医院名单
</div>
<el-table
:data=
"tableData"
:span-method=
"objectSpanMethod"
border
>
<el-table-column
width=
"60"
type=
"index"
>
<template
#header
>
<div>
序号
</div>
</
template
>
</el-table-column>
<el-table-column
prop=
"s"
label=
"省份/直辖市"
min-width=
"160px"
>
</el-table-column>
<el-table-column
prop=
"n"
label=
"医院名称"
align=
"left"
min-width=
"340px"
>
</el-table-column>
<el-table-column
prop=
"a"
label=
"授牌医院"
min-width=
"110px"
class-name=
"mark"
>
</el-table-column>
<el-table-column
prop=
"t"
label=
"填报数据医院"
min-width=
"140px"
class-name=
"mark"
>
</el-table-column>
</el-table>
</div>
</template>
<
script
>
import
tableData
from
"
./tpl
"
export
default
{
data
()
{
return
{
list
:
[
{
label
:
"
名誉理事长
"
,
items
:
[
"
白书忠
"
,
"
程书钧
"
,
"
樊代明
"
,
"
赫捷
"
,
"
林东昕
"
,
"
沈洪兵
"
,
"
沈祖尧
"
,
"
王陇德
"
,
"
于金明
"
,
"
詹启敏
"
,
"
张雁灵
"
,
"
郑树
"
,
],
},
{
label
:
"
顾问
"
,
items
:
[
"
姜庆五
"
,
"
陆星华
"
,
"
夏玉亭
"
,
"
游苏宁
"
,
"
于中麟
"
,
"
袁媛
"
,
"
张齐联
"
,
"
张子琪
"
,
],
},
{
label
:
"
副理事长
"
,
items
:
[
"
曹志强
"
,
"
曾强
"
,
"
陈刚
"
,
"
陈广域
"
,
"
陈昱湖
"
,
"
陈薇娜
"
,
"
陈卫昌
"
,
"
丁俊峰
"
,
"
房静远
"
,
"
冯佶
"
,
"
高峰
"
,
"
郭学刚
"
,
"
何纳
"
,
"
吉朋松
"
,
"
季加孚
"
,
"
金震东
"
,
"
兰平
"
,
"
李少辉
"
,
"
李挺
"
,
"
李汛
"
,
"
李延青
"
,
"
廖专
"
,
"
令孤恩强
"
,
"
刘峰
"
,
"
刘小梅
"
,
"
吕宾
"
,
"
马进
"
,
"
唐承薇
"
,
"
王贵齐
"
,
"
王磊
"
,
"
王立东
"
,
"
邬堂春
"
,
"
吴开春
"
,
"
徐国良
"
,
"
杨爱明
"
,
"
杨嘉林
"
,
"
杨民
"
,
"
杨云生
"
,
"
姚俊杰
"
,
"
张澍田
"
,
"
张晓华
"
,
"
周丽雅
"
,
"
邹晓平
"
,
],
},
{
label
:
"
秘书长
"
,
items
:
[
"
杜奕奇
"
],
},
{
label
:
"
常务副秘书长
"
,
items
:
[
"
柏愚
"
,
"
蔡全才
"
,
"
王洛伟
"
],
},
{
label
:
"
副秘书长
"
,
items
:
[
"
柴宁莉
"
,
"
常佳
"
,
"
董莉君
"
,
"
冀明
"
,
"
李方
"
,
"
李锐
"
,
"
钱朝斌
"
,
"
颜杰
"
,
"
姚方
"
,
"
尹畅
"
,
"
张磊
"
,
],
},
{
label
:
"
秘书
"
,
items
:
[
"
陈丽竹
"
,
"
崔勇
"
,
"
杜寒
"
,
"
郝阳帆
"
,
"
胡良皞
"
,
"
胡亚琴
"
,
"
王天骄
"
,
"
吴萍
"
,
"
辛磊
"
,
"
徐美玲
"
,
"
张辉
"
,
"
张颖
"
,
],
},
{
label
:
"
常务理事
"
,
},
],
tableData
,
}
},
methods
:
{
objectSpanMethod
({
row
,
column
,
rowIndex
,
columnIndex
})
{
if
(
columnIndex
===
1
)
{
if
(
row
.
span
)
{
return
{
rowspan
:
row
.
span
,
colspan
:
1
,
}
}
else
{
return
{
rowspan
:
0
,
colspan
:
0
,
}
}
}
},
},
mounted
()
{},
watch
:
{},
}
</
script
>
<
style
lang=
"scss"
scoped
>
.container
{
padding
:
30px
10px
;
::v-deep
.el-table
{
margin-top
:
20px
;
margin-left
:
20px
;
width
:
820px
;
font-size
:
16px
;
td
.mark
.cell
{
font-weight
:
bold
;
color
:
#4e68ff
;
}
td
.is-left
{
text-align
:
left
;
}
}
h2
{
font-weight
:
bold
;
font-size
:
28px
;
text-align
:
center
;
height
:
36px
;
font-size
:
32px
;
font-family
:
AlibabaPuHuiTiB
;
letter-spacing
:
3px
;
margin-bottom
:
50px
;
color
:
#4e68ff
;
line-height
:
36px
;
}
.sub_title
{
font-size
:
18px
;
font-weight
:
bold
;
color
:
#333333
;
margin
:
10px
20px
;
padding-left
:
15px
;
letter-spacing
:
2px
;
position
:
relative
;
&
:
:
before
{
content
:
" "
;
border-left
:
4px
solid
#4e68ff
;
position
:
absolute
;
height
:
18px
;
top
:
4px
;
left
:
0
;
}
}
.content
{
width
:
800px
;
font-size
:
16px
;
font-family
:
AlibabaPuHuiTiR
;
color
:
#333333
;
line-height
:
35px
;
padding-left
:
50px
;
padding-bottom
:
10px
;
span
{
display
:
inline-block
;
width
:
65px
;
margin-right
:
50px
;
text-align
:
justify
;
text-align-last
:
justify
;
}
}
}
</
style
>
This diff is collapsed.
Click to expand it.
src/views/Home/notice/components/tpl.js
0 → 100644
View file @
e7cc4f5a
This diff is collapsed.
Click to expand it.
src/views/Home/notice/index.vue
0 → 100644
View file @
e7cc4f5a
<
template
>
<el-container>
<el-aside
width=
"240px"
>
<h3
class=
"side_title"
>
通知公告
</h3>
<ul
class=
"side-list"
>
<li
:class=
"currentComponent === name ? 'active' : ''"
v-for=
"
{ isTop, time, name, label } in list"
:key="name"
@click="currentComponent = name"
>
<h4>
{{
label
}}
</h4>
<div>
<span
class=
"isTop"
v-if=
"isTop"
>
置顶
</span>
<span
class=
"time"
>
{{
time
}}
</span>
</div>
</li>
</ul>
</el-aside>
<el-main>
<component
:is=
"currentComponent"
></component>
</el-main>
</el-container>
</
template
>
<
script
>
import
AllianceApply
from
"
./components/AllianceApply.vue
"
import
HospitalsList
from
"
./components/HospitalsList.vue
"
export
default
{
name
:
"
Notice
"
,
components
:
{
AllianceApply
,
HospitalsList
,
},
data
()
{
return
{
list
:
[
{
name
:
"
AllianceApply
"
,
label
:
"
申请加入国家消化道早癌防治中心联盟
"
,
time
:
"
2022-09-20
"
,
isTop
:
true
,
},
{
name
:
"
HospitalsList
"
,
label
:
"
GECA联盟理事及医院名单
"
,
time
:
"
2022-11-20
"
,
isTop
:
true
,
},
],
currentComponent
:
"
AllianceApply
"
,
}
},
methods
:
{},
mounted
()
{},
watch
:
{},
}
</
script
>
<
style
lang=
"scss"
scoped
>
.el-aside
{
background-color
:
#fff
;
border-radius
:
4px
;
.side_title
{
font-size
:
18px
;
font-weight
:
bold
;
color
:
#333333
;
margin
:
20px
;
padding-left
:
15px
;
letter-spacing
:
2px
;
border-radius
:
4px
;
position
:
relative
;
&
:
:
before
{
content
:
" "
;
border-left
:
4px
solid
#4e68ff
;
position
:
absolute
;
height
:
18px
;
top
:
4px
;
left
:
0
;
}
}
.side-list
{
li
{
padding
:
20px
15px
;
cursor
:
pointer
;
font-size
:
12px
;
&
.active
{
background
:
rgba
(
78
,
104
,
255
,
0
.06
);
h4
{
color
:
#4e68ff
;
}
}
h4
{
font-size
:
16px
;
letter-spacing
:
1px
;
font-weight
:
bold
;
line-height
:
26px
;
}
.isTop
{
width
:
32px
;
height
:
20px
;
padding
:
2px
5px
;
color
:
#7085fe
;
background
:
rgba
(
112
,
133
,
254
,
0
.1
);
border-radius
:
1px
;
}
.time
{
color
:
#999999
;
}
}
}
}
.el-main
{
background-color
:
#fff
;
border-radius
:
4px
;
margin-left
:
20px
;
}
</
style
>
This diff is collapsed.
Click to expand it.
src/views/audit-qualitycontrol/index.vue
View file @
e7cc4f5a
...
...
@@ -227,8 +227,12 @@ export default {
this
.
$router
.
push
({
path
:
"
/followaudit
"
,
query
:
{
id
:
data
[
"
id
"
],
unionId
:
data
[
"
unionId
"
],
unionName
:
data
[
"
unionName
"
],
patientId
:
data
.
patientId
,
checkStatus
:
data
[
"
checkStatus
"
],
checkNote
:
data
[
"
checkNote
"
],
},
})
}
else
{
...
...
This diff is collapsed.
Click to expand it.
src/views/followupentry/components/publicDialog.vue
View file @
e7cc4f5a
<
template
>
<div>
<el-dialog
center
:visible.sync=
"dialogVisible"
width=
"40%"
show-close
@
closed=
"cancelSubmit"
>
<el-dialog
center
:visible.sync=
"dialogVisible"
width=
"40%"
show-close
@
closed=
"cancelSubmit"
>
<slot
name=
"content"
></slot>
<slot
name=
"footer"
></slot>
</el-dialog>
...
...
@@ -24,4 +30,9 @@ export default {
},
}
</
script
>
<
style
lang=
"scss"
scoped
></
style
>
<
style
lang=
"scss"
scoped
>
::v-deep
.el-dialog__body
{
border-top
:
none
;
text-align
:
center
;
}
</
style
>
This diff is collapsed.
Click to expand it.
src/views/followupentry/followaudit.vue
View file @
e7cc4f5a
This diff is collapsed.
Click to expand it.
src/views/followupentry/index.vue
View file @
e7cc4f5a
...
...
@@ -88,10 +88,11 @@ export default {
this
.
$router
.
push
({
path
:
"
/followupquery
"
,
query
:
{}
})
},
getFollowList
()
{
const
followId
=
this
.
followId
const
key
=
followId
?
"
followId
"
:
"
patientId
"
getFollowList
({
patientId
:
this
.
patientId
,
[
key
]:
this
[
key
]
,
}).
then
((
res
)
=>
{
// console.log(res)
if
(
res
.
code
==
1
)
{
this
.
screenList
=
res
.
data
||
[]
}
...
...
This diff is collapsed.
Click to expand it.
src/views/followupquery/FollowUpDetail.vue
0 → 100644
View file @
e7cc4f5a
<
template
>
<div>
<FollowReview
:currentRow=
"currentRow"
titlePosition=
"top"
>
<template
#button
>
<el-button
style=
"padding: 8px 20px"
v-if=
"isShowEdit"
@
click=
"handleEdit"
>
修 改
</el-button
>
<el-button
style=
"padding: 8px 20px; margin-left: 20px"
@
click=
"$emit('back')"
>
返 回
</el-button
>
</
template
>
</FollowReview>
</div>
</template>
<
script
>
import
FollowReview
from
"
./components/FollowReview
"
export
default
{
name
:
"
FollowUpDetail
"
,
props
:
{
currentRow
:
{},
},
components
:
{
FollowReview
,
},
data
()
{
return
{}
},
methods
:
{
handleEdit
()
{
const
{
patientId
,
followId
}
=
this
.
currentRow
this
.
$router
.
push
({
path
:
"
/followupentry
"
,
query
:
{
patientId
,
followId
,
model
:
"
edit
"
,
getData
:
1
,
formType
:
2
,
},
})
},
},
computed
:
{
isShowEdit
()
{
const
{
checkStatus
,
followBatch
}
=
this
.
currentRow
return
followBatch
>
0
&&
checkStatus
!==
3
&&
checkStatus
!==
4
},
},
}
</
script
>
This diff is collapsed.
Click to expand it.
src/views/followupquery/components/FollowReview.vue
0 → 100644
View file @
e7cc4f5a
<
template
>
<!-- 随访审核详情 -->
<div
class=
"follow-form"
>
<el-header
v-if=
"titlePosition === 'top'"
>
<div
class=
"follow-tab-top"
>
<el-tabs
v-model=
"activeTab"
type=
"card"
>
<el-tab-pane
label=
"筛查"
name=
"0"
></el-tab-pane>
<el-tab-pane
v-for=
"(item, index) in followList"
:key=
"index"
:label=
"'第' + Number(index + 1) + '次随访数据'"
:name=
"String(index + 1)"
></el-tab-pane>
</el-tabs>
</div>
<div
class=
"extra_btn"
>
<slot
name=
"button"
></slot>
</div>
</el-header>
<el-container>
<el-aside
width=
"auto"
v-if=
"titlePosition === 'left'"
>
<div
class=
"follow-tab"
ref=
"follow-tab"
>
<el-tabs
v-model=
"activeTab"
tab-position=
"right"
style=
"height: 200px"
>
<el-tab-pane
label=
"筛查病例数据"
name=
"0"
>
<template
slot=
"label"
>
<div
class=
"tab-label"
>
筛查病例数据
</div></
template
>
</el-tab-pane>
<el-tab-pane
v-for=
"(item, index) in followList"
:key=
"index"
:name=
"String(index + 1)"
>
<
template
slot=
"label"
>
<div
class=
"tab-label"
>
{{
"
第
"
+
Number
(
index
+
1
)
+
"
次随访数据
"
}}
</div></
template
>
</el-tab-pane>
</el-tabs>
</div>
</el-aside>
<el-main
class=
"transition-box"
v-loading=
"fromLoading"
>
<div
class=
"my_form"
>
<MyCustomForm
v-show=
"activeTab === '0'"
v-for=
"form in formTabs"
:key=
"form.id"
:form=
"form"
:patientId=
"currentRow.patientId"
></MyCustomForm>
<MyCustomForm
v-show=
"activeTab !== '0'"
v-for=
"form in followForms"
:key=
"form.id"
:form=
"form"
:patientId=
"currentRow.patientId"
:followId=
"followId"
></MyCustomForm>
</div>
</el-main>
<el-aside
width=
"auto"
class=
"transition-box"
>
<div
class=
"follow-list"
>
<ul
class=
"list"
>
<li
v-for=
"(item, index) in screenList"
:key=
"index"
>
<div
class=
"time"
>
{{ item.update_time || item.create_time }}
</div>
<div
class=
"time"
>
{{ item.update_user_name || item.create_time }}
</div>
<div
class=
"time"
>
{{ item.sub_title }}
</div>
</li>
</ul>
</div>
</el-aside>
</el-container>
</div>
</template>
<
script
>
import
{
mapGetters
}
from
"
vuex
"
import
CustomForm
from
"
@/components/FormComponents/CustomForm/index
"
import
MyCustomForm
from
"
./MyCustomForm.vue
"
import
{
getCurrentFormByType
}
from
"
@/api/coop-group.js
"
import
{
getFollowList
}
from
"
@/api/patient
"
import
{
getFollowRecord
}
from
"
@/api/followup
"
export
default
{
name
:
"
FollowReview
"
,
components
:
{
CustomForm
,
MyCustomForm
,
},
provide
()
{
return
{
showIndex
:
true
,
}
},
props
:
{
currentRow
:
{},
titlePosition
:
{
type
:
String
,
default
:
"
left
"
,
validator
:
function
(
value
)
{
return
[
"
left
"
,
"
top
"
].
includes
(
value
)
},
},
},
data
()
{
return
{
fromLoading
:
false
,
formTabs
:
[],
followForms
:
[],
activeTab
:
"
0
"
,
screenList
:
[],
followList
:
[],
}
},
computed
:
{
...
mapGetters
({
group
:
[
"
user/group
"
],
}),
isEmpty
()
{
return
this
.
formTabs
.
length
},
followId
()
{
return
(
(
this
.
followList
[
this
.
activeTab
-
1
]
&&
this
.
followList
[
this
.
activeTab
-
1
].
followId
)
||
null
)
},
},
watch
:
{
followId
()
{
this
.
getLogList
()
},
"
currentRow.patientId
"
:
{
handler
(
val
)
{
if
(
val
)
{
this
.
getCurrentFormByType
()
this
.
getFollowInfo
()
this
.
getLogList
()
}
},
immediate
:
true
,
},
},
methods
:
{
getLogList
()
{
const
obj
=
{
patientId
:
this
.
currentRow
.
patientId
,
followId
:
this
.
followId
,
}
const
key
=
obj
.
followId
?
"
followId
"
:
"
patientId
"
getFollowList
({
[
key
]:
obj
[
key
],
}).
then
((
res
)
=>
{
if
(
res
.
code
==
1
)
{
this
.
screenList
=
res
.
data
||
[]
}
})
},
getCurrentFormByType
(
type
=
1
)
{
this
.
fromLoading
=
true
getCurrentFormByType
({
type
,
groupId
:
this
.
group
.
groupId
,
}).
then
((
res
)
=>
{
this
.
fromLoading
=
false
if
(
res
.
code
===
1
)
{
const
list
=
res
.
data
.
map
((
item
,
index
)
=>
{
return
{
id
:
item
.
id
,
formId
:
item
.
formId
,
label
:
item
.
tabName
,
}
})
if
(
type
===
2
)
{
this
.
followForms
=
list
}
else
{
this
.
formTabs
=
list
}
}
})
},
getFollowRecord
()
{
getFollowRecord
({
patientId
:
this
.
currentRow
.
patientId
,
patientFrom
:
this
.
$store
.
getters
[
"
table/selectedIndex
"
],
}).
then
((
res
)
=>
{
this
.
followList
=
res
.
data
.
filter
((
_
)
=>
_
.
followBatch
>
0
)
const
len
=
this
.
followList
.
length
this
.
activeTab
=
String
(
len
)
const
el
=
this
.
$refs
[
"
follow-tab
"
]
if
(
el
&&
len
>
10
)
{
setTimeout
(()
=>
{
el
.
scrollTop
=
(
len
-
10
)
*
60
},
0
)
}
})
},
getFollowInfo
()
{
const
{
followBatch
}
=
this
.
currentRow
if
(
!
followBatch
)
return
this
.
getCurrentFormByType
(
2
)
this
.
getFollowRecord
()
},
},
}
</
script
>
<
style
lang=
"scss"
scoped
>
.el-header
{
display
:
flex
;
margin-top
:
20px
;
padding-right
:
0
;
justify-content
:
space-between
;
}
.follow-tab-top
{
width
:
calc
(
100vh
-
200px
);
padding-left
:
10px
;
::v-deep
{
.el-tabs--card
>
.el-tabs__header
{
border-bottom
:
none
;
}
.el-tabs--card
>
.el-tabs__header
.el-tabs__nav
{
border
:
none
;
}
.el-tabs--card
>
.el-tabs__header
.el-tabs__item
{
min-width
:
116px
;
text-align
:
center
;
background
:
#f0f1fa
;
font-size
:
14px
;
border
:
none
;
}
.el-tabs--card
>
.el-tabs__header
.el-tabs__item.is-active
{
background
:
#4e68ff
;
color
:
#fff
;
}
}
}
.my_form
{
height
:
calc
(
100vh
-
280px
);
overflow-y
:
auto
;
}
.el-main
{
padding
:
0px
20px
;
}
.extra_btn
{
width
:
170px
;
text-align
:
right
;
margin-top
:
5px
;
}
.follow-tab
{
border-radius
:
4px
;
border
:
1px
solid
#cccccc
;
height
:
calc
(
100vh
-
280px
);
overflow
:
overlay
;
::v-deep
{
.tab-label
{
border-bottom
:
1px
solid
#ccc
;
padding
:
0
20px
;
height
:
52px
;
line-height
:
52px
;
}
.el-tabs__header
{
margin-left
:
0px
;
}
.
el-tabs__nav-wrap
.
is-right
:
:
after
{
width
:
0px
;
}
.el-tabs__active-bar.is-right
{
width
:
3px
;
}
.el-tabs--right
{
height
:
auto
!
important
;
}
.tab-title
{
padding
:
16px
;
background
:
#fafafa
;
color
:
#333333
;
border-bottom
:
1px
solid
#cccccc
;
}
.el-tabs__item
{
width
:
180px
;
padding
:
0
;
background
:
#fafafa
;
height
:
52px
;
line-height
:
52px
;
transition
:
all
1s
;
}
.el-tabs__item.is-active
{
background
:
transparent
;
}
}
}
.follow-list
{
border-radius
:
4px
;
border
:
1px
solid
#cccccc
;
height
:
100%
;
background
:
#fafafa
;
height
:
calc
(
100vh
-
280px
);
overflow-y
:
overlay
;
li
{
padding
:
18px
22px
;
border-bottom
:
1px
solid
#ccc
;
// cursor: pointer;
.time
{
font-size
:
14px
;
margin-bottom
:
8px
;
font-family
:
AlibabaPuHuiTiR
;
text-align
:
left
;
&
:first-child
{
color
:
#4e68ff
;
}
}
}
}
</
style
>
This diff is collapsed.
Click to expand it.
src/views/followupquery/components/MyCustomForm.vue
0 → 100644
View file @
e7cc4f5a
<
template
>
<div>
<el-skeleton
v-if=
"isEmpty"
animated
/>
<custom-form
v-if=
"!isEmpty"
class=
"mb-20"
v-loading=
"pageLoading"
ref=
"form"
:options=
"widgetFormPreview"
:form-edit=
"formEdit"
></custom-form>
</div>
</
template
>
<
script
>
import
{
getPatientDetail
,
getFollowDetail
}
from
"
@/api/patient.js
"
import
{
getFormDetail
}
from
"
@/api/field
"
import
CustomForm
from
"
@/components/FormComponents/CustomForm/index
"
export
default
{
name
:
"
MyCustomForm
"
,
components
:
{
CustomForm
},
props
:
{
form
:
{},
patientId
:
{},
followId
:
{},
},
data
()
{
return
{
widgetFormPreview
:
{},
loading
:
false
,
formLoading
:
false
,
formEdit
:
{},
formRecordId
:
null
,
}
},
computed
:
{
isEmpty
()
{
return
!
(
Object
.
keys
(
this
.
widgetFormPreview
)
||
this
.
widgetFormPreview
)
.
length
},
getTabFollowId
()
{
return
this
.
tabFollowId
()
},
pageLoading
()
{
return
this
.
loading
||
this
.
formLoading
},
},
watch
:
{
followId
:
{
handler
()
{
this
.
getFollowDetail
()
},
immediate
:
true
,
},
},
created
()
{
this
.
initData
()
this
.
initForm
()
},
methods
:
{
initData
()
{
this
.
getPatientDetail
()
},
initForm
()
{
this
.
formLoading
=
true
getFormDetail
(
this
.
form
.
formId
)
.
then
((
res
)
=>
{
if
(
res
.
code
===
1
&&
res
.
data
)
{
const
formJson
=
res
.
data
.
formJson
this
.
$emit
(
"
setFormJson
"
,
formJson
)
const
obj
=
eval
(
"
(
"
+
formJson
+
"
)
"
)
obj
.
disabled
=
true
obj
.
closeBtn
=
true
obj
.
detail
=
true
this
.
widgetFormPreview
=
obj
}
})
.
finally
(()
=>
{
this
.
formLoading
=
false
})
},
getFollowDetail
()
{
// 随访数据查询
if
(
!
this
.
followId
)
return
this
.
$nextTick
(()
=>
{
this
.
$refs
.
form
&&
this
.
$refs
.
form
.
resetForm
()
})
this
.
loading
=
true
getFollowDetail
({
followId
:
this
.
followId
,
formId
:
this
.
form
.
formId
,
})
.
then
((
res
)
=>
{
this
.
formatData
(
res
)
})
.
finally
(()
=>
{
this
.
loading
=
false
})
},
getPatientDetail
()
{
// 筛查数据查询
this
.
$nextTick
(()
=>
{
this
.
$refs
.
form
&&
this
.
$refs
.
form
.
resetForm
()
})
if
(
!
this
.
patientId
||
this
.
followId
)
return
this
.
loading
=
true
getPatientDetail
({
patientId
:
this
.
patientId
,
formId
:
this
.
form
.
formId
,
})
.
then
((
res
)
=>
{
this
.
formatData
(
res
)
})
.
finally
(()
=>
{
this
.
loading
=
false
})
},
formatData
(
res
,
cache
)
{
const
d
=
res
.
data
||
{}
const
form
=
d
.
data
||
{}
for
(
const
key
in
form
)
{
Object
.
prototype
.
toString
.
call
(
form
[
key
])
==
"
[object Number]
"
?
(
form
[
key
]
=
String
(
form
[
key
]))
:
""
}
this
.
formEdit
=
form
},
},
}
</
script
>
<
style
scoped
lang=
"scss"
>
.el-main
{
position
:
relative
;
padding
:
0
;
// box-shadow: 0px 5px 4px red;
.arrow
{
position
:
absolute
;
right
:
0
;
top
:
0
;
cursor
:
pointer
;
font-size
:
22px
;
z-index
:
9
;
}
.header
{
height
:
5px
;
box-shadow
:
0px
3px
4px
rgb
(
0
21
41
/
8%
);
padding-right
:
20px
;
position
:
relative
;
font-size
:
15px
;
z-index
:
999
;
}
}
.el-aside
{
padding-left
:
10px
;
border-left
:
1px
solid
#ccc
;
.side-content
{
height
:
calc
(
100vh
-
#{
"272px"
}
);
// overflow: auto;
}
}
.my-form
{
// height: calc(100vh - #{"310px"});
overflow-y
:
auto
;
padding-top
:
20px
;
// position: relative;
&
:
:-
webkit-scrollbar-thumb
{
background-color
:
#fff
;
}
&
:hover::-webkit-scrollbar-thumb
{
background-color
:
rgba
(
0
,
0
,
0
,
0
.4
);
}
&
.no-scroll
{
height
:
auto
;
}
}
.label
{
font-size
:
14px
;
color
:
#8492a6
;
line-height
:
38px
;
float
:
left
;
margin-right
:
20px
;
}
.value
{
font-size
:
14px
;
line-height
:
38px
;
float
:
left
;
font-weight
:
600
;
margin-right
:
50px
;
}
.el-slider
{
float
:
left
;
width
:
150px
;
}
</
style
>
This diff is collapsed.
Click to expand it.
src/views/followupquery/index.vue
View file @
e7cc4f5a
<
template
>
<!-- 随访查询 -->
<div
class=
"screeningSearch"
>
<div
class=
"top"
>
<form-components
ref=
"form"
:forms=
"formList"
:form-edit=
"formEdit"
@
handleSearch=
"onSearch"
></form-components>
</div>
<div
class=
"bot"
>
<el-table-self
ref=
"table"
:table-data=
"tableData"
:columns=
"columns"
:header-class=
"'newHeader'"
:list-loading=
"listLoading"
:current-page=
"pageIndex"
:total-count=
"total"
:page-sizes=
"pageSizes"
:page-size=
"pageSize"
@
pageSizeChange=
"handleSizeChange"
@
currentPageChange=
"handleCurrentChange"
/>
<div
v-show=
"!isDetail"
>
<div
class=
"top"
>
<form-components
ref=
"form"
:forms=
"formList"
:form-edit=
"formEdit"
@
handleSearch=
"onSearch"
></form-components>
</div>
<div
class=
"bot"
>
<el-table-self
ref=
"table"
:table-data=
"tableData"
:columns=
"columns"
:header-class=
"'newHeader'"
:list-loading=
"listLoading"
:current-page=
"pageIndex"
:total-count=
"total"
:page-sizes=
"pageSizes"
:page-size=
"pageSize"
@
pageSizeChange=
"handleSizeChange"
@
currentPageChange=
"handleCurrentChange"
/>
</div>
</div>
<FollowUpDetail
:currentRow=
"currentRow"
v-if=
"isDetail"
@
back=
"back"
></FollowUpDetail>
</div>
</
template
>
<
script
>
import
FormComponents
from
"
@/components/FormComponents
"
import
CustomsTable
from
"
@/components/CustomsTable
"
import
paginationMixin
from
"
@/components/TabComponents/mixin
"
import
searchMixin
from
"
../searchMixin
"
import
{
getCurrentFormByType
}
from
"
@/api/coop-group.js
"
import
{
getFollowSearch
}
from
"
@/api/followup
"
import
{
getDictDetail
}
from
"
@/api/dict.js
"
import
FollowUpDetail
from
"
./FollowUpDetail.vue
"
export
default
{
components
:
{
FormComponents
,
// CustomsTable
,
FollowUpDetail
,
},
mixins
:
[
paginationMixin
,
searchMixin
],
data
()
{
return
{
isDetail
:
false
,
followId
:
""
,
listLoading
:
false
,
keyword
:
""
,
...
...
@@ -98,6 +105,17 @@ export default {
return
row
.
screeningTime
?
row
.
screeningTime
:
"
--
"
},
},
{
label
:
"
审核状态
"
,
value
:
"
checkStatus
"
,
minWidth
:
120
,
formatter
:
(
row
)
=>
{
return
this
.
$handle
.
formatDicList
(
this
.
dictMap
[
"
checkStatus
"
],
String
(
row
.
checkStatus
)
)
},
},
{
label
:
"
风险评估结果
"
,
minWidth
:
120
,
...
...
@@ -138,34 +156,29 @@ export default {
operations
:
[
{
isIndex
:
true
,
func
:
this
.
rowOpration
,
func
:
this
.
handleDetail
,
formatter
(
row
)
{
return
{
label
:
"
查
询
"
,
label
:
"
查
看
"
,
type
:
"
text
"
,
}
},
},
// {
// isIndex: true,
// func: this.handleEdit,
// formatter(row) {
// if (row.checkStatus != 3 && row.checkStatus != 4) {
// return {
// label: "修改",
// type: "text",
// }
// } else {
// return {
// label: "",
// type: "text",
// style: {
// display: "none",
// },
// }
// }
// },
// },
{
isIndex
:
true
,
func
:
this
.
handleEdit
,
formatter
(
row
)
{
return
{
label
:
"
修改
"
,
type
:
"
text
"
,
}
},
isHidden
({
checkStatus
,
followBatch
})
{
return
(
checkStatus
===
3
||
checkStatus
===
4
||
followBatch
===
0
)
},
},
],
},
],
...
...
@@ -252,6 +265,7 @@ export default {
},
],
formEdit
:
{},
currentRow
:
{},
}
},
watch
:
{
...
...
@@ -262,28 +276,15 @@ export default {
pageIndex
(
val
)
{
sessionStorage
.
setItem
(
"
followQuery-pageIndex
"
,
val
)
},
followId
(
v
)
{
if
(
v
)
{
this
.
listLoading
=
true
this
.
$nextTick
(()
=>
{
setTimeout
(()
=>
{
this
.
listLoading
=
false
let
query
=
{
...
this
.
$route
.
query
}
this
.
$router
.
replace
({
query
:
{}
})
this
.
$router
.
push
({
path
:
"
/followupentry
"
,
query
:
query
,
})
},
500
)
})
}
},
},
created
()
{
this
.
initSearchForm
()
},
mounted
()
{
this
.
followId
=
this
.
$route
.
query
.
followId
const
followId
=
this
.
$route
.
query
.
followId
if
(
followId
)
{
this
.
handleDetail
({
...
this
.
$route
.
query
})
}
// this.formEdit = sessionStorage.getItem('followQuery-form') ? JSON.parse(sessionStorage.getItem('followQuery-form')) : {}
this
.
pageSize
=
Number
(
sessionStorage
.
getItem
(
"
followQuery-pageSize
"
))
||
10
this
.
pageIndex
=
...
...
@@ -291,6 +292,13 @@ export default {
this
.
getCurrentFormByType
(
2
)
},
methods
:
{
back
()
{
this
.
isDetail
=
false
const
followId
=
this
.
$route
.
query
.
followId
if
(
followId
)
{
this
.
$router
.
replace
({
path
:
"
/followupquery
"
,
query
:
{}
})
}
},
changeModified
()
{
this
.
modifiedFlag
=
!
this
.
modifiedFlag
},
...
...
@@ -310,35 +318,13 @@ export default {
followId
:
data
.
id
,
model
:
"
edit
"
,
getData
:
1
,
formType
:
2
,
},
})
},
rowOpration
(
data
,
i
,
index
)
{
console
.
log
(
data
)
if
(
data
.
followBatch
==
0
)
{
// 筛查
this
.
$router
.
push
({
path
:
"
/followupentry
"
,
query
:
{
patientId
:
data
.
patientId
,
followId
:
data
.
id
,
model
:
"
view
"
,
getData
:
1
,
formType
:
1
,
// 去筛查的表单还是随访的表单
},
})
}
else
{
this
.
$router
.
push
({
path
:
"
/followupentry
"
,
query
:
{
patientId
:
data
.
patientId
,
followId
:
data
.
id
,
model
:
"
view
"
,
getData
:
1
,
formType
:
2
,
},
})
}
handleDetail
(
row
)
{
this
.
isDetail
=
true
this
.
currentRow
=
row
},
onSearch
(
form
)
{
console
.
log
(
form
)
...
...
@@ -352,7 +338,6 @@ export default {
},
async
handleSearch
()
{
this
.
listLoading
=
true
console
.
log
(
this
.
$refs
.
form
.
form
)
let
params
=
{
pageSize
:
this
.
pageSize
,
...
...
This diff is collapsed.
Click to expand it.
src/views/followupresearch/index.vue
View file @
e7cc4f5a
...
...
@@ -95,6 +95,7 @@ export default {
return
row
.
screeningTime
?
row
.
screeningTime
:
"
--
"
},
},
{
label
:
"
风险评估结果
"
,
minWidth
:
120
,
...
...
@@ -275,7 +276,6 @@ export default {
},
changePage
(
v
)
{
this
.
page
[
v
.
type
]
=
v
.
value
console
.
log
(
this
.
page
)
this
.
$refs
.
customTable
.
loading
=
false
},
onSearch
(
form
)
{
...
...
@@ -285,7 +285,6 @@ export default {
this
.
handleSearch
()
},
rowOpration
(
data
,
i
)
{
console
.
log
(
"
跳转
"
,
data
,
i
)
sessionStorage
.
setItem
(
"
formEdit
"
,
JSON
.
stringify
(
data
))
this
.
$router
.
push
({
path
:
`/followupentry`
,
...
...
This diff is collapsed.
Click to expand it.
src/views/screening/components/ConfigForms.vue
View file @
e7cc4f5a
...
...
@@ -393,8 +393,7 @@ export default {
query
:
{
patientId
:
this
.
patientId
,
followId
:
this
.
followId
||
this
.
tabFollowId
,
model
:
"
view
"
,
getData
:
1
,
followBatch
:
1
,
},
})
this
.
$refs
.
followDialog
.
dialogVisible
=
false
...
...
This diff is collapsed.
Click to expand it.
src/views/screening/components/FormTab.vue
View file @
e7cc4f5a
...
...
@@ -306,8 +306,9 @@ export default {
params
.
statusMap
.
is_draft
=
this
.
isDraft
}
// 处理followId 针对随访查询的列表数据的查询和修改操作
if
(
this
.
$route
.
path
==
"
/followupentry
"
&&
this
.
activeName
!=
"
index0
"
)
{
if
(
this
.
$route
.
path
==
"
/followupentry
"
)
{
params
.
followId
=
this
.
followId
||
this
.
getTabFollowId
params
.
formRecordId
=
this
.
formData
.
formRecordId
}
this
.
$emit
(
"
handleConfirm
"
,
params
,
done
,
(
res
)
=>
{
// 多次填写的表单新增时,获取最新数据
...
...
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