1.安眼健康体检添加体检详情
This commit is contained in:
2025-12-05 15:23:49 +08:00
parent 10e834f68e
commit 62dc4e5e82
6 changed files with 428 additions and 7 deletions
+4 -4
View File
@@ -11,13 +11,13 @@ VITE_PUBLIC_PATH = /
VITE_DROP_CONSOLE = false
#后台接口父地址(必填)
VITE_GLOB_API_URL=https://api-jkglpt.iosp.ydpt.tech
#VITE_GLOB_API_URL=http://192.168.1.33
#VITE_GLOB_API_URL=https://api-jkglpt.iosp.ydpt.tech
VITE_GLOB_API_URL=http://192.168.1.33
#VITE_GLOB_API_URL=http://cqyt.test.yg.dt.io
#后台接口全路径地址(必填)
VITE_GLOB_DOMAIN_URL=https://api-jkglpt.iosp.ydpt.tech
#VITE_GLOB_DOMAIN_URL=http://192.168.1.33
#VITE_GLOB_DOMAIN_URL=https://api-jkglpt.iosp.ydpt.tech
VITE_GLOB_DOMAIN_URL=http://192.168.1.33
#VITE_GLOB_DOMAIN_URL=http://cqyt.test.yg.dt.io
# 接口前缀
VITE_GLOB_API_URL_PREFIX=
@@ -0,0 +1,173 @@
<template>
<BasicDrawer width="60%" title="体检详情" @register="registerDrawer">
<div
v-if="loading"
style="position: absolute; width: 100%; height: 100%; left: 0; right: 0; display: flex; justify-content: center; align-items: center"
>
<a-spin />
</div>
<div class="d-title-d">基础信息</div>
<a-row style="padding: 20px">
<a-col v-for="(item, index) in fData" :key="`f-data-${index}`" :span="item.span" style="margin-bottom: 10px; display: flex">
<div style="width: 80px; text-align: right">{{ item.label }}</div>
<div style="flex: 1" v-if="index < fData.length - 2">
{{ item.field.indexOf('.') === -1 ? fForm[item.field] : fForm?.[item.field.split('.')[0]]?.[item.field.split('.')[1]] }}
</div>
<div v-else style="flex: 1; min-width: 0">
<div
style="flex: 1"
:class="[(item.field === 'empHealthCheckNew.checkResult' ? fForm?.open1 : fForm?.open2) ? '' : 'no-show-info']"
>
{{ item.field.indexOf('.') === -1 ? fForm[item.field] : fForm?.[item.field.split('.')[0]]?.[item.field.split('.')[1]] }}
</div>
<template v-if="index >= fData.length - 2">
<div style="text-align: right">
<a-button type="link" @click="changeOpen(item)">
{{ (item.field === 'empHealthCheckNew.checkResult' ? fForm?.open1 : fForm?.open2) ? '收起' : '展开' }}</a-button
>
</div>
</template>
</div>
</a-col>
</a-row>
<div class="d-title-d">详细数据</div>
<div style="margin-top: 10px; padding: 0 20px 0 50px">
<div class="list-item-outer-d" style="display: flex; background: #f3f3f3; text-align: center">
<div style="width: 70px; padding: 7px 0">序号</div>
<div style="flex: 1; padding: 7px 0">科室</div>
<div style="flex: 1; padding: 7px 0">小结</div>
<div style="width: 100px; padding: 7px 0">小结日期</div>
<div style="flex: 1; padding: 7px 0">小结医生</div>
<div style="width: 100px; padding: 7px 0">操作</div>
</div>
<div v-for="(item, index) in listData" class="list-item-outer-d" :key="`list-data-${index}`" style="display: flex; text-align: center">
<div style="width: 70px">{{ index + 1 }}</div>
<div class="list-item-d" style="flex: 1">
<a-tooltip placement="top">
<template #title>
<span>{{ item?.departName || '-' }}</span>
</template>
<div>
{{ item?.departName || '-' }}
</div>
</a-tooltip>
</div>
<div class="list-item-d" style="flex: 1">
<a-tooltip placement="top">
<template #title>
<span>{{ item?.summary || '-' }}</span>
</template>
<div>
{{ item?.summary || '-' }}
</div>
</a-tooltip>
</div>
<div style="width: 100px">{{ item?.summaryDate || -'' }}</div>
<div class="list-item-d" style="flex: 1">
<a-tooltip placement="top">
<template #title>
<span>{{ item?.summaryDoctor || -'' }}</span>
</template>
<div>
{{ item?.summaryDoctor || '-' }}
</div>
</a-tooltip>
</div>
<div style="width: 100px; cursor: pointer" @click="toResult(item)">查看项目结果</div>
</div>
</div>
<result-modal @register="registerModal" />
</BasicDrawer>
</template>
<script setup lang="ts">
import BasicDrawer from '/@/components/Drawer/src/BasicDrawer.vue';
import { useDrawerInner } from '/@/components/Drawer';
import { fData } from '/@/views/healthMonitor/anY/physical/physical.data';
import { ref } from 'vue';
import { useModal } from '/@/components/Modal';
import ResultModal from '/@/views/healthMonitor/anY/physical/components/resultModal.vue';
import { queryCheckNewByIdApi } from '/@/views/healthMonitor/anY/physical/physical.api';
const listData = ref([]);
const fForm = ref({});
const loading = ref<any>(false);
const [registerModal, { openModal }] = useModal();
const [registerDrawer, {}] = useDrawerInner(async (data) => {
listData.value = [];
fForm.value = {};
data.id = '1994381754169057282';
try {
loading.value = true;
const res = await queryCheckNewByIdApi({ id: data?.id });
fForm.value = { ...res, open1: false, open2: false } || { open1: false, open2: false };
listData.value = res?.empHealthCheckNew?.healthCheckDepartList || [];
loading.value = false;
} catch (error) {
loading.value = false;
console.log(error);
}
});
function toResult(item: any) {
openModal(true, { ...item });
}
function changeOpen(item: any) {
if (item.field === 'empHealthCheckNew.checkResult') {
fForm.value.open1 = !fForm.value.open1;
} else {
fForm.value.open2 = !fForm.value.open2;
}
}
</script>
<style scoped lang="less">
.d-title-d {
padding-left: 20px;
position: relative;
&:after {
position: absolute;
width: 3px;
height: 80%;
background: #5a99ee;
content: '';
top: 10%;
left: 10px;
}
}
.list-item-outer-d {
> div {
border-right: 1px solid #e6e6e6;
border-bottom: 1px solid #e6e6e6;
display: flex;
align-items: center;
justify-content: center;
&:first-child {
border-left: 1px solid #e6e6e6;
}
}
}
.list-item-d {
overflow: hidden;
padding: 7px 5px;
> div {
width: 100%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
}
.no-show-info {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 3 !important;
-webkit-box-orient: vertical;
white-space: normal;
}
</style>
@@ -0,0 +1,150 @@
<template>
<BasicModal width="800px" @register="registerModal" title="项目结果详情">
<div
v-if="loading"
style="position: absolute; width: 100%; height: 100%; left: 0; right: 0; display: flex; justify-content: center; align-items: center"
>
<a-spin />
</div>
<div class="modal-inner-d">
<div class="list-item-d" style="background: #f3f3f3">
<div style="width: 70px">序号</div>
<div style="flex: 1">科室名称</div>
<div style="flex: 1">项目名称</div>
<div style="flex: 1">结果值</div>
<div style="flex: 1">单位</div>
<div style="flex: 1">参考值</div>
<div style="flex: 1">是否异常</div>
<div style="flex: 1">异常结果</div>
</div>
<div class="list-item-d" v-for="(item, index) in listData" :key="`list-data-${index}`">
<div style="width: 70px">{{ index + 1 }}</div>
<div style="flex: 1">
<a-tooltip placement="top">
<template #title>
<span> {{ item?.departName || '-' }}</span>
</template>
<div>
{{ item?.departName || '-' }}
</div>
</a-tooltip>
</div>
<div style="flex: 1">
<a-tooltip placement="top">
<template #title>
<span> {{ item?.projectName || '-' }}</span>
</template>
<div>
{{ item?.projectName || '-' }}
</div>
</a-tooltip>
</div>
<div style="flex: 1">
<a-tooltip placement="top">
<template #title>
<span> {{ item?.abnormalResult && item?.abnormalResult !== 'null' ? item?.abnormalResult : '无' }}</span>
</template>
<div :style="{ color: item?.abnormal === '正常' ? '' : 'red' }">
{{ item?.abnormalResult && item?.abnormalResult !== 'null' ? item?.abnormalResult : '无' }}
</div>
</a-tooltip>
</div>
<div style="flex: 1">
<a-tooltip placement="top">
<template #title>
<span> {{ item?.unit || '-' }}</span>
</template>
<div>
{{ item?.unit || '-' }}
</div>
</a-tooltip>
</div>
<div style="flex: 1">
<a-tooltip placement="top">
<template #title>
<span> {{ item?.referenceValue || '-' }}</span>
</template>
<div>
{{ item?.referenceValue || '-' }}
</div>
</a-tooltip>
</div>
<div style="flex: 1">
<a-tooltip placement="top">
<template #title>
<span> {{ item?.abnormal || '-' }}</span>
</template>
<div>
{{ item?.abnormal || '-' }}
</div>
</a-tooltip>
</div>
<div style="flex: 1">
<a-tooltip placement="top">
<template #title>
<span> {{ item?.resultValue || '-' }}</span>
</template>
<div>
{{ item?.resultValue || '-' }}
</div>
</a-tooltip>
</div>
</div>
</div>
</BasicModal>
</template>
<script setup lang="ts">
import { BasicModal, useModalInner } from '/@/components/Modal';
import { ref } from 'vue';
import { queryHealthCheckProjectApi } from '/@/views/healthMonitor/anY/physical/physical.api';
const listData = ref([]);
const loading = ref<any>(false);
const [registerModal, { setModalProps }] = useModalInner(async (data) => {
listData.value = [];
setModalProps({ showCancelBtn: false, showOkBtn: false });
try {
loading.value = true;
const { checkId, departName, departNo } = data;
listData.value = await queryHealthCheckProjectApi({ checkId, departName, departNo });
loading.value = false;
} catch (error) {
console.log(error);
loading.value = false;
}
});
</script>
<style scoped lang="less">
.list-item-d {
display: flex;
align-items: center;
justify-content: center;
border-left: 1px solid #e6e6e6;
> div {
padding: 5px 7px;
display: flex;
align-items: center;
justify-content: center;
border-right: 1px solid #e6e6e6;
border-bottom: 1px solid #e6e6e6;
overflow: hidden;
> div {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
}
}
.modal-inner-d {
width: 100%;
position: relative;
> div {
width: 100%;
}
}
</style>
@@ -1,5 +1,11 @@
import { defHttp } from '/@/utils/http/axios';
enum Api {
list = '/health-emergency/emergency/LargeScreenNew/queryAnYanHealthCheckNew',
queryCheckNewById = '/health-emergency/emergency/LargeScreenNew/queryCheckNewById',
queryHealthCheckProject = '/health-emergency/emergency/LargeScreenNew/queryHealthCheckProject',
}
export const listApi = (params: any) => defHttp.post({ url: Api.list, params });
export const queryCheckNewByIdApi = (params: any) => defHttp.get({ url: Api.queryCheckNewById, params });
export const queryHealthCheckProjectApi = (params: any) => defHttp.post({ url: Api.queryHealthCheckProject, params });
@@ -70,3 +70,68 @@ export const searchScheme: FormSchema[] = [
}),
},
];
export const fData = [
{
label: '姓名',
field: 'name',
span: 12,
},
{
label: '性别',
field: 'sexCode',
span: 12,
},
{
label: '出生日期',
field: 'birthday',
span: 12,
},
{
label: '身份证号',
field: 'idNo',
span: 12,
},
{
label: '单位',
field: 'workUnit',
span: 12,
},
{
label: '民族',
field: 'nationalityValueText',
span: 12,
},
{
label: '电话号码',
field: 'phone',
span: 24,
},
{
label: '医院名称',
field: 'empHealthCheckNew.hospitalName',
span: 12,
},
{
label: '体检日期',
field: 'empHealthCheckNew.checkDate',
span: 12,
},
{
label: '体检医生',
field: 'empHealthCheckNew.checkDoctor',
span: 24,
},
{
label: '体检综述',
field: 'empHealthCheckNew.checkResult',
span: 24,
open: false,
},
{
label: '体检建议',
field: 'empHealthCheckNew.checkSuggestion',
span: 24,
open: false,
},
];
@@ -1,11 +1,22 @@
<template>
<BasicTable @register="registerTable"> </BasicTable>
<BasicTable @register="registerTable">
<template #action="{ record }">
<TableAction :actions="getTableAction(record)" />
</template>
</BasicTable>
<detail-drawer @register="registerDrawer" />
</template>
<script setup lang="ts">
import { BasicTable } from '/@/components/Table';
import { BasicTable, TableAction } from '/@/components/Table';
import { useListPage } from '/@/hooks/system/useListPage';
import { columns, searchScheme } from '/@/views/healthMonitor/anY/physical/physical.data';
import { listApi } from '/@/views/healthMonitor/anY/physical/physical.api';
import DetailDrawer from '/@/views/healthMonitor/anY/physical/components/detailDrawer.vue';
import { useDrawer } from '/@/components/Drawer';
const [registerDrawer, { openDrawer }] = useDrawer();
const { tableContext } = useListPage({
tableProps: {
api: listApi,
@@ -20,10 +31,26 @@
fieldMapToNumber: [],
fieldMapToTime: [['date', ['checkDateStart', 'checkDateEnd'], 'YYYY-MM-DD']],
},
showActionColumn: false,
actionColumn: {
width: 100,
fixed: 'right',
},
},
});
const [registerTable, {}, {}] = tableContext;
function getTableAction(record: Recordable) {
return [
{
label: '查看详情',
onClick: handleDetail.bind(null, record),
},
];
}
function handleDetail(record: any) {
openDrawer(true, { id: record.id });
}
</script>
<style scoped lang="less"></style>