Commit 84203878 authored by gengchunlei's avatar gengchunlei

医生端小程序 v1.2 1、复筛表单

parent dbe549f8
...@@ -13,4 +13,9 @@ export function firstScreenDetail(params) { ...@@ -13,4 +13,9 @@ export function firstScreenDetail(params) {
// 慢病专病筛查详情 // 慢病专病筛查详情
export function secondScreenDetail(params) { export function secondScreenDetail(params) {
return fetchBase({ url: `/chronic-resident/v1/chronic-screening-record/rescreen-detail`, body: params, loading: true }) return fetchBase({ url: `/chronic-resident/v1/chronic-screening-record/rescreen-detail`, body: params, loading: true })
}
//查询最近一次专病高危筛查
export function getLastScreen(params) {
return fetchBase({ url: `/chronic-admin/v1/chronic-screening-rescreen/last-info`, body: params, loading: true})
} }
\ No newline at end of file
...@@ -66,7 +66,7 @@ export default { ...@@ -66,7 +66,7 @@ export default {
if (!token) { if (!token) {
token = sessionStorage.getItem('token') token = sessionStorage.getItem('token')
if (process.env.NODE_ENV !== 'production') { if (process.env.NODE_ENV !== 'production') {
token = '2039ead8-da95-4cf7-b2ce-144132d9e0e8' token = '28be5732-4db3-4f8e-b569-b58e58aa14e9'
} }
} }
if (token) { if (token) {
......
<template>
<div>
<van-form ref='form'>
<archive-common :info='info' ref='archive'></archive-common>
<div class='flex justify-between items-center mt-5 mb-20'>
<div class='title'>筛查信息</div>
<div>
<van-button plain size='small' type='primary' @click='toLast'>引入上一次筛查数据</van-button>
</div>
</div>
<div class='label-title mt-5'>筛查病种</div>
<van-field
v-model='form.diseaseArraysName'
readonly
is-link
placeholder='请选择'
class='input-back mt-2 form-input'
:rules='rules.diseaseArraysName'
@click='showGroupsArrays= true'
>
<template #input>
<span class='text-end' v-if='form.diseaseArraysName'>{{ form.diseaseArraysName }}</span>
<span class='text-end' v-if='!form.diseaseArraysName' style='color: #dfdfe1'>请选择</span>
</template>
</van-field>
<van-popup v-model:show='showGroupsArrays' position='bottom'>
<div class='p-4'>
<div class='flex justify-between items-center mb-4 pop-title'>
<div class='greyColor' @click='showGroupsArrays = false' style='font-weight: 400'>取消</div>
<div>筛查病种(可多选)</div>
<div class='blueColor' @click='groupsArraysConfirm'>确定</div>
</div>
<CheckBtn multiple
column-1
:options='groupArrList'
v-model:value='checkGroupsArrays'
:fieldNames="{text: 'name', value: 'value'}" />
</div>
</van-popup>
</van-form>
</div>
</template>
<script>
import ArchiveCommon from '@/doctor/components/archiveCommon/archiveCommon'
import { useStore } from '@/doctor/store'
import CheckBtn from '@/doctor/components/checkBtn/CheckBtn'
export default {
name: 'BaseInfo',
props: {
info: Object
},
components: { CheckBtn, ArchiveCommon },
data() {
return {
store: useStore(),
form: {
diseaseArrays: [],
diseaseArraysName: undefined
},
rules: {
diseaseArraysName: [{ required: true, message: '请选择' }]
},
showGroupsArrays: false,
//筛查病种组件双向绑定变量
checkGroupsArrays: []
}
},
computed: {
//筛查病种
groupArrList() {
let res = []
res = this.store.getDict('CP00117')
return res
}
},
watch: {
'info': {
handler() {
this.init()
},
immediate: true
}
},
methods: {
init() {
if (!this.info.id) {
//是否是引用上一次复筛数据
if (this.info.flag && this.info.flag == 'lastInfo') {
this.setDis(this.info.diseaseArrays)
} else {//新增时
this.setDis([1,2,3,4,5,6,7])
}
} else {
this.setDis(this.info.diseaseArrays)
}
},
setDis(diseaseArrays) {
if (diseaseArrays) {
this.form.diseaseArrays = diseaseArrays
this.checkGroupsArrays = this.form.diseaseArrays
let res = []
this.groupArrList.forEach(item => {
let list = this.form.diseaseArrays.filter(i => i == item.value)
if (list && list.length) {
res.push(item.name)
}
})
this.form.diseaseArraysName = res.join()
}
},
groupsArraysConfirm() {
let res = []
this.groupArrList.forEach(item => {
let selected = this.checkGroupsArrays.filter(i => i == item.value)
if (selected && selected.length) {
res.push(item.name)
}
})
if (this.checkGroupsArrays && this.checkGroupsArrays.length) {
this.form.diseaseArrays = this.checkGroupsArrays
this.form.diseaseArraysName = res.join()
} else {
this.form.diseaseArrays = []
this.form.diseaseArraysName = ''
}
this.showGroupsArrays = false
},
toLast() {
this.$emit('getLast', true)
},
async onSubmit() {
let baseInfo = {}
try {
baseInfo = await this.$refs.archive.onSubmit()
} catch (e) {
}
return new Promise((resolve, reject) => {
this.$refs.form.validate().then(() => {
let par = {
residentsRecord: {
...this.info,
...baseInfo,
id: this.info.personId
},
diseaseArrays: this.form.diseaseArrays
}
resolve(par)
}).catch((e) => {
console.warn('baseInfo error', e)
})
})
}
}
}
</script>
<style scoped lang='less'>
.title {
font-weight: bold;
}
.mb-20 {
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;
}
.pop-title {
color: #262626;
font-size: 16px;
line-height: 24px;
font-weight: bold;
}
:deep(.van-popup) {
min-height: 30% !important;
}
:deep(.van-cell-group--inset) {
overflow: visible;
}
:deep(.van-cell) {
overflow: visible;
}
:deep(.van-cell:after) {
border-bottom: 0px;
}
</style>
\ No newline at end of file
<template> <template>
<div class='screening-first-cont'> <div class='screening-first-cont'>
form <van-form ref='form'>
<div class='title'>筛查信息</div>
<div v-if='ageShow'>
<div class='no-req-label mt-5'>年龄</div>
<van-field
v-model='form.currentAge'
readonly
placeholder='年龄'
class='input-back mt-2 form-input'
/>
</div>
<div v-if='sexShow'>
<div class='no-req-label mt-5'>性别</div>
<van-field
v-model='form.genderName'
readonly
placeholder='性别'
class='input-back mt-2 form-input'
/>
</div>
</van-form>
</div> </div>
</template> </template>
...@@ -386,7 +408,7 @@ export default { ...@@ -386,7 +408,7 @@ export default {
//默认为无 //默认为无
let result = [] let result = []
let res = [99] let res = [99]
let list = this.$dict('CP00125') let list = this.store.getDict('CP00125')
const { diseaseArrays = [] } = this.form const { diseaseArrays = [] } = this.form
if (diseaseArrays.includes(1)) { if (diseaseArrays.includes(1)) {
let arr = [1, 2, 7] let arr = [1, 2, 7]
...@@ -452,7 +474,7 @@ export default { ...@@ -452,7 +474,7 @@ export default {
//默认为无 //默认为无
let result = [] let result = []
let res = [9] let res = [9]
let list = this.$dict('CP00149') let list = this.store.getDict('CP00149')
const { diseaseArrays = [] } = this.form const { diseaseArrays = [] } = this.form
if (diseaseArrays.includes(1)) { if (diseaseArrays.includes(1)) {
let arr = [2] let arr = [2]
...@@ -518,7 +540,7 @@ export default { ...@@ -518,7 +540,7 @@ export default {
//默认为无 //默认为无
let result = [] let result = []
let res = [] let res = []
let list = this.$dict('CP00129') let list = this.store.getDict('CP00129')
const { diseaseArrays = [] } = this.form const { diseaseArrays = [] } = this.form
if (diseaseArrays.includes(2)) { if (diseaseArrays.includes(2)) {
let arr = [1, 2, 3, 4] let arr = [1, 2, 3, 4]
...@@ -844,12 +866,42 @@ export default { ...@@ -844,12 +866,42 @@ export default {
selectRelativeType: [], selectRelativeType: [],
checkRequired: false, checkRequired: false,
relativeAgeList: [ relativeAgeList: [
{relativeTypeName: "父亲", relativeType: 1, gender: 1, age: undefined, inputRequired: false}, {
{relativeTypeName: "母亲", relativeType: 2, gender: 2, age: undefined, inputRequired: false}, relativeTypeName: '父亲',
{relativeTypeName: "兄弟", relativeType: 3, gender: 1, age: undefined, inputRequired: false}, relativeType: 1,
{relativeTypeName: "姐妹", relativeType: 4, gender: 2, age: undefined, inputRequired: false}, gender: 1,
{relativeTypeName: "儿子", relativeType: 5, gender: 1, age: undefined, inputRequired: false}, age: undefined,
{relativeTypeName: "女儿", relativeType: 6, gender: 2, age: undefined, inputRequired: false} inputRequired: false
},
{
relativeTypeName: '母亲',
relativeType: 2,
gender: 2,
age: undefined,
inputRequired: false
},
{
relativeTypeName: '兄弟',
relativeType: 3,
gender: 1,
age: undefined,
inputRequired: false
},
{
relativeTypeName: '姐妹',
relativeType: 4,
gender: 2,
age: undefined,
inputRequired: false
},
{
relativeTypeName: '儿子',
relativeType: 5,
gender: 1,
age: undefined,
inputRequired: false
},
{ relativeTypeName: '女儿', relativeType: 6, gender: 2, age: undefined, inputRequired: false }
] ]
} }
if (base.length) { if (base.length) {
...@@ -862,10 +914,10 @@ export default { ...@@ -862,10 +914,10 @@ export default {
}, },
calculateBMI() { calculateBMI() {
if (this.form.weight && this.form.height) { if (this.form.weight && this.form.height) {
let res = this.form.weight / (this.form.height * this.form.height / 100 / 100); let res = this.form.weight / (this.form.height * this.form.height / 100 / 100)
this.form.bmi = parseFloat(res.toFixed(1)); this.form.bmi = parseFloat(res.toFixed(1))
} else { } else {
this.form.bmi = null; this.form.bmi = null
} }
}, },
hypertensionHigh() { hypertensionHigh() {
...@@ -890,8 +942,8 @@ export default { ...@@ -890,8 +942,8 @@ export default {
mentalTension mentalTension
} = this.form } = this.form
let list = [] let list = []
if (((pressureOneSbp >= 120) || (pressureTwoSbp >= 120 )) || if (((pressureOneSbp >= 120) || (pressureTwoSbp >= 120)) ||
((pressureOneDbp >= 80 ) || (pressureTwoDbp >= 80)) ((pressureOneDbp >= 80) || (pressureTwoDbp >= 80))
) { ) {
list.push(1) list.push(1)
} }
...@@ -1001,7 +1053,7 @@ export default { ...@@ -1001,7 +1053,7 @@ export default {
//冠心病高危选择 //冠心病高危选择
coronaryHigh() { coronaryHigh() {
let list = [] let list = []
const {currentAge, gender, isSmoking, medicalHistory = [], familyHistory = []} = this.form const { currentAge, gender, isSmoking, medicalHistory = [], familyHistory = [] } = this.form
if (gender == 1) { if (gender == 1) {
list.push(2) list.push(2)
if (currentAge >= 45) { if (currentAge >= 45) {
...@@ -1390,7 +1442,7 @@ export default { ...@@ -1390,7 +1442,7 @@ export default {
const item = this.drinkKindCapacityList.find(i => i.drinkKind == e) || {} const item = this.drinkKindCapacityList.find(i => i.drinkKind == e) || {}
return { return {
drinkKind: e, drinkKind: e,
drinkKindName: this.$dictValue('CP00133', e), drinkKindName: this.store.getDictValue('CP00133', e),
drinkCapacity: item.drinkCapacity || 0 drinkCapacity: item.drinkCapacity || 0
} }
}) })
...@@ -1447,7 +1499,7 @@ export default { ...@@ -1447,7 +1499,7 @@ export default {
strokeHighItem: 'arrToStr', strokeHighItem: 'arrToStr',
pulmonaryHighItem: 'arrToStr', pulmonaryHighItem: 'arrToStr',
nephrosisHighItem: 'arrToStr', nephrosisHighItem: 'arrToStr',
dyslipemiaHighItem: 'arrToStr', dyslipemiaHighItem: 'arrToStr'
}) })
) )
}).catch((e) => { }).catch((e) => {
...@@ -1455,7 +1507,7 @@ export default { ...@@ -1455,7 +1507,7 @@ export default {
reject(e) reject(e)
}) })
}) })
}, }
} }
...@@ -1463,5 +1515,52 @@ export default { ...@@ -1463,5 +1515,52 @@ export default {
</script> </script>
<style lang='less' scoped> <style lang='less' scoped>
.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;
}
:deep(.van-popup) {
min-height: 30% !important;
}
:deep(.van-cell-group--inset) {
overflow: visible;
}
:deep(.van-cell) {
overflow: visible;
}
:deep(.van-cell:after) {
border-bottom: 0px;
}
</style> </style>
<template> <template>
<div class="h-full flex flex-col screening-second"> <div class='h-full flex flex-col screening-second'>
<DocNavBar :title="`${id ? '修改' : '新增'}专病高危筛查`" class="shrink-0" :backFunc="onBack"></DocNavBar> <DocNavBar :title="`${id ? '修改' : '新增'}专病高危筛查`" class='shrink-0' :backFunc='onBack'></DocNavBar>
<div class="p-4 overflow-y-auto grow" ref="all"> <div class='p-4 overflow-y-auto grow' ref='all'>
<archive-common :info='info' <BaseInfo :info='info'
v-show='step ==1' v-show='step ==1'
ref='baseInfo' @getLast='getLastData'
></archive-common> ref='baseInfo'
<DiseaseSelect ></BaseInfo>
:infoValue='info.diseaseArrays'
v-show='step == 2'
ref='diseaseInfo'
></DiseaseSelect>
<form-cont :info='info' <form-cont :info='info'
:disease-arrays-info='diseaseArraysInfo' :disease-arrays-info='diseaseArraysInfo'
v-show='step == 3' v-show='step == 2'
ref='formInfo' ref='formInfo'
></form-cont> ></form-cont>
<result :residentInfoId="residentInfoId" <result :residentInfoId='residentInfoId'
v-show='step == 4' v-show='step == 3'
></result> ></result>
</div> </div>
<div class='bottom-small-line'></div> <div class='bottom-small-line'></div>
...@@ -36,16 +32,7 @@ ...@@ -36,16 +32,7 @@
@click='toNext(3)'>下一步 @click='toNext(3)'>下一步
</van-button> </van-button>
</div> </div>
<div class='px-5 flex align-center justify-around' v-if='step == 3'> <div class='px-5 grow flex flex-col justify-end' v-if='step == 3'>
<van-button type='primary' round plain style='width: 44%'
@click='toNext(2)'>上一步
</van-button>
<van-button type='primary' round style='width: 44%'
@click='toNext(4)'>下一步
</van-button>
</div>
<div class='px-5 grow flex flex-col justify-end' v-if='step == 4'>
<van-button type='primary' block round <van-button type='primary' block round
@click='onsubmit'>提交 @click='onsubmit'>提交
</van-button> </van-button>
...@@ -61,9 +48,14 @@ import { fetchCurrencyById, getChronicResidentsId } from '@/api/doctor/generalFU ...@@ -61,9 +48,14 @@ import { fetchCurrencyById, getChronicResidentsId } from '@/api/doctor/generalFU
import FormCont from '@/doctor/screening/second/FormCont' import FormCont from '@/doctor/screening/second/FormCont'
import Result from '@/doctor/screening/second/Result' import Result from '@/doctor/screening/second/Result'
import DiseaseSelect from '@/doctor/screening/second/DiseaseSelect' import DiseaseSelect from '@/doctor/screening/second/DiseaseSelect'
import BaseInfo from '@/doctor/screening/second/BaseInfo'
import { fetchDataHandle } from '@/utils/common'
import { getLastScreen, secondScreenDetail } from '@/api/doctor/screening'
import { showToast } from 'vant'
export default { export default {
components: { components: {
BaseInfo,
DiseaseSelect, DiseaseSelect,
Result, Result,
FormCont, FormCont,
...@@ -71,11 +63,12 @@ export default { ...@@ -71,11 +63,12 @@ export default {
DocNavBar DocNavBar
}, },
data() { data() {
return { return {
step: 1, step: 1,
info: {}, info: {},
diseaseArraysInfo: [] residentInfo: {},
} diseaseArraysInfo: []
}
}, },
computed: { computed: {
id() { id() {
...@@ -92,14 +85,19 @@ export default { ...@@ -92,14 +85,19 @@ export default {
async init() { async init() {
this.info = {} this.info = {}
if (this.id) { if (this.id) {
const res = await fetchCurrencyById({ id: this.id }) const res = await secondScreenDetail({ id: this.id })
let result = res.data || {} let result = res.data || {}
const { residentsRecord = {} } = result const { residentsRecord = {} } = result
const { id, ...others } = residentsRecord const { id, ...others } = residentsRecord
let obj = this.dataHandle(result)
this.info = { this.info = {
...others, ...others,
personId: id, personId: id,
...result ...obj
}
this.residentInfo = {
...others,
personId: id,
} }
} else { } else {
const res = await getChronicResidentsId(this.residentInfoId) const res = await getChronicResidentsId(this.residentInfoId)
...@@ -115,21 +113,67 @@ export default { ...@@ -115,21 +113,67 @@ export default {
updated, updated,
...others ...others
} = res.data } = res.data
this.residentInfo = {
personId: id,
...others
}
this.info = { this.info = {
personId: id, personId: id,
...others, ...others
} }
} }
}, },
//获取上一次筛查数据
getLastData() {
let par = {
residentInfoId: this.residentInfoId
}
getLastScreen(par).then(res => {
let result = res.data || {}
if (Object.keys(result).length === 0) {
showToast('暂无上一次筛查数据')
return
}
let obj = this.dataHandle(result)
this.info = {
...obj,
...this.residentInfo,
flag: 'lastInfo',
id: null
}
})
},
//数据处理
dataHandle(result) {
let obj = fetchDataHandle(result, {
diseaseArrays: 'strToArrNum',
medicalHistory: 'strToArrNum',
familyHistory: 'strToArrNum',
relativeType: 'strToArrNum',
femaleMedicalHistory: 'strToArrNum',
medicineHistory: 'strToArrNum',
touchHarmful: 'strToArrNum',
dietaryHabit: 'strToArrNum',
drinkKind: 'strToArrNum',
specialScreenResult: 'strToArrNum',
highItem: 'strToArrNum',
hypertensionHighItem: 'strToArrNum',
diabetesHighItem: 'strToArrNum',
coronaryHighItem: 'strToArrNum',
strokeHighItem: 'strToArrNum',
pulmonaryHighItem: 'strToArrNum',
nephrosisHighItem: 'strToArrNum',
dyslipemiaHighItem: 'strToArrNum',
})
return obj
},
async toNext(val) { async toNext(val) {
this.$refs.all.scrollTo(0, 0) this.$refs.all.scrollTo(0, 0)
if (val == 2) { if (val == 2) {
await this.$refs.baseInfo.onSubmit() let obj = await this.$refs.baseInfo.onSubmit()
this.diseaseArraysInfo = obj.diseaseArrays || []
} }
if (val == 3) { if (val == 3) {
this.diseaseArraysInfo = await this.$refs.diseaseInfo.onSubmit() || []
}
if (val == 4) {
await this.$refs.formInfo.onSubmit() await this.$refs.formInfo.onSubmit()
} }
this.step = val this.step = val
...@@ -138,7 +182,6 @@ export default { ...@@ -138,7 +182,6 @@ export default {
onsubmit() { onsubmit() {
}, },
onBack() { onBack() {
if (this.step == 1) { if (this.step == 1) {
this.$router.back() this.$router.back()
...@@ -150,6 +193,6 @@ export default { ...@@ -150,6 +193,6 @@ export default {
} }
</script> </script>
<style lang="less" scoped> <style lang='less' scoped>
</style> </style>
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