Compare commits

..

No commits in common. "df426d2fa796941cb05e22cd0719de54342525ef" and "e4a14da940559115a2fe880b86648719d72c7bb8" have entirely different histories.

10 changed files with 173 additions and 158 deletions

View File

@ -54,9 +54,9 @@ export function fetchCodeReqmain(query?: Object) {
// 查询报告单列表 // 查询报告单列表
export function reportList(query?: Object) { export function reportList(query?: Object) {
return request({ return request({
url: '/transitLisReport/lisReportList', url: '/report/ReportList',
method: 'get', method: 'post',
params: query, data: query,
}); });
} }
// 查询报告Pdf预览 // 查询报告Pdf预览
@ -70,25 +70,25 @@ export function reportViewPdf(query?: Object) {
// 查询报告Pdf打印 // 查询报告Pdf打印
export function reportPrintPdf(query?: Object) { export function reportPrintPdf(query?: Object) {
return request({ return request({
url: '/transitLisReport/printLisReport', url: '/report/print',
method: 'get', method: 'post',
params: query, data: query,
}); });
} }
// 查询项目报告 // 查询项目报告
export function reportResult(query?: Object) { export function reportResult(query?: Object) {
return request({ return request({
url: '/transitLisReport/reportDetail', url: '/report/result',
method: 'get', method: 'post',
params: query, data: query,
}); });
} }
// 查询微生物报告 // 查询微生物报告
export function reportMedList(query?: Object) { export function reportMedList(query?: Object) {
return request({ return request({
url: '/transitLisReport/reportDetailMed', url: '/report/MedList',
method: 'get', method: 'post',
params: query, data: query,
}); });
} }
// 查询微生物报告 // 查询微生物报告

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

After

Width:  |  Height:  |  Size: 79 KiB

View File

@ -32,7 +32,7 @@
<el-tab-pane v-for="item in xmdlList" :key="item.dictCode" :label="item.dictName" :name="item.dictCode"> <el-tab-pane v-for="item in xmdlList" :key="item.dictCode" :label="item.dictName" :name="item.dictCode">
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
<div style="height: calc(60% - 50px)" class="mb5"> <div style="height: calc(60% - 1.875rem)" class="mb5">
<CustomVxeTable :table-data="filterData" :columns="xmColumns" @cell-dblclick="dbRowclick" <CustomVxeTable :table-data="filterData" :columns="xmColumns" @cell-dblclick="dbRowclick"
:cell-style="xmcellStyle" keyField='applyid' :cell-style="xmcellStyle" keyField='applyid'
:scrollYConfig="{ enabled: true, rSize: 30, height: '100%', }" class="mytable-style"> :scrollYConfig="{ enabled: true, rSize: 30, height: '100%', }" class="mytable-style">
@ -48,9 +48,9 @@
<template #newitemclass="{ row }"> <template #newitemclass="{ row }">
{{itemclassList.find((item) => item.itemclassCode == row.newitemclass)?.itemclassName}} {{itemclassList.find((item) => item.itemclassCode == row.newitemclass)?.itemclassName}}
</template> </template>
<!-- <template #newbarcode="{ row }"> <template #newbarcode="{ row }">
条码号({{ barcodes }}条) 条码号({{ barcodes }}条)
</template> --> </template>
<template #itemclass_yblx="{ row }"> <template #itemclass_yblx="{ row }">
<SelectTable v-model:data="row.itemclass_yblx" :tableData="dictData.BT" placeholder="请选择" <SelectTable v-model:data="row.itemclass_yblx" :tableData="dictData.BT" placeholder="请选择"
:clearable="false" v-if="labpat.status < 20 || !labpat.status" value="label" :clearable="false" v-if="labpat.status < 20 || !labpat.status" value="label"
@ -65,7 +65,6 @@
</template> </template>
</CustomVxeTable> </CustomVxeTable>
</div> </div>
<div class="yblxtext">共有{{ barcodes }}个样本类型</div>
</el-col> </el-col>
</el-row> </el-row>
</div> </div>
@ -271,12 +270,14 @@ const handleQuery = () => {
) )
labPatList.value = tableData.value labPatList.value = tableData.value
if (!labpat.value.status) {
const item = res.data.find(item => item.patId == labpat.value.patId) const item = res.data.find(item => item.patId == labpat.value.patId)
nextTick(() => { nextTick(() => {
tableRef.value.setCurrentRow(item) tableRef.value.setCurrentRow(item)
handleRowClick({ row: item }) handleRowClick({ row: item })
}) })
}
}) })
} }
// 获取病人代号查询信息 // 获取病人代号查询信息
@ -452,7 +453,7 @@ const sqXmColumns = ref([
{ field: 'newitemclass', title: '类别', align: 'center', width: 100, slotName: 'newitemclass', resizable: true }, { field: 'newitemclass', title: '类别', align: 'center', width: 100, slotName: 'newitemclass', resizable: true },
{ field: 'newitemclass_tips', title: '采样提示', align: 'center', width: 80, resizable: true }, { field: 'newitemclass_tips', title: '采样提示', align: 'center', width: 80, resizable: true },
{ field: 'itemname', title: '简称', align: 'center', resizable: true }, { field: 'itemname', title: '简称', align: 'center', resizable: true },
{ field: 'newbarcode', title: '条码号', align: 'center', width: 120, resizable: true, }, { field: 'newbarcode', title: '条码号', align: 'center', width: 120, resizable: true, headerSlot: 'newbarcode' },
{ field: 'amount', title: '单价', align: 'center', width: 60, resizable: true }, { field: 'amount', title: '单价', align: 'center', width: 60, resizable: true },
{ field: 'itemclass_yblx', title: '样本', align: 'center', width: 80, slotName: 'itemclass_yblx', resizable: true }, { field: 'itemclass_yblx', title: '样本', align: 'center', width: 80, slotName: 'itemclass_yblx', resizable: true },
{ field: 'status', title: '状态', align: 'center', resizable: true, width: 80, slotName: 'status' }, { field: 'status', title: '状态', align: 'center', resizable: true, width: 80, slotName: 'status' },
@ -483,11 +484,12 @@ const sqxmCzList = computed(() => {
// 数据分组 // 数据分组
const { tableData } = useGroupTableData( const { tableData } = useGroupTableData(
sqXmList.value, sqXmList.value,
'barcode', 'itemclass',
['newitemclass', 'newbarcode', 'newitemclass_tips'], ['newitemclass', 'newbarcode', 'newitemclass_tips'],
'orderDate', 'orderDate',
['itemclass', 'barcode', 'itemclass_tips'], ['itemclass', 'barcode', 'itemclass_tips'],
) )
return tableData.value return tableData.value
}) })
@ -560,12 +562,6 @@ const getXmList = () => {
getXmItemInfo().then(res => { getXmItemInfo().then(res => {
processedTableData.value = processTableData(res.data); processedTableData.value = processTableData(res.data);
filterData.value = [...processedTableData.value] filterData.value = [...processedTableData.value]
listregdict({ dictType: 'CLASS' }).then(response => {
xmdlList.value = response.rows;
activeName.value = xmdlList.value.length > 0 ? xmdlList.value[0].dictCode : '';
handleTabClick({ paneName: activeName.value });
});
}) })
} }
@ -573,10 +569,14 @@ const itemclassList = ref([]) // 容器类别
onMounted(() => { onMounted(() => {
getXmList()
changeDays(3) changeDays(3)
getXmList()
getDictData('PT', 'SX', 'AU', 'ZT', 'ZJLX', 'DEPT', 'DOCTOR', 'SLZQ', 'BT', 'SQDZT') getDictData('PT', 'SX', 'AU', 'ZT', 'ZJLX', 'DEPT', 'DOCTOR', 'SLZQ', 'BT', 'SQDZT')
listregdict({ dictType: 'CLASS' }).then(response => {
xmdlList.value = response.rows;
activeName.value = xmdlList.value.length > 0 ? xmdlList.value[0].dictCode : '';
handleTabClick({ paneName: activeName.value });
});
listitemclass({ pageSize: 9999, pageNum: 1 }).then(response => { listitemclass({ pageSize: 9999, pageNum: 1 }).then(response => {
itemclassList.value = response.rows; itemclassList.value = response.rows;
}) })
@ -643,13 +643,6 @@ onMounted(() => {
font-weight: 600; font-weight: 600;
} }
.yblxtext {
font-style: 15px;
color: #123d64;
font-weight: 600;
text-align: center;
}
.title { .title {
font-size: 14px; font-size: 14px;
color: #000; color: #000;

View File

@ -28,7 +28,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="用户工号:" prop="username"> <el-form-item label="用户代号:" prop="username">
<el-input v-model="loginForm.username" type="text" size="large" auto-complete="off" placeholder="账号"> <el-input v-model="loginForm.username" type="text" size="large" auto-complete="off" placeholder="账号">
<template #prefix> <template #prefix>
<svg-icon icon-class="user" class="el-input__icon input-icon" /> <svg-icon icon-class="user" class="el-input__icon input-icon" />

View File

@ -96,6 +96,7 @@ const queryParams = ref({
pageNum: 1, pageNum: 1,
srcHospName: userStore.sysLoginParam.loginYLJGName, srcHospName: userStore.sysLoginParam.loginYLJGName,
times: [], times: [],
status: 50
}) })
const tableData = ref([]) const tableData = ref([])
const columns = ref([ const columns = ref([

View File

@ -40,11 +40,7 @@
:cell-style="tableCellStyle" height="calc(100vh - 250px)"> :cell-style="tableCellStyle" height="calc(100vh - 250px)">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column label="序号" align="center" prop="itemclassId" /> <el-table-column label="序号" align="center" prop="itemclassId" />
<el-table-column label="项目大类" align="center" prop="classid"> <el-table-column label="项目大类" align="center" prop="classid" />
<template #default="scope">
{{xmdlList.find(item => item.dictCode == scope.row.classid)?.dictName}}
</template>
</el-table-column>
<el-table-column label="项目类别编码" align="center" prop="itemclassCode" /> <el-table-column label="项目类别编码" align="center" prop="itemclassCode" />
<el-table-column label="项目类别名称" align="center" prop="itemclassName" show-overflow-tooltip /> <el-table-column label="项目类别名称" align="center" prop="itemclassName" show-overflow-tooltip />
<el-table-column label="试管名称" align="center" prop="itemclassTips" show-overflow-tooltip /> <el-table-column label="试管名称" align="center" prop="itemclassTips" show-overflow-tooltip />
@ -53,7 +49,7 @@
<el-table-column label="打印次数" align="center" prop="itemclassPrintcnt" /> <el-table-column label="打印次数" align="center" prop="itemclassPrintcnt" />
<el-table-column label="抗凝样本" width="80" align="center" prop="itemclassKn"> <el-table-column label="抗凝样本" width="80" align="center" prop="itemclassKn">
<template #default="scope"> <template #default="scope">
<el-checkbox :model-value="scope.row.itemclassKn == 1" /> <el-checkbox :checked="scope.row.itemclassKn === 1 || scope.row.itemclassKn === '1'" disabled />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="排序" align="center" prop="itemclassSort" /> <el-table-column label="排序" align="center" prop="itemclassSort" />
@ -80,7 +76,7 @@
<!-- 添加或修改项目类别对话框 --> <!-- 添加或修改项目类别对话框 -->
<el-dialog :title="title" v-model="open" width="500px" append-to-body> <el-dialog :title="title" v-model="open" width="500px" append-to-body>
<el-form ref="postRef" :model="form" :rules="rules" label-width="120px"> <el-form ref="postRef" :model="form" :rules="rules" label-width="80px">
<el-form-item label="项目大类" prop="classid"> <el-form-item label="项目大类" prop="classid">
<el-select v-model="form.classid" placeholder="请选择项目大类" clearable style="width: 100%"> <el-select v-model="form.classid" placeholder="请选择项目大类" clearable style="width: 100%">
<el-option v-for="dict in xmdlList" :key="dict.dictCode" :label="dict.dictName" :value="dict.dictCode" /> <el-option v-for="dict in xmdlList" :key="dict.dictCode" :label="dict.dictName" :value="dict.dictCode" />

View File

@ -4,7 +4,7 @@
<div class="left_box"> <div class="left_box">
<el-input v-model="leftSearchValue" placeholder="请输入类别名称或代号" class="mb10" /> <el-input v-model="leftSearchValue" placeholder="请输入类别名称或代号" class="mb10" />
<el-table :data="filteredLeftTableData" @row-click="handleLeftRowClick" highlight-current-row border <el-table :data="filteredLeftTableData" @row-click="handleLeftRowClick" highlight-current-row border
showOverflowTooltip :cell-style="cellStyle" height="80vh" style="width: 100%;"> :cell-style="cellStyle" height="80vh" style="width: 100%;">
<el-table-column prop="itemclassCode" label="分单类别代号" width="110" /> <el-table-column prop="itemclassCode" label="分单类别代号" width="110" />
<el-table-column prop="itemclassName" label="类别名称" /> <el-table-column prop="itemclassName" label="类别名称" />
</el-table> </el-table>
@ -14,7 +14,7 @@
<div class="m_box"> <div class="m_box">
<el-input v-model="middleSearchValue" placeholder="请输入项目名称或代号" class="mb10" /> <el-input v-model="middleSearchValue" placeholder="请输入项目名称或代号" class="mb10" />
<el-table :data="filteredMiddleTableData" @row-dblclick="handleMiddleRowDblClick" highlight-current-row <el-table :data="filteredMiddleTableData" @row-dblclick="handleMiddleRowDblClick" highlight-current-row
showOverflowTooltip style="width: 100%;" height="80vh" border> style="width: 100%;" height="80vh" border>
<el-table-column prop="itemcode" label="项目代号" width="100" /> <el-table-column prop="itemcode" label="项目代号" width="100" />
<el-table-column prop="itemname" label="当前类别包含门诊项目" /> <el-table-column prop="itemname" label="当前类别包含门诊项目" />
</el-table> </el-table>
@ -36,7 +36,7 @@
<el-table :data="filteredRightTableData" @row-dblclick="handleRightRowDblClick" highlight-current-row <el-table :data="filteredRightTableData" @row-dblclick="handleRightRowDblClick" highlight-current-row
showOverflowTooltip height="80vh" border style="width: 100%;"> height="80vh" border style="width: 100%;">
<el-table-column prop="itemclass" label="类别" width="100"> <el-table-column prop="itemclass" label="类别" width="100">
<template #default="{ row }"> <template #default="{ row }">
{{leftTableData.find(item => item.itemclassCode === row.itemclass)?.itemclassName}} {{leftTableData.find(item => item.itemclassCode === row.itemclass)?.itemclassName}}

View File

@ -30,7 +30,7 @@
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
<el-table v-loading="loading" :data="postList" @selection-change="handleSelectionChange" showOverflowTooltip <el-table v-loading="loading" :data="postList" @selection-change="handleSelectionChange"
:cell-style="tableCellStyle" height="calc(100vh - 250px)"> :cell-style="tableCellStyle" height="calc(100vh - 250px)">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column label="类别" align="center" prop="hospital_type" width="100"> <el-table-column label="类别" align="center" prop="hospital_type" width="100">
@ -168,9 +168,7 @@ function cancel() {
} }
/** 表单重置 */ /** 表单重置 */
function reset() { function reset() {
form.value = { form.value = {};
status: "0"
};
proxy.resetForm("postRef"); proxy.resetForm("postRef");
} }
/** 搜索按钮操作 */ /** 搜索按钮操作 */

View File

@ -72,26 +72,31 @@
</el-form> </el-form>
</el-row> </el-row>
</div> </div>
<el-row :gutter="10"> <el-row :gutter="20">
<el-col :span="16"> <el-col :span="16" class="right-table">
<el-row :gutter="10" class="mb8 mt10"> <el-row :gutter="10" class="mb8 mt10">
<!-- <el-col :span="1.5">
<el-button type="primary" plain icon="Edit" :size="aotuSize" @click="selectStatusRows">勾选所有未打印</el-button>
</el-col> -->
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="primary" plain icon="Upload" :loading="printLoading" :size="aotuSize" <el-button type="primary" plain icon="Edit" :size="aotuSize" @click="selectStatusRows">勾选所有未打印</el-button>
@click="printPdf">打印报告</el-button> </el-col>
<el-col :span="1.5">
</el-col>
<el-col :span="1.5">
<el-button type="primary" plain icon="Upload" :size="aotuSize" @click="printPdf">打印报告</el-button>
</el-col> </el-col>
<!-- <right-toolbar v-model:showSearch="showSearch" @updateColumns="updateColumns" @queryTable="handleQuery" <!-- <right-toolbar v-model:showSearch="showSearch" @updateColumns="updateColumns" @queryTable="handleQuery"
:columns="columns"></right-toolbar> --> :columns="columns"></right-toolbar> -->
</el-row> </el-row>
<div>
<CustomTable ref="tableRefs" :data="tableData" :columns="columns" :config="tableConfig" :loading="loading" <CustomTable ref="tableRefs" :data="tableData" :columns="columns" :config="tableConfig" :loading="loading"
@row-click="rowHandle" :enableColumnDrag="true" @column-drag-end="handleColumnDragEnd"> @selection-change="selectionChange" @row-click="rowHandle" :enableColumnDrag="true"
@column-drag-end="handleColumnDragEnd">
<template #dybz="{ row }"> <template #dybz="{ row }">
<svg-icon v-if="row.dybz == 1" icon-class="lvgou" /> <svg-icon v-if="row.dybz == 1" icon-class="lvgou" />
</template> </template>
<template #srcHospName="{ row }">
武汉市汉阳区江堤街社区卫生服务中心
</template>
<template #alarmflag="{ row }"> <template #alarmflag="{ row }">
{{ row.alarmflag == 1 ? '危' : '' }} {{ row.alarmflag == 1 ? '危' : '' }}
</template> </template>
@ -99,37 +104,30 @@
{{ row.jzbz == 1 ? '急' : '' }} {{ row.jzbz == 1 ? '急' : '' }}
</template> </template>
</CustomTable> </CustomTable>
</div>
<div class="mt5 mb5">
<el-pagination v-model:current-page="queryParams.pageNum" v-model:page-size="queryParams.pageSize"
:size="aotuSize" :page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper"
:total="total" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
</div>
</el-col> </el-col>
<el-col :span="8" class="right-table"> <el-col :span="8" class="right-table">
<!-- <div class="title">检验结果</div> --> <!-- <div class="title">检验结果</div> -->
<div class="mb8 mt10"> <div class="mb8 mt10">
<!-- <el-button type="primary" plain :size="aotuSize" @click="openDB">对比历史</el-button> --> <el-button type="primary" plain :size="aotuSize" @click="openDB">对比历史</el-button>
<el-select class="ml10" placeholder="请选择复制" style="width: 140px" @change="copyData" :size="aotuSize"> <el-select class="ml10" placeholder="请选择复制" style="width: 140px" @change="copyData" :size="aotuSize">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" /> <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
</el-select> </el-select>
<!-- <el-button type="primary">知识库</el-button> --> <!-- <el-button type="primary">知识库</el-button> -->
</div> </div>
<div>
<CustomTable :data="rightTableData" :columns="rightColumns" :config="rightTableConfig" <CustomTable :data="rightTableData" :columns="rightColumns" :config="rightTableConfig" @row-click="xmrowHandle"
@row-click="xmrowHandle" ref="rightTableRef"> ref="rightTableRef">
<template #jgbz="{ row }"> <template #jgbz="{ row }">
{{ formatJgbz(row.jgbz) }} {{ formatJgbz(row.jgbz) }}
</template> </template>
</CustomTable> </CustomTable>
</div>
<div class="mt10" v-if="bottomTableData.length > 0"></div> <div class="mt10" v-if="bottomTableData.length > 0"></div>
<div>
<CustomTable v-if="bottomTableData.length > 0" :data="bottomTableData" :columns="bottomColumns" <CustomTable v-if="bottomTableData.length > 0" :data="bottomTableData" :columns="bottomColumns"
@row-click="xmrowBottomHandle" :config="bottomTableConfig"> :config="bottomTableConfig">
</CustomTable> </CustomTable>
</div>
<div v-if="bottomTableData.length > 0" class="expert-comment" :title="expertComment"> <div v-if="bottomTableData.length > 0" class="expert-comment" :title="expertComment">
专家评语:{{ expertComment }} 专家评语:{{ expertComment }}
</div> </div>
@ -172,15 +170,24 @@
<script setup lang="ts"> <script setup lang="ts">
import CustomTable from '@/components/elTable/index.vue' import CustomTable from '@/components/elTable/index.vue'
import { useRouter } from 'vue-router'
import { reportList, reportPrintPdf, reportResult, reportMedList, reportFsresult } from '@/api/checkCode/index' import { reportList, reportPrintPdf, reportResult, reportMedList, reportFsresult } from '@/api/checkCode/index'
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import SelectTable from '@/components/SelectTable/index.vue'; import SelectTable from '@/components/SelectTable/index.vue';
import { ElMessage, ElMessageBox } from 'element-plus' import { ElMessage, ElMessageBox } from 'element-plus'
import { classCom } from '@/utils/classCom' import { classCom } from '@/utils/classCom'
import * as echarts from 'echarts'; import * as echarts from 'echarts';
//@ts-ignore
import { comDict } from '@/utils/dict' import { comDict } from '@/utils/dict'
import { usePrintStore } from '@/store/modules/printStore'
//@ts-ignore
import useUserStore from '@/store/modules/user'
import { useRoute } from 'vue-router'
const aotuSize = classCom.useAutoSize(); const aotuSize = classCom.useAutoSize();
const route = useRoute()
const userStore = useUserStore()
const compactForm = ref<HTMLElement | null>(null); const compactForm = ref<HTMLElement | null>(null);
const heightForm = ref(90); const heightForm = ref(90);
const dialogVisible = ref(false) const dialogVisible = ref(false)
@ -203,15 +210,14 @@ interface QueryParams {
ch: string, ch: string,
dybz: string, dybz: string,
sqh: string, sqh: string,
pageNum: number, userid: string
pageSize: number
} }
// 提交表单数据 // 提交表单数据
const queryParams = reactive<QueryParams>({ const queryParams = reactive<QueryParams>({
times: ['2025-08-19', '2025-08-19'], times: ['2025-08-19', '2025-08-19'],
// ksdh: '0203', // ksdh: '0203',
ksdh: '', ksdh: '0210',
brlyname: '', brlyname: '',
sqh: '25080109476', sqh: '25080109476',
alarmflag: false, alarmflag: false,
@ -220,13 +226,24 @@ const queryParams = reactive<QueryParams>({
brdh: '', brdh: '',
ch: '', ch: '',
dybz: '', dybz: '',
pageNum: 1, userid: ''
pageSize: 20
}); });
// 获取当前日期(当天)
const today = dayjs();
// 计算前6天的日期(当天 + 前6天 = 7天)
const startOfWeek = today.subtract(6, 'day');
const startDate = route.query.startdate ? String(route.query.startdate) : startOfWeek.format('YYYY-MM-DD');
const endDate = route.query.endate ? String(route.query.endate) : today.format('YYYY-MM-DD');
// queryParams.times = [startDate, endDate];2025-08-19&endate=2025-08-19
queryParams.times = ['2025-08-19', '2025-08-19'];
queryParams.ksdh = (route.query.deptcode as string) || '0210';
queryParams.userid = (route.query.userid as string) || '00910';
queryParams.brdh = (route.query.brdh as string) || '';
const total = ref(0);
const printLoading = ref(false);
const single = ref(true); const single = ref(true);
const multiple = ref(true); const multiple = ref(true);
const alarmflag = ref() const alarmflag = ref()
@ -276,15 +293,6 @@ const handleQuery = async () => {
if (!valid) return false; if (!valid) return false;
getList() getList()
} }
const handleSizeChange = (val: number) => {
queryParams.pageSize = val
handleQuery()
}
const handleCurrentChange = (val: number) => {
queryParams.pageNum = val
handleQuery()
}
// 重置 // 重置
const resetQuery = () => { const resetQuery = () => {
queryRef.value?.resetFields(); queryRef.value?.resetFields();
@ -299,7 +307,7 @@ const tableData = ref([])
// 配置项 // 配置项
const columns = ref([ const columns = ref([
{ type: 'selection', visible: true, align: 'center', width: 30, label: '多选框' }, { type: 'selection', visible: true, align: 'center', width: 30, label: '多选框' },
{ prop: 'yljg', label: '委托机构', align: 'center', visible: true, width: 200 }, { prop: 'srcHospName', label: '委托机构', align: 'center', visible: true, slot: 'srcHospName', width: 200 },
{ prop: 'dybz', label: '印', align: 'center', visible: true, slot: 'dybz', width: 40 }, { prop: 'dybz', label: '印', align: 'center', visible: true, slot: 'dybz', width: 40 },
{ prop: 'jzbz', label: '急', align: 'center', visible: true, slot: 'jzbz', width: 40 }, { prop: 'jzbz', label: '急', align: 'center', visible: true, slot: 'jzbz', width: 40 },
{ prop: 'alarmflag', label: '危', align: 'center', visible: true, slot: 'alarmflag', width: 40 }, { prop: 'alarmflag', label: '危', align: 'center', visible: true, slot: 'alarmflag', width: 40 },
@ -313,11 +321,12 @@ const columns = ref([
{ prop: 'confirmtime', label: '报告时间', align: 'center', visible: true, sortable: true, width: 150 }, { prop: 'confirmtime', label: '报告时间', align: 'center', visible: true, sortable: true, width: 150 },
{ prop: 'sjysname', label: '送检医生', align: 'center', visible: true, width: 80 }, { prop: 'sjysname', label: '送检医生', align: 'center', visible: true, width: 80 },
{ prop: 'brlyname', label: '病人类型', align: 'center', visible: true, width: 80 }, { prop: 'brlyname', label: '病人类型', align: 'center', visible: true, width: 80 },
{ prop: 'jyrq', label: '检验日期', align: 'center', visible: true, width: 100 }, { prop: 'yljg', label: '医疗机构', align: 'center', visible: true, width: 150 },
{ prop: 'jyrqname', label: '检验日期', align: 'center', visible: true, width: 100 },
{ prop: 'ybh', label: '样本号', align: 'center', visible: true, width: 60 }, { prop: 'ybh', label: '样本号', align: 'center', visible: true, width: 60 },
{ prop: 'yqmc', label: '仪器名称', align: 'center', visible: true, width: 150 }, { prop: 'yqmc', label: '仪器名称', align: 'center', visible: true, width: 150 },
// { prop: 'yqdl', label: '仪器', align: 'center', visible: true, width: 100 }, { prop: 'yqdl', label: '仪器', align: 'center', visible: true, width: 100 },
// { prop: 'yljg', label: '检验机构', align: 'center', visible: true, width: 150 }, { prop: 'yljg', label: '检验机构', align: 'center', visible: true, width: 150 },
]) ])
const selectionChange = (selection: any) => { const selectionChange = (selection: any) => {
@ -329,7 +338,7 @@ const selectionChange = (selection: any) => {
const rightTableRef = ref() const rightTableRef = ref()
const rowHandle = (row: any) => { const rowHandle = (row: any) => {
console.log('row==>', row); console.log('row==>', row);
if (row.yqdl == 2) { if (row.yqdl == '细菌仪') {
rightColumns.value[1].visible = false rightColumns.value[1].visible = false
rightColumns.value[2].visible = true rightColumns.value[2].visible = true
rightColumns.value[4].visible = false rightColumns.value[4].visible = false
@ -353,8 +362,12 @@ const rowHandle = (row: any) => {
] ]
Info.value = row Info.value = row
const data = {
reportResult({ bgdh: row.bgdh }).then((res) => { jyrq: row.jyrq,
yq: row.yq,
ybh: row.ybh,
}
reportResult(data).then((res: any) => {
if (res.code == 0) { if (res.code == 0) {
rightTableData.value = res.data rightTableData.value = res.data
nextTick(() => { nextTick(() => {
@ -371,14 +384,23 @@ const handleColumnDragEnd = (newColumns: any) => {
// 打印单张Pdf // 打印单张Pdf
const printPdf = () => { const printPdf = () => {
printLoading.value = true const printStore = usePrintStore();
reportPrintPdf({ bgdh: Info.value.bgdh }).then((res) => { const merge = rows.value.map((item: any) => { return `${item.jyrqname.replace(/-/g, '')}_${item.yq.trim()}_${item.ybh}` })
// const merge = [
// "20250819_11_1",
// "20250819_11_10",
// "20250819_11_11"
// ]
reportPrintPdf(merge).then((res: any) => {
if (res.code == 0) { if (res.code == 0) {
if (!res.data.report) return ElMessage.warning('未找到打印文件') if (!res.data) return ElMessage.warning('未找到打印文件')
classCom.printBase64PDF(res.data.report) classCom.printBase64PDF(res.data)
// if (printStore.isConnected) {
// HiprintPrinter.silentPrint([res.data])
// } else {
// classCom.printBase64PDF(res.data)
// }
} }
}).finally(() => {
printLoading.value = false
}) })
} }
@ -511,7 +533,7 @@ const rightTableConfig = ref(
{ {
// stripe: true, // 斑马纹 // stripe: true, // 斑马纹
border: true, // 边框 border: true, // 边框
height: '60vh', // 高度 height: '25vh', // 高度
highlightCurrentRow: true, // 高亮当前行 highlightCurrentRow: true, // 高亮当前行
cellStyle: rightCellStyleHd cellStyle: rightCellStyleHd
} }
@ -534,23 +556,24 @@ const xmRow = ref<any>({})
// 查询抗生素 // 查询抗生素
const xmrowHandle = (row: any) => { const xmrowHandle = (row: any) => {
xmRow.value = row xmRow.value = row
expertComment.value = row.textresult
const data = { const data = {
bgdh: row.bgdh, jyrq: Info.value.jyrq,
yq: Info.value.yq,
ybh: Info.value.ybh,
xmdh: row.xmdh xmdh: row.xmdh
} }
reportMedList(data).then((res: any) => { reportMedList(data).then((res: any) => {
if (res.code == 0) { if (res.code == 200) {
bottomTableData.value = res.data bottomTableData.value = res.rows
expertComment.value = res.data[0]?.txtresult; if (res.rows.length > 0) {
if (res.data.length > 0) {
nextTick(() => { nextTick(() => {
rightTableConfig.value.height = `calc(32vh - ${heightForm.value}px)` rightTableConfig.value.height = `calc(32vh - ${heightForm.value}px)`
rightTableRef.value?.doLayout && rightTableRef.value.doLayout(); rightTableRef.value?.doLayout && rightTableRef.value.doLayout();
}); });
} else { } else {
nextTick(() => { nextTick(() => {
rightTableConfig.value.height = '60vh' rightTableConfig.value.height = `calc(74vh - ${heightForm.value}px)`
rightTableRef.value?.doLayout && rightTableRef.value.doLayout(); rightTableRef.value?.doLayout && rightTableRef.value.doLayout();
}); });
} }
@ -675,7 +698,7 @@ const getEcharts = (data: any) => {
); );
const Intance = echarts.init(myEcharts.value); const Intance = echarts.init(myEcharts.value);
const xData = dateKeys; const xData = dateKeys;
let seriesData: string[] = [] let seriesData = []
seriesData = dateKeys.map(item => data[item]); seriesData = dateKeys.map(item => data[item]);
const option = { const option = {
@ -811,10 +834,12 @@ const dictData = ref<DictData>({});
onMounted(async () => { onMounted(async () => {
// 初始化3天区间(今天-前两天) // 初始化3天区间(今天-前两天)
const end = dayjs().format('YYYY-MM-DD'); // const end = dayjs().format('YYYY-MM-DD HH:mm:ss');
const start = dayjs().subtract(2, 'day').format('YYYY-MM-DD'); //add 时间往后 // const start = dayjs().subtract(1, 'day').format('YYYY-MM-DD HH:mm:ss'); //add 时间往后
queryParams.times = [start, end]; // queryParams.times = [start, end];
// console.log(queryParams.times); // console.log(queryParams.times);
// 进入页面单点登录
userStore.loginAnonymous({ name: 'admin' })
getList() getList()
adjustTableHeight(); adjustTableHeight();
@ -830,6 +855,8 @@ onMounted(async () => {
const getList = () => { const getList = () => {
if (!queryParams.ksdh) return ElMessage.error('科室代号不能为空');
if (!queryParams.userid) return ElMessage.error('用户userid不能为空');
const data = { const data = {
alarmflag: alarmflag.value, alarmflag: alarmflag.value,
jzbz: jzbz.value, jzbz: jzbz.value,
@ -839,10 +866,11 @@ const getList = () => {
brxm: queryParams.brxm, brxm: queryParams.brxm,
brdh: queryParams.brdh, brdh: queryParams.brdh,
ch: queryParams.ch, ch: queryParams.ch,
userid: queryParams.userid,
st: '', st: '',
et: '', et: '',
pageSize: queryParams.pageSize || 10, yljg: 1,
pageNum: queryParams.pageNum || 1
} }
if (queryParams.times && queryParams.times.length) { if (queryParams.times && queryParams.times.length) {
data.st = queryParams.times[0] data.st = queryParams.times[0]
@ -851,14 +879,13 @@ const getList = () => {
return ElMessage.error('日期时间段不能为空'); return ElMessage.error('日期时间段不能为空');
} }
loading.value = true loading.value = true
reportList(data).then((res) => { reportList(data).then((res: any) => {
if (res.code == 200) { if (res.code == 0) {
loading.value = false loading.value = false
tableData.value = res.rows tableData.value = res.data
total.value = res.total if (res.data.length > 0) {
if (res.rows.length > 0) { tableRefs.value.setCurrentRow(res.data[0])
tableRefs.value.setCurrentRow(res.rows[0]) rowHandle(res.data[0])
rowHandle(res.rows[0])
} else { } else {
rightTableData.value = [] rightTableData.value = []
bottomTableData.value = [] bottomTableData.value = []
@ -879,7 +906,7 @@ function adjustTableHeight() {
heightForm.value = compactForm.value.offsetHeight; heightForm.value = compactForm.value.offsetHeight;
nextTick(() => { nextTick(() => {
tableConfig.value.height = `calc(74vh - ${heightForm.value + 50}px)` tableConfig.value.height = `calc(74vh - ${heightForm.value}px)`
tableRefs.value?.doLayout && tableRefs.value.doLayout(); tableRefs.value?.doLayout && tableRefs.value.doLayout();
}); });

View File

@ -20,8 +20,8 @@
<pane size="84"> <pane size="84">
<el-col> <el-col>
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px"> <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="用户工号" prop="userName"> <el-form-item label="用户代号" prop="userName">
<el-input v-model="queryParams.userName" placeholder="请输入用户工号" clearable style="width: 240px" <el-input v-model="queryParams.userName" placeholder="请输入用户代号" clearable style="width: 240px"
@keyup.enter="handleQuery" /> @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="手机号码" prop="phonenumber"> <el-form-item label="手机号码" prop="phonenumber">
@ -72,9 +72,9 @@
height="calc(100vh - 350px)"> height="calc(100vh - 350px)">
<el-table-column type="selection" width="50" align="center" /> <el-table-column type="selection" width="50" align="center" />
<el-table-column label="用户编号" align="center" key="userId" prop="userId" v-if="columns.userId.visible" /> <el-table-column label="用户编号" align="center" key="userId" prop="userId" v-if="columns.userId.visible" />
<el-table-column label="用户工号" align="center" key="userName" prop="userName" <el-table-column label="用户代号" align="center" key="userName" prop="userName"
v-if="columns.userName.visible" :show-overflow-tooltip="true" /> v-if="columns.userName.visible" :show-overflow-tooltip="true" />
<el-table-column label="用户姓名" align="center" key="nickName" prop="nickName" <el-table-column label="用户昵称" align="center" key="nickName" prop="nickName"
v-if="columns.nickName.visible" :show-overflow-tooltip="true" /> v-if="columns.nickName.visible" :show-overflow-tooltip="true" />
<el-table-column label="部门" align="center" key="deptName" prop="dept.deptName" <el-table-column label="部门" align="center" key="deptName" prop="dept.deptName"
v-if="columns.deptName.visible" :show-overflow-tooltip="true" /> v-if="columns.deptName.visible" :show-overflow-tooltip="true" />
@ -125,8 +125,8 @@
<el-form :model="form" :rules="rules" ref="userRef" label-width="80px"> <el-form :model="form" :rules="rules" ref="userRef" label-width="80px">
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="用户姓名" prop="nickName"> <el-form-item label="用户昵称" prop="nickName">
<el-input v-model="form.nickName" placeholder="请输入用户姓名" maxlength="30" /> <el-input v-model="form.nickName" placeholder="请输入用户昵称" maxlength="30" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
@ -151,8 +151,8 @@
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item v-if="form.userId == undefined" label="用户工号" prop="userName"> <el-form-item v-if="form.userId == undefined" label="用户代号" prop="userName">
<el-input v-model="form.userName" placeholder="请输入用户工号" maxlength="30" /> <el-input v-model="form.userName" placeholder="请输入用户代号" maxlength="30" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
@ -292,8 +292,8 @@ const upload = reactive({
// 列显隐信息 // 列显隐信息
const columns = ref<Record<string, TableShowColumns>>({ const columns = ref<Record<string, TableShowColumns>>({
userId: { label: '用户编号', visible: true }, userId: { label: '用户编号', visible: true },
userName: { label: '用户工号', visible: true }, userName: { label: '用户代号', visible: true },
nickName: { label: '用户姓名', visible: true }, nickName: { label: '用户昵称', visible: true },
deptName: { label: '部门', visible: true }, deptName: { label: '部门', visible: true },
phonenumber: { label: '手机号码', visible: true }, phonenumber: { label: '手机号码', visible: true },
status: { label: '状态', visible: true }, status: { label: '状态', visible: true },
@ -311,11 +311,11 @@ const data = reactive({
deptId: undefined deptId: undefined
} as UserQueryParams, } as UserQueryParams,
rules: { rules: {
userName: [{ required: true, message: "用户工号不能为空", trigger: "blur" }, userName: [{ required: true, message: "用户代号不能为空", trigger: "blur" },
{ min: 2, max: 20, message: "用户工号长度必须介于 2 和 20 之间", trigger: "blur" }, { min: 2, max: 20, message: "用户代号长度必须介于 2 和 20 之间", trigger: "blur" },
{ pattern: /^[A-Za-z0-9]+$/, message: '用户工号只能输入字母和数字', trigger: ['blur', 'change'] } { pattern: /^[A-Za-z0-9]+$/, message: '用户代号只能输入字母和数字', trigger: ['blur', 'change'] }
], ],
nickName: [{ required: true, message: "用户姓名不能为空", trigger: "blur" }], nickName: [{ required: true, message: "用户昵称不能为空", trigger: "blur" }],
password: [{ required: true, message: "用户密码不能为空", trigger: "blur" }, { min: 5, max: 20, message: "用户密码长度必须介于 5 和 20 之间", trigger: "blur" }, { pattern: /^[^<>"'|\\]+$/, message: "不能包含非法字符:< > \" ' \\\ |", trigger: "blur" }], password: [{ required: true, message: "用户密码不能为空", trigger: "blur" }, { min: 5, max: 20, message: "用户密码长度必须介于 5 和 20 之间", trigger: "blur" }, { pattern: /^[^<>"'|\\]+$/, message: "不能包含非法字符:< > \" ' \\\ |", trigger: "blur" }],
email: [{ type: "email", message: "请输入正确的邮箱地址", trigger: ["blur", "change"] }], email: [{ type: "email", message: "请输入正确的邮箱地址", trigger: ["blur", "change"] }],
phonenumber: [{ pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: "请输入正确的手机号码", trigger: "blur" }] phonenumber: [{ pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: "请输入正确的手机号码", trigger: "blur" }]