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
18989109
Commit
18989109
authored
Aug 30, 2024
by
songrui
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
筛查表单
parent
28c21e12
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
246 additions
and
7 deletions
+246
-7
base.less
src/assets/css/base.less
+21
-0
BaseInfo.vue
src/resident/screening/first/form/BaseInfo.vue
+5
-3
ScreenInfo.vue
src/resident/screening/first/form/ScreenInfo.vue
+192
-1
common.js
src/utils/common.js
+25
-0
vue.config.js
vue.config.js
+3
-3
No files found.
src/assets/css/base.less
View file @
18989109
...
...
@@ -54,3 +54,23 @@ body {
}
}
}
// 按键形式的单选框
.doc-radio-button {
height: 26px;
.radio-item {
border: 1px solid #BFBFBF;
border-radius: 4px;
color: #8C8C8C;
background: transparent;
transition: all .2s;
padding: 0px 16px;
font-size: 14px;
display: inline-block;
}
.radio-item-active {
background-color: var(--van-primary-color);
border: 1px solid var(--van-primary-color);
color: #fff;
}
}
\ No newline at end of file
src/resident/screening/first/form/BaseInfo.vue
View file @
18989109
...
...
@@ -96,7 +96,7 @@
:rules=
"rules.presentCode"
@
click=
"showPresent = true"
/>
<van-popup
v-model:show=
"showPresent"
:close-on-click-overlay=
"false"
round
position=
"bottom"
>
<van-popup
v-model:show=
"showPresent"
:close-on-click-overlay=
"false"
position=
"bottom"
>
<DocAddress
v-model:value=
"form.presentCode"
@
close=
"showPresent = false"
:viewData=
"addressRecord.presentCode"
@
change=
"presentChange"
/>
...
...
@@ -119,7 +119,7 @@
:rules=
"rules.registeredCode"
@
click=
"showRegistered = true"
/>
<van-popup
v-model:show=
"showRegistered"
:close-on-click-overlay=
"false"
round
position=
"bottom"
>
<van-popup
v-model:show=
"showRegistered"
:close-on-click-overlay=
"false"
position=
"bottom"
>
<DocAddress
v-model:value=
"form.registeredCode"
@
close=
"showRegistered = false"
:viewData=
"addressRecord.registeredCode"
@
change=
"registeredChange"
/>
...
...
@@ -288,7 +288,9 @@ export default {
this
.
form
.
dataBirth
=
info
.
dataBirth
},
submit
()
{
debugger
this
.
recordForm
.
base
=
{...
this
.
form
}
this
.
$parent
.
onNext
()
return
this
.
$refs
.
form
.
validate
().
then
(()
=>
{
this
.
recordForm
.
base
=
{...
this
.
form
}
this
.
$parent
.
onNext
()
...
...
src/resident/screening/first/form/ScreenInfo.vue
View file @
18989109
...
...
@@ -5,12 +5,203 @@
<div
class=
"px-4 font-semibold title"
>
筛查信息
</div>
<div
class=
"text-12"
>
请根据您身体实际情况填写以下内容
</div>
</div>
<van-form
label-width=
"5em"
ref=
"form"
class=
"screen-form"
error-message-align=
"right"
>
<van-field
v-model=
"form.currentAge"
name=
"currentAge"
label=
"年龄"
type=
"digit"
placeholder=
"请输入年龄"
readonly
maxlength=
"10"
>
<template
#
extra
>
<span
class=
"ml-1"
>
岁
</span>
</
template
>
</van-field>
<van-field
required
v-model=
"form.medicalHistoryName"
is-link
readonly
name=
"medicalHistory"
label=
"既往史"
placeholder=
"请选择"
:rules=
"rules.medicalHistory"
@
click=
"showMedical = true"
/>
<van-popup
v-model:show=
"showMedical"
position=
"bottom"
>
<div
class=
"pt-4 popup-checkbox"
>
<div
class=
"flex justify-between"
>
<button
class=
"van-picker__cancel van-haptics-feedback"
@
click=
"showMedical = false"
>
取消
</button>
<button
class=
"van-picker__confirm van-haptics-feedback"
@
click=
"medicalConfirm"
>
确认
</button>
</div>
<van-checkbox-group
v-model=
"form.medicalHistory"
class=
"p-4"
>
<van-checkbox
v-for=
"(item, index) in store.getDict('CP00118')"
:key=
"index"
@
click=
"medicalChange"
:name=
"item.value"
class=
"mb-3"
>
{{ item.name }}
</van-checkbox>
</van-checkbox-group>
</div>
</van-popup>
<van-field
required
v-model=
"form.height"
name=
"height"
label=
"身高"
type=
"number"
placeholder=
"请输入"
maxlength=
"10"
:rules=
"rules.height"
>
<
template
#
extra
>
<span
class=
"ml-1"
>
cm
</span>
</
template
>
</van-field>
<van-field
required
v-model=
"form.weight"
name=
"weight"
label=
"体重"
type=
"number"
placeholder=
"请输入"
maxlength=
"10"
:rules=
"rules.weight"
>
<
template
#
extra
>
<span
class=
"ml-1"
>
kg
</span>
</
template
>
</van-field>
<van-field
v-model=
"form.bmi"
name=
"bmi"
label=
"BMI"
type=
"number"
placeholder=
"请输入"
maxlength=
"10"
readonly
>
<
template
#
extra
>
<span
class=
"ml-1"
>
kg/m²
</span>
</
template
>
</van-field>
<van-field
v-model=
"form.waistline"
name=
"waistline"
label=
"腰围"
type=
"number"
placeholder=
"请输入"
maxlength=
"10"
:rules=
"rules.waistline"
>
<
template
#
extra
>
<span
class=
"ml-1"
>
cm
</span>
</
template
>
</van-field>
<van-field
v-model=
"form.isSmoking"
name=
"isSmoking"
label=
"是否吸烟"
input-align=
"right"
style=
"padding-top: .13rem;padding-bottom: .14rem;"
>
<
template
#
input
>
<van-radio-group
v-model=
"form.isSmoking"
direction=
"horizontal"
class=
"doc-radio-button"
>
<van-radio
v-for=
"item in store.getDict('CP00120')"
:key=
"item.value"
:name=
"item.value"
>
<template
#
icon
>
<span
:class=
"['radio-item',
{'radio-item-active': form.isSmoking == item.value}]">
{{
item
.
name
}}
</span>
</
template
>
</van-radio>
</van-radio-group>
</template>
</van-field>
</van-form>
</div>
</template>
<
script
>
export
default
{
import
{
useStore
}
from
'@/resident/store/index.js'
import
{
checkboxReject
}
from
'@/utils/common.js'
const
defaultForm
=
(
info
=
{})
=>
{
const
form
=
{
// 年龄
currentAge
:
undefined
,
// 既往史
medicalHistory
:
[],
medicalHistoryName
:
undefined
,
// 身高
height
:
undefined
,
// 体重
weight
:
undefined
,
bmi
:
undefined
,
// 腰围
waistline
:
undefined
,
// 是否吸烟
isSmoking
:
undefined
}
return
form
}
export
default
{
data
()
{
return
{
form
:
defaultForm
(),
rules
:
{
medicalHistory
:
[{
required
:
true
,
message
:
'请选择'
}],
height
:
[{
required
:
true
,
message
:
'请输入'
},
{
pattern
:
/^
([
1-9
]\d{1,2}(?:\.\d{1})?
|300
)
$/
,
message
:
'输入值在10~300内,1位小数'
}],
weight
:
[{
required
:
true
,
message
:
'请输入'
},
{
pattern
:
/^
([
2-9
]\d{1}(?:\.\d{1,2})?
|
[
1-4
]\d{2}(?:\.\d{1,2})?
|500
)
$/
,
message
:
'输入值在20~500内,2位小数'
}],
waistline
:
[{
pattern
:
/^
([
1-9
]\d{1}(?:\.\d{1})?
|
[
1
][
0-4
]\d(?:\.\d{1})?
|150
)
$/
,
message
:
'输入值在10~150内,1位小数'
}]
},
// 既往史
showMedical
:
false
}
},
setup
()
{
const
store
=
useStore
()
return
{
store
}
},
computed
:
{
// BMI
bmi
()
{
const
{
height
,
weight
}
=
this
.
form
return
height
&&
weight
?
(
weight
/
(
height
/
100
*
height
/
100
)).
toFixed
(
2
)
:
undefined
}
},
inject
:
[
'checkInfo'
,
'recordForm'
],
created
()
{
this
.
init
()
},
methods
:
{
init
()
{
const
baseInfo
=
this
.
recordForm
.
base
this
.
form
.
currentAge
=
baseInfo
.
currentAge
},
// 既往史
medicalConfirm
()
{
this
.
form
.
medicalHistoryName
=
this
.
store
.
getDict
(
'CP00118'
).
map
(
e
=>
{
return
this
.
form
.
medicalHistory
.
includes
(
e
.
value
)
?
e
.
name
:
''
}).
filter
(
e
=>
e
).
join
(
'、'
)
this
.
showMedical
=
false
},
medicalChange
(
e
)
{
this
.
form
.
medicalHistory
=
checkboxReject
(
this
.
form
.
medicalHistory
,
[
9
])
}
},
watch
:
{
bmi
:
{
handler
()
{
this
.
form
.
bmi
=
this
.
bmi
},
immediate
:
true
}
}
}
</
script
>
...
...
src/utils/common.js
View file @
18989109
...
...
@@ -93,6 +93,31 @@ export function getInfoByIdCard(idCard) {
}
}
// 根据身高体重自动计算BMI
export
function
calculateBMI
(
heightVal
,
weightVal
)
{
let
bmi
=
null
if
(
heightVal
&&
weightVal
)
{
let
height
=
parseFloat
(
heightVal
)
let
weight
=
parseFloat
(
weightVal
)
let
res
=
weight
/
(
height
*
height
/
100
/
100
)
bmi
=
res
.
toFixed
(
2
)
}
return
bmi
}
// 多选框选项排斥
export
function
checkboxReject
(
val
=
[],
exclude
=
[])
{
if
(
!
val
.
length
)
return
[]
const
last
=
val
[
val
.
length
-
1
]
let
arr
=
[]
if
(
exclude
.
includes
(
last
))
{
arr
=
[
last
]
}
else
{
arr
=
val
.
filter
(
e
=>
!
exclude
.
includes
(
e
))
}
return
arr
}
// 判断是否在微信中
export
function
isWeiXin
()
{
const
ua
=
window
.
navigator
.
userAgent
.
toLowerCase
()
...
...
vue.config.js
View file @
18989109
...
...
@@ -30,11 +30,11 @@ module.exports = defineConfig({
}
},
'/chronic-resident'
:
{
target
:
'http://192.168.1.43:8903'
,
//
target: 'https://beta-tumour.zmnyjk.com',
//
target: 'http://192.168.1.43:8903',
target
:
'https://beta-tumour.zmnyjk.com'
,
changOrigin
:
true
,
pathRewrite
:
{
'^/chronic-resident'
:
'/'
'^/chronic-resident'
:
'/
chronic-resident
'
}
}
},
...
...
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