Commit 18989109 authored by songrui's avatar songrui

筛查表单

parent 28c21e12
......@@ -53,4 +53,24 @@ body {
border-bottom: 1px solid var(--van-cell-border-color);
}
}
}
// 按键形式的单选框
.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
......@@ -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()
......
......@@ -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>
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>
......
......@@ -93,8 +93,33 @@ 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()
return /micromessenger/.test(ua)
}
}
\ No newline at end of file
......@@ -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'
}
}
},
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment