Commit 6512eb34 authored by songrui's avatar songrui

医生端 患者详情相关列表

parent 09cd6786
import {fetchBase} from '@/api/doctor/doctorFetch'
//列表查询
export function fetchDiseaseTypeList(params) {
return fetchBase({ url: `/chronic-admin/v1/chronic-diagnose-record/manage-record`, body: params, loading: true })
}
\ No newline at end of file
......@@ -23,11 +23,6 @@ export function fetchCurrencyById(params) {
return fetchBase({ url: `/chronic-admin/v1/chronic-visit-currency/record`, body: params, loading: true })
}
// 查询待随访列表
export function getVisitAll(params, loading = true) {
return fetchBase({ url: `/chronic-admin/v1/chronic-visit-task/query-all-list`, body: params, loading })
}
// 根据单位名称模糊查询单位信息
export function getUnitByName(orgName) {
return fetchBase({ url: `/tumour-admin/v1/sys-user/org-by-name/${orgName}` })
......@@ -53,14 +48,14 @@ export function updateCurrency(params) {
return fetchBase({ url: `/chronic-admin/v1/chronic-visit-currency/update`, body: params, loading: true })
}
// 删除随访
export function deleteVisit(params) {
return fetchBase({ url: `/chronic-admin/v1/chronic-visit-record/delete`, body:params, loading: true })
// 列表查询
export function fetchCurrencyList(params, loading) {
return fetchBase({ url: `/chronic-admin/v1/chronic-visit-currency/page`, body: params, loading })
}
// 查询随访列表
export function queryVisitByPage(params, loading) {
return fetchBase({ url: `/chronic-admin/v1/chronic-visit-record/page`, body: params, loading })
//删除通用随访
export function delCurrencyById(params) {
return fetchBase({ url: `/chronic-admin/v1/chronic-visit-currency/delete`, body: params, loading: true })
}
......
......@@ -13,4 +13,14 @@ export function updateResident(params) {
// 慢性病管理列表查询
export function getResidentByPage(params) {
return fetchBase({ url: `/chronic-admin/v1/chronic-residents-record/page`, body: params, loading: true })
}
\ No newline at end of file
}
//转诊列表查询
export function getReferralList(params, loading) {
return fetchBase({ url: `/chronic-admin/v1/base-info/referral-list`, body: params, loading })
}
// 会诊列表查询
export function getConsultationList(params, loading) {
return fetchBase({ url: `/chronic-admin/v1/base-info/consultation-list`, body: params, loading })
}
import {fetchBase} from '@/api/doctor/doctorFetch'
//查初筛和复筛列表
export function getScreenAllList(residentInfoId) {
return fetchBase({ url: `/chronic-admin/v1/chronic-screening-record/screen-list`,body:{residentInfoId},loading: true})
export function getScreenAllList(residentInfoId, loading) {
return fetchBase({ url: `/chronic-admin/v1/chronic-screening-record/screen-list`,body:{residentInfoId},loading})
}
\ No newline at end of file
......@@ -14,6 +14,9 @@
</div>
<span class="shrink-0 time" :style="`opacity: ${player.currentTime ? 1 : 0}`">
{{ timeFormat(player.currentTime) }}</span>
<span class="text-16 shrink-0 close-btn" @click.stop="removeBtn" v-if="remove">
<doc-icon type="close-circle" />
</span>
</div>
<audio ref="audio" type="audio/mpeg" crossOrigin="anonymous" style="display: none"></audio>
</div>
......@@ -26,8 +29,10 @@ import { showToast } from 'vant'
export default {
props: {
file: { default: () => ({}) },
activeMediaUrl: { default: '' }
activeMediaUrl: { default: '' },
remove: Boolean
},
emits: ['onRemove'],
data() {
return {
player: {},
......@@ -94,6 +99,9 @@ export default {
onProgress(value) {
this.player.progressChange(value)
this.player.playing = true
},
removeBtn() {
this.$emit('onRemove', this.file)
}
},
watch: {
......
......@@ -6,6 +6,9 @@
<div class="shrink-0 play-bt" @click="start(item)">
<doc-icon type="doc-play" />
</div>
<span class="close-btn" @click.stop="removeBtn(item)" v-if="remove">
<doc-icon type="close-circle" />
</span>
</div>
<div v-if="item.annexFileName" class="text-12 my-1 text-ellipsis">{{ item.annexFileName }}</div>
</div>
......@@ -33,8 +36,10 @@
<script>
export default {
props: {
files: { default: () => [] }
files: { default: () => [] },
remove: Boolean
},
emits: ['onRemove'],
data() {
return {
visible: false,
......@@ -46,6 +51,9 @@ export default {
this.activeVideo = item
this.visible = true
this.$emit('play', item)
},
removeBtn(item) {
this.$emit('onRemove', item)
}
}
}
......@@ -56,6 +64,7 @@ export default {
>div {
width: calc(50% - 5px);
.item {
position: relative;
background: url('@/assets/image/residentWX/video-default.png') no-repeat;
background-size: 100%;
height: .84rem;
......@@ -75,6 +84,12 @@ export default {
font-size: 15px;
padding-left: 2px;
}
.close-btn {
position: absolute;
font-size: 16px;
top: -8px;
right: -8px;
}
}
.wrapper {
position: relative;
......
......@@ -59,6 +59,9 @@
</van-tabs>
<div class="grow py-3 px-2" style="min-height: 0px;" v-if="residentInfo.id">
<ScreeningList v-if="activeTabItem.id === 'SCREENING'"/>
<GeneralList v-else-if="activeTabItem.id === 'CURRENCY'"/>
<ReferralList v-else-if="activeTabItem.id === 'REFERRAL'"/>
<ConsultationList v-else-if="activeTabItem.id === 'CONSULTATION'"/>
</div>
<van-popup
v-model:show="addVisible"
......@@ -83,18 +86,25 @@
</template>
<script>
import DocNavBar from '@/doctor/components/docNavBar/DocNavBar.vue'
import ChronicTag from '@/doctor/components/chronicTag/ChronicTag.vue'
import { queryResidentInfo } from '@/api/doctor/resident.js'
import { showNotify } from 'vant'
import ScreeningList from './components/screening/Index.vue'
import DocNavBar from '@/doctor/components/docNavBar/DocNavBar.vue'
import ChronicTag from '@/doctor/components/chronicTag/ChronicTag.vue'
import CheckBtn from '@/doctor/components/checkBtn/CheckBtn.vue'
import ScreeningList from './components/screening/Index.vue'
import GeneralList from './components/generalFU/List.vue'
import ReferralList from './components/referral/List.vue'
import ConsultationList from './components/consultation/List.vue'
export default {
components: {
DocNavBar,
ChronicTag,
ScreeningList,
GeneralList,
ReferralList,
ConsultationList,
CheckBtn
},
data() {
......
<template>
<div class="h-full overflow-y-auto general-list" ref='list'>
<van-pull-refresh v-model='loadingRefresh' @refresh='onRefresh'
:disabled='isRefreshDisable'>
<div class="flex flex-col">
<div v-for='item in list' :key="item.id"
class="flex flex-col gap-y-2.5 py-3 px-4 mb-3 doc-list-card">
<div>
<span class="label">创建时间</span>
<span>{{ item.addTime || '-' }}</span>
</div>
<div>
<span class="label">期望会诊日期</span>
<span>{{ item.booksDate || '-' }}</span>
</div>
<div>
<span class="label">会诊方式</span>
<span>{{ item.rcWayName || '-' }}</span>
</div>
<div class="text-ellipsis">
<span class="label">申请单位</span>
<span>{{ item.applyHosName || '-' }}</span>
</div>
<div>
<span class="label">申请医生</span>
<span>{{ item.applyDoctName || '-' }}</span>
</div>
<div>
<span class="label">来源</span>
<span>{{ item.systemName || '-' }}</span>
</div>
<div>
<span class="label">状态</span>
<span>{{ item.applyStatusName || '-' }}</span>
</div>
<div class="divider"></div>
<div class="bt-group">
<van-button round size="small" class="doc-btn-primary" @click="toDetail(item)">详情</van-button>
</div>
</div>
</div>
</van-pull-refresh>
<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>
</div>
</template>
<script>
import { getConsultationList } from '@/api/doctor/resident.js'
export default {
inject: ['residentInfo'],
data() {
return {
list: [],
loadingRefresh: false,
isRefreshDisable: false
}
},
computed: {
idCard() {
return this.residentInfo().idCard
}
},
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 = {
idCard: this.idCard
}
getConsultationList(query, loading).then(res => {
this.list = res.data || []
}).finally(() => {
this.loadingRefresh = false
})
},
onRefresh() {
this.load(false)
},
toDetail(record) {
if (!record) return
if (record.id == null) {
showToast('暂时无法查看 详情信息')
return
}
}
}
}
</script>
<style lang="less" scoped>
</style>
<template>
<div class="disease-list"></div>
</template>
<script>
export default {
inject: ['residentInfo'],
}
</script>
<style lang="less" scoped>
</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"
class="flex flex-col gap-y-2.5 py-3 px-4 mb-3 doc-list-card">
<div>
<span class="label">随访日期</span>
<span>{{ item.visitDate }}</span>
</div>
<div class="text-ellipsis">
<span class="label">服务人群</span>
<span>{{ item.groupsArraysName || '-' }}</span>
</div>
<div>
<span class="label">随访方式</span>
<span>{{ item.visitWayName || '-' }}</span>
</div>
<div>
<span class="label">随访类型</span>
<span>{{ item.visitWayRulesName || '-' }}</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>
</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 { fetchCurrencyList, delCurrencyById } from '@/api/doctor/generalFU.js'
export default {
inject: ['residentInfo'],
data() {
return {
list: [],
pagination: {
total: 0,
pageIndex: 1,
pageSize: 8
},
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 = {
pageIndex: this.pagination.pageIndex,
pageSize: this.pagination.pageSize,
residentInfoId: this.residentInfoId
}
fetchCurrencyList(query, loading).then(res => {
if (this.pagination.pageIndex === 1) {
this.list = []
}
this.list = this.list.concat(res.data.dataList || [])
this.pagination.total = res.data.total || 0
this.finished = this.list.length >= this.pagination.total
}).finally(() => {
this.loading = false
this.loadingRefresh = false
})
},
onMore() {
this.pagination.pageIndex++
this.load(false)
},
onRefresh() {
this.pagination.pageIndex = 1
this.load()
},
toDetail(record) {
if (!record) return
if (record.id == null) {
showToast('暂时无法查看 详情信息')
return
}
this.$router.push({
path: '/doctor/followUp/generalFU/detail',
query: {
relationId: record.id
}
})
},
editBtn() {
},
delBtn() {
}
}
}
</script>
<style lang="less" scoped>
</style>
<template>
<div class="h-full overflow-y-auto general-list" ref='list'>
<van-pull-refresh v-model='loadingRefresh' @refresh='onRefresh'
:disabled='isRefreshDisable'>
<div class="flex flex-col">
<div v-for='item in list' :key="item.id"
class="flex flex-col gap-y-2.5 py-3 px-4 mb-3 doc-list-card">
<div>
<span class="label">状态</span>
<span>{{ item.statusName }}</span>
</div>
<div class="text-ellipsis">
<span class="label">转出单位</span>
<span>{{ item.unitName || '-' }}</span>
</div>
<div>
<span class="label">转出医生</span>
<span>{{ item.doctorName || '-' }}</span>
</div>
<div>
<span class="label">转诊类型</span>
<span>{{ item.referralTypeDesc || '-' }}</span>
</div>
<div>
<span class="label">来源</span>
<span>{{ item.source || '-' }}</span>
</div>
<div class="text-ellipsis">
<span class="label">接诊单位</span>
<span>{{ item.transferUnitName || '-' }}</span>
</div>
<div>
<span class="label">接诊医生</span>
<span>{{ item.attendingDoctorName || '-' }}</span>
</div>
<div>
<span class="label">发起时间</span>
<span>{{ item.startDate || '-' }}</span>
</div>
<div class="divider"></div>
<div class="bt-group">
<van-button round size="small" class="doc-btn-primary" @click="toDetail(item)">详情</van-button>
</div>
</div>
</div>
</van-pull-refresh>
<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>
</div>
</template>
<script>
import { getReferralList } from '@/api/doctor/resident.js'
export default {
inject: ['residentInfo'],
data() {
return {
list: [],
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
}
getReferralList(query, loading).then(res => {
this.list = res.data || []
}).finally(() => {
this.loadingRefresh = false
})
},
onRefresh() {
this.load(false)
},
toDetail(record) {
if (!record) return
if (record.id == null) {
showToast('暂时无法查看 详情信息')
return
}
}
}
}
</script>
<style lang="less" scoped>
</style>
<template>
<div class="record-list">
<div v-for="item in firstScreenList" :key="item.id"
class="first-card mb-3">
<div class="title px-4 py-1">主要慢病筛查记录</div>
<div class="flex flex-col gap-y-2.5 py-3 px-4 doc-list-card">
<div>
<span class="label">高危评估</span>
<span>{{ item.screenResultName }}</span>
</div>
<div>
<span class="label">筛查日期</span>
<span>{{ item.screenDate }}</span>
</div>
<div>
<span class="label">筛查单位</span>
<span>{{ item.screenUnitName }}</span>
</div>
<div>
<span class="label">筛查科室</span>
<span>{{ item.screenOfficeName }}</span>
</div>
<div>
<span class="label">筛查医生</span>
<span>{{ item.screenDoctorName }}</span>
</div>
<div>
<span class="label">数据来源</span>
<span>{{ item.sourceName }}</span>
</div>
<div>
<span class="label">创建时间</span>
<span>{{ item.created }}</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 class="record-list" ref="list">
<van-pull-refresh v-model='loadingRefresh' @refresh='onRefresh'
:disabled='isRefreshDisable'>
<div v-for="item in firstScreenList" :key="item.id"
class="first-card mb-3">
<div class="title px-4 py-1">主要慢病筛查记录</div>
<div class="flex flex-col gap-y-2.5 py-3 px-4 doc-list-card">
<div>
<span class="label">高危评估</span>
<span>{{ item.screenResultName }}</span>
</div>
<div>
<span class="label">筛查日期</span>
<span>{{ item.screenDate }}</span>
</div>
<div>
<span class="label">筛查单位</span>
<span>{{ item.screenUnitName }}</span>
</div>
<div>
<span class="label">筛查科室</span>
<span>{{ item.screenOfficeName }}</span>
</div>
<div>
<span class="label">筛查医生</span>
<span>{{ item.screenDoctorName }}</span>
</div>
<div>
<span class="label">数据来源</span>
<span>{{ item.sourceName }}</span>
</div>
<div>
<span class="label">创建时间</span>
<span>{{ item.created }}</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>
</div>
<div v-for="item in secondScreenList" :key="item.id"
class="second-card mb-3">
<div class="title px-4 py-1">专病筛查记录</div>
<div class="flex flex-col gap-y-2.5 py-3 px-4 doc-list-card">
<div class="text-ellipsis">
<span class="label">高危评估</span>
<span>{{ item.specialScreenResultName }}</span>
</div>
<div>
<span class="label">筛查日期</span>
<span>{{ item.screenDate }}</span>
</div>
<div>
<span class="label">筛查单位</span>
<span>{{ item.screenUnitName }}</span>
</div>
<div>
<span class="label">筛查科室</span>
<span>{{ item.screenOfficeName }}</span>
</div>
<div>
<span class="label">筛查医生</span>
<span>{{ item.screenDoctorName }}</span>
</div>
<div>
<span class="label">数据来源</span>
<span>{{ item.sourceName }}</span>
</div>
<div>
<span class="label">创建时间</span>
<span>{{ item.created }}</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.allowUpdate == 1">删除</van-button>
<div v-for="item in secondScreenList" :key="item.id"
class="second-card mb-3">
<div class="title px-4 py-1">专病筛查记录</div>
<div class="flex flex-col gap-y-2.5 py-3 px-4 doc-list-card">
<div class="text-ellipsis">
<span class="label">高危评估</span>
<span>{{ item.specialScreenResultName }}</span>
</div>
<div>
<span class="label">筛查日期</span>
<span>{{ item.screenDate }}</span>
</div>
<div>
<span class="label">筛查单位</span>
<span>{{ item.screenUnitName }}</span>
</div>
<div>
<span class="label">筛查科室</span>
<span>{{ item.screenOfficeName }}</span>
</div>
<div>
<span class="label">筛查医生</span>
<span>{{ item.screenDoctorName }}</span>
</div>
<div>
<span class="label">数据来源</span>
<span>{{ item.sourceName }}</span>
</div>
<div>
<span class="label">创建时间</span>
<span>{{ item.created }}</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.allowUpdate == 1">删除</van-button>
</div>
</div>
</div>
</div>
</van-pull-refresh>
<div class='text-center shrink-0 empty' v-if='!firstScreenList.length && !secondScreenList.length'>
<img src='@/assets/image/doctor/empty.png' alt='' style='width: 1.2rem;'>
<p>暂无数据</p>
......@@ -98,6 +101,8 @@ export default {
inject: ['residentInfo'],
data() {
return {
loadingRefresh: false,
isRefreshDisable: false,
firstScreenList: [],
secondScreenList: []
}
......@@ -110,14 +115,29 @@ export default {
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() {
getScreenAllList(this.residentInfoId).then(res => {
load(loading = true) {
getScreenAllList(this.residentInfoId, loading).then(res => {
const result = res.data || {}
this.firstScreenList = result.firstScreenList || []
this.secondScreenList = result.secondScreenList || []
}).finally(() => {
this.loadingRefresh = false
})
},
onRefresh() {
this.load(false)
},
toDetail() {
},
......
......@@ -118,7 +118,7 @@ export default {
},
onRefresh() {
this.pagination.pageIndex = 1
this.load()
this.load(false)
},
toDetail(record) {
if (!record) return
......
......@@ -34,7 +34,11 @@
<van-button round size="small" class="doc-btn-primary">修改</van-button>
<van-button round size="small" class="doc-btn-red">删除</van-button>
<h4>MP4</h4>
<Mp4 :files="mp4Data" remove/>
<h4>MP3</h4>
<Mp3 :file="mp3Data" remove/>
</div>
</template>
......@@ -42,12 +46,16 @@
import DocUnit from '@/doctor/components/docUnit/DocUnit.vue'
import CheckBtn from '@/doctor/components/checkBtn/CheckBtn.vue'
import DocImageUpload from '@/doctor/components/docImageUpload/DocImageUpload.vue'
import Mp4 from '@/doctor/components/mediaPlay/Mp4.vue'
import Mp3 from '@/doctor/components/mediaPlay/Mp3.vue'
export default {
components:{
DocUnit,
CheckBtn,
DocImageUpload
DocImageUpload,
Mp4,
Mp3
},
data(){
return {
......@@ -62,7 +70,9 @@ export default {
{ name: '肝功能', value: 3 },
{ name: '肾功能', value: 4 },
{ name: '电解质', value: 5 }
]
],
mp4Data: [{ annexId: 1, annexUrl: 'https://beta-tumour.zmnyjk.com/chronic-admin/file-proxy/tumour/20241025/1729847263522306995.mp4?e=1733300684&token=yrkyCAltqk1WVrw1ZNWUl5F5gLxE0O8LJ0Vq4hzi:xukYHUsfX6OuAXIagBuHMCJ8XNg=', annexFileName: 'kanna.mp4' }],
mp3Data: { annexId: 2, annexUrl: 'https://beta-tumour.zmnyjk.com/chronic-admin/file-proxy/tumour/20241025/1729847336798585370.mp3?e=1733300684&token=yrkyCAltqk1WVrw1ZNWUl5F5gLxE0O8LJ0Vq4hzi:RTqkJZsScil9rGf9kdA0Lq1TEOs=', annexFileName: 'Never Gonna Give You Up-Rick Astley.mp3'}
}
},
created() {
......
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