Commit aec518aa authored by gengchunlei's avatar gengchunlei

居民端小程序初始化文件与配置

parent 8bc6a62b
...@@ -52,7 +52,7 @@ export default { ...@@ -52,7 +52,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 = '72b191d3-e3a0-49ce-884a-1dd3452b5d9a' token = '4ef7a32e-c217-44b6-ac5d-8ad9a91d38a0'
} }
} }
if (token) { if (token) {
......
<template>
<div class='all-back'>
<van-nav-bar title='慢病管理' left-text='' left-arrow
@click-right='toSearch' @click-left='toBack'>
<template #right>
<doc-icon type='doc-search' style='color: #262626' />
</template>
</van-nav-bar>
<div class='top-title'>
我的待随访({{ total }})
</div>
<van-tabs v-model:active='active' @change='changeTab'>
<van-tab :name='item.name' v-for='item in tabList' :key='item.name'>
<template #title>
<span>{{ item.title }}({{ item.num }})</span>
</template>
</van-tab>
</van-tabs>
<van-pull-refresh v-model='loading' @refresh='onRefresh'
:disabled='isRefreshDisable'>
<div class='list-data' ref='list'>
<van-list
v-model:loading='loadingTable'
:finished='finished'
:finished-text="detailInfo.length ? '没有更多了' : ''"
@load='onMore'
>
<div class='mt-10 white-back p-16' v-for='item in detailInfo' :key='item.id'>
<div class='flex items-center'>
<div class='base-title'>{{ item.residentName }}</div>
<div class='second-title plr-8'>{{ getInfoByIdCard(item.idCard).age }}岁</div>
<div class='second-title plr-6'>{{ item.genderName }}</div>
</div>
<div class='mt-3 flex items-center'>
<div class='detail-left'>
身份证号
</div>
<div class='detail-right'>
{{ $idCardHide(item.idCard) }}
</div>
</div>
<div class='mt-3 flex items-center'>
<div class='detail-left'>
是否逾期
</div>
<div class='detail-right'>
{{ item.isOverdueName }}
</div>
</div>
<div class='mt-3 flex items-center'>
<div class='detail-left'>
逾期天数
</div>
<div class='detail-right'>
{{ item.overdueDay }} 天
</div>
</div>
<div class='flex mt-3' style='align-items: baseline'>
<div class='detail-left'>
慢病标签
</div>
<div class='detail-right' style='flex: 1'>
<ChronicTag :list='item.chronicTagsArray' />
</div>
</div>
<van-divider class='mt-3' />
<div class='mt-3 flex word-right'>
<div></div>
<div>
<van-button round size='small' class='btn' @click='toGeneralDetail(item)'>详情
</van-button>
<van-button round size='small' class='btn' style='margin-left: 16px'
@click='toAddGeneral(item)'>通用随访
</van-button>
</div>
</div>
</div>
</van-list>
<div class='text-center empty' v-if='!detailInfo.length'>
<img src='@/assets/image/doctor/empty.png' alt='' style='width: 1.2rem;'>
<p>暂无数据</p>
</div>
</div>
</van-pull-refresh>
</div>
</template>
<script>
import dayjs from 'dayjs'
import { getVisitAll, queryVisitByPage } from '@/api/doctor/generalFU.js'
import ChronicTag from '@/doctor/components/chronicTag/ChronicTag.vue'
import { backHome, getInfoByIdCard } from '@/utils/common'
export default {
name: 'List',
components: {
ChronicTag
},
data() {
return {
active: 1,
tabList: [
{ title: '高血压', name: 1, num: 0 },
{ title: '糖尿病', name: 2, num: 0 },
{ title: '冠心病', name: 3, num: 0 },
{ title: '脑卒中', name: 4, num: 0 },
{ title: '慢阻肺', name: 5, num: 0 },
{ title: '慢性肾病', name: 6, num: 0 },
{ title: '血脂异常', name: 7, num: 0 }
],
detailInfo: [],
total: 0,
// 下拉刷新
loading: false,
isRefreshDisable: false,
//列表刷新
loadingTable: false,
pagination: {
total: 0,
pageIndex: 1,
pageSize: 5
},
finished: false
}
},
mounted() {
const list = this.$refs.list
list.addEventListener('scroll', () => {
if (list.scrollTop > 0) {
this.isRefreshDisable = true
} else {
this.isRefreshDisable = false
}
})
},
methods: {
getInfoByIdCard,
changeTab() {
this.detailInfo = []
this.pagination.pageIndex = 1
this.load()
},
onMore() {
this.pagination.pageIndex++
this.load()
},
load(loading = true) {
const query = {
diseaseType: this.active,
pageIndex: this.pagination.pageIndex,
pageSize: this.pagination.pageSize
}
getVisitAll(query, loading).then(res => {
console.log('getVisitAll', res)
this.detailInfo = this.detailInfo.concat(res.data || [])
this.total = this.detailInfo.length
this.finished = this.detailInfo.length >= this.pagination.total
}).finally(() => {
this.loading = false
this.loadingTable = false
})
},
scrollHandle(dom) {
if (!dom) return
if (dom.scrollTop > 0) {
this.isRefreshDisable = true
} else {
this.isRefreshDisable = false
}
},
onRefresh() {
this.detailInfo = []
this.pagination.pageIndex = 1
this.load(false)
},
toGeneralDetail(item) {
this.$router.push({
path: `/doctor/resident/base`,
query: {
residentId: item.residentInfoId
}
})
},
toAddGeneral(val) {
const { id, ...others } = val
this.$router.push({
path: `/doctor/followUp/generalFU/add`,
query: { ...others }
})
},
toSearch() {
this.$router.push({
path: `/doctor/followUp/search`
})
},
toBack() {
backHome()
}
}
}
</script>
<style scoped lang='less'>
.all-back {
background: #F5F5F5;
.top-title {
padding: 10px 12px;
}
.white-back {
background: #FFFFFF;
}
.mt-10 {
margin-top: 10px;
}
.p-16 {
padding: 16px;
}
.plr-8 {
padding: 0px 8px;
}
.plr-6 {
padding: 0px 6px;
}
.base-title {
font-weight: bold;
font-size: 16px;
}
.second-title {
background: #F0F3FF;
line-height: 24px;
margin-left: 10px;
}
.detail-left {
width: 104px;
font-size: 14px;
color: #8C8C8C;
}
.detail-right {
font-size: 14px;
}
.word-right {
justify-content: space-between;
align-items: center;
}
.btn {
background: #F0F3FF;
color: #607FF0;
border: 0px;
line-height: 26px;
height: 26px;
//padding: 4px 8px 4px 8px;
padding: 0px 8px;
}
.list-data {
height: calc(100vh - 140px);
overflow-y: auto;
}
}
</style>
\ No newline at end of file
<template>
<div class='all-back'>
<van-pull-refresh v-model='isLoading'
success-text='刷新成功'
@refresh='onRefresh'
:disabled='isRefreshDisable'
>
<van-nav-bar title='慢病管理' left-text='' left-arrow>
<template #right>
<van-icon name='search' size='18' />
</template>
</van-nav-bar>
<div class='top-title'>
我的待随访(16)
</div>
<van-tabs v-model:active='active'>
<van-tab :title='item.title' :name='item.name' v-for='item in tabList'></van-tab>
</van-tabs>
<div
class='list-data'
v-infinite-scroll='loadMore'
:infinite-scroll-disabled='loading'
infinite-scroll-distance='10'
ref='list'
>
<div class='mt-10 white-back p-16' v-for='item in detailInfo'>
<div class='flex items-center'>
<div class='base-title'>张曼玉</div>
<div class='second-title plr-8'>24岁</div>
<div class='second-title plr-6'></div>
</div>
<div class='mt-3 flex items-center'>
<div class='detail-left'>
身份证号
</div>
<div class='detail-right'>
3604211901****3128
</div>
</div>
<div class='mt-3 flex items-center'>
<div class='detail-left'>
高危评估
</div>
<div class='detail-right'>
高危人群
</div>
</div>
<div class='mt-3 flex items-center'>
<div class='detail-left'>
专病高危评估
</div>
<div class='detail-right'>
高血压高危
</div>
</div>
<div class='flex' style='align-items: baseline'>
<div class='detail-left' :style="{marginTop: item.diseaseList.length ? '0px': '12px'}">
慢病标签
</div>
<div class='detail-right' style='flex: 1'>
<div class='flex items-center '
style='flex-wrap: wrap;'>
<div v-for='item1 in item.diseaseList' :class='`mt-3 ill-tabs ill-tabs-${item1.id}`'>
{{ item1.name }}
</div>
</div>
</div>
</div>
<van-divider class='mt-3' />
<div class='mt-3 flex word-right'>
<div></div>
<div>
<van-button round size='small' class='btn' @click='toGeneralDetail'>详情</van-button>
<van-button round size='small' class='btn' style='margin-left: 16px' @click='toAddGeneral'>通用随访
</van-button>
</div>
</div>
</div>
</div>
</van-pull-refresh>
</div>
</template>
<script>
import { showFailToast } from 'vant'
const tabList = [
{ title: '高血压', name: 1, num: 3 },
{ title: '糖尿病', name: 2, num: 3 },
{ title: '冠心病', name: 3, num: 3 },
{ title: '脑卒中', name: 4, num: 3 },
{ title: '慢阻肺', name: 5, num: 3 },
{ title: '慢性肾病', name: 6, num: 3 },
{ title: '血脂异常', name: 7, num: 3 }
]
export default {
name: 'List',
data() {
return {
active: 1,
tabList,
loading: false,
isLoading: false,
detailInfo: [
{
diseaseList: [
{ id: 1, name: '高血压' },
{ id: 2, name: '糖尿病' },
{ id: 3, name: '冠心病' },
{ id: 3, name: '脑卒中' },
{ id: 5, name: '慢阻肺' },
{ id: 6, name: '慢性肾病' },
{ id: 7, name: '血脂异常' }
]
},
{
diseaseList: [
{ id: 1, name: '高血压' },
{ id: 3, name: '冠心病' },
{ id: 5, name: '慢阻肺' }
]
},
{
diseaseList: [
{ id: 1, name: '高血压' },
{ id: 6, name: '慢性肾病' },
{ id: 7, name: '血脂异常' }
]
}
],
noDataShow: false,
param: {
pageIndex: 0,
pageSize: 10
},
isRefreshDisable: false,
scrollTop: 0
}
},
watch: {
scrollTop(newval) {
if (newval > 0) {
this.isRefreshDisable = true
} else {
this.isRefreshDisable = false
}
}
},
mounted() {
this.$nextTick(() => {
const list = this.$refs.list
list.addEventListener('scroll', () => {
this.scrollTop = list.scrollTop
})
})
},
methods: {
onRefresh() {
this.isLoading = true
this.loading = true
this.param.pageIndex = 1
this.getRecordInfo()
},
loadMore() {
this.loading = true
this.param.pageIndex += 1
this.getRecordInfo()
},
getRecordInfo(callBack) {
let par = {
...this.param
}
getNetworkInfoByPhone(par).then(({ data = [] }) => {
this.loading = false
if (this.isLoading) { //刷新时先赋空
this.detailInfo = []
}
this.detailInfo = this.detailInfo.concat(data.data.dataList)
if (this.detailInfo.length == 0) {
this.noDataShow = true
} else {
this.noDataShow = false
}
if (data.data && data.data.length < this.param.pageSize) {
this.loadText = '暂无更多数据'
} else {
this.loading = false
}
this.isLoading = false
callBack && callBack()
}).catch(res => {
showFailToast('系统异常,请联系客服!')
this.loading = false
this.isLoading = false
})
},
toGeneralDetail() {
this.$router.push({
path: `/doctor/followUp/generalFU/detail`
})
},
toAddGeneral() {
this.$router.push({
path: `/doctor/followUp/generalFU/add`
})
}
}
}
</script>
<style scoped lang='less'>
.all-back {
background: #F5F5F5;
.top-title {
padding: 10px 12px;
}
.white-back {
background: #FFFFFF;
}
.mt-10 {
margin-top: 10px;
}
.p-16 {
padding: 16px;
}
.plr-8 {
padding: 0px 8px;
}
.plr-6 {
padding: 0px 6px;
}
.base-title {
font-weight: bold;
font-size: 16px;
}
.second-title {
background: #F0F3FF;
line-height: 24px;
margin-left: 10px;
}
.detail-left {
width: 104px;
font-size: 14px;
color: #8C8C8C;
}
.detail-right {
font-size: 14px;
}
.ill-tabs {
line-height: 20px;
border-radius: 20px;
padding: 3px 8px 3px 8px;
}
.ill-tabs-1 {
background: #FFF2E8;
color: #F83B00;
}
.ill-tabs-2 {
margin-left: 2px;
background: #FFF1F0;
color: #F5222D;
}
.ill-tabs-3 {
margin-left: 2px;
background: #FFF0F7;
color: #F61E54;
}
.ill-tabs-4 {
margin-left: 2px;
background: #FFF7E6;
color: #D46B08;
}
.ill-tabs-5 {
margin-left: 2px;
background: #F4FFE6;
color: #A0BA01;
}
.ill-tabs-6 {
margin-left: 2px;
background: #ECEBFF;
color: #AA63E2;
}
.ill-tabs-7 {
margin-left: 2px;
background: #E6F9FF;
color: #4D86DA;
}
.word-right {
justify-content: space-between;
align-items: center;
}
.btn {
background: #F0F3FF;
color: #607FF0;
border: 0px;
line-height: 26px;
padding: 4px 8px 4px 8px;
}
.list-data {
height: calc(100vh - 140px);
overflow-y: auto;
}
}
</style>
\ No newline at end of file
<template> <template>
<div class="h-full flex flex-col visit"> <div class='h-full flex flex-col visit'>
<van-tabs v-model:active='activeTab' class="shrink-0" v-if="tabList.length" <van-tabs v-model:active='activeTab' class='shrink-0' v-if='tabList.length'
@change="tabChange" @change='tabChange'
shrink> shrink>
<van-tab v-for='item in tabList' :key="item.name" <van-tab v-for='item in tabList' :key='item.name'
:title='item.title' :name='item.name'></van-tab> :title='item.title' :name='item.name'></van-tab>
</van-tabs> </van-tabs>
<div class='grow overflow-y-auto card-list' ref='list'>
<div class="grow overflow-y-auto card-list" v-if="baseInfo.id && list.length"> <van-pull-refresh v-model='loadingRefresh' @refresh='onRefresh'
:disabled='isRefreshDisable'>
<van-list <van-list
v-model:loading="loading" v-model:loading='loading'
:finished="finished" :finished='finished'
finished-text="没有更多了" :finished-text="list.length ? '没有更多了' : ''"
@load="onMore" :immediate-check='false'
@load='onMore'
> >
<div v-for='item in list' :key="item.id" class="p-4 mt-3 card" @click.stop='toDetail(item)'> <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='flex items-center'>
<div class='detail-left'> <div class='detail-left'>
随访情况 随访情况
...@@ -74,25 +76,29 @@ ...@@ -74,25 +76,29 @@
<van-divider class='mt-3' /> <van-divider class='mt-3' />
<div class="flex justify-end" > <div class='flex justify-end'>
<van-button round type="primary" class="card-bt" style="margin-right: .12rem" <van-button round type='primary' class='card-bt' style='margin-right: .12rem'
@click.stop="editBtn(item)" v-show='item.allowUpdate ==1'>修改</van-button> @click.stop='editBtn(item)' v-show='item.allowUpdate ==1'>修改
<van-button round type="primary" class="card-bt" @click.stop="delBtn(item)" v-show='item.allowUpdate ==1'>删除</van-button> </van-button>
<van-button round type='primary' class='card-bt' @click.stop='delBtn(item)'
v-show='item.allowUpdate ==1'>删除
</van-button>
</div> </div>
<span class="px-3 float-bt"> <span class='px-3 float-bt'>
通用随访 通用随访
</span> </span>
</div> </div>
</van-list> </van-list>
</div> <div class='text-center shrink-0 empty' v-if='!list.length'>
<div class="text-center shrink-0 empty" v-else> <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>
</div> </div>
<div class="p-3 floor" v-if='activeTab'> </van-pull-refresh>
<van-button round block type="primary" class="card-bt" @click="addBtn">新增通用随访</van-button> </div>
<div class='p-3 floor' v-if='activeTab'>
<van-button round block type='primary' class='card-bt' @click='addBtn'>新增通用随访</van-button>
</div> </div>
</div> </div>
</template> </template>
...@@ -109,10 +115,12 @@ export default { ...@@ -109,10 +115,12 @@ export default {
pagination: { pagination: {
total: 0, total: 0,
pageIndex: 1, pageIndex: 1,
pageSize: 10 pageSize: 4
}, },
loading: false, loading: false,
finished: false finished: false,
loadingRefresh: false,
isRefreshDisable: false
} }
}, },
inject: ['getBaseInfo'], inject: ['getBaseInfo'],
...@@ -132,54 +140,59 @@ export default { ...@@ -132,54 +140,59 @@ export default {
{ title: '脑卒中', name: 4, code: '8' }, { title: '脑卒中', name: 4, code: '8' },
{ title: '慢性阻塞性疾病', name: 5, code: '16' }, { title: '慢性阻塞性疾病', name: 5, code: '16' },
{ title: '慢性肾病', name: 6, code: '32' }, { title: '慢性肾病', name: 6, code: '32' },
{ title: '血脂异常', name: 7, code: '64' }, { title: '血脂异常', name: 7, code: '64' }
] ]
return list.filter(e => this.chronicTagsArray.includes(e.code)) return list.filter(e => this.chronicTagsArray.includes(e.code))
} }
}, },
mounted() { mounted() {
this.init() 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) {
const query = { const query = {
residentInfoId: this.baseInfo.residentInfoId, residentInfoId: this.baseInfo.residentInfoId,
serveTypeList: [5, 6, 7, 8, 9, 10, 11, 12, 14], serveTypeList: [5, 6, 7, 8, 9, 10, 11, 12, 14],
diseaseType: this.activeTab, diseaseType: this.activeTab,
pageIndex: this.pagination.pageIndex, pageIndex: this.pagination.pageIndex,
pageSize: this.pagination.pageSize, pageSize: this.pagination.pageSize
} }
queryVisitByPage(query, true).then(res => { queryVisitByPage(query, loading).then(res => {
this.list = res.data.dataList || [] this.list = this.list.concat(res.data.dataList || [])
this.pagination.total = res.data.total || 0 this.pagination.total = res.data.total || 0
this.finished = this.list.length >= this.pagination.total this.finished = this.list.length >= this.pagination.total
}).finally(() => {
this.loading = false
this.loadingRefresh = false
}) })
}, },
onMore() { onMore() {
this.pagination.pageIndex++ this.pagination.pageIndex++
const query = { this.load()
residentInfoId: this.baseInfo.residentInfoId,
serveTypeList: [5, 6, 7, 8, 9, 10, 11, 12, 14],
diseaseType: this.activeTab,
pageIndex: this.pagination.pageIndex,
pageSize: this.pagination.pageSize,
}
queryVisitByPage(query, false).then(res => {
this.pagination.total = res.data.total || 0
this.list = this.list.concat(res.data.dataList || [])
this.finished = this.list.length >= this.pagination.total
})
}, },
init() { init() {
if (this.chronicTagsArray.length) { if (this.chronicTagsArray.length) {
const item = this.tabList.find(e => e.code === this.chronicTagsArray[0]) || {} const item = this.tabList.find(e => e.code === this.chronicTagsArray[0]) || {}
this.activeTab = item.name this.activeTab = item.name
// this.load()
} }
}, },
tabChange() { tabChange() {
this.list = []
this.pagination.pageIndex = 1
this.load() this.load()
}, },
onRefresh() {
this.list = []
this.pagination.pageIndex = 1
this.load(false)
},
addBtn() { addBtn() {
if (this.baseInfo.chronicStatus === 9) { if (this.baseInfo.chronicStatus === 9) {
showToast('该居民已标记为死亡,无法新增随访') showToast('该居民已标记为死亡,无法新增随访')
...@@ -196,7 +209,7 @@ export default { ...@@ -196,7 +209,7 @@ export default {
}, },
toDetail(item) { toDetail(item) {
let par = { let par = {
relationId: item. relationId relationId: item.relationId
} }
this.$router.push({ this.$router.push({
path: `/doctor/followUp/generalFU/detail`, path: `/doctor/followUp/generalFU/detail`,
...@@ -232,18 +245,21 @@ export default { ...@@ -232,18 +245,21 @@ export default {
} }
</script> </script>
<style lang="less" scoped> <style lang='less' scoped>
.card-list { .card-list {
padding-bottom: 76px; padding-bottom: 76px;
} }
.card { .card {
position: relative; position: relative;
background-color: #fff; background-color: #fff;
.detail-left { .detail-left {
width: 8em; width: 8em;
color: #8C8C8C; color: #8C8C8C;
flex-shrink: 0; flex-shrink: 0;
} }
.card-bt { .card-bt {
font-size: 14px; font-size: 14px;
color: #607FF0; color: #607FF0;
...@@ -251,6 +267,7 @@ export default { ...@@ -251,6 +267,7 @@ export default {
border: 0; border: 0;
height: 26px; height: 26px;
} }
.float-bt { .float-bt {
position: absolute; position: absolute;
top: 10px; top: 10px;
...@@ -263,6 +280,7 @@ export default { ...@@ -263,6 +280,7 @@ export default {
line-height: 26px; line-height: 26px;
} }
} }
.floor { .floor {
position: fixed; position: fixed;
bottom: 0; bottom: 0;
......
<template>
<van-config-provider :theme-vars="themeVars">
<div class="h-full resident-home">
<router-view v-slot="{ Component }">
<Transition name="route" mode="out-in">
<component :is="Component" v-if="visible"/>
</Transition>
</router-view>
</div>
</van-config-provider>
</template>
<script>
import { getDict } from '@/api/base.js'
import { useStore } from './store/index.js'
export default {
data() {
return {
visible: false,
themeVars: {
primaryColor: '#54CCBD',
// 按键
buttonPrimaryBackground: '#54CCBD',
buttonPrimaryBorderColor: '#54CCBD',
buttonDefaultBorderColor: '#BFBFBF',
buttonNormalFontSize: '.16rem',
pickerConfirmActionColor: '#54CCBD',
checkboxCheckedIconColor: '#54CCBD',
// tab
tabsBottomBarColor: '#54CCBD',
// 级联选项
cascaderActiveColor: '#54CCBD',
// 表单相关
cellVerticalPadding: '.15rem',
cellTextColor: '#262626',
fieldLabelColor: '#262626',
cellBorderColor: '#d9d9d9'
}
}
},
setup() {
const store = useStore()
return { store }
},
created() {
this.init()
},
methods: {
async init() {
console.log(this.visible)
const res = await getDict()
this.store.$patch({ dict: res.data || {} })
this.visible = true
}
}
}
</script>
<style lang="less" scoped>
</style>
<template>
<div class="h-full pb-5">
<div class="p-3 text-16 text-black text-center shrink-0 top-bar">
<span class="back-bt">
<span @click="onBack">
<doc-icon type="doc-left" />
</span>
</span>
<span>居民慢病筛查详情</span>
</div>
<div class="py-4 border-bottom">
<div class="px-4 doc-title">居民信息</div>
</div>
<div class="px-4 list">
<div v-for="item in columnsBase" :key="item.key"
class="flex justify-between py-4 border-bottom item">
<span class="shrink-0 mr-2 label">{{ item.title }}</span>
<span v-if="item.key === 'idCard'">{{ $idCardHide(residentInfo.idCard) || '-' }}</span>
<span class="text-end" v-else>{{ residentInfo[item.key] || '-' }}</span>
</div>
</div>
<div class="py-4 border-bottom">
<div class="px-4 doc-title">筛查信息</div>
</div>
<div class="px-4 list">
<template v-for="item in columnsScreen" :key="item.key">
<div v-if="item.key == 'pressure'" class="pt-3">
<table class="w-full">
<tr>
<td style="width: 7.1em">血压值(mmHg)</td>
<td>低压值(左侧)</td>
<td></td>
<td>高压值(右侧)</td>
</tr>
<tr>
<td>
第1次测量
</td>
<td>
{{ info.pressureOneDbp || '-' }}
</td>
<td>/</td>
<td>
{{ info.pressureOneSbp || '-' }}
</td>
</tr>
<tr>
<td>
第2次测量
</td>
<td class="flex">
{{ info.pressureTwoDbp || '-' }}
</td>
<td>/</td>
<td>
{{ info.pressureTwoSbp || '-' }}
</td>
</tr>
</table>
</div>
<div v-else
class="flex justify-between py-4 border-bottom item">
<span class="shrink-0 mr-2 label">{{ item.title }}</span>
<div>
<span>{{ info[item.key] || '-' }}</span>
<span v-if="item.unit" class="ml-1">{{ item.unit }}</span>
</div>
</div>
</template>
</div>
</div>
</template>
<script>
import { showNotify } from 'vant'
import { querScreenDetail } from '@/api/resident/screening.js'
export default {
data() {
return {
info: {},
columnsBase: [
{ title: '姓名', key: 'residentName' },
{ title: '证件号码', key: 'idCard'},
{ title: '性别', key: 'genderName' },
{ title: '出生日期', key: 'dataBirth' },
{ title: '年龄', key: 'currentAge' },
{ title: '民族', key: 'nationalName' },
{ title: '本人电话', key: 'telephone' },
{ title: '现住址', key: 'presentCodeName' },
{ title: '详细地址', key: 'nowAddress' },
{ title: '户籍地址', key: 'registeredCodeName' },
{ title: '详细地址', key: 'permanentAddress' }
],
columnsScreen: [
{ title: '年龄', key: 'currentAge', unit: '岁' },
{ title: '既往史', key: 'medicalHistoryName' },
{ title: '身高', key: 'height', unit: 'cm' },
{ title: '体重', key: 'weight', unit: 'kg' },
{ title: 'BMI', key: 'bmi', unit: 'kg/m²' },
{ title: '腰围', key: 'waistline', unit: 'cm' },
{ title: '是否吸烟', key: 'isSmokingName' },
{ title: '家族史', key: 'familyHistoryName' },
{ title: '血压值', key: 'pressure' },
{ title: '空腹血糖', key: 'fastingGlucose', unit: 'mmol/L' },
{ title: '低密度脂蛋白胆固醇', key: 'ldlCholesterin', unit: 'mmol/L' },
{ title: '血清总胆固醇', key: 'serumCholesterin', unit: 'mmol/L' },
{ title: '高密度脂蛋白胆固醇', key: 'hdlCholesterin', unit: 'mmol/L' },
{ title: '运动', key: 'exerciseIntensityName' },
{ title: '慢病高危评估结果', key: 'screenResultName' },
{ title: '筛查日期', key: 'screenDate' },
{ title: '筛查机构', key: 'screenUnitName' }
]
}
},
computed: {
id() {
return this.$route.params.id
},
residentInfo() {
return this.info.residentsRecord || {}
}
},
created() {
if (!this.id) {
showNotify({ type: 'warning', message: '未获取到查询信息', duration: 0 })
return
}
this.init()
},
methods: {
init() {
querScreenDetail({ id: this.id }).then(res => {
this.info = res.data || {}
})
},
onBack() {
this.$router.back()
}
}
}
</script>
<style lang="less" scoped>
@import url('../utils/common.less');
table {
text-align: left;
border-bottom: 1px solid var(--van-cell-border-color);
>tr {
>td {
padding-left: 14px;
padding-bottom: 12px;
&:first-child {
text-align: right;
padding-left: 0;
}
}
}
}
.list {
.label {
min-width: 5em;
}
}
</style>
<template>
<div class="h-full">
<div class="p-3 text-16 text-black text-center shrink-0 top-bar">
<!-- <span class="back-bt">
<span @click="onBack">
<doc-icon type="doc-left" />
</span>
</span> -->
<span>慢病筛查记录</span>
</div>
<div class='card' v-for='item in list' :key="item.id">
<div class="p-4">
<div class='text-16 font-semibold mb-2 title'>{{ item.residentName }}</div>
<div class="mb-2">
<span class="label">证件号码</span>
<span>{{ $idCardHide(item.idCard) }}</span>
</div>
<div class="mb-2">
<span class="label">筛查日期</span>
<span>{{ item.screenDate }}</span>
</div>
<div class="mb-2">
<span class="label">筛查机构</span>
<span>{{ item.screenUnitName }}</span>
</div>
<div class="bt-box flex pt-2 justify-end">
<van-button type="primary" size="small"
@click="toDetail(item)">详 情</van-button>
</div>
</div>
<div class="divide"></div>
</div>
</div>
</template>
<script>
import { showNotify } from 'vant'
import { querScreenList } from '@/api/resident/screening.js'
export default {
data() {
return {
list: []
}
},
computed: {
routeQuery() {
return this.$route.query
},
idCard() {
return this.routeQuery.idCard
}
},
created() {
if (!this.idCard) {
showNotify({ type: 'warning', message: '未获取到用户信息', duration: 0 })
return
}
this.init()
},
methods: {
init() {
querScreenList({ idCard: this.idCard }).then(res => {
this.list = res.data || []
})
},
toDetail(record) {
if (!record) return
const path = `/resident/screening/first/detail/${record.id}`
this.$router.push({ path })
}
}
}
</script>
<style lang="less" scoped>
@import url('../utils/common.less');
.card {
.label {
display: inline-block;
min-width: 5em;
color: #8C8C8C;
}
.bt-box {
border-top: 1px solid var(--van-border-color);
}
.divide {
border-top: 6px solid #f5f5f5;
}
&:last-child {
.divide { display: none; }
}
}
</style>
<template>
<div class="h-full pb-5">
<div class="p-3 text-16 text-black text-center shrink-0 top-bar">
<span class="back-bt">
<span @click="onBack">
<doc-icon type="doc-left" />
</span>
</span>
<span>居民慢病筛查详情</span>
</div>
<div class="py-4 border-bottom">
<div class="px-4 doc-title">居民信息</div>
</div>
<div class="px-4 list">
<div v-for="item in columnsBase" :key="item.key"
class="flex justify-between py-4 border-bottom item">
<span class="shrink-0 mr-2 label">{{ item.title }}</span>
<span v-if="item.key === 'idCard'">{{ $idCardHide(residentInfo.idCard) || '-' }}</span>
<span class="text-end" v-else>{{ residentInfo[item.key] || '-' }}</span>
</div>
</div>
<div class="py-4 border-bottom">
<div class="px-4 doc-title">筛查信息</div>
</div>
<div class="px-4 list">
<template v-for="item in columnsScreen" :key="item.key">
<div v-if="item.key == 'pressure'" class="pt-3">
<table class="w-full">
<tr>
<td style="width: 7.1em">血压值(mmHg)</td>
<td>低压值(左侧)</td>
<td></td>
<td>高压值(右侧)</td>
</tr>
<tr>
<td>
第1次测量
</td>
<td>
{{ info.pressureOneDbp || '-' }}
</td>
<td>/</td>
<td>
{{ info.pressureOneSbp || '-' }}
</td>
</tr>
<tr>
<td>
第2次测量
</td>
<td class="flex">
{{ info.pressureTwoDbp || '-' }}
</td>
<td>/</td>
<td>
{{ info.pressureTwoSbp || '-' }}
</td>
</tr>
</table>
</div>
<div v-else
class="flex justify-between py-4 border-bottom item">
<span class="shrink-0 mr-2 label">{{ item.title }}</span>
<div>
<span>{{ info[item.key] || '-' }}</span>
<span v-if="item.unit" class="ml-1">{{ item.unit }}</span>
</div>
</div>
</template>
</div>
</div>
</template>
<script>
import { showNotify } from 'vant'
import { querScreenDetail } from '@/api/resident/screening.js'
export default {
data() {
return {
info: {},
columnsBase: [
{ title: '姓名', key: 'residentName' },
{ title: '证件号码', key: 'idCard'},
{ title: '性别', key: 'genderName' },
{ title: '出生日期', key: 'dataBirth' },
{ title: '年龄', key: 'currentAge' },
{ title: '民族', key: 'nationalName' },
{ title: '本人电话', key: 'telephone' },
{ title: '现住址', key: 'presentCodeName' },
{ title: '详细地址', key: 'nowAddress' },
{ title: '户籍地址', key: 'registeredCodeName' },
{ title: '详细地址', key: 'permanentAddress' }
],
columnsScreen: [
{ title: '年龄', key: 'currentAge', unit: '岁' },
{ title: '既往史', key: 'medicalHistoryName' },
{ title: '身高', key: 'height', unit: 'cm' },
{ title: '体重', key: 'weight', unit: 'kg' },
{ title: 'BMI', key: 'bmi', unit: 'kg/m²' },
{ title: '腰围', key: 'waistline', unit: 'cm' },
{ title: '是否吸烟', key: 'isSmokingName' },
{ title: '家族史', key: 'familyHistoryName' },
{ title: '血压值', key: 'pressure' },
{ title: '空腹血糖', key: 'fastingGlucose', unit: 'mmol/L' },
{ title: '低密度脂蛋白胆固醇', key: 'ldlCholesterin', unit: 'mmol/L' },
{ title: '血清总胆固醇', key: 'serumCholesterin', unit: 'mmol/L' },
{ title: '高密度脂蛋白胆固醇', key: 'hdlCholesterin', unit: 'mmol/L' },
{ title: '运动', key: 'exerciseIntensityName' },
{ title: '慢病高危评估结果', key: 'screenResultName' },
{ title: '筛查日期', key: 'screenDate' },
{ title: '筛查机构', key: 'screenUnitName' }
]
}
},
computed: {
id() {
return this.$route.params.id
},
residentInfo() {
return this.info.residentsRecord || {}
}
},
created() {
if (!this.id) {
showNotify({ type: 'warning', message: '未获取到查询信息', duration: 0 })
return
}
this.init()
},
methods: {
init() {
querScreenDetail({ id: this.id }).then(res => {
this.info = res.data || {}
})
},
onBack() {
this.$router.back()
}
}
}
</script>
<style lang="less" scoped>
@import url('../utils/common.less');
table {
text-align: left;
border-bottom: 1px solid var(--van-cell-border-color);
>tr {
>td {
padding-left: 14px;
padding-bottom: 12px;
&:first-child {
text-align: right;
padding-left: 0;
}
}
}
}
.list {
.label {
min-width: 5em;
}
}
</style>
import { defineStore } from 'pinia'
export const useStore = defineStore('chronic', {
state: () => {
return {
// 字典
dict: []
}
},
getters: {},
actions: {
getDict(dict) {
if (!dict) return []
return this.dict[dict] || []
},
getDictValue(dict, value) {
let array = []
if (typeof dict === 'string') {
array = this.dict[dict]
} else {
array = dict
}
if (!array || !array.length) {
return ''
}
let temp = array.find(e => e.value == value) || {}
return temp.name || ''
}
}
})
...@@ -31,6 +31,8 @@ const routes = [ ...@@ -31,6 +31,8 @@ const routes = [
name: 'resident-screening-first-detail-id', name: 'resident-screening-first-detail-id',
component: () => import(/* webpackChunkName: "page-resident" */ '@/resident/screening/first/detail/Detail.vue') component: () => import(/* webpackChunkName: "page-resident" */ '@/resident/screening/first/detail/Detail.vue')
} }
] ]
}, },
{ {
...@@ -85,7 +87,31 @@ const routes = [ ...@@ -85,7 +87,31 @@ const routes = [
component: () => import(/* webpackChunkName: "page-doctor" */ '@/doctor/resident/form/BaseInfo.vue') component: () => import(/* webpackChunkName: "page-doctor" */ '@/doctor/resident/form/BaseInfo.vue')
} }
] ]
},
{
path: '/residentWX',
name: 'residentWX',
component: () => import(/* webpackChunkName: "residentWX" */ '@/residentWX/ResidentWX.vue'),
children: [
{
path: 'screening/list',
name: 'residentWX-list',
component: () => import(/* webpackChunkName: "residentWX-screening" */ '@/residentWX/screening/List.vue')
},
{
path: 'screening/firstDetail/:id',
name: 'resident-screening-first-detail-id',
component: () => import(/* webpackChunkName: "residentWX-screening" */ '@/residentWX/screening/FirstDetail.vue')
},
{
path: 'screening/secondDetail/:id',
name: 'resident-screening-first-detail-id',
component: () => import(/* webpackChunkName: "residentWX-screening" */ '@/residentWX/screening/SecondDetail.vue')
} }
]
},
] ]
const router = createRouter({ const router = createRouter({
......
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