检查报告

This commit is contained in:
wuyy 2026-03-25 18:02:12 +08:00
parent da40033541
commit 13d8bc41b9
10 changed files with 157 additions and 172 deletions

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

After

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

View File

@ -28,7 +28,7 @@
</el-select>
</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="账号">
<template #prefix>
<svg-icon icon-class="user" class="el-input__icon input-icon" />

View File

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

View File

@ -40,7 +40,11 @@
:cell-style="tableCellStyle" height="calc(100vh - 250px)">
<el-table-column type="selection" width="55" align="center" />
<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="itemclassName" show-overflow-tooltip />
<el-table-column label="试管名称" align="center" prop="itemclassTips" show-overflow-tooltip />
@ -49,7 +53,7 @@
<el-table-column label="打印次数" align="center" prop="itemclassPrintcnt" />
<el-table-column label="抗凝样本" width="80" align="center" prop="itemclassKn">
<template #default="scope">
<el-checkbox :checked="scope.row.itemclassKn === 1 || scope.row.itemclassKn === '1'" disabled />
<el-checkbox :model-value="scope.row.itemclassKn == 1" />
</template>
</el-table-column>
<el-table-column label="排序" align="center" prop="itemclassSort" />
@ -76,7 +80,7 @@
<!-- 添加或修改项目类别对话框 -->
<el-dialog :title="title" v-model="open" width="500px" append-to-body>
<el-form ref="postRef" :model="form" :rules="rules" label-width="80px">
<el-form ref="postRef" :model="form" :rules="rules" label-width="120px">
<el-form-item label="项目大类" prop="classid">
<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" />

View File

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

View File

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

View File

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

View File

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