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
e53e4755
Commit
e53e4755
authored
Sep 04, 2024
by
gengchunlei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
慢综 医生端 新增通用随访表单
parent
26573305
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
453 additions
and
9 deletions
+453
-9
doc-PDF.svg
src/assets/icons/doctor/doc-PDF.svg
+14
-0
doc-remove.svg
src/assets/icons/doctor/doc-remove.svg
+5
-0
doc-upload.svg
src/assets/icons/doctor/doc-upload.svg
+4
-0
Doctor.vue
src/doctor/Doctor.vue
+2
-1
BaseInfo.vue
src/doctor/followUp/generalFU/form/BaseInfo.vue
+6
-2
CommonBottom.vue
src/doctor/followUp/generalFU/form/CommonBottom.vue
+14
-0
GeneralFUForm.vue
src/doctor/followUp/generalFU/form/GeneralFUForm.vue
+373
-0
Index.vue
src/doctor/followUp/generalFU/form/Index.vue
+35
-6
No files found.
src/assets/icons/doctor/doc-PDF.svg
0 → 100644
View file @
e53e4755
<svg
width=
"49"
height=
"49"
viewBox=
"0 0 49 49"
fill=
"none"
xmlns=
"http://www.w3.org/2000/svg"
>
<g
clip-path=
"url(#clip0_13977_51373)"
>
<path
d=
"M42.7639 43.4589C42.7601 44.0625 42.5187 44.6402 42.092 45.067C41.6652 45.4937 41.0875 45.7351 40.4839 45.7389H8.49195C8.19253 45.7406 7.89584 45.682 7.61957 45.5665C7.3433 45.4511 7.09312 45.2812 6.88395 45.0669C6.67165 44.8563 6.50302 44.6058 6.3877 44.3299C6.27239 44.054 6.21266 43.758 6.21195 43.4589V2.29896C6.21025 1.99954 6.26888 1.70285 6.38433 1.42658C6.49979 1.15031 6.6697 0.900128 6.88395 0.690956C7.09312 0.476712 7.3433 0.306793 7.61957 0.191338C7.89584 0.0758829 8.19253 0.0172567 8.49195 0.0189568H28.1239C28.7351 0.0200682 29.3212 0.261433 29.7559 0.690956L42.1159 13.0509C42.3306 13.2648 42.5005 13.5193 42.6159 13.7994C42.7312 14.0796 42.7897 14.3799 42.7879 14.6829V43.4589H42.7639Z"
fill=
"#FFF1F0"
/>
<path
d=
"M1.62793 22.0402H47.3479V33.4642C47.3479 34.0688 47.1077 34.6488 46.6801 35.0764C46.2525 35.5039 45.6726 35.7442 45.0679 35.7442H3.93193C3.63251 35.7459 3.33582 35.6872 3.05955 35.5718C2.78328 35.4563 2.5331 35.2864 2.32393 35.0722C2.1093 34.8583 1.93935 34.6038 1.82398 34.3237C1.70862 34.0435 1.65013 33.7432 1.65193 33.4402V22.0402H1.62793Z"
fill=
"#FF4D80"
/>
<path
d=
"M6.21193 22.0404V17.4564L1.62793 22.0404H6.21193ZM42.7639 22.0404L42.8119 17.4564L47.3719 22.0404H42.7639Z"
fill=
"#DD4C75"
/>
<path
d=
"M42.764 14.6829V14.9949H30.404C29.7993 14.9949 29.2194 14.7547 28.7918 14.3271C28.3642 13.8995 28.124 13.3196 28.124 12.7149V0.0189209C28.7351 0.0200323 29.3213 0.261397 29.756 0.69092L42.14 13.0509C42.3479 13.2674 42.5102 13.5234 42.6174 13.8037C42.7245 14.084 42.7744 14.383 42.764 14.6829Z"
fill=
"#FFCCC7"
/>
<path
d=
"M13.4814 24.3722H16.6014C18.5574 24.3722 20.1678 25.0634 20.1678 27.2522C20.1678 29.3618 18.5334 30.2906 16.6614 30.2906H15.6198V33.2378H13.4814V24.3722ZM16.5462 28.6178C17.583 28.6178 18.0822 28.1378 18.0822 27.2594C18.0822 26.381 17.511 26.0594 16.4862 26.0594H15.6198V28.6178H16.5462ZM21.6726 24.3722H24.2262C26.931 24.3722 28.7214 25.673 28.7214 28.7594C28.7214 31.8458 26.931 33.245 24.3438 33.245H21.6726V24.3722ZM24.0942 31.5266C25.5342 31.5266 26.5374 30.8714 26.5374 28.7594C26.5374 26.6474 25.5246 26.0666 24.0942 26.0666H23.8086V31.5266H24.0942ZM30.3678 24.3722H36.0318V26.1362H32.5014V28.0898H35.5398V29.8682H32.5014V33.2546H30.3678V24.3722Z"
fill=
"#FDFEFF"
/>
</g>
<defs>
<clipPath
id=
"clip0_13977_51373"
>
<rect
width=
"48"
height=
"48"
fill=
"white"
transform=
"translate(0.5 0.0189209)"
/>
</clipPath>
</defs>
</svg>
src/assets/icons/doctor/doc-remove.svg
0 → 100644
View file @
e53e4755
<svg
width=
"25"
height=
"25"
viewBox=
"0 0 25 25"
fill=
"none"
xmlns=
"http://www.w3.org/2000/svg"
>
<circle
opacity=
"0.8"
cx=
"12.8335"
cy=
"12.689"
r=
"8"
fill=
"#1F1F1F"
/>
<path
d=
"M10.167 10.0222L15.5003 15.3556"
stroke=
"white"
stroke-width=
"1.2"
stroke-linecap=
"round"
stroke-linejoin=
"round"
/>
<path
d=
"M15.5005 10.0222L10.1672 15.3556"
stroke=
"white"
stroke-width=
"1.2"
stroke-linecap=
"round"
stroke-linejoin=
"round"
/>
</svg>
src/assets/icons/doctor/doc-upload.svg
0 → 100644
View file @
e53e4755
<svg
width=
"20"
height=
"21"
viewBox=
"0 0 20 21"
fill=
"none"
xmlns=
"http://www.w3.org/2000/svg"
>
<path
d=
"M7.75993 17.1936C5.98659 17.33 2.35807 16.7844 2.03068 13.5105C1.70329 10.2367 4.07684 9.1454 5.30454 9.00898C5.44085 7.23564 6.69562 3.68896 10.6243 3.68896C14.5529 3.68896 15.2622 7.23564 15.1258 9.00898C16.4899 9.41822 19.0544 10.9733 18.3997 13.9198C17.7449 16.8662 14.3073 17.33 12.6704 17.1936"
stroke=
"#607FF0"
stroke-width=
"1.6"
stroke-linecap=
"round"
stroke-linejoin=
"bevel"
/>
<path
d=
"M7.72949 12.692L10.1849 10.2366M10.1849 10.2366L12.6403 12.692M10.1849 10.2366V17.1935"
stroke=
"#607FF0"
stroke-width=
"1.6"
stroke-linecap=
"round"
stroke-linejoin=
"round"
/>
</svg>
src/doctor/Doctor.vue
View file @
e53e4755
...
...
@@ -43,7 +43,8 @@ export default {
async
init
()
{
let
token
=
getQueryVariable
(
'token'
)
if
(
!
token
)
{
token
=
sessionStorage
.
getItem
(
'token'
)
// token = sessionStorage.getItem('token')
token
=
'25ad0e70-c2a1-40e4-a121-45d139f4d7d2'
}
if
(
token
)
{
sessionStorage
.
setItem
(
'token'
,
token
)
...
...
src/doctor/followUp/generalFU/form/BaseInfo.vue
View file @
e53e4755
...
...
@@ -501,7 +501,7 @@ const defaultForm = (info = {}) => {
lossReason
:
undefined
,
deathReason
:
undefined
,
lossReasonOther
:
undefined
,
visitWay
:
undefined
,
visitWay
:
'5'
,
isHealthGuide
:
undefined
,
screenTime
:
new
dayjs
().
add
(
1
,
'day'
).
format
(
'YYYY-MM-DD'
),
}
...
...
@@ -617,6 +617,11 @@ export default {
this
.
form
.
screenTime
=
selectedValues
.
join
(
'-'
)
this
.
showTime2
=
false
},
toNext
()
{
// this.$refs.form.validate().then(() => {
this
.
$emit
(
'changeStep'
,
2
)
// }).catch(err => console.warn(err))
},
onSubmit
()
{
return
new
Promise
((
resolve
,
reject
)
=>
{
this
.
$refs
.
form
.
validate
().
then
(()
=>
{
...
...
@@ -700,7 +705,6 @@ export default {
:deep(.van-field__error-message) {
position: absolute;
top: 31px;
}
:deep(.van-cell:after) {
border-bottom: 0px;
...
...
src/doctor/followUp/generalFU/form/CommonBottom.vue
0 → 100644
View file @
e53e4755
<
template
>
<div>
底部
</div>
</
template
>
<
script
>
export
default
{
name
:
'CommonBottom'
}
</
script
>
<
style
scoped
>
</
style
>
\ No newline at end of file
src/doctor/followUp/generalFU/form/GeneralFUForm.vue
0 → 100644
View file @
e53e4755
<
template
>
<div>
<van-form
ref=
'form'
>
<div
class=
'title'
>
随访信息
</div>
<van-cell-group
inset
>
<div
class=
'no-req-label'
>
随访内容
</div>
<van-field
v-model=
'form.visitContent'
placeholder=
'随访内容'
class=
'input-back mt-2 form-input'
rows=
'2'
autosize
type=
'textarea'
/>
<div
class=
'no-req-label mt-5'
>
处置意见
</div>
<van-field
v-model=
'form.idCard'
rows=
'2'
autosize
type=
'textarea'
placeholder=
'处置意见'
class=
'input-back mt-2 form-input'
/>
<div
class=
'no-req-label mt-5'
>
健康指导
</div>
<div
class=
'health mt-2'
>
<div
class=
'health-cell mt-2'
v-for=
'item in form.visitHealthGuideList'
>
<div
class=
'no-req-label'
v-if=
"item.name != '无'"
>
{{
item
.
name
}}
</div>
<van-field
v-model=
'item.templateContent'
rows=
'1'
autosize
type=
'textarea'
placeholder=
'请输入'
class=
'input-back mt-2 form-input'
/>
</div>
</div>
<div
class=
'no-req-label mt-5'
>
上传随访记录
</div>
<div
class=
'tips'
>
支持上传jpg、png、jpeg文件,大小请在10M以内
</div>
<div
class=
'img-btn mt-2'
@
click=
'toUpload'
>
<input
type=
'file'
id=
'imgId'
multiple
@
change=
'choiceImg'
style=
'display: none'
:key=
'new Date().getTime()'
>
<div
class=
'flex items-center justify-center'
>
<div>
<doc-icon
type=
'doc-upload'
class=
'doc-up'
/>
</div>
<div
class=
'ml-2'
>
上传图片
</div>
</div>
</div>
<div
class=
'flex items-center'
style=
'flex-wrap: wrap'
>
<div
v-for=
'(item, index) in imgList'
>
<!-- 图片-->
<div
v-if=
"item.imgFlag == 'img'"
class=
'mt-2'
style=
'position: relative'
>
<div>
<doc-icon
type=
'doc-remove'
class=
'remove'
@
click=
'delImg(item.indexF)'
></doc-icon>
</div>
<img
:src=
'item.src'
class=
'ml-2'
style=
'width: 95px;height: 95px;'
@
click=
'toPreview(index)'
>
</div>
</div>
</div>
<!-- pdf-->
<div>
<div
v-for=
'item in imgList'
>
<div
class=
'mt-2 pdf'
v-if=
"item.imgFlag == 'pdf'"
>
<div
class=
'flex items-center justify-between'
>
<div
class=
'flex items-center'
@
click
.
stop=
'toPdf(item)'
>
<div>
<doc-icon
type=
'doc-PDF'
style=
'font-size: .48rem'
></doc-icon>
</div>
<div
class=
'ml-1'
>
{{
item
.
name
}}
</div>
</div>
<div>
<span><doc-icon
type=
'doc-remove'
style=
'font-size: .24rem'
@
click=
'delImg(item.indexF)'
></doc-icon></span>
</div>
</div>
</div>
</div>
</div>
<div
class=
'label-title mt-5'
>
下次随访日期
</div>
<van-field
v-model=
'form.nextVisitDate'
is-link
disabled
placeholder=
'下次随访日期'
class=
'input-back mt-2 form-input'
@
click=
"showDate = true"
:rules=
'rules.nextVisitDate'
/>
<van-popup
v-model:show=
"showDate"
position=
"bottom"
>
<van-date-picker
@
confirm=
"dataConfirm"
@
cancel=
"showDate = false"
/>
</van-popup>
</van-cell-group>
</van-form>
</div>
</
template
>
<
script
>
import
{
useStore
}
from
'@/resident/store'
import
dayjs
from
'dayjs'
import
DocIcon
from
'@/components/docIcon/DocIcon'
import
{
showImagePreview
}
from
'vant'
export
default
{
name
:
'GeneralFUForm'
,
components
:
{
DocIcon
},
props
:
{
info
:
{
default
:
()
=>
{
return
{}
}
}
},
data
()
{
return
{
store
:
useStore
(),
authInfo
:
{},
form
:
{},
imgList
:
[],
showDate
:
false
,
rules
:
{
nextVisitDate
:
[{
required
:
true
,
message
:
'请选择'
}]
}
}
},
watch
:
{
'info'
:
{
handler
()
{
this
.
form
=
this
.
setForm
(
this
.
info
)
},
immediate
:
true
}
},
methods
:
{
setForm
(
info
=
{})
{
const
modeArray
=
this
.
store
.
getDict
(
'DC00084'
)
let
visitHealthGuideList
=
[]
if
(
info
.
healthGuideContent
)
{
visitHealthGuideList
=
JSON
.
parse
(
info
.
healthGuideContent
)
}
const
form
=
{
id
:
info
.
id
,
diseaseType
:
info
.
diseaseType
,
visitDate
:
info
.
visitDate
||
new
dayjs
(),
nextVisitDate
:
info
.
nextVisitDate
,
isSms
:
info
.
isSms
,
isWx
:
info
.
isWx
,
visitContent
:
info
.
visitContent
,
disposalOpinion
:
info
.
disposalOpinion
,
uploadVisitRecord
:
info
.
uploadVisitRecord
,
sceneVisitImage
:
info
.
sceneVisitImage
,
sendInfo
:
info
.
sendInfo
,
visitHealthGuideList
:
modeArray
.
map
(
e
=>
{
const
item
=
visitHealthGuideList
.
find
(
i
=>
i
.
templateMode
===
e
.
value
)
return
{
templateMode
:
e
.
value
,
name
:
e
.
name
,
templateContent
:
item
?
item
.
templateContent
:
''
,
id
:
item
?
item
.
visitId
:
''
}
})
}
return
form
},
setTemForm
(
info
)
{
const
modeArray
=
this
.
store
.
getDict
(
'DC00084'
)
const
visitHealthGuideList
=
info
.
contentList
||
[]
const
form
=
{
visitHealthGuideList
:
modeArray
.
map
(
e
=>
{
const
item
=
visitHealthGuideList
.
find
(
i
=>
i
.
templateMode
===
e
.
value
)
return
{
templateMode
:
e
.
value
,
name
:
e
.
name
,
templateContent
:
item
?
item
.
templateContent
:
''
,
id
:
item
?
item
.
visitId
:
''
}
})
}
return
form
.
visitHealthGuideList
},
toUpload
()
{
let
input
=
document
.
getElementById
(
'imgId'
)
input
.
click
()
},
choiceImg
()
{
let
input
=
document
.
getElementById
(
'imgId'
)
let
file
=
input
.
files
let
newFile
=
Array
.
from
(
file
)
newFile
.
forEach
((
item
,
index
)
=>
{
item
[
'indexF'
]
=
index
+
1
item
[
'src'
]
=
window
.
URL
.
createObjectURL
(
item
)
item
[
'imgFlag'
]
=
''
if
(
item
.
type
==
'application/pdf'
)
{
item
[
'imgFlag'
]
=
'pdf'
}
if
(
item
.
type
==
'image/jpeg'
||
item
.
type
==
'image/png'
)
{
item
[
'imgFlag'
]
=
'img'
}
})
this
.
imgList
=
this
.
imgList
.
concat
(
newFile
)
},
toPreview
(
index
)
{
let
list
=
[]
this
.
imgList
.
forEach
(
item
=>
{
list
.
push
(
item
.
src
)
})
showImagePreview
({
images
:
list
,
className
:
'custom-image-preview'
,
startPosition
:
index
,
loop
:
false
})
},
toPdf
(
item
)
{
window
.
open
(
item
.
src
)
},
delImg
(
index
)
{
this
.
imgList
=
this
.
imgList
.
filter
(
item
=>
item
.
indexF
!=
index
)
},
dataConfirm
({
selectedValues
})
{
this
.
form
.
nextVisitDate
=
selectedValues
.
join
(
'-'
)
this
.
showDate
=
false
},
}
}
</
script
>
<
style
scoped
lang=
'less'
>
.title {
font-weight: bold;
margin-bottom: 20px;
}
.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;
}
.form-input {
padding: 8px 12px;
border-radius: 8px;
}
.input-back {
background: #FAFAFA;
}
.tel-back {
background: #F5F5F5;
padding: 8px;
border-radius: 0px 0px 8px 8px;
}
.tel {
background: #FFFFFF;
padding: 8px;
border-radius: 8px;
}
.tel-label {
color: #607FF0;
font-weight: bold;
}
.p-12-0 {
padding: 12px 0px;
}
.health {
padding: 1px 8px 8px 8px;
background: #FAFAFA;
border-radius: 8px;
.health-cell {
padding: 8px;
background: #FFFFFF;
border-radius: 8px;
}
}
.tips {
color: #A5AEBE;
font-size: 12px;
margin-top: 8px;
}
.img-btn {
border: 1px solid #EEEEEE;
background: #FAFAFA;
border-radius: 8px;
padding: 14px 46px;
text-align: center;
color: #607FF0;
}
.doc-up {
font-size: 20px;
}
.pdf {
border: 1px solid #EEEEEE;
border-radius: 8px;
padding: 8px;
}
.remove {
font-size: 24px;
position: absolute;
right: -8px;
top: -9px;
z-index: 1;
}
:deep(.van-cell-group--inset) {
overflow: visible;
}
:deep(.van-cell) {
overflow: visible;
}
:deep(.van-field__error-message) {
position: absolute;
}
:deep(.van-cell:after) {
border-bottom: 0px;
}
</
style
>
<
style
lang=
'less'
>
.custom-image-preview .van-image-preview__container .van-image-preview__item:not(:first-child):not(last-child) {
display: block !important;
}
.van-image__img {
width: 100%;
}
.van-swipe__track {
width: 100%!important;
}
.van-swipe-item {
width: 100%!important;
}
</
style
>
\ No newline at end of file
src/doctor/followUp/generalFU/form/Index.vue
View file @
e53e4755
<
template
>
<div>
<van-nav-bar
title=
'新增通用随访'
left-text=
''
left-arrow
>
</van-nav-bar>
<van-nav-bar
title=
'新增通用随访'
left-text=
''
left-arrow
></van-nav-bar>
<div
class=
'p-4 h-overflow'
>
<base-info
:info=
"resident"
></base-info>
<base-info
:info=
"info"
v-show=
'step == 1'
ref=
'baseInfo'
></base-info>
<general-f-u-form
:info=
'info'
v-show=
'step == 2'
ref=
'generalFUForm'
></general-f-u-form>
<common-bottom
:info=
'info'
v-show=
'step == 3'
ref=
'commonBottom'
></common-bottom>
</div>
<div
class=
'pt-2 pb-2'
>
<div
class=
"px-5 grow flex flex-col justify-end"
v-if=
'step == 1'
>
<van-button
type=
"primary"
block
round
@
click=
"toNext(2)"
>
下一步
</van-button>
</div>
<div
class=
"px-5 flex align-center justify-around"
v-if=
'step == 2'
>
<van-button
type=
"primary"
round
plain
style=
"width: 44%"
@
click=
"toNext(1)"
>
上一步
</van-button>
<van-button
type=
"primary"
round
style=
"width: 44%"
@
click=
"toNext(3)"
>
下一步
</van-button>
</div>
<div
class=
"px-5 grow flex flex-col justify-end"
v-if=
'step == 3'
>
<van-button
type=
"primary"
block
round
@
click=
"onsubmit"
>
提交
</van-button>
</div>
</div>
</div>
</
template
>
...
...
@@ -11,14 +30,17 @@
<
script
>
import
BaseInfo
from
'@/doctor/followUp/generalFU/form/BaseInfo'
import
{
fetchCurrencyById
,
getChronicResidentsId
}
from
'@/api/doctor/generalFU'
import
GeneralFUForm
from
'@/doctor/followUp/generalFU/form/GeneralFUForm'
import
CommonBottom
from
'@/doctor/followUp/generalFU/form/CommonBottom'
export
default
{
name
:
'Index'
,
components
:
{
BaseInfo
},
components
:
{
CommonBottom
,
GeneralFUForm
,
BaseInfo
},
data
()
{
return
{
info
:
{},
resident
:
{}
resident
:
{},
step
:
1
,
}
},
created
()
{
...
...
@@ -49,6 +71,12 @@ export default {
...
result
}
}
},
toNext
(
val
)
{
this
.
step
=
val
},
onsubmit
()
{
}
}
}
...
...
@@ -59,7 +87,7 @@ export default {
color: #000000;
}
.h-overflow {
height: calc(100vh -
6
0px);
height: calc(100vh -
11
0px);
overflow-y: auto;
}
</
style
>
\ No newline at end of file
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