Commit 26573305 authored by gengchunlei's avatar gengchunlei

Merge branch 'chronic-master' of…

Merge branch 'chronic-master' of http://gitlab.yiboshi.com/nightkis1995/frontend-h5 into chronic-master
parents 76bc8b7c ca353abe
import { fetchBase } from '../fetch.js'
// 证件号查询是否管理慢病档案
export function queryResidentInfo(params) {
return fetchBase({ url: `/chronic-resident/v1/chronic-residents-record/search-info`, body: params, loading: true })
}
// 查询筛查记录列表
export function querScreenList(params) {
return fetchBase({ url: `/chronic-resident/v1/chronic-screening-record/screen-list`, body: params, loading: true })
}
// 查询筛查记录详情
export function querScreenDetail(params) {
return fetchBase({ url: `/chronic-resident/v1/chronic-screening-record/record`, body: params, loading: true })
}
// 新增筛查记录
export function savefirstScreen(params) {
return fetchBase({ url: `/chronic-resident/v1/chronic-screening-record/save`, body: params, loading: true })
}
\ No newline at end of file
import { fetchBase } from './fetch.js'
// 证件号查询是否管理慢病档案
export function queryResidentInfo(params) {
return fetchBase({ url: `/chronic-resident/v1/chronic-residents-record/search-info`, body: params, loading: true })
}
......@@ -14,4 +14,23 @@ dayjs.locale('cn')
export function registe(app) {
// 自定义组件
app.use(DocIcon)
app.config.globalProperties.$idCardHide = idCardHide
app.config.globalProperties.$phoneHide = phoneHide
}
// idCard 脱敏
function idCardHide(idCard) {
if (!idCard || idCard.length < 18) {
return idCard
}
return idCard.substring(0, 6) + '******' + idCard.substring(14)
}
// phone 脱敏
function phoneHide(phone) {
if (!phone || phone.length < 11) {
return phone
}
return phone.substring(0, 3) + '******' + phone.substring(9)
}
......@@ -30,7 +30,8 @@ export default {
cellBorderColor: '#d9d9d9'
}
}
}, setup() {
},
setup() {
const store = useStore()
return { store }
},
......
<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>{{ 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: '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="base-info">
<div class="flex py-4"
style="border-bottom: 1px solid var(--van-cell-border-color);">
<div class="px-4 title">居民信息</div>
<div class="flex py-4 border-bottom">
<div class="px-4 doc-title">居民信息</div>
<div class="text-12">请准确填写您的证件信息,标*内容为必填</div>
</div>
<van-form label-width="5em" ref="form" class="screen-form"
......@@ -255,13 +254,10 @@ export default {
// 现住址
showPresent: false,
// 户籍地址
showRegistered: false
showRegistered: false,
store: useStore()
}
},
setup() {
const store = useStore()
return { store }
},
computed: {
residentsRecord() {
return this.checkInfo.residentsRecord
......@@ -289,9 +285,9 @@ export default {
this.form.dataBirth = info.dataBirth
},
submit() {
this.recordForm.base = {...this.form}
this.$parent.onNext()
return
// this.recordForm.base = {...this.form}
// this.$parent.onNext()
// return
this.$refs.form.validate().then(() => {
this.recordForm.base = {...this.form}
this.$parent.onNext()
......
......@@ -42,8 +42,6 @@
</template>
<script>
import { isWeiXin } from '@/utils/common.js'
export default {
inject: ['checkInfo'],
methods: {
......
<template>
<div class="h-full flex flex-col id-check">
<div class="flex items-end py-4"
style="border-bottom: 1px solid var(--van-cell-border-color);">
<div class="px-4 font-semibold title">居民证件信息</div>
<div class="flex items-end py-4 border-bottom">
<div class="px-4 font-semibold doc-title">居民证件信息</div>
<div class="text-12">请准确填写您的证件信息,标*内容为必填</div>
</div>
<van-form label-width="5em" ref="form"
......@@ -47,7 +46,7 @@
<script>
import { useStore } from '@/resident/store/index.js'
import { idCardRule } from '@/utils/commonReg.js'
import { queryResidentInfo } from '@/api/screening.js'
import { queryResidentInfo } from '@/api/resident/screening.js'
import { showNotify } from 'vant'
export default {
......@@ -61,14 +60,11 @@ export default {
rules: {
idCard: [{ required: true, message: '请输入' }, idCardRule],
certificateType: [{ required: true, message: '请选择' }]
}
},
store: useStore()
}
},
inject: ['checkInfo'],
setup() {
const store = useStore()
return { store }
},
created() {
this.init()
},
......
......@@ -69,7 +69,9 @@ export default {
created() {
if (!this.doctorId) {
showNotify({ type: 'warning', message: '未获取到医生信息', duration: 0 })
return
}
this.recordForm.doctorId = this.doctorId
},
methods: {
onNext(step) {
......@@ -97,12 +99,5 @@ export default {
</script>
<style lang="less" scoped>
.top-bar {
position: relative;
border-bottom: 1px solid #3C3C435C;
.back-bt {
position: absolute;
left: .16rem;
}
}
@import '../../../utils/common.less';
</style>
......@@ -46,11 +46,19 @@ export default {
const highItem = this.screenInfo.highItem
return highItem && highItem.length ?
this.store.getDict('CP00113').filter(e => highItem.includes(e.value)).map(e => e.name) : []
},
baseInfo() {
return this.recordForm.base || {}
}
},
methods:{
toRecord() {
this.$router.replace({
path: '/resident/screening/first/detail',
query: {
idCard: this.baseInfo.idCard
}
})
}
}
}
......
<template>
<div class="screen-info">
<div class="flex items-end py-4"
style="border-bottom: 1px solid var(--van-cell-border-color);">
<div class="px-4 font-semibold title">筛查信息</div>
<div class="flex items-end py-4 border-bottom">
<div class="px-4 font-semibold doc-title">筛查信息</div>
<div class="text-12">请根据您身体实际情况填写以下内容</div>
</div>
......@@ -323,7 +322,8 @@
<script>
import { useStore } from '@/resident/store/index.js'
import { checkboxReject } from '@/utils/common.js'
import { checkboxReject, fetchDataHandle } from '@/utils/common.js'
import { savefirstScreen } from '@/api/resident/screening.js'
import dayjs from 'dayjs'
const defaultForm = (info = {}) => {
......@@ -412,13 +412,10 @@ export default {
screenDateRange: {
min: new Date(2024, 9, 2),
max: undefined
}
},
store: useStore()
}
},
setup() {
const store = useStore()
return { store }
},
computed: {
// BMI
bmi() {
......@@ -450,8 +447,19 @@ export default {
this.resultHandle()
this.recordForm.screen = {...this.form}
console.log(this.form)
const query = {
...this.form,
screenDoctorId: this.recordForm.doctorId,
residentsRecord: this.recordForm.base
}
// 提交表单
this.$parent.onNext()
savefirstScreen(fetchDataHandle(query, {
familyHistory: 'arrToStr',
highItem: 'arrToStr',
medicalHistory: 'arrToStr',
})).then(() => {
this.$parent.onNext()
})
}).catch(err => console.warn(err))
},
onPrev() {
......
.title {
.doc-title {
font-weight: 600;
display: flex;
align-items: center;
......@@ -10,4 +10,18 @@
width: 3px;
margin-right: 6px;
}
}
// 顶部导航栏
.top-bar {
position: relative;
border-bottom: 1px solid #3C3C435C;
.back-bt {
position: absolute;
left: .16rem;
}
}
.border-bottom {
border-bottom: 1px solid var(--van-cell-border-color);
}
\ No newline at end of file
......@@ -10,6 +10,16 @@ const routes = [
path: 'screening/first/form',
name: 'resident-screening-first-form',
component: () => import(/* webpackChunkName: "page-resident" */ '@/resident/screening/first/form/Index.vue')
},
{
path: 'screening/first/detail',
name: 'resident-screening-first-detail',
component: () => import(/* webpackChunkName: "page-resident" */ '@/resident/screening/first/detail/List.vue')
},
{
path: 'screening/first/detail/:id',
name: 'resident-screening-first-detail-id',
component: () => import(/* webpackChunkName: "page-resident" */ '@/resident/screening/first/detail/Detail.vue')
}
]
},
......
......@@ -30,11 +30,11 @@ module.exports = defineConfig({
}
},
'/chronic-resident': {
// target: 'http://192.168.1.43:8903',
target: 'https://beta-tumour.zmnyjk.com',
target: 'http://192.168.1.43:8903',
// target: 'https://beta-tumour.zmnyjk.com',
changOrigin: true,
pathRewrite: {
'^/chronic-resident': '/chronic-resident'
'^/chronic-resident': '/'
}
}
},
......
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