Commit d252294c authored by gengchunlei's avatar gengchunlei

医生端 v1.2 1、工作台 慢特病季度随访

            2、个人详情慢特病随访
            3、慢特病表单及详情
parent da4f6ce2
import {fetchBase} from '@/api/doctor/doctorFetch'
// 主键查询
export function fetchSlowSpecialById(params) {
return fetchBase({ url: `/chronic-admin/v1/chronic-visit-special-diseases/record`, body: params, loading: true })
}
// 新增慢特病随访
export function addSlowSpecial(params) {
return fetchBase({ url: `/chronic-admin/v1/chronic-visit-special-diseases/save`, body: params, loading: true })
}
//修改慢特病随访
export function updateSlowSpecial(params) {
return fetchBase({ url: `/chronic-admin/v1/chronic-visit-special-diseases/update`, body: params, loading: true })
}
// 列表查询
export function fetchSlowSpecialList(params) {
return fetchBase({ url: `/chronic-admin/v1/chronic-visit-special-diseases/record-list`, body: params, loading: true })
}
//删除慢特病随访
export function delSlowSpecialById(params) {
return fetchBase({ url: `/chronic-admin/v1/chronic-visit-special-diseases/delete`, body: params, loading: true })
}
// 慢特病季度随访分页查询
export function fetchSlowSeasonList(params) {
return fetchBase({ url: `/chronic-admin/v1/chronic-special-pending-visit/page`, body: params, loading: true })
}
//慢特病季度随访修改
export function updateSlowSeason(params) {
return fetchBase({ url: `/chronic-admin/v1/chronic-special-pending-visit/update`, body: params, loading: true })
}
\ No newline at end of file
......@@ -66,7 +66,7 @@ export default {
if (!token) {
token = sessionStorage.getItem('token')
if (process.env.NODE_ENV !== 'production') {
token = 'd0aa6147-b760-42b5-8871-91db55687b99'
token = 'c7bd708b-d0a2-467d-a506-91544d5186fc'
}
}
if (token) {
......
This diff is collapsed.
<template>
<div class="doctor-info">
<div class="doc-form-label" required>随访单位</div>
<van-field is-link
v-model='form.visitUnitName'
readonly
placeholder='请选择'
name="visitUnitId"
@click="showUnit = true"
:rules="[{ required: true, message: '请选择' }]"
/>
<DocUnit v-model:show="showUnit"
v-model:value="form.visitUnitId"
:valueName="form?.visitUnitName"
@change="unitChange"
/>
<div class="doc-form-label" required>随访科室</div>
<van-field is-link
v-model='form.visitOfficeName'
readonly
placeholder='请选择'
name="visitOfficeId"
@click="showOffice = true"
:rules="[{ required: true, message: '请选择' }]"
/>
<DocOffice v-model:show="showOffice"
v-model:value="form.visitOfficeId"
:unitId="form.visitUnitId"
@change="officeChange"
/>
<div class="doc-form-label" required>随访医生</div>
<van-field is-link
v-model='form.visitDoctorName'
readonly
placeholder='请选择'
name="visitDoctorId"
@click="showDoctor = true"
:rules="[{ required: true, message: '请选择' }]"
/>
<DocOfficeDoctor v-model:show="showDoctor"
:allowClear="false"
v-model:value="form.visitDoctorId"
:unitId="form.visitUnitId"
:officeId="form.visitOfficeId"
@change="(option) => { form.visitDoctorName = option.staffName }"
/>
</div>
</template>
<script>
import { useStore } from '@/doctor/store'
import dayjs from 'dayjs'
import DocUnit from '@/doctor/components/docUnit/DocUnit.vue'
import DocOffice from '@/doctor/components/docOffice/DocOffice.vue'
import DocOfficeDoctor from '@/doctor/components/docOfficeDoctor/DocOfficeDoctor.vue'
const defaultForm = (info = {}) => {
const form = {
createDate: undefined,
// 随访单位
visitUnitId: undefined,
visitUnitName: undefined,
// 随访科室
visitOfficeId: undefined,
visitOfficeName: undefined,
// 随访医生
visitDoctorId: undefined,
visitDoctorName: undefined,
// 录入单位
createUnitId: undefined,
createUnitName: undefined,
// 录入科室
createOfficeId: undefined,
createOfficeName: undefined,
// 录入医生
createDoctorId: undefined,
createDoctorName: undefined
}
Reflect.ownKeys(form).forEach(key => {
if (info[key] != undefined) {
form[key] = info[key]
}
})
return form
}
export default {
components: {
DocUnit,
DocOffice,
DocOfficeDoctor
},
props: {
info: { default: () => ({}) }
},
data() {
return {
form: {},
store: useStore(),
showUnit: false,
showOffice: false,
showDoctor: false
}
},
computed: {
authInfo() {
return this.store.authInfo
}
},
methods: {
initForm() {
this.form.createDate = dayjs().format('YYYY-MM-DD')
// 随访单位
this.form.visitUnitId = this.authInfo.unitId
this.form.visitUnitName = this.authInfo.unitName
// 随访科室
this.form.visitOfficeId = this.authInfo.officeId
this.form.visitOfficeName = this.authInfo.officeName
// 随访医生
this.form.visitDoctorId = this.authInfo.relationId
this.form.visitDoctorName = this.authInfo.nickName
// 录入单位
this.form.createUnitId = this.authInfo.unitId
this.form.createUnitName = this.authInfo.unitName
// 录入科室
this.form.createOfficeId = this.authInfo.officeId
this.form.createOfficeName = this.authInfo.officeName
// 录入医生
this.form.createDoctorId = this.authInfo.relationId
this.form.createDoctorName = this.authInfo.nickName
},
unitChange(option = {}) {
this.form.visitUnitName = option.unitName
this.form.visitDoctorId = undefined
this.form.visitDoctorName = undefined
this.form.visitOfficeId = undefined
this.form.visitOfficeName = undefined
},
officeChange(option = {}) {
this.form.visitOfficeName = option.officeName
this.form.visitDoctorId = undefined
this.form.visitDoctorName = undefined
},
submit() {
return this.form
}
},
watch: {
info: {
handler(info) {
this.form = defaultForm(info)
if (!this.info.id) {
this.initForm()
}
},
immediate: true
}
}
}
</script>
<style lang="less" scoped></style>
This diff is collapsed.
<template>
<div class="h-full flex flex-col screening-first">
<DocNavBar :title="`${id ? '修改' : '新增'}慢特病随访`" class="shrink-0"
:backFunc="onBack" ></DocNavBar>
<div class="p-4 overflow-y-auto grow" ref="all">
<archiveCommon :info="baseInfo" v-if="step == 1" ref="archiveCommon"></archiveCommon>
<FormCont :resident-info="baseInfo" :info="slowSpecialInfo" v-else-if="step == 2" ref="FormCont"/>
</div>
<div class="shrink-0" v-if="step !== 3">
<div class='bottom-small-line'></div>
<div class='px-5 py-2 grow flex justify-between'>
<template v-if='step == 1'>
<van-button type='primary' block round
@click='toNext(2)'>下一步</van-button>
</template>
<template v-else>
<van-button type='primary' block round
@click='toNext(3)'>提交</van-button>
</template>
</div>
</div>
</div>
</template>
<script>
import DocNavBar from '@/doctor/components/docNavBar/DocNavBar.vue'
import archiveCommon from '@/doctor/components/archiveCommon/archiveCommon.vue'
import FormCont from './FormCont.vue'
import { getChronicResidentsId } from '@/api/doctor/generalFU'
import { fetchDataHandle } from '@/utils/common.js'
import { useStore } from '@/doctor/store'
import { addSlowSpecial, fetchSlowSpecialById, updateSlowSpecial } from '@/api/doctor/slowSpecial'
export default {
components: {
DocNavBar,
archiveCommon,
FormCont,
},
data() {
return {
store: useStore(),
step: 1,
// 患者基础信息
baseInfo: {},
// 慢特病信息
slowSpecialInfo: {},
// 结果
resultInfo: {}
}
},
computed: {
id() {
return this.$route.query.id
},
residentInfoId() {
return this.$route.query.residentInfoId
},
idCard() {
return this.$route.query.idCard
},
},
// 路由守卫
beforeRouteLeave(to, from) {
// showConfirmDialog({
// message: '已填写的表单不会保存,确定要离开吗?'})
// .then(() => {
// next()
// })
// .catch(() => {
// next(false)
// })
if (this.step === 2) {
this.onBack()
return false
}
return true
},
created() {
this.init()
},
methods: {
async init() {
if (this.id) {
const res = await fetchSlowSpecialById({id: this.id})
const result = res.data || {}
this.slowSpecialInfo = result
this.baseInfo = this.slowSpecialInfo.residentsRecord
} else {
if (this.residentInfoId) {
debugger
let res = await getChronicResidentsId(this.residentInfoId)
this.baseInfo = res.data || {}
this.slowSpecialInfo.residentInfoId = this.residentInfoId
this.slowSpecialInfo.medicalInsuranceCode = res.data.medicalInsuranceCode
} else if (this.idCard) {
// 新建用户
this.baseInfo.idCard = this.idCard
}
}
},
toNext(val) {
if (val == 2) {
// 基础信息
this.$refs.archiveCommon.onSubmit().then(res => {
this.baseInfo = res
this.step = val
this.$refs.all.scrollTo(0, 0)
})
} else if (val == 3) {
// 筛查信息
this.$refs.FormCont.submit().then(res => {
if (!res) return
console.log('FormCont.submit', res)
const query = fetchDataHandle(res, {
})
query.residentsRecord = this.baseInfo
const func = query.id ? updateSlowSpecial : addSlowSpecial
func(query).then(res => {
this.resultInfo = query
this.store.onRefreshMark()
this.$router.replace({
path: '/doctor/patient-detail',
query: {
residentInfoId: this.residentInfoId
}
})
})
})
} else {
this.step = val
this.$refs.all.scrollTo(0, 0)
}
},
onBack() {
if (this.step == 1) {
this.$router.back()
} else {
this.step--
}
}
}
}
</script>
<style lang="less" scoped>
</style>
......@@ -31,6 +31,11 @@
<span class='label'>联系电话</span>
<span>{{ $phoneHide(residentInfo.telephone) || '-' }}</span>
</div>
<div>
<span class='label-slow'>医保是否办理慢特病</span>
<span v-if="residentInfo.chronicDiseases == 1"></span>
<span v-else>-</span>
</div>
<!-- <div>
<span class="label">人群分类</span>
<span>{{ residentInfo.chronicCrowdName || '-' }}</span>
......@@ -70,8 +75,10 @@
<GeneralList v-else-if="activeTabItem.id === 'CURRENCY'" />
<ReferralList v-else-if="activeTabItem.id === 'REFERRAL'" />
<ConsultationList v-else-if="activeTabItem.id === 'CONSULTATION'" />
<SlowSpecialVisitList v-else-if="activeTabItem.id === 'SLOWSPECIALVISIT'"></SlowSpecialVisitList>
<DiseaseList v-else :key='activeTabItem.value' :diseaseName='activeTabItem.name'
:diseaseType='activeTabItem.value' />
</div>
<van-popup
v-model:show='addVisible'
......@@ -107,13 +114,14 @@ import GeneralList from './components/generalFU/List.vue'
import ReferralList from './components/referral/List.vue'
import ConsultationList from './components/consultation/List.vue'
import DiseaseList from './components/disease/Index.vue'
import { deleteFirstScreening } from '@/api/doctor/screening'
import { saveResidentsDeath } from '@/api/doctor/death'
import SlowSpecialVisitList from '@/doctor/patientDetail/components/slowSpecialVisit/List'
export default {
name: 'PatientDetail',
components: {
SlowSpecialVisitList,
DocNavBar,
ChronicTag,
ScreeningList,
......@@ -144,7 +152,8 @@ export default {
{ name: '新增通用随访', value: 4, path: '/doctor/followUp/generalFU/add' },
{ name: '新增死亡记录', value: 5, path: '/doctor/deathRecord/add' },
// { name: '新增死亡记录详情', value: 6, path: '/doctor/deathRecord/detail' },
{ name: '新增专病随访', value: 7, path: '/doctor/followUp/separateFU/add' }
{ name: '新增专病随访', value: 7, path: '/doctor/followUp/separateFU/add' },
{ name: '新增慢特病随访', value: 8, path: '/doctor/followUp/slowSpecialFU/add' }
]
}
},
......@@ -173,7 +182,9 @@ export default {
const result = [
{ name: '筛查管理', id: 'SCREENING' },
...this.diagnoseList,
{ name: '通用随访', id: 'CURRENCY' }
{ name: '通用随访', id: 'CURRENCY' },
{ name: '慢特病随访', id: 'SLOWSPECIALVISIT' },
// { name: '转诊记录', id: 'REFERRAL' },
// { name: '会诊记录', id: 'CONSULTATION' }
]
......@@ -367,4 +378,10 @@ export default {
bottom: 22px;
}
}
.label-slow {
display: inline-block;
color: #8C8C8C;
min-width: 150px;
}
</style>
<template>
<!-- 慢特病随访-->
<div class="h-full overflow-y-auto general-list" ref='list'>
<van-pull-refresh v-model='loadingRefresh' @refresh='onRefresh'
:disabled='isRefreshDisable' style="min-height: 100%">
<van-list
v-model:loading='loading'
:finished='finished'
:finished-text="list.length ? '没有更多了' : ''"
:immediate-check='false'
@load='onMore'
>
<div class="flex flex-col">
<div v-for='item in list' :key="item.id" @click="toDetail(item)"
class="flex flex-col py-3 px-4 mb-3 doc-list-card" style="row-gap: .04rem;line-height: 1.5;">
<div>
<span class="label">随访日期</span>
<span>{{ item.visitDate }}</span>
</div>
<div class="flex">
<span class="label shrink-0">医保目录代码</span>
<span class="grow text-wrap">{{ item.medicalDirectoryCode || '-' }}</span>
</div>
<div>
<span class="label">随访方式</span>
<span>{{ item.visitWayName || '-' }}</span>
</div>
<div>
<span class="label">是否县城外购药</span>
<span>{{ item.isPurchaseMedicineAbroadName || '-' }}</span>
</div>
<div>
<span class="label">随访医生</span>
<span>{{ item.visitDoctorName || '-' }}</span>
</div>
<div>
<span class="label">随访科室</span>
<span>{{ item.visitOfficeName || '-' }}</span>
</div>
<div class="text-ellipsis">
<span class="label">随访单位</span>
<span>{{ item.visitUnitName || '-' }}</span>
</div>
<div class="divider"></div>
<div class="bt-group">
<van-button round size="small" class="doc-btn-primary" @click="toDetail(item)">详情</van-button>
<van-button round size="small" class="doc-btn-primary" @click="editBtn(item)"
v-if="item.allowUpdate == 1">修改</van-button>
<van-button round size="small" class="doc-btn-red" @click="delBtn(item)"
v-if="item.allowDelete ==1">删除</van-button>
</div>
</div>
</div>
</van-list>
<div class='text-center shrink-0 empty' v-if='!list.length'>
<img src='@/assets/image/doctor/empty.png' alt='' style='width: 1.2rem;'>
<p>暂无数据</p>
</div>
</van-pull-refresh>
</div>
</template>
<script>
import { delSlowSpecialById, fetchSlowSpecialList } from '@/api/doctor/slowSpecial'
import { useStore } from '@/doctor/store'
import { showConfirmDialog } from 'vant'
export default {
name: 'SlowSpecialVisitList',
inject: ['residentInfo'],
data() {
return {
store: useStore(),
list: [],
loading: false,
finished: false,
loadingRefresh: false,
isRefreshDisable: false
}
},
computed: {
residentInfoId() {
return this.residentInfo().residentInfoId
}
},
created() {
this.load()
},
mounted() {
const list = this.$refs.list
list.addEventListener('scroll', () => {
if (list.scrollTop > 0) {
this.isRefreshDisable = true
} else {
this.isRefreshDisable = false
}
})
},
methods: {
load(loading = true) {
const query = {
residentInfoId: this.residentInfoId
}
fetchSlowSpecialList(query, loading).then(res => {
this.list = res.data || []
this.finished = true
}).finally(() => {
this.loading = false
this.loadingRefresh = false
})
},
onMore() {
this.load(false)
},
onRefresh() {
this.load(false)
},
toDetail(record) {
if (!record) return
if (record.id == null) {
this.$message.info('暂时无法查看 详情信息')
return
}
this.$router.push({
path: '/doctor/followUp/slowSpecialFU/detail',
query: {
id: record.id,
}
})
},
editBtn(record) {
this.$router.push({
path: '/doctor/followUp/slowSpecialFU/add',
query: { residentInfoId: this.residentInfoId, id:record.id }
})
},
delBtn(record) {
showConfirmDialog({
message: '确定要删除吗?'
}).then(() => {
delSlowSpecialById({ id: record.id }).then(res => {
setTimeout(() => {
this.$message.info('删除成功')
}, 600)
this.list = this.list.filter(e => e.id !== record.id)
})
}).catch((err) => { console.warn('delSlowSpecialBtn', err) })
},
},
watch: {
'store.refreshMark'() {
this.onRefresh()
}
}
}
</script>
<style lang="less" scoped>
</style>
......@@ -51,6 +51,7 @@ import TableVisit from './tables/Visit.vue'
import TableReceive from './tables/Receive.vue'
import TableFirstScreen from './tables/FirstScreen.vue'
import TableHighRisk from './tables/HighRisk.vue'
import TableSlowSeason from '@/doctor/workbench/tables/SlowSeason'
export default {
name: 'Workbench',
......@@ -60,7 +61,8 @@ export default {
TableVisit,
TableReceive,
TableFirstScreen,
TableHighRisk
TableHighRisk,
TableSlowSeason,
},
data() {
return {
......@@ -70,7 +72,8 @@ export default {
{ key: 'receive', component: 'TableReceive', name: '待接诊居民' },
// { key: 'screenRecord', component: 'TableScreenRecord', name: '当年待筛查记录' },
{ key: 'firstScreen', component: 'TableFirstScreen', name: '初筛高危待筛查' },
{ key: 'highRisk', component: 'TableHighRisk', name: '慢病高危待诊断' }
{ key: 'highRisk', component: 'TableHighRisk', name: '慢病高危待诊断' },
{ key: 'slowSeason', component: 'TableSlowSeason', name: '慢特病季度待随访' },
],
tabActive:{},
configName: '慢病APP个性化配置',
......
This diff is collapsed.
......@@ -147,6 +147,17 @@ const routes = [
name: 'followUp-separateFU-add',
component: () => import(/* webpackChunkName: "doctor" */ '@/doctor/followUp/separateFU/form/Index')
},
//慢特病随访
{
path: 'followUp/slowSpecialFU/detail',
name: 'followUp-slowSpecialFU-detail',
component: () => import(/* webpackChunkName: "doctor" */ '@/doctor/followUp/slowSpecialFU/detail/Detail')
},
{
path: 'followUp/slowSpecialFU/add',
name: 'followUp-slowSpecialFU-add',
component: () => import(/* webpackChunkName: "doctor" */ '@/doctor/followUp/slowSpecialFU/form/Index')
},
]
},
{
......
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