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) { ...@@ -23,11 +23,6 @@ export function fetchCurrencyById(params) {
return fetchBase({ url: `/chronic-admin/v1/chronic-visit-currency/record`, body: params, loading: true }) 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) { export function getUnitByName(orgName) {
return fetchBase({ url: `/tumour-admin/v1/sys-user/org-by-name/${orgName}` }) return fetchBase({ url: `/tumour-admin/v1/sys-user/org-by-name/${orgName}` })
...@@ -53,14 +48,14 @@ export function updateCurrency(params) { ...@@ -53,14 +48,14 @@ export function updateCurrency(params) {
return fetchBase({ url: `/chronic-admin/v1/chronic-visit-currency/update`, body: params, loading: true }) return fetchBase({ url: `/chronic-admin/v1/chronic-visit-currency/update`, body: params, loading: true })
} }
// 删除随访 // 列表查询
export function deleteVisit(params) { export function fetchCurrencyList(params, loading) {
return fetchBase({ url: `/chronic-admin/v1/chronic-visit-record/delete`, body:params, loading: true }) return fetchBase({ url: `/chronic-admin/v1/chronic-visit-currency/page`, body: params, loading })
} }
// 查询随访列表 //删除通用随访
export function queryVisitByPage(params, loading) { export function delCurrencyById(params) {
return fetchBase({ url: `/chronic-admin/v1/chronic-visit-record/page`, body: params, loading }) return fetchBase({ url: `/chronic-admin/v1/chronic-visit-currency/delete`, body: params, loading: true })
} }
......
...@@ -14,3 +14,13 @@ export function updateResident(params) { ...@@ -14,3 +14,13 @@ export function updateResident(params) {
export function getResidentByPage(params) { export function getResidentByPage(params) {
return fetchBase({ url: `/chronic-admin/v1/chronic-residents-record/page`, body: params, loading: true }) return fetchBase({ url: `/chronic-admin/v1/chronic-residents-record/page`, body: params, loading: true })
} }
//转诊列表查询
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' import {fetchBase} from '@/api/doctor/doctorFetch'
//查初筛和复筛列表 //查初筛和复筛列表
export function getScreenAllList(residentInfoId) { export function getScreenAllList(residentInfoId, loading) {
return fetchBase({ url: `/chronic-admin/v1/chronic-screening-record/screen-list`,body:{residentInfoId},loading: true}) return fetchBase({ url: `/chronic-admin/v1/chronic-screening-record/screen-list`,body:{residentInfoId},loading})
} }
\ No newline at end of file
...@@ -14,6 +14,9 @@ ...@@ -14,6 +14,9 @@
</div> </div>
<span class="shrink-0 time" :style="`opacity: ${player.currentTime ? 1 : 0}`"> <span class="shrink-0 time" :style="`opacity: ${player.currentTime ? 1 : 0}`">
{{ timeFormat(player.currentTime) }}</span> {{ 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> </div>
<audio ref="audio" type="audio/mpeg" crossOrigin="anonymous" style="display: none"></audio> <audio ref="audio" type="audio/mpeg" crossOrigin="anonymous" style="display: none"></audio>
</div> </div>
...@@ -26,8 +29,10 @@ import { showToast } from 'vant' ...@@ -26,8 +29,10 @@ import { showToast } from 'vant'
export default { export default {
props: { props: {
file: { default: () => ({}) }, file: { default: () => ({}) },
activeMediaUrl: { default: '' } activeMediaUrl: { default: '' },
remove: Boolean
}, },
emits: ['onRemove'],
data() { data() {
return { return {
player: {}, player: {},
...@@ -94,6 +99,9 @@ export default { ...@@ -94,6 +99,9 @@ export default {
onProgress(value) { onProgress(value) {
this.player.progressChange(value) this.player.progressChange(value)
this.player.playing = true this.player.playing = true
},
removeBtn() {
this.$emit('onRemove', this.file)
} }
}, },
watch: { watch: {
......
...@@ -6,6 +6,9 @@ ...@@ -6,6 +6,9 @@
<div class="shrink-0 play-bt" @click="start(item)"> <div class="shrink-0 play-bt" @click="start(item)">
<doc-icon type="doc-play" /> <doc-icon type="doc-play" />
</div> </div>
<span class="close-btn" @click.stop="removeBtn(item)" v-if="remove">
<doc-icon type="close-circle" />
</span>
</div> </div>
<div v-if="item.annexFileName" class="text-12 my-1 text-ellipsis">{{ item.annexFileName }}</div> <div v-if="item.annexFileName" class="text-12 my-1 text-ellipsis">{{ item.annexFileName }}</div>
</div> </div>
...@@ -33,8 +36,10 @@ ...@@ -33,8 +36,10 @@
<script> <script>
export default { export default {
props: { props: {
files: { default: () => [] } files: { default: () => [] },
remove: Boolean
}, },
emits: ['onRemove'],
data() { data() {
return { return {
visible: false, visible: false,
...@@ -46,6 +51,9 @@ export default { ...@@ -46,6 +51,9 @@ export default {
this.activeVideo = item this.activeVideo = item
this.visible = true this.visible = true
this.$emit('play', item) this.$emit('play', item)
},
removeBtn(item) {
this.$emit('onRemove', item)
} }
} }
} }
...@@ -56,6 +64,7 @@ export default { ...@@ -56,6 +64,7 @@ export default {
>div { >div {
width: calc(50% - 5px); width: calc(50% - 5px);
.item { .item {
position: relative;
background: url('@/assets/image/residentWX/video-default.png') no-repeat; background: url('@/assets/image/residentWX/video-default.png') no-repeat;
background-size: 100%; background-size: 100%;
height: .84rem; height: .84rem;
...@@ -75,6 +84,12 @@ export default { ...@@ -75,6 +84,12 @@ export default {
font-size: 15px; font-size: 15px;
padding-left: 2px; padding-left: 2px;
} }
.close-btn {
position: absolute;
font-size: 16px;
top: -8px;
right: -8px;
}
} }
.wrapper { .wrapper {
position: relative; position: relative;
......
...@@ -59,6 +59,9 @@ ...@@ -59,6 +59,9 @@
</van-tabs> </van-tabs>
<div class="grow py-3 px-2" style="min-height: 0px;" v-if="residentInfo.id"> <div class="grow py-3 px-2" style="min-height: 0px;" v-if="residentInfo.id">
<ScreeningList v-if="activeTabItem.id === 'SCREENING'"/> <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> </div>
<van-popup <van-popup
v-model:show="addVisible" v-model:show="addVisible"
...@@ -83,18 +86,25 @@ ...@@ -83,18 +86,25 @@
</template> </template>
<script> <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 { queryResidentInfo } from '@/api/doctor/resident.js'
import { showNotify } from 'vant' 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 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 { export default {
components: { components: {
DocNavBar, DocNavBar,
ChronicTag, ChronicTag,
ScreeningList, ScreeningList,
GeneralList,
ReferralList,
ConsultationList,
CheckBtn CheckBtn
}, },
data() { 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> <template>
<div class="record-list"> <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" <div v-for="item in firstScreenList" :key="item.id"
class="first-card mb-3"> class="first-card mb-3">
<div class="title px-4 py-1">主要慢病筛查记录</div> <div class="title px-4 py-1">主要慢病筛查记录</div>
...@@ -84,6 +86,7 @@ ...@@ -84,6 +86,7 @@
</div> </div>
</div> </div>
</div> </div>
</van-pull-refresh>
<div class='text-center shrink-0 empty' v-if='!firstScreenList.length && !secondScreenList.length'> <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;'> <img src='@/assets/image/doctor/empty.png' alt='' style='width: 1.2rem;'>
<p>暂无数据</p> <p>暂无数据</p>
...@@ -98,6 +101,8 @@ export default { ...@@ -98,6 +101,8 @@ export default {
inject: ['residentInfo'], inject: ['residentInfo'],
data() { data() {
return { return {
loadingRefresh: false,
isRefreshDisable: false,
firstScreenList: [], firstScreenList: [],
secondScreenList: [] secondScreenList: []
} }
...@@ -110,14 +115,29 @@ export default { ...@@ -110,14 +115,29 @@ export default {
created() { created() {
this.load() this.load()
}, },
mounted() {
const list = this.$refs.list
list.addEventListener('scroll', () => {
if (list.scrollTop > 0) {
this.isRefreshDisable = true
} else {
this.isRefreshDisable = false
}
})
},
methods: { methods: {
load() { load(loading = true) {
getScreenAllList(this.residentInfoId).then(res => { getScreenAllList(this.residentInfoId, loading).then(res => {
const result = res.data || {} const result = res.data || {}
this.firstScreenList = result.firstScreenList || [] this.firstScreenList = result.firstScreenList || []
this.secondScreenList = result.secondScreenList || [] this.secondScreenList = result.secondScreenList || []
}).finally(() => {
this.loadingRefresh = false
}) })
}, },
onRefresh() {
this.load(false)
},
toDetail() { toDetail() {
}, },
......
...@@ -118,7 +118,7 @@ export default { ...@@ -118,7 +118,7 @@ export default {
}, },
onRefresh() { onRefresh() {
this.pagination.pageIndex = 1 this.pagination.pageIndex = 1
this.load() this.load(false)
}, },
toDetail(record) { toDetail(record) {
if (!record) return if (!record) return
......
...@@ -34,7 +34,11 @@ ...@@ -34,7 +34,11 @@
<van-button round size="small" class="doc-btn-primary">修改</van-button> <van-button round size="small" class="doc-btn-primary">修改</van-button>
<van-button round size="small" class="doc-btn-red">删除</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> </div>
</template> </template>
...@@ -42,12 +46,16 @@ ...@@ -42,12 +46,16 @@
import DocUnit from '@/doctor/components/docUnit/DocUnit.vue' import DocUnit from '@/doctor/components/docUnit/DocUnit.vue'
import CheckBtn from '@/doctor/components/checkBtn/CheckBtn.vue' import CheckBtn from '@/doctor/components/checkBtn/CheckBtn.vue'
import DocImageUpload from '@/doctor/components/docImageUpload/DocImageUpload.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 { export default {
components:{ components:{
DocUnit, DocUnit,
CheckBtn, CheckBtn,
DocImageUpload DocImageUpload,
Mp4,
Mp3
}, },
data(){ data(){
return { return {
...@@ -62,7 +70,9 @@ export default { ...@@ -62,7 +70,9 @@ export default {
{ name: '肝功能', value: 3 }, { name: '肝功能', value: 3 },
{ name: '肾功能', value: 4 }, { name: '肾功能', value: 4 },
{ name: '电解质', value: 5 } { 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() { 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