diff --git a/src/api/doctor/resident.js b/src/api/doctor/resident.js index fbcc1ab8da07694fc3e56bfaa1eb33718b0f1cf3..9b63293b17eb8662e2eef271c8b963afe40a13f5 100644 --- a/src/api/doctor/resident.js +++ b/src/api/doctor/resident.js @@ -8,3 +8,8 @@ export function queryResidentInfo(params) { export function queryVisitByPage(params, loading) { return fetchBase({ url: `/chronic-admin/v1/chronic-visit-record/page`, body: params, loading }) } + +//更新居民基本信息 +export function updateResident(params) { + return fetchBase({ url: `/chronic-admin/v1/chronic-residents-record/update`, body: params, loading: true }) +} \ No newline at end of file diff --git a/src/doctor/followUp/generalFU/detail/Detail.vue b/src/doctor/followUp/generalFU/detail/Detail.vue index ee9f477571de63e01810925f5608f907c69cf318..2ea22de50db211f2a2bc940800f6eb584231cc74 100644 --- a/src/doctor/followUp/generalFU/detail/Detail.vue +++ b/src/doctor/followUp/generalFU/detail/Detail.vue @@ -5,56 +5,56 @@ <div class='title'>居民信息</div> <div class='detail-div mt-2'> <div class='flex items-center justify-between'> - <div>证件类型</div> + <div class='label'>证件类型</div> <div>{{ residentInfo.certificateTypeName || '-' }}</div> </div> <div class='flex items-center justify-between mt-2'> - <div>证件号码</div> + <div class='label'>证件号码</div> <div>{{ residentInfo.idCard || '-' }}</div> </div> <div class='flex items-center justify-between mt-2'> - <div>姓名</div> + <div class='label'>姓名</div> <div>{{ residentInfo.residentName || '-' }}</div> </div> <div class='flex items-center justify-between mt-2'> - <div>性别</div> + <div class='label'>性别</div> <div>{{ residentInfo.genderName || '-' }}</div> </div> <div class='flex items-center justify-between mt-2'> - <div>出生日期</div> + <div class='label'>出生日期</div> <div>{{ residentInfo.dataBirth || '-' }}</div> </div> <div class='flex items-center justify-between mt-2'> - <div>民族</div> + <div class='label'>民族</div> <div>{{ residentInfo.nationalName || '-' }}</div> </div> <div class='flex items-center justify-between mt-2'> - <div>年龄</div> + <div class='label'>年龄</div> <div>{{ residentInfo.currentAge || '-' }} 岁</div> </div> <div class='flex items-center justify-between mt-2'> - <div>本人电话</div> + <div class='label'>本人电话</div> <div>{{ residentInfo.telephone || '-' }}</div> </div> <div class='flex items-center justify-between mt-2'> - <div>联系人姓名</div> + <div class='label'>联系人姓名</div> <div>{{ residentInfo.contactName || '-' }}</div> </div> <div class='flex items-center justify-between mt-2'> - <div>与居民关系</div> + <div class='label'>与居民关系</div> <div>{{ residentInfo.relationName || '-' }}</div> </div> <div class='flex items-center justify-between mt-2'> - <div>联系电话</div> + <div class='label'>联系电话</div> <div>{{ residentInfo.contactPhone || '-' }}</div> </div> - <div class='flex items-center justify-between mt-2'> - <div>现住址</div> - <div>{{ residentInfo.fullNowAddress || '-' }}</div> + <div class='flex flex-wrap justify-between mt-2'> + <div class='label'>现住址</div> + <div style='flex: 1'>{{ residentInfo.fullNowAddress || '-' }}</div> </div> - <div class='flex items-center justify-between mt-2'> - <div>户籍地址</div> - <div>{{ residentInfo.fullPermanentAddress || '-' }}</div> + <div class='flex flex-wrap justify-between mt-2'> + <div class='label'>户籍地址</div> + <div style='flex: 1'>{{ residentInfo.fullPermanentAddress || '-' }}</div> </div> </div> <div class='title mt-2'>随访信息</div> @@ -87,22 +87,76 @@ </div> <div class='mt-2' v-if="showOne && info.visitSituation == 1"> <div>随访内容</div> - <div class='white-b mt-2'> + <div class='white-b mt-2' style='min-height: 60px'> <div>{{ info.visitContent }}</div> </div> </div> <div class='mt-2' v-if="showOne && info.visitSituation == 1"> <div>处置意见</div> - <div class='white-b mt-2'> + <div class='white-b mt-2' style='min-height: 60px'> <div>{{ info.disposalOpinion }}</div> </div> </div> <div class='mt-2' v-if="(showOne || showTwo) && info.visitSituation == 1 && info.isHealthGuide == 1"> <div>健康指导</div> <div class='white-b mt-2'> - <div class='flex flex-wrap' v-for="(item, index) in healthInterventionsInfo.visitHealthGuideList" > - <div v-if="item.name != '无'">{{item.name}}:</div> - <div>{{item.templateContent || '-'}}</div> + <div class='flex flex-wrap mt-2' v-for="(item, index) in healthInterventionsInfo.visitHealthGuideList" > + <div v-if="item.name != '无'" class='label'>{{item.name}}:</div> + <div style='flex: 1'>{{item.templateContent }}</div> + </div> + </div> + </div> + + <div class='mt-2' v-if='imgList1.length'> + <div>随访记录</div> + <div class='flex items-center' style='flex-wrap: wrap'> + <div v-for='(item, index) in imgList1'> + <!-- 图片--> + <div v-if="item.imgFlag == 'img'" class='mt-2'> + <img :src='item.trueDownloadUrl' class='ml-2' style='width: 95px;height: 95px;'> + </div> + </div> + </div> + <!-- pdf--> + <div> + <div v-for='item in imgList1'> + <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> + </div> + </div> + </div> + </div> + + <div class='mt-2' v-if='imgList2.length'> + <div>现场随访照片</div> + <div class='flex items-center' style='flex-wrap: wrap'> + <div v-for='(item, index) in imgList2'> + <!-- 图片--> + <div v-if="item.imgFlag == 'img'" class='mt-2'> + <img :src='item.trueDownloadUrl' class='ml-2' style='width: 95px;height: 95px;'> + </div> + </div> + </div> + <!-- pdf--> + <div> + <div v-for='item in imgList2'> + <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> + </div> </div> </div> </div> @@ -126,7 +180,7 @@ </div> </div> </div> - <div class="px-5 flex align-center justify-around"> + <div class="px-5 flex align-center justify-around pt-2 pb-2"> <van-button type="primary" round plain style="width: 70%;background: #F0F3FF;border: 0px" @click="toBack">返回</van-button> </div> @@ -136,6 +190,7 @@ <script> import { fetchCurrencyById } from '@/api/doctor/generalFU' import { showToast } from 'vant' +import { useStore } from '@/doctor/store' export default { name: 'Detail', @@ -144,6 +199,7 @@ export default { }, data() { return { + store: useStore(), info: {}, residentInfo: {} } @@ -181,7 +237,7 @@ export default { }, //健康指导 healthInterventionsInfo() { - const modeArray = this.$dict('DC00084') + const modeArray = this.store.getDict('DC00084') let visitHealthGuideList = [] if (this.info.healthGuideContent) { visitHealthGuideList = JSON.parse(this.info.healthGuideContent) @@ -198,7 +254,33 @@ export default { }) } return res - } + }, + imgList1() { + const {uploadVisitRecordImageList = []} = this.info + uploadVisitRecordImageList.forEach(item => { + item['imgFlag'] = '' + if (item.type == 'application/pdf') { + item['imgFlag'] = 'pdf' + } + if (item.type == 'image/jpeg' || item.type == 'image/png') { + item['imgFlag'] = 'img' + } + }) + return uploadVisitRecordImageList + }, + imgList2() { + const {sceneVisitImageList = []} = this.info + sceneVisitImageList.forEach(item => { + item['imgFlag'] = '' + if (item.type == 'application/pdf') { + item['imgFlag'] = 'pdf' + } + if (item.type == 'image/jpeg' || item.type == 'image/png') { + item['imgFlag'] = 'img' + } + }) + return sceneVisitImageList + }, }, created() { this.load() @@ -248,6 +330,10 @@ export default { border-radius: 8px; } +.label { + width: 104px; +} + :deep(.van-nav-bar .van-icon) { color: #000000; } diff --git a/src/doctor/followUp/generalFU/form/BaseInfo.vue b/src/doctor/followUp/generalFU/form/BaseInfo.vue index 067faaca916c325f143b017b584063a37f8ebc6a..69276afa04bd657d595a330aa507c75a075bbdbc 100644 --- a/src/doctor/followUp/generalFU/form/BaseInfo.vue +++ b/src/doctor/followUp/generalFU/form/BaseInfo.vue @@ -171,16 +171,16 @@ <template #input> <van-radio-group v-model='form.visitSituation' class='w-full' shape='dot'> <van-cell-group> - <van-cell title='在访' clickable @click="form.visitSituation = '1'" + <van-cell title='在访' clickable @click="form.visitSituation = 1" class='input-back form-input'> <template #right-icon> - <van-radio name='1' /> + <van-radio :name='1' /> </template> </van-cell> - <van-cell title='失访' clickable @click="form.visitSituation = '2'" + <van-cell title='失访' clickable @click="form.visitSituation = 2" class='input-back mt-2 form-input'> <template #right-icon> - <van-radio name='2' /> + <van-radio :name='2' /> </template> </van-cell> </van-cell-group> @@ -194,22 +194,22 @@ <template #input> <van-radio-group v-model='form.lossReason' class='w-full' shape='dot'> <van-cell-group> - <van-cell title='无法联系' clickable @click="form.lossReason = '1'" + <van-cell title='无法联系' clickable @click="form.lossReason = 1" class='input-back form-input'> <template #right-icon> - <van-radio name='1' /> + <van-radio :name='1' /> </template> </van-cell> - <van-cell title='患者拒绝随访' clickable @click="form.lossReason = '2'" + <van-cell title='患者拒绝随访' clickable @click="form.lossReason = 2" class='input-back mt-2 form-input'> <template #right-icon> - <van-radio name='2' /> + <van-radio :name='2' /> </template> </van-cell> - <van-cell title='死亡' clickable @click="form.lossReason = '3'" + <van-cell title='死亡' clickable @click="form.lossReason = 3" class='input-back mt-2 form-input'> <template #right-icon> - <van-radio name='3' /> + <van-radio :name='3' /> </template> </van-cell> <van-field @@ -219,10 +219,10 @@ placeholder='死亡原因' class='input-back mt-2 form-input' /> - <van-cell title='其他' clickable @click="form.lossReason = '9'" + <van-cell title='其他' clickable @click="form.lossReason = 9" class='input-back mt-2 form-input'> <template #right-icon> - <van-radio name='9' /> + <van-radio :name='9' /> </template> </van-cell> <van-field @@ -242,12 +242,12 @@ <template #input> <van-radio-group v-model='form.visitWay' class='w-full' shape='dot'> <van-cell-group> - <van-cell title='门诊' clickable @click="form.visitWay = '5'" + <van-cell title='门诊' clickable @click="form.visitWay = 5" class='input-back form-input' :style="{borderRadius: form.visitWay == 5 ? '8px 8px 0px 0px ': '8px'}" > <template #right-icon> - <van-radio name='5' /> + <van-radio :name='5' /> </template> </van-cell> @@ -259,12 +259,12 @@ <div @click='toTel' class='tel-label'>点击拨打</div> </div> </div> - <van-cell title='住院' clickable @click="form.visitWay = '6'" + <van-cell title='住院' clickable @click="form.visitWay = 6" class='input-back mt-2 form-input' :style="{borderRadius: form.visitWay == 6 ? '8px 8px 0px 0px ': '8px'}" > <template #right-icon> - <van-radio name='6' /> + <van-radio :name='6' /> </template> </van-cell> <div class='tel-back' v-if='form.visitWay == 6'> @@ -275,12 +275,12 @@ <div @click='toTel' class='tel-label'>点击拨打</div> </div> </div> - <van-cell title='入户' clickable @click="form.visitWay = '7'" + <van-cell title='入户' clickable @click="form.visitWay = 7" class='input-back mt-2 form-input' :style="{borderRadius: form.visitWay == 7 ? '8px 8px 0px 0px ': '8px'}" > <template #right-icon> - <van-radio name='7' /> + <van-radio :name='7' /> </template> </van-cell> <div class='tel-back' v-if='form.visitWay == 7'> @@ -291,12 +291,12 @@ <div @click='toTel' class='tel-label'>点击拨打</div> </div> </div> - <van-cell title='电话' clickable @click="form.visitWay = '8'" + <van-cell title='电话' clickable @click="form.visitWay = 8" class='input-back mt-2 form-input' :style="{borderRadius: form.visitWay == 8 ? '8px 8px 0px 0px ': '8px'}" > <template #right-icon> - <van-radio name='8' /> + <van-radio :name='8' /> </template> </van-cell> <div class='tel-back' v-if='form.visitWay == 8'> @@ -308,12 +308,12 @@ </div> </div> - <van-cell title='短信(指导)' clickable @click="form.visitWay = '9'" + <van-cell title='短信(指导)' clickable @click="form.visitWay = 9" class='input-back mt-2 form-input' :style="{borderRadius: form.visitWay == 9 ? '8px 8px 0px 0px ': '8px'}" > <template #right-icon> - <van-radio name='9' /> + <van-radio :name='9' /> </template> </van-cell> <div class='tel-back' v-if='form.visitWay == 9'> @@ -325,21 +325,21 @@ shape='dot'> <div class='flex items-center w-full'> <van-cell title='是' clickable - @click="form.isHealthGuide = '1'" + @click="form.isHealthGuide = 1" style='flex: 1' class='input-back form-input' > <template #right-icon> - <van-radio name='1' /> + <van-radio :name='1' /> </template> </van-cell> <van-cell title='否' clickable - @click="form.isHealthGuide = '2'" + @click="form.isHealthGuide = 2" style='flex: 1' class='input-back form-input ml-2' > <template #right-icon> - <van-radio name='2' /> + <van-radio :name='2' /> </template> </van-cell> </div> @@ -347,12 +347,12 @@ </div> </div> - <van-cell title='微信(指导)' clickable @click="form.visitWay = '11'" + <van-cell title='微信(指导)' clickable @click="form.visitWay = 11" class='input-back mt-2 form-input' :style="{borderRadius: form.visitWay == 11 ? '8px 8px 0px 0px ': '8px'}" > <template #right-icon> - <van-radio name='11' /> + <van-radio :name='11' /> </template> </van-cell> <div class='tel-back' v-if='form.visitWay == 11'> @@ -364,21 +364,21 @@ shape='dot'> <div class='flex items-center w-full'> <van-cell title='是' clickable - @click="form.isHealthGuide = '1'" + @click="form.isHealthGuide = 1" style='flex: 1' class='input-back form-input' > <template #right-icon> - <van-radio name='1' /> + <van-radio :name='1' /> </template> </van-cell> <van-cell title='否' clickable - @click="form.isHealthGuide = '2'" + @click="form.isHealthGuide = 2" style='flex: 1' class='input-back form-input ml-2' > <template #right-icon> - <van-radio name='2' /> + <van-radio :name='2' /> </template> </van-cell> </div> @@ -386,12 +386,12 @@ </div> </div> - <van-cell title='短信(催检)' clickable @click="form.visitWay = '10'" + <van-cell title='短信(催检)' clickable @click="form.visitWay = 10" class='input-back mt-2 form-input' :style="{borderRadius: form.visitWay == 10 ? '8px 8px 0px 0px ': '8px'}" > <template #right-icon> - <van-radio name='10' /> + <van-radio :name='10' /> </template> </van-cell> <div class='tel-back' v-if='form.visitWay == 10'> @@ -411,12 +411,12 @@ <van-date-picker @confirm='timeConfirm1' @cancel='showBirth = false' /> </van-popup> - <van-cell title='微信(催检)' clickable @click="form.visitWay = '12'" + <van-cell title='微信(催检)' clickable @click="form.visitWay = 12" class='input-back mt-2 form-input' :style="{borderRadius: form.visitWay == 12 ? '8px 8px 0px 0px ': '8px'}" > <template #right-icon> - <van-radio name='12' /> + <van-radio :name='12' /> </template> </van-cell> <div class='tel-back' v-if='form.visitWay == 12'> @@ -526,12 +526,12 @@ const defaultForm = (info = {}) => { // createUnitId: undefined, // createUnitName: undefined //本次随访情况 - visitSituation: '1', + visitSituation: 1, lossReason: undefined, deathReason: undefined, lossReasonOther: undefined, - visitWay: '5', - isHealthGuide: '1', + visitWay: 5, + isHealthGuide: 1, screenTime: new dayjs().add(1, 'day').format('YYYY-MM-DD') } Reflect.ownKeys(form).forEach(key => { @@ -694,12 +694,7 @@ export default { id: this.form.personId, }, } - resolve( - fetchDataHandle(par, { - presentCode: 'arrToAdd', - registeredCode: 'arrToAdd' - }) - ) + resolve(par) }).catch((e) => { console.warn('ArchiveCommon error', e) }) diff --git a/src/doctor/followUp/generalFU/form/Index.vue b/src/doctor/followUp/generalFU/form/Index.vue index 39e6380838383d8511fb0dc4a5dec3084a1027a3..340f1198e6ed2d644ba9d5b5e00918f0c94ca9a3 100644 --- a/src/doctor/followUp/generalFU/form/Index.vue +++ b/src/doctor/followUp/generalFU/form/Index.vue @@ -1,6 +1,6 @@ <template> <div> - <van-nav-bar title='新增通用随访' left-text='' left-arrow @click-left='toBack'></van-nav-bar> + <van-nav-bar :title="routerDetail.id ? '修改通用随访': '新增通用随访'" left-text='' left-arrow @click-left='toBack'></van-nav-bar> <div class='p-4 h-overflow'> <base-info :info='info' v-show='step == 1' ref='baseInfo' @changeVisitSituation='changeVisitSituation'></base-info> @@ -10,10 +10,10 @@ </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 v-if='visitSituation ==1' + <van-button type='primary' block round v-if='visitSituation == 1' @click='toNext(2)'>下一步 </van-button> - <van-button type='primary' block round v-if='visitSituation ==2' + <van-button type='primary' block round v-if='visitSituation == 2' @click='toNext(3)'>下一步 </van-button> </div> @@ -72,31 +72,37 @@ export default { methods: { async init() { this.info = {} - const res = await getChronicResidentsId(this.routerDetail.residentInfoId) - const { - id, - createDate, - createDoctorId, - createDoctorName, - createOfficeId, - createOfficeName, - createUnitId, - createUnitName, - updated, - ...others - } = res.data - this.info = { - personId: id, - ...others - } - this.info.diseaseType = this.routerDetail.diseaseType if (this.routerDetail.id) { const res = await fetchCurrencyById({ id: this.routerDetail.id }) let result = res.data || {} + const {residentsRecord = {}} = result + const {id, ...others} = residentsRecord this.info = { + ...others, + personId: id, ...result } + } else { + const res = await getChronicResidentsId(this.routerDetail.residentInfoId) + const { + id, + createDate, + createDoctorId, + createDoctorName, + createOfficeId, + createOfficeName, + createUnitId, + createUnitName, + updated, + ...others + } = res.data + this.info = { + personId: id, + ...others + } + this.info.diseaseType = this.routerDetail.diseaseType } + }, async toNext(val) { if (val == 2) { @@ -127,7 +133,6 @@ export default { return list.join() }, async onsubmit() { - debugger let baseInfo = await this.$refs.baseInfo.onSubmit() let generalFUForm = await this.$refs.generalFUForm.onSubmit() let commonBottom = await this.$refs.commonBottom.onSubmit() @@ -146,7 +151,7 @@ export default { ...generalFUForm, ...commonBottom, uploadVisitRecord, - sceneVisitImage + sceneVisitImage, } if (this.info.id) { params.visitRecordId = this.info.visitRecordId @@ -165,14 +170,14 @@ export default { if (this.visitSituation == 1) { if (this.step != 1) { this.step-- + return } - return } if (this.visitSituation == 2) { if (this.step != 1) { this.step = 1 + return } - return } this.$router.back() } diff --git a/src/doctor/resident/Base.vue b/src/doctor/resident/Base.vue index 31a87b4f88c6fb6f0e2449f65674b312b06f7585..96ee7a4bbe6ff6e34c9c5bd5f1da10eb3f83f4cc 100644 --- a/src/doctor/resident/Base.vue +++ b/src/doctor/resident/Base.vue @@ -84,7 +84,10 @@ export default { }, methods: { toEdit() { - + let par = { + residentInfoId: this.info.residentInfoId + } + this.$router.push({path: `/doctor/resident/base/update`, query: par}) } } diff --git a/src/doctor/resident/Visit.vue b/src/doctor/resident/Visit.vue index 13e7e3924025a982424f3b54bd8543c5cb70f320..710d0486d036a6ce8c16628c8fcff37fa4bdeb04 100644 --- a/src/doctor/resident/Visit.vue +++ b/src/doctor/resident/Visit.vue @@ -13,7 +13,7 @@ finished-text="没有更多了" @load="onMore" > - <div v-for='item in list' :key="item.id" class="p-4 mt-3 card"> + <div v-for='item in list' :key="item.id" class="p-4 mt-3 card" @click.stop='toDetail(item)'> <div class='flex items-center'> <div class='detail-left'> 随访日期 @@ -59,8 +59,8 @@ <div class="flex justify-end"> <van-button round type="primary" class="card-bt" style="margin-right: .12rem" - @click="editBtn(item)">修改</van-button> - <van-button round type="primary" class="card-bt" @click="delBtn(item)">删除</van-button> + @click.stop="editBtn(item)">修改</van-button> + <van-button round type="primary" class="card-bt" @click.stop="delBtn(item)">删除</van-button> </div> <span class="px-3 float-bt"> @@ -164,10 +164,32 @@ export default { this.load() }, addBtn() { - + let par = { + residentInfoId: this.baseInfo.residentInfoId + } + this.$router.push({ + path: `/doctor/followUp/generalFU/add`, + query: par + }) + }, + toDetail(item) { + let par = { + relationId: item. relationId + } + this.$router.push({ + path: `/doctor/followUp/generalFU/detail`, + query: par + }) }, editBtn(item) { - + let par = { + id: item.relationId, + residentInfoId: this.baseInfo.residentInfoId + } + this.$router.push({ + path: `/doctor/followUp/generalFU/add`, + query: par + }) }, delBtn(item) { showConfirmDialog({ diff --git a/src/doctor/resident/form/BaseInfo.vue b/src/doctor/resident/form/BaseInfo.vue new file mode 100644 index 0000000000000000000000000000000000000000..8cd0d03c37d53eb898d1139561c4a505a254053d --- /dev/null +++ b/src/doctor/resident/form/BaseInfo.vue @@ -0,0 +1,450 @@ +<template> + <div> + <van-nav-bar title='修改居民信息' left-text='' left-arrow + @click-left='toBack'></van-nav-bar> + <div class='p-4 h-overflow'> + <van-form ref='form'> + <div class='title'>居民信息</div> + <van-cell-group inset> + <div class='label-title'>证件类型</div> + <van-field + v-model='form.certificateTypeName' + is-link + disabled + placeholder='证件类型' + class='input-back mt-2 form-input' + :rules='rules.certificateTypeName' + /> + <div class='label-title mt-5'>证件号码</div> + <van-field + v-model='form.idCard' + disabled + placeholder='证件号码' + class='input-back mt-2 form-input' + :rules='rules.idCard' + /> + <div class='label-title mt-5'>姓名</div> + <van-field + v-model='form.residentName' + clearable + placeholder='姓名' + class='input-back mt-2 form-input' + :rules='rules.residentName' + /> + <div class='label-title mt-5'>性别</div> + <van-field + v-model='form.genderName' + is-link + disabled + placeholder='性别' + class='input-back mt-2 form-input' + :rules='rules.genderName' + /> + <div class='label-title mt-5'>出生日期</div> + <van-field + v-model='form.dataBirth' + is-link + disabled + placeholder='出生日期' + class='input-back mt-2 form-input' + :rules='rules.dataBirth' + /> + <div class='label-title mt-5'>民族</div> + <van-field + v-model='form.nationalName' + is-link + readonly + name='national' + placeholder='请选择' + class='input-back mt-2 form-input' + :rules='rules.nationalName' + @click='showNational = true' /> + <van-popup v-model:show='showNational' position='bottom'> + <van-picker + :columns-field-names="{ text: 'name', value: 'value' }" + :columns="store.getDict('DC00006')" + @confirm='nationalConfirm' + @cancel='showNational = false' + /> + </van-popup> + <div class='label-title mt-5'>年龄</div> + <van-field + v-model='form.currentAge' + disabled + placeholder='年龄' + class='input-back mt-2 form-input' + :rules='rules.currentAge' + /> + <div class='label-title mt-5'>本人电话</div> + <van-field + v-model='form.telephone' + clearable + placeholder='本人电话' + class='input-back mt-2 form-input' + :rules='rules.telephone' + /> + <div class='no-req-label mt-5'>联系人姓名</div> + <van-field + v-model='form.contactName' + clearable + placeholder='联系人姓名' + class='input-back mt-2 form-input' + :rules='rules.contactName' + /> + <div class='no-req-label mt-5'>与居民关系</div> + <van-field + v-model='form.relationName' + readonly + is-link + placeholder='与居民关系' + class='input-back mt-2 form-input' + @click='showRelation= true' + /> + <van-popup v-model:show='showRelation' position='bottom'> + <van-picker + :columns-field-names="{ text: 'name', value: 'value' }" + :columns="store.getDict('DC00023')" + @confirm='relationlConfirm' + @cancel='showRelation = false' + /> + </van-popup> + <van-field + v-if='form.relation == 99' + v-model='form.relationOther' + clearable + placeholder='其他关系' + class='input-back mt-2 form-input' + /> + <div class='label-title mt-5'>现住址</div> + <van-field + v-model='form.presentCodeName' + is-link + readonly + placeholder='请选择所在地区' + class='input-back mt-2 form-input' + :rules='rules.presentCodeName' + @click='showPresent = true' + /> + <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' /> + </van-popup> + <div class='no-req-label mt-5'>详细地址</div> + <van-field + v-model='form.nowAddress' + clearable + class='input-back mt-2 form-input' + placeholder='请填写详细地址' + maxlength='50' + /> + <div class='flex items-center justify-between mt-5'> + <div class='label-title '>户口地址</div> + <van-button size='mini' plain type='primary' + @click='setRegisteredAddress'>同步现住址 + </van-button> + </div> + + <van-field + v-model='form.registeredCodeName' + is-link + readonly + placeholder='请选择所在地区' + class='input-back mt-2 form-input' + :rules='rules.registeredCode' + @click='showRegistered = true' + /> + <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' /> + </van-popup> + <div class='no-req-label mt-5'>详细地址</div> + <van-field + v-model='form.permanentAddress' + clearable + class='input-back mt-2 form-input' + placeholder='请填写详细地址' + maxlength='50' + /> + </van-cell-group> + </van-form> + </div> + <div class='px-5 grow flex flex-col justify-end pt-2 pb-2'> + <van-button type='primary' block round + @click='onSubmit'>提交 + </van-button> + </div> + </div> +</template> + +<script> +import { addToArr, fetchDataHandle } from '@/utils/common' +import { useStore } from '@/doctor/store' +import DocAddress from '@/components/docAddress/DocAddress' +import dayjs from 'dayjs' +import { getChronicResidentsId } from '@/api/doctor/generalFU' +import { updateResident } from '@/api/doctor/resident' + +const defaultForm = (info = {}) => { + const form = { + id: undefined, + residentInfoId: undefined, + // 年龄 + currentAge: undefined, + // 出生地详细地址 + birthAddress: undefined, + // 出生地编码 + birthCode: undefined, + // 证件类型,[DC00004] + certificateType: 1, + certificateTypeName: '身份证', + // 联系人姓名 + contactName: undefined, + contactName2: undefined, + // 联系人电话 + contactPhone: undefined, + // 与居民关系,[DC00023] + contactRelation: undefined, + contactRelationName: undefined, + // 出生日期 + dataBirth: undefined, + // 职业,[DC00010] + duty: undefined, + dutyName: undefined, + // 文化程度(学历),[DC00007] + education: undefined, + educationName: undefined, + // 性别,[DC00005] + gender: undefined, + genderName: undefined, + // 身份证号 + idCard: undefined, + // innerMarital: undefined, + // 民族,[DC00006] + national: undefined, + nationalName: undefined, + // 现住址 + nowAddress: undefined, + // 户籍地址 + permanentAddress: undefined, + // 现住址编码 + presentCode: undefined, + presentCodeName: undefined, + // 户籍地编码 + registeredCode: undefined, + registeredCodeName: undefined, + // 居民档案id + residentId: undefined, + // 姓名 + residentName: undefined, + // 本人电话 + telephone: undefined, + // 工作单位 + workUnit: undefined, + // 与居民关系 + relation: undefined, + relationOther: undefined + // 人群 + } + Reflect.ownKeys(form).forEach(key => { + if (info[key] != undefined) { + form[key] = info[key] + } + }) + return form +} +export default { + name: 'BaseInfo', + components: { DocAddress }, + props: { + info: { + default: () => { + return {} + } + } + }, + data() { + return { + store: useStore(), + // 民族 + showNational: false, + showRelation: false, + // 现住址 + showPresent: false, + // 户籍地址 + showRegistered: false, + // 地址回显使用 + addressRecord: {}, + form: {}, + rules: { + certificateTypeName: [{ required: true, message: '请选择证件类型' }], + idCard: [{ required: true, message: '请填写证件号码' }], + residentName: [{ required: true, message: '请填写姓名' }], + genderName: [{ required: true, message: '请选择性别' }], + dataBirth: [{ required: true, message: '请选择出生日期' }], + nationalName: [{ required: true, message: '请选择名族' }], + currentAge: [{ required: true, message: '请填写年龄' }], + telephone: [{ required: true, message: '请填写本人电话' }], + contactName: [{ required: false, message: '请填写联系人姓名' }], + presentCodeName: [{ required: true, message: '请选择所在地区' }], + registeredCode: [{ required: true, message: '请选择所在地区' }] + } + } + }, + computed: { + authInfo() { + return this.store.$state.authInfo + }, + routerDetail() { + return this.$route.query + } + }, + created() { + this.load() + }, + methods: { + async load() { + const res = await getChronicResidentsId(this.routerDetail.residentInfoId) + this.form = defaultForm(res.data) + if (this.form.presentCode) { + this.addressRecord.presentCode = addToArr(this.form.presentCode) + } + if (this.form.registeredCode) { + this.addressRecord.registeredCode = addToArr(this.form.registeredCode) + } + }, + // 民族 + nationalConfirm({ selectedValues, selectedOptions }) { + this.form.national = selectedValues[0] + this.form.nationalName = selectedOptions[0].name + this.showNational = false + }, + //与居民关系 + relationlConfirm({ selectedValues, selectedOptions }) { + this.form.relation = selectedValues[0] + this.form.relationName = selectedOptions[0].name + this.showRelation = false + }, + // 现住址 + presentChange(val) { + const selectedOptions = val.selectedOptions + this.form.presentCodeName = selectedOptions.map(e => e.text).join('/') + }, + // 户口地址 + registeredChange(val) { + const selectedOptions = val.selectedOptions + this.form.registeredCodeName = selectedOptions.map(e => e.text).join('/') + if (!this.form.presentCode && selectedOptions.length >= 5) { + this.form.presentCode = val.value + this.form.presentCodeName = this.form.registeredCodeName + } + }, + // 同步现住址 + setRegisteredAddress() { + this.$refs.form.validate(['presentCode']).then(res => { + this.form.registeredCode = this.form.presentCode + this.form.registeredCodeName = this.form.presentCodeName + this.form.permanentAddress = this.form.nowAddress + this.addressRecord.registeredCode = addToArr(this.form.presentCode) + }).catch(err => console.warn(err)) + }, + onSubmit() { + this.$refs.form.validate().then(() => { + let par = { + ...this.form + } + updateResident(par).then(() => { + this.toBack() + }) + }).catch((e) => { + console.warn('ArchiveCommon error', e) + }) + }, + toBack() { + this.$router.back() + } + } +} +</script> + +<style scoped lang='less'> +.h-overflow { + height: calc(100vh - 110px); + overflow-y: auto; +} + +.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; +} + +:deep(.van-nav-bar .van-icon) { + color: #000000; +} + +: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> \ No newline at end of file diff --git a/src/router/index.js b/src/router/index.js index b704b85d67dac865d0f6aa809947070406941a29..e659b874347e8d1095b265fcadce64018176596f 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -67,7 +67,13 @@ const routes = [ component: () => import(/* webpackChunkName: "page-doctor" */ '@/doctor/resident/Visit.vue') }, ] - } + }, + //修改基本信息 + { + path: 'resident/base/update', + name: 'doctor-resident-base-update', + component: () => import(/* webpackChunkName: "page-doctor" */ '@/doctor/resident/form/BaseInfo.vue') + }, ] } ]