质量指标
This commit is contained in:
parent
c43e714c45
commit
880c4a0ba9
@ -235,3 +235,11 @@ export function qcCalc(data?: Object) {
|
||||
params: data
|
||||
})
|
||||
}
|
||||
//质量汇总查询
|
||||
export function ncisQuery(data?: Object) {
|
||||
return request({
|
||||
url: '/ncis/query',
|
||||
method: 'get',
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
||||
@ -125,6 +125,8 @@ aside {
|
||||
.app-container {
|
||||
padding: 10px 10px 0 10px;
|
||||
height: calc(100vh - 5.25rem);
|
||||
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.07);
|
||||
background-color: #f9f9f9;
|
||||
}
|
||||
|
||||
.components-container {
|
||||
|
||||
@ -41,12 +41,6 @@
|
||||
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="4">
|
||||
<el-form-item label-width="50px">
|
||||
<el-checkbox v-model="queryParams.alarmflag" label="仅危急值" @change="alarmHandle" size="large" />
|
||||
<el-checkbox v-model="queryParams.jzbz" label="仅急诊" @change="jzbzHandle" size="large" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="姓名:" prop="brxm">
|
||||
<el-input v-model="queryParams.brxm" clearable placeholder="请输入姓名" @keyup.enter="handleQuery"
|
||||
@ -65,6 +59,12 @@
|
||||
@clear="handleQuery" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-form-item label-width="50px">
|
||||
<el-checkbox v-model="queryParams.alarmflag" label="仅危急值" @change="alarmHandle" />
|
||||
<el-checkbox v-model="queryParams.jzbz" label="仅急诊" @change="jzbzHandle" />
|
||||
</el-form-item>
|
||||
|
||||
</el-row>
|
||||
</el-form>
|
||||
</el-row>
|
||||
@ -103,13 +103,15 @@
|
||||
</template>
|
||||
</CustomVxeTable>
|
||||
<div class="mask" :style="{ top: `${pageY}px` }">
|
||||
<el-popover placement="left" :width="300" trigger="click">
|
||||
<el-popover placement="left" :width="400" trigger="click">
|
||||
<template #reference>
|
||||
<div class="text">项目明细</div>
|
||||
<div class="text">医嘱明细</div>
|
||||
</template>
|
||||
<el-table :data="sqlisReqs" style="width: 100%" border @row-click="sqxmClick" highlight-current-row
|
||||
show-overflow-tooltip max-height="300px">
|
||||
<el-table-column prop="sqxmdh" width="100" label="项目代号" />
|
||||
<el-table-column prop="sqh" label="申请单号" />
|
||||
<el-table-column prop="bz1" label="医嘱号" />
|
||||
<el-table-column prop="sqxmdh" label="项目代号" />
|
||||
<el-table-column prop="sqxmmc" label="项目名称" />
|
||||
</el-table>
|
||||
</el-popover>
|
||||
|
||||
@ -1,366 +1,11 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<div class="search-section">
|
||||
<el-form inline :model="searchForm" class="search-form">
|
||||
<el-form-item label="医疗机构">
|
||||
<SelectTable v-model:data="searchForm.yljg" dictType="HOS" placeholder="请选择" width="200px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="年度">
|
||||
<el-date-picker v-model="searchForm.year" type="year" placeholder="选择年份" format="YYYY" value-format="YYYY"
|
||||
style="width: 200px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="季度">
|
||||
<el-select v-model="searchForm.quarter" style="width: 120px" clearable>
|
||||
<el-option label="第一季度" value="Q1" />
|
||||
<el-option label="第二季度" value="Q2" />
|
||||
<el-option label="第三季度" value="Q3" />
|
||||
<el-option label="第四季度" value="Q4" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="月度">
|
||||
<el-select v-model="searchForm.month" style="width: 120px" clearable>
|
||||
<el-option label="1月" value="01" />
|
||||
<el-option label="2月" value="02" />
|
||||
<el-option label="3月" value="03" />
|
||||
<el-option label="4月" value="04" />
|
||||
<el-option label="5月" value="05" />
|
||||
<el-option label="6月" value="06" />
|
||||
<el-option label="7月" value="07" />
|
||||
<el-option label="8月" value="08" />
|
||||
<el-option label="9月" value="09" />
|
||||
<el-option label="10月" value="10" />
|
||||
<el-option label="11月" value="11" />
|
||||
<el-option label="12月" value="12" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleSearch">查询</el-button>
|
||||
<el-button type="warning" icon="Printer">打印</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
<div>
|
||||
|
||||
<!-- 顶部标题 -->
|
||||
<div class="header">
|
||||
<div class="header-right">
|
||||
<span>日期:{{ pageDate }}</span>
|
||||
</div>
|
||||
<div class="title">武汉市第五医院</div>
|
||||
<div class="title">2026年度检验全过程质量指标</div>
|
||||
</div>
|
||||
<div class="table-main">
|
||||
<!-- 说明文字 -->
|
||||
<div class="note-section">
|
||||
<div class="note-line">
|
||||
您实验室LIS是否纳入质量指标相关数据采集与统计(*):
|
||||
<el-radio-group v-model="lisIncluded">
|
||||
<el-radio label="Y">是</el-radio>
|
||||
<el-radio label="N">否</el-radio>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
<div class="note-red">
|
||||
注意:如果条目您实验室确无可统计的数据,请填写“未统计”;若数据为0,请填写数字“0”;填写每个表格前请先勾选此表数据来源:LIS统计、手工计算或估算。
|
||||
</div>
|
||||
<div class="note-red">
|
||||
非本单位实验室开展的检验项目均不纳入统计
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 表格1 -->
|
||||
<div class="table-section">
|
||||
<el-table :data="table1Data" border style="width:100%" :row-class-name="setSourceRowClass"
|
||||
:span-method="spanSourceMethod">
|
||||
<el-table-column prop="itemName" label="(一)标本可接受性(*)" width="300" />
|
||||
<el-table-column label="专业" align="center">
|
||||
<el-table-column label="生化" prop="biochemistry" align="center">
|
||||
<!-- 数据来源列:渲染单选框 -->
|
||||
<template #default="{ row }">
|
||||
<div v-if="row.isSourceRow" :style="{ textAlign: row.isSourceRow ? 'left' : 'center' }">
|
||||
<el-radio-group :model-value="row.dataSource">
|
||||
<el-radio label="LIS">LIS</el-radio>
|
||||
<el-radio label="MANUAL">手工</el-radio>
|
||||
<el-radio label="ESTIMATE">估算</el-radio>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="免疫" prop="immunity" align="center" />
|
||||
<el-table-column label="临检" prop="clinical" align="center" />
|
||||
<el-table-column label="微生物" prop="microbiology" align="center" />
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
</div>
|
||||
|
||||
<!-- 表格2 -->
|
||||
<div class="table-section">
|
||||
<el-table :data="table2Data" border style="width:100%">
|
||||
<el-table-column prop="itemName" label="(二)检验报告(*)" width="300" />
|
||||
<el-table-column label="专业" align="center">
|
||||
<el-table-column label="生化" prop="biochemistry" align="center" />
|
||||
<el-table-column label="免疫" prop="immunity" align="center" />
|
||||
<el-table-column label="临检" prop="clinical" align="center" />
|
||||
<el-table-column label="微生物" prop="microbiology" align="center" />
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
|
||||
<!-- 表格3 -->
|
||||
<div class="table-section">
|
||||
<el-table :data="table3Data" border style="width:100%">
|
||||
<el-table-column prop="itemName" label="(三)周转时间(*)" width="300" />
|
||||
<el-table-column label="专业" align="center">
|
||||
<el-table-column label="生化" prop="biochemistry" align="center" />
|
||||
<el-table-column label="自动化免疫" prop="immunoAuto" align="center" />
|
||||
<el-table-column label="三大常规" prop="routine" align="center" />
|
||||
<el-table-column label="凝血" prop="coagulation" align="center" />
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- 表格4 -->
|
||||
<div class="table-section">
|
||||
<el-table :data="table4Data" border style="width:100%" :span-method="objectSpanMethod"
|
||||
:row-class-name="tableRowClassName">
|
||||
<el-table-column label="(三)周转时间(具体项目)(*)" width="300">
|
||||
<el-table-column label="项目(时间单位:min)" prop="itemName" width="300" />
|
||||
</el-table-column>
|
||||
<el-table-column label="检验前周转时间" align="center">
|
||||
<el-table-column label="本实验室规定时间" prop="preSpecTime" align="center">
|
||||
<template #default="{ row }">
|
||||
<div v-if="row.isSourceRow" :style="{ textAlign: row.isSourceRow ? 'left' : 'center' }">
|
||||
<el-radio-group :model-value="row.dataSource">
|
||||
<el-radio label="LIS">LIS</el-radio>
|
||||
<el-radio label="MANUAL">手工</el-radio>
|
||||
<el-radio label="ESTIMATE">估算</el-radio>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="年中位数" prop="preMedian" align="center" />
|
||||
<el-table-column label="年第90百分位数" prop="preP90" align="center" />
|
||||
</el-table-column>
|
||||
<el-table-column label="实验室内周转时间" align="center">
|
||||
<el-table-column label="本实验室规定时间" prop="inSpecTime" align="center" />
|
||||
<el-table-column label="年中位数" prop="inMedian" align="center" />
|
||||
<el-table-column label="年第90百分位数" prop="inP90" align="center" />
|
||||
</el-table-column>
|
||||
<el-table-column label="总周转时间" align="center">
|
||||
<el-table-column label="本实验室规定时间" prop="totalSpecTime" align="center" />
|
||||
<el-table-column label="年中位数" prop="totalMedian" align="center" />
|
||||
<el-table-column label="年第90百分位数" prop="totalP90" align="center" />
|
||||
</el-table-column>
|
||||
<el-table-column label="年标本量" prop="totalSample" align="center" />
|
||||
</el-table>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- 表格5 -->
|
||||
<div class="table-section">
|
||||
<el-table :data="table5Data" border style="width:100%">
|
||||
<el-table-column prop="itemName" label="(四)血培养污染(*)" width="300" />
|
||||
<el-table-column label="专业" align="center">
|
||||
<el-table-column label="微生物" prop="microbiology" align="center" />
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- 表格6 -->
|
||||
<div class="table-section">
|
||||
<el-table :data="table6Data" border style="width:100%" :row-class-name="setSourceRowClass">
|
||||
<!-- 第一列:项目名称 -->
|
||||
<el-table-column prop="itemName" label="(五)IQC、EQA(*)(微生物检测的EQA算1项,项目计数为小项,如钾、钠、氯各计1项)" width="700" />
|
||||
<!-- 第二列:数值/数据来源勾选 -->
|
||||
<el-table-column prop="value">
|
||||
<template #default="{ row }">
|
||||
<div v-if="row.isSourceRow" :style="{ textAlign: row.isSourceRow ? 'left' : 'center' }">
|
||||
<el-radio-group :model-value="row.dataSource">
|
||||
<el-radio label="LIS">LIS</el-radio>
|
||||
<el-radio label="MANUAL">手工</el-radio>
|
||||
<el-radio label="ESTIMATE">估算</el-radio>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts" name="Summary">
|
||||
import dayjs from 'dayjs'
|
||||
<script setup lang="ts">
|
||||
|
||||
const searchForm = ref({
|
||||
yljg: '',
|
||||
year: '',
|
||||
quarter: '',
|
||||
month: ''
|
||||
})
|
||||
|
||||
const pageDate = ref(dayjs().format('YYYY/MM/DD'))
|
||||
const lisIncluded = ref('Y')
|
||||
|
||||
|
||||
const table1Data = ref([
|
||||
{ itemName: '数据来源', isSourceRow: true, dataSource: 'LIS' },
|
||||
{ itemName: '本年标本总数', biochemistry: 0, immunity: 0, clinical: 0, microbiology: 0, }
|
||||
])
|
||||
// 样式标记
|
||||
const setSourceRowClass = ({ row }) => row.isSourceRow ? 'source-row' : ''
|
||||
const spanSourceMethod = ({ row, columnIndex }) => {
|
||||
if (row.isSourceRow) {
|
||||
// 数据来源行:第0列占1列1行,第1列跨4列(生化/免疫/临检/微生物),其余列隐藏
|
||||
if (columnIndex === 0) {
|
||||
return { rowspan: 1, colspan: 1 }; // 项目名称列
|
||||
} else if (columnIndex >= 1 && columnIndex <= 4) {
|
||||
// 专业列(生化/免疫/临检/微生物)合并为1列
|
||||
if (columnIndex === 1) {
|
||||
return { rowspan: 1, colspan: 4 }; // 仅第一列(生化)跨4列,其余列隐藏
|
||||
} else {
|
||||
return { rowspan: 0, colspan: 0 }; // 免疫/临检/微生物列隐藏
|
||||
}
|
||||
}
|
||||
}
|
||||
// 非数据来源行:正常显示
|
||||
return { rowspan: 1, colspan: 1 };
|
||||
}
|
||||
const table2Data = ref([])
|
||||
const table3Data = ref([])
|
||||
const table4Data = ref([
|
||||
{ itemName: '数据来源', isSourceRow: true, dataSource: 'LIS' },
|
||||
{ itemName: '门诊项目', isMerge: true, },
|
||||
{ itemName: '尿常规', preSpecTime: 60, preMedian: 13, preP90: 38, inSpecTime: 60, inMedian: 8, totalSpecTime: 120, totalSample: 9572 },
|
||||
|
||||
{ itemName: '住院项目', isMerge: true },
|
||||
{ itemName: '血钾', preSpecTime: 60, preMedian: 52, preP90: 127, inSpecTime: 120, inMedian: 48, totalSpecTime: 180, totalSample: 14345 },
|
||||
])
|
||||
const table5Data = ref([])
|
||||
const table6Data = ref([
|
||||
{ itemName: '数据来源', isSourceRow: true, dataSource: 'LIS' },
|
||||
{ itemName: '该年开展检验项目总数', value: 690 },
|
||||
{ itemName: '开展室内质控项目总数', value: 155 },
|
||||
{ itemName: '恋室室内质控CV有要求的项目数(定量项目)', value: 285 },
|
||||
{ itemName: '室内质控CV高于规定要求的项目数(定量项目)', value: 0 }
|
||||
])
|
||||
|
||||
const handleSearch = () => {
|
||||
console.log('查询条件:', searchForm.value)
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 合并单元格逻辑
|
||||
const objectSpanMethod = ({ row, columnIndex }: any) => {
|
||||
if (row.isMerge || row.isSourceRow) {
|
||||
// 第0列(项目名称)不合并,其余列全部合并(跨10列)
|
||||
if (columnIndex === 0) {
|
||||
return { rowspan: 1, colspan: 1 }
|
||||
} else {
|
||||
return { rowspan: 1, colspan: 10 }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const tableRowClassName = ({ row }) => {
|
||||
if (row.isMerge) return 'source-row'
|
||||
if (row.isSourceRow) return 'source-row'
|
||||
return ''
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
// 新增查询区域样式
|
||||
.search-section {
|
||||
margin-bottom: 16px;
|
||||
padding: 10px;
|
||||
background: #e4f0fc;
|
||||
border-radius: 4px;
|
||||
|
||||
.search-form {
|
||||
.el-form-item {
|
||||
margin-bottom: 0;
|
||||
margin-right: 16px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.header {
|
||||
position: relative;
|
||||
text-align: center;
|
||||
margin-bottom: 8px;
|
||||
|
||||
.header-right {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
text-align: right;
|
||||
font-size: 14px;
|
||||
|
||||
span {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
.title {
|
||||
font-size: 18px;
|
||||
font-weight: bold;
|
||||
line-height: 1.6;
|
||||
}
|
||||
}
|
||||
|
||||
.table-main {
|
||||
height: 70vh;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.note-section {
|
||||
margin-bottom: 16px;
|
||||
|
||||
.note-line {
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
|
||||
.note-red {
|
||||
color: red;
|
||||
font-size: 13px;
|
||||
line-height: 1.4;
|
||||
}
|
||||
}
|
||||
|
||||
.table-section {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.data-source-row {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 6px 10px;
|
||||
background: #f5f7fa;
|
||||
border: 1px solid #ebeef5;
|
||||
border-top: none;
|
||||
|
||||
.el-radio-group {
|
||||
margin-left: 12px;
|
||||
}
|
||||
}
|
||||
|
||||
:deep(.el-table--border th.el-table__cell) {
|
||||
border-right: 1px solid #fff !important;
|
||||
}
|
||||
|
||||
:deep(.el-table__row) {
|
||||
&.source-row {
|
||||
font-weight: bold;
|
||||
font-size: 16px !important;
|
||||
color: #000;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<style scoped></style>
|
||||
518
src/views/qualityIndicators/index.vue
Normal file
518
src/views/qualityIndicators/index.vue
Normal file
@ -0,0 +1,518 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<div class="search-section">
|
||||
<el-form inline :model="searchForm" class="search-form">
|
||||
<el-form-item label="医疗机构">
|
||||
<SelectTable v-model:data="searchForm.yljg" :tableData="dictData.HOS" placeholder="请选择" width="200px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="">
|
||||
<el-select v-model="searchForm.querytype" style="width: 120px" clearable @change="changeType">
|
||||
<el-option label="年度" value="1" />
|
||||
<el-option label="季度" value="2" />
|
||||
<el-option label="月度" value="3" />
|
||||
</el-select>
|
||||
<el-date-picker v-model="searchForm.year" type="year" placeholder="选择年份" format="YYYY" value-format="YYYY"
|
||||
style="width: 150px" class="mr10 ml10" />
|
||||
|
||||
<el-select v-model="searchForm.querydate" style="width: 150px" clearable v-if="searchForm.querytype === '2'">
|
||||
<el-option v-for="item in jdData" :label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
|
||||
<el-select v-model="searchForm.querydate" style="width: 150px" clearable v-if="searchForm.querytype === '3'">
|
||||
<el-option label="1月" value="01" />
|
||||
<el-option label="2月" value="02" />
|
||||
<el-option label="3月" value="03" />
|
||||
<el-option label="4月" value="04" />
|
||||
<el-option label="5月" value="05" />
|
||||
<el-option label="6月" value="06" />
|
||||
<el-option label="7月" value="07" />
|
||||
<el-option label="8月" value="08" />
|
||||
<el-option label="9月" value="09" />
|
||||
<el-option label="10月" value="10" />
|
||||
<el-option label="11月" value="11" />
|
||||
<el-option label="12月" value="12" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleSearch">查询</el-button>
|
||||
<el-button type="warning" icon="Printer">打印</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
|
||||
<!-- 顶部标题 -->
|
||||
<div class="header">
|
||||
<div class="header-right">
|
||||
<span>日期:{{ pageDate }}</span>
|
||||
</div>
|
||||
<div class="title">{{ formatDict(searchForm.yljg, 'HOS') }}</div>
|
||||
<div class="title">{{ typeName }}检验全过程质量指标</div>
|
||||
</div>
|
||||
<div class="table-main">
|
||||
<!-- 说明文字 -->
|
||||
<div class="note-section">
|
||||
<div class="note-line">
|
||||
您实验室LIS是否纳入质量指标相关数据采集与统计(*):
|
||||
<el-radio-group :model-value="lisIncluded">
|
||||
<el-radio label="Y">是</el-radio>
|
||||
<el-radio label="N">否</el-radio>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
<div class="note-red">
|
||||
注意:如果条目您实验室确无可统计的数据,请填写“未统计”;若数据为0,请填写数字“0”;填写每个表格前请先勾选此表数据来源:LIS统计、手工计算或估算。
|
||||
</div>
|
||||
<div class="note-red">
|
||||
非本单位实验室开展的检验项目均不纳入统计
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 表格1 -->
|
||||
<div class="table-section">
|
||||
<el-table :data="table1Data" border style="width:70%" :row-class-name="setSourceRowClass"
|
||||
:span-method="spanSourceMethod">
|
||||
<el-table-column prop="xmlb" label="(一)标本可接受性(*)" width="300" />
|
||||
<el-table-column label="专业" align="center">
|
||||
<el-table-column label="生化" prop="sl1" align="center">
|
||||
<!-- 数据来源列:渲染单选框 -->
|
||||
<template #default="{ row }">
|
||||
<div v-if="row.isSourceRow" :style="{ textAlign: row.isSourceRow ? 'left' : 'center' }">
|
||||
<el-radio-group :model-value="row.dataSource">
|
||||
<el-radio label="LIS">LIS</el-radio>
|
||||
<el-radio label="MANUAL">手工</el-radio>
|
||||
<el-radio label="ESTIMATE">估算</el-radio>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="免疫" prop="sl2" align="center" />
|
||||
<el-table-column label="临检" prop="sl3" align="center" />
|
||||
<el-table-column label="微生物" prop="sl4" align="center" />
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
</div>
|
||||
|
||||
<!-- 表格2 -->
|
||||
<div class="table-section">
|
||||
<el-table :data="table2Data" border style="width:70%" :row-class-name="setSourceRowClass"
|
||||
:span-method="spanSourceMethod">
|
||||
<el-table-column prop="xmlb" label="(二)检验报告(*)" width="300" />
|
||||
<el-table-column label="专业" align="center">
|
||||
<el-table-column label="生化" prop="sl1" align="center">
|
||||
<template #default="{ row }">
|
||||
<div v-if="row.isSourceRow" :style="{ textAlign: row.isSourceRow ? 'left' : 'center' }">
|
||||
<el-radio-group :model-value="row.dataSource">
|
||||
<el-radio label="LIS">LIS</el-radio>
|
||||
<el-radio label="MANUAL">手工</el-radio>
|
||||
<el-radio label="ESTIMATE">估算</el-radio>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="免疫" prop="sl2" align="center" />
|
||||
<el-table-column label="临检" prop="sl3" align="center" />
|
||||
<el-table-column label="微生物" prop="sl4" align="center" />
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
|
||||
<!-- 表格3 -->
|
||||
<div class="table-section">
|
||||
<el-table :data="table3Data" border style="width:70%" :span-method="objectSpanMethod"
|
||||
:row-class-name="tableRowClassName">
|
||||
<el-table-column prop="xmlb" label="(三)周转时间(*)" width="300">
|
||||
<template #default="{ row }">
|
||||
<div>{{ row.xmlb }}</div>
|
||||
<div>{{ row.bz }}</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="专业" align="center">
|
||||
<el-table-column label="生化" prop="sl1" align="center">
|
||||
<template #default="{ row }">
|
||||
<div v-if="row.isSourceRow" :style="{ textAlign: row.isSourceRow ? 'left' : 'center' }">
|
||||
<el-radio-group :model-value="row.dataSource">
|
||||
<el-radio label="LIS">LIS</el-radio>
|
||||
<el-radio label="MANUAL">手工</el-radio>
|
||||
<el-radio label="ESTIMATE">估算</el-radio>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="自动化免疫" prop="sl2" align="center" />
|
||||
<el-table-column label="三大常规" prop="sl3" align="center" />
|
||||
<el-table-column label="凝血" prop="sl4" align="center" />
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- 表格4 -->
|
||||
<div class="table-section">
|
||||
<el-table :data="table4Data" border style="width:70%" :span-method="objectSpanMethod"
|
||||
:row-class-name="tableRowClassName">
|
||||
<el-table-column label="(三)周转时间(具体项目)(*)" width="200">
|
||||
<el-table-column label="项目(时间单位:min)" prop="xmlb" width="200" />
|
||||
</el-table-column>
|
||||
<el-table-column label="检验前周转时间" align="center">
|
||||
<el-table-column label="本实验室规定时间" prop="sl1" align="center">
|
||||
<template #default="{ row }">
|
||||
<div v-if="row.isSourceRow" :style="{ textAlign: row.isSourceRow ? 'left' : 'center' }">
|
||||
<el-radio-group :model-value="row.dataSource">
|
||||
<el-radio label="LIS">LIS</el-radio>
|
||||
<el-radio label="MANUAL">手工</el-radio>
|
||||
<el-radio label="ESTIMATE">估算</el-radio>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="年中位数" prop="sl2" align="center" />
|
||||
<el-table-column label="年第90百分位数" prop="sl3" align="center" />
|
||||
</el-table-column>
|
||||
<el-table-column label="实验室内周转时间" align="center">
|
||||
<el-table-column label="本实验室规定时间" prop="sl4" align="center" />
|
||||
<el-table-column label="年中位数" prop="sl5" align="center" />
|
||||
<el-table-column label="年第90百分位数" prop="sl6" align="center" />
|
||||
</el-table-column>
|
||||
<el-table-column label="总周转时间" align="center">
|
||||
<el-table-column label="本实验室规定时间" prop="sl7" align="center" />
|
||||
<el-table-column label="年中位数" prop="sl8" align="center" />
|
||||
<el-table-column label="年第90百分位数" prop="sl9" align="center" />
|
||||
</el-table-column>
|
||||
<el-table-column label="年标本量" prop="sl10" align="center" />
|
||||
</el-table>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- 表格5 -->
|
||||
<div class="table-section">
|
||||
<el-table :data="table5Data" border style="width:70%" :row-class-name="setSourceRowClass">
|
||||
<el-table-column prop="xmlb" label="(四)血培养污染(*)" width="200" />
|
||||
<el-table-column label="专业" align="center">
|
||||
<el-table-column label="微生物" prop="sl1" align="center">
|
||||
<template #default="{ row }">
|
||||
<div v-if="row.isSourceRow" :style="{ textAlign: row.isSourceRow ? 'left' : 'center' }">
|
||||
<el-radio-group :model-value="row.dataSource">
|
||||
<el-radio label="LIS">LIS</el-radio>
|
||||
<el-radio label="MANUAL">手工</el-radio>
|
||||
<el-radio label="ESTIMATE">估算</el-radio>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
|
||||
<!-- 表格6 -->
|
||||
<div class="table-section">
|
||||
<el-table :data="table6Data" border style="width:70%" :row-class-name="setSourceRowClass">
|
||||
<el-table-column prop="xmlb" label="(五)IQC、EQA(*)(微生物检测的EQA算1项,项目计数为小项,如钾、钠、氯各计1项)" width="550" />
|
||||
<el-table-column prop="sl1" align="center">
|
||||
<template #default="{ row }">
|
||||
<div v-if="row.isSourceRow" :style="{ textAlign: row.isSourceRow ? 'left' : 'center' }">
|
||||
<el-radio-group :model-value="row.dataSource">
|
||||
<el-radio label="LIS">LIS</el-radio>
|
||||
<el-radio label="MANUAL">手工</el-radio>
|
||||
<el-radio label="ESTIMATE">估算</el-radio>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts" name="Summary">
|
||||
import dayjs from 'dayjs'
|
||||
import { formatDict, getDictData, dictData } from '@/hooks'
|
||||
import useUserStore from '@/store/modules/user';
|
||||
import { ncisQuery } from '@/api/liswork/qualityControl'
|
||||
import { ElLoading, ElMessage } from 'element-plus';
|
||||
const userStore = useUserStore()
|
||||
|
||||
const searchForm = ref({
|
||||
yljg: userStore.sysLoginParam.loginYLJG,
|
||||
querytype: '1',
|
||||
querydate: '',
|
||||
year: dayjs().format('YYYY'),
|
||||
})
|
||||
|
||||
const pageDate = ref(dayjs().format('YYYY/MM/DD'))
|
||||
const lisIncluded = ref('Y')
|
||||
const typeName = computed(() => {
|
||||
const year = searchForm.value.year
|
||||
if (searchForm.value.querytype === '1') {
|
||||
return `${year || dayjs().format('YYYY')}年度`
|
||||
} else if (searchForm.value.querytype === '2') {
|
||||
return `${year}年${jdData.value.find(item => item.value == searchForm.value.querydate)?.label || ''}`
|
||||
} else if (searchForm.value.querytype === '3') {
|
||||
return `${year}年${searchForm.value.querydate ? Number(searchForm.value.querydate) : dayjs().month() + 1}月`
|
||||
}
|
||||
return dayjs().format('YYYY') + '年度'
|
||||
})
|
||||
|
||||
const jdData = ref([
|
||||
{ label: '第一季度', value: '1' },
|
||||
{ label: '第二季度', value: '2' },
|
||||
{ label: '第三季度', value: '3' },
|
||||
{ label: '第四季度', value: '4' },
|
||||
])
|
||||
|
||||
const table1Data = ref([
|
||||
{ xmlb: '数据来源', isSourceRow: true, dataSource: 'LIS' },
|
||||
])
|
||||
// 样式标记
|
||||
const setSourceRowClass = ({ row }) => row.isSourceRow ? 'source-row' : ''
|
||||
const spanSourceMethod = ({ row, columnIndex }) => {
|
||||
if (row.isSourceRow) {
|
||||
// 数据来源行:第0列占1列1行,第1列跨4列(生化/免疫/临检/微生物),其余列隐藏
|
||||
if (columnIndex === 0) {
|
||||
return { rowspan: 1, colspan: 1 }; // 项目名称列
|
||||
} else if (columnIndex >= 1 && columnIndex <= 4) {
|
||||
// 专业列(生化/免疫/临检/微生物)合并为1列
|
||||
if (columnIndex === 1) {
|
||||
return { rowspan: 1, colspan: 4 }; // 仅第一列(生化)跨4列,其余列隐藏
|
||||
} else {
|
||||
return { rowspan: 0, colspan: 0 }; // 免疫/临检/微生物列隐藏
|
||||
}
|
||||
}
|
||||
}
|
||||
// 非数据来源行:正常显示
|
||||
return { rowspan: 1, colspan: 1 };
|
||||
}
|
||||
const table2Data = ref([
|
||||
{ xmlb: '数据来源', isSourceRow: true, dataSource: 'LIS' },
|
||||
])
|
||||
const table3Data = ref([
|
||||
{ xmlb: '数据来源', isSourceRow: true, dataSource: 'LIS' },
|
||||
])
|
||||
const table4Data = ref([
|
||||
{ xmlb: '数据来源', isSourceRow: true, dataSource: 'LIS' },
|
||||
// { xmlb: '门诊项目', isMerge: true, },
|
||||
// { xmlb: '尿常规', sl1: 60, sl2: 13, sl3: 38, sl4: 60, sl5: 8, sl6: 120, sl7: 9572,sl8:12 },
|
||||
|
||||
// { xmlb: '住院项目', isMerge: true },
|
||||
// { xmlb: '血钾', sl1: 60, sl2: 52, sl3: 127, sl4: 120, sl5: 48, sl6: 180, sl7: 14345,sl8:34 },
|
||||
])
|
||||
const table5Data = ref([
|
||||
{ xmlb: '数据来源', isSourceRow: true, dataSource: 'LIS' },
|
||||
])
|
||||
const table6Data = ref([
|
||||
{ xmlb: '数据来源', isSourceRow: true, dataSource: 'LIS' },
|
||||
])
|
||||
|
||||
const changeType = (val) => {
|
||||
if (val == 1) {
|
||||
searchForm.value.querydate = dayjs().format('YYYY')
|
||||
} else if (val == 2) {
|
||||
searchForm.value.querydate = '1'
|
||||
}
|
||||
else if (val == 3) {
|
||||
searchForm.value.querydate = '01'
|
||||
}
|
||||
}
|
||||
|
||||
const handleSearch = () => {
|
||||
const data = {
|
||||
yljg: searchForm.value.yljg,
|
||||
querytype: searchForm.value.querytype,
|
||||
querydate: ''
|
||||
}
|
||||
if (searchForm.value.querytype === '1') {
|
||||
data['querydate'] = searchForm.value.year
|
||||
} else if (searchForm.value.querytype === '2') {
|
||||
data['querydate'] = searchForm.value.year + searchForm.value.querydate
|
||||
} else if (searchForm.value.querytype === '3') {
|
||||
data['querydate'] = searchForm.value.year + searchForm.value.querydate
|
||||
}
|
||||
if (!data.querydate) return ElMessage.warning('请选择查询日期')
|
||||
const loading = ElLoading.service({
|
||||
lock: true,
|
||||
text: '加载中...',
|
||||
background: 'rgba(0, 0, 0, 0.7)',
|
||||
})
|
||||
ncisQuery(data).then(res => {
|
||||
table1Data.value = [{ xmlb: '数据来源', isSourceRow: true, dataSource: 'LIS' }, ...res.data.table0]
|
||||
table2Data.value = [{ xmlb: '数据来源', isSourceRow: true, dataSource: 'LIS' }, ...res.data.table1]
|
||||
table3Data.value = formatTableData(res.data.table2)
|
||||
table4Data.value = formatTableData(res.data.table3)
|
||||
table5Data.value = [{ xmlb: '数据来源', isSourceRow: true, dataSource: 'LIS' }, ...res.data.table4]
|
||||
table6Data.value = [{ xmlb: '数据来源', isSourceRow: true, dataSource: 'LIS' }, ...res.data.table5]
|
||||
}).finally(() => {
|
||||
loading.close()
|
||||
})
|
||||
}
|
||||
|
||||
// 转换函数
|
||||
const formatTableData = (rawData) => {
|
||||
// 按zb分组
|
||||
const groupMap: Record<string, any[]> = {}
|
||||
rawData.forEach(item => {
|
||||
if (!groupMap[item.zb]) groupMap[item.zb] = []
|
||||
groupMap[item.zb].push(item)
|
||||
})
|
||||
|
||||
const result: any[] = []
|
||||
|
||||
result.push({ xmlb: '数据来源', isSourceRow: true, dataSource: 'LIS' })
|
||||
|
||||
// 遍历分组组装
|
||||
Object.keys(groupMap).forEach(zbName => {
|
||||
// 分组标题行
|
||||
result.push({ xmlb: zbName, isMerge: true })
|
||||
// 明细行
|
||||
groupMap[zbName].forEach(row => {
|
||||
result.push({ ...row })
|
||||
})
|
||||
})
|
||||
return result
|
||||
}
|
||||
// 合并单元格逻辑
|
||||
const objectSpanMethod = ({ row, columnIndex }: any) => {
|
||||
if (row.isMerge || row.isSourceRow) {
|
||||
// 第0列(项目名称)不合并,其余列全部合并(跨10列)
|
||||
if (columnIndex === 0) {
|
||||
return { rowspan: 1, colspan: 1 }
|
||||
} else {
|
||||
return { rowspan: 1, colspan: 10 }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const tableRowClassName = ({ row }) => {
|
||||
if (row.isMerge) return 'source-row'
|
||||
if (row.isSourceRow) return 'source-row'
|
||||
return ''
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
getDictData('HOS')
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
// 新增查询区域样式
|
||||
.search-section {
|
||||
margin-bottom: 16px;
|
||||
padding: 10px;
|
||||
border-radius: 4px;
|
||||
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.08);
|
||||
|
||||
.search-form {
|
||||
.el-form-item {
|
||||
margin-bottom: 0;
|
||||
margin-right: 16px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.header {
|
||||
position: relative;
|
||||
text-align: center;
|
||||
margin-bottom: 8px;
|
||||
|
||||
.header-right {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
text-align: right;
|
||||
font-size: 14px;
|
||||
|
||||
span {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
.title {
|
||||
font-size: 18px;
|
||||
font-weight: bold;
|
||||
line-height: 1.6;
|
||||
}
|
||||
}
|
||||
|
||||
.table-main {
|
||||
height: calc(100% - 160px);
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.note-section {
|
||||
margin-bottom: 16px;
|
||||
padding-left: 15%;
|
||||
|
||||
.note-line {
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
|
||||
.note-red {
|
||||
color: red;
|
||||
font-size: 13px;
|
||||
line-height: 1.4;
|
||||
}
|
||||
}
|
||||
|
||||
.table-section {
|
||||
margin-bottom: 5px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.data-source-row {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 6px 10px;
|
||||
background: #f5f7fa;
|
||||
border: 1px solid #ebeef5;
|
||||
border-top: none;
|
||||
|
||||
.el-radio-group {
|
||||
margin-left: 12px;
|
||||
}
|
||||
}
|
||||
|
||||
:deep(.el-table) {
|
||||
border-radius: 0 !important;
|
||||
|
||||
.el-table__header-wrapper,
|
||||
.el-table__fixed-header-wrapper {
|
||||
th {
|
||||
word-break: break-word;
|
||||
background-color: #c0c0c0 !important;
|
||||
color: #000;
|
||||
font-size: .8125rem;
|
||||
font-weight: 500;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
:deep(.el-table--border th.el-table__cell) {
|
||||
border-right: 1px solid #d1d4d9 !important;
|
||||
border-bottom: 1px solid #d1d4d9 !important;
|
||||
}
|
||||
|
||||
:deep(.el-table--border) {
|
||||
border: 1px solid #d1d4d9 !important;
|
||||
}
|
||||
|
||||
:deep(.el-table td.el-table__cell,
|
||||
.el-table th.el-table__cell.is-leaf) {
|
||||
border-bottom: 1px solid #d1d4d9 !important;
|
||||
}
|
||||
|
||||
:deep(.el-table--border .el-table__cell) {
|
||||
border-right: 1px solid #d1d4d9 !important;
|
||||
}
|
||||
|
||||
:deep(.el-table__row) {
|
||||
&.source-row {
|
||||
font-weight: bold;
|
||||
font-size: 16px !important;
|
||||
color: #000;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
Loading…
x
Reference in New Issue
Block a user