检验项目优化

This commit is contained in:
wyuu 2025-12-08 17:49:43 +08:00
parent 8d98e4c8c3
commit 61e1af8c97
11 changed files with 335 additions and 284 deletions

View File

@ -124,7 +124,7 @@ aside {
//main-container全局样式
.app-container {
padding: 10px 10px 0 10px;
min-height: calc(100vh - 84px);
min-height: calc(100vh - 5.25rem);
}
.components-container {
@ -309,3 +309,28 @@ aside {
margin-right: 0.2rem;
}
}
.search-form {
:deep(.el-form-item__label) {
padding: 0 !important;
}
:deep(.el-form-item) {
margin-right: 0;
}
.el-form-item--default {
margin-bottom: .3125rem !important;
}
.el-form-item--small {
margin-bottom: .3125rem !important;
}
}
.page-box {
margin-top: 10px;
float: right;
}

View File

@ -19,11 +19,12 @@ const props = withDefaults(defineProps<{
size?: string,
clearable?: boolean,
instrGroup?: string | number, //部门组代号
data: string
data: string | undefined
}>(), {
width: '100%',
size: 'default',
clearable: false
clearable: false,
data: ''
})
const instrOptions = ref<Array<{ yq: string; yqmc: string }>>([]);

View File

@ -55,12 +55,13 @@ const props = withDefaults(defineProps<Props>(), {
placeholder: "请选择",
size: "default",
isHighlight: true,
value: undefined,
label: undefined,
border: false,
value: 'value',
label: 'label',
border: true,
width: "100%",
dictType: '',
clearable: true
clearable: true,
objKey: ''
});

View File

@ -1,55 +1,52 @@
<template>
<div class="app-container">
<el-row :gutter="20">
<el-col :span="14" :xs="24">
<el-col :span="14">
<!-- 表单区域-->
<el-form inline :model="queryParams" class="mb8" size="small">
<el-form-item label="项目类别">
<el-form inline :model="queryParams" class="search-form " size="small" label-width="85px">
<el-form-item label="项目类别:">
<SelectTable v-model:data="queryParams.xmgl" :fields="xmglFields" :tableData="dictData.XMGL" label="label"
value="value" objKey="value" width="140px" placeholder="项目类别" size="small" @getDataValue="getList" />
value="value" objKey="value" width="8.75rem" size="small" @getDataValue="getList" />
</el-form-item>
<el-form-item label="细菌标志">
<el-form-item label="细菌标志:">
<SelectTable v-model:data="queryParams.itemclass" :fields="itemclassFields" :tableData="dictData.ITEMCLASS"
label="label" value="value" objKey="value" width="140px" placeholder="细菌标志" size="small"
@getDataValue="getList" />
label="label" value="value" objKey="value" width="8.75rem" size="small" @getDataValue="getList" />
</el-form-item>
<el-form-item label="仪器代号">
<el-form-item label="仪器代号:">
<SelectTable v-model:data="queryParams.yq" :fields="yqFields" :tableData="instrOptions" label="yqmc"
value="yq" objKey="yq" :border="true" width="140px" placeholder="请选择仪器" size="small"
value="yq" objKey="yq" :border="true" width="8.75rem" placeholder="请选择仪器" size="small"
@getDataValue="getList" />
</el-form-item>
<el-form-item label="快速查找">
<el-input clearable placeholder="快速查找" v-model="queryParams.inputcode" prefix-icon="Search"
style="width: 150px" @change="getList" />
</el-form-item>
<el-form-item label="仪器大类">
<SelectTable v-model:data="queryParams.yqdl" :fields="yqdlFields" :tableData="dictData.YQDL" label="label"
value="value" objKey="value" :border="true" width="140px" placeholder="仪器大类" size="small"
@getDataValue="getList" />
</el-form-item>
<el-form-item label="项目ID">
<el-input clearable placeholder="项目ID" prefix-icon="Search" v-model="queryParams.xmid" style="width: 150px"
<el-form-item label="快速查找:">
<el-input clearable v-model="queryParams.inputcode" prefix-icon="Search" style="width: 8.75rem"
@change="getList" />
</el-form-item>
<el-form-item label="仪器大类:">
<SelectTable v-model:data="queryParams.yqdl" :fields="yqdlFields" :tableData="dictData.YQDL" label="label"
value="value" objKey="value" :border="true" width="8.75rem" size="small" @getDataValue="getList" />
</el-form-item>
<el-form-item label="项目ID:">
<el-input clearable placeholder="项目ID" prefix-icon="Search" v-model="queryParams.xmid"
style="width: 8.75rem" @change="getList" />
</el-form-item>
<el-form-item>
<el-radio-group v-model="queryParams.uflag" fill="primary" size="large" @change="changeStauts">
<el-radio-group v-model="queryParams.uflag" fill="primary" :size="autoSize" @change="changeStauts">
<el-radio value="0">在用</el-radio>
<el-radio value="1">停用</el-radio>
<el-radio value="">所有</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item>
<el-checkbox v-model="queryParams.isMIC" label="隐藏微生物项目" size="large" @change="getList" />
<el-checkbox v-model="queryParams.isMIC" label="隐藏微生物项目" :size="autoSize" @change="getList" />
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleRefresh">刷新</el-button>
<el-button type="primary" plain icon="Plus" @click="handleAdd">新增</el-button>
<el-button type="primary" plain icon="Plus" @click="handleDel">删除</el-button>
<el-button type="primary" plain icon="Plus" @click="handleBatchVs">批量项目对应</el-button>
<el-button type="primary" plain icon="Plus" @click="handleBatchDel">批量删除对应</el-button>
<el-button type="primary" plain icon="Plus" @click="handleSave">保存</el-button>
<el-button type="primary" plain icon="Refresh" :size="autoSize" @click="handleRefresh">刷新</el-button>
<el-button type="primary" plain icon="Plus" :size="autoSize" @click="handleAdd">新增</el-button>
<el-button type="danger" plain icon="Delete" :size="autoSize" @click="handleDel">删除</el-button>
<el-button type="primary" plain :size="autoSize" @click="handleBatchVs">批量项目对应</el-button>
<el-button type="primary" plain :size="autoSize" @click="handleSave">保存</el-button>
</el-col>
</el-row>
<!-- 表格区域-->
@ -59,7 +56,7 @@
{{ formatDict(row.xmgl, 'XMGL') }}
</template>
<template #xmlb="{ row }">
{{xmlbList.find(item => item.value === row.xmlb).label}}
{{xmlbList.find(item => item.value === row.xmlb)?.label}}
</template>
<template #jsxm="{ row }">
{{ row.jsxm === 'Y' ? '是' : '否' }}
@ -71,15 +68,21 @@
{{ formatDict(row.yqdl, 'YQDL') }}
</template>
</CustomTable>
<div class="page-box">
<el-pagination v-model:current-page="queryParams.pageNum" v-model:page-size="queryParams.pageSize"
:page-sizes="[30, 60, 100]" background layout="total, sizes, prev, pager, next,jumper" :total="total"
:size="autoSize" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
</div>
</el-col>
<!-- 右侧区域-->
<el-col :span="10" :xs="24">
<el-col :span="10">
<tabView :tabList="tabList" v-model:activeTab="activeTab" @update:active-tab="updateActive" />
<KeepAlive>
<component class="tabDiv" ref="tableTabRef" :is="activeTabN" :formData="selectRow" v-model="modelParam"
@refreshTabData="rowChange"></component>
</KeepAlive>
<BatchInstrVs v-show="batchInstrVsModel.visible" v-model="batchInstrVsModel" />
<BatchInstrVs v-model="batchInstrVsModel" />
</el-col>
</el-row>
</div>
@ -88,15 +91,15 @@
<script setup lang="ts">
import { onMounted, ref, toRaw, computed } from 'vue';
import Basic from './tab/base/Basic.vue'
import CommonlyValues from '@/views/liswork/labItem/tab/CommonlyValues.vue'
import UseInstr from './tab/UseInstr.vue'
import Knowledge from './tab/Knowledge.vue'
import CommonDescriptions from './tab/CommonDescriptions.vue'
import CommonlyValues from './tab/commonlyValues.vue'
import UseInstr from './tab/useInstr.vue'
import Knowledge from './tab/knowledge.vue'
import CommonDescriptions from './tab/commonDescriptions.vue'
import CustomTable from '@/components/elTable/index.vue'
import Sort from './tab/Sort.vue'
import Parameter from './tab/Parameter.vue';
import ChannelNumber from './tab/ChannelNumber.vue';
import ReferenceValueDetails from './tab/ReferenceValueDetails.vue';
import Sort from './tab/sort.vue'
import Parameter from './tab/parameter.vue';
import ChannelNumber from './tab/channelNumber.vue';
import ReferenceValueDetails from './tab/referenceValueDetails.vue';
import { queryXmInfoNewService, queryXmInfoNewDetailService, saveDataService, deleteXmInfoService } from '@/api/liswork/labItem/labItemApi';
import SelectTable from '@/components/SelectTable/index.vue'
import { getGroupInstrdList } from '@/api/liswork/work/LisWork';
@ -106,6 +109,8 @@ import { formatDict, getDictData, dictData } from '@/hooks';
import { ElMessage, ElMessageBox } from 'element-plus';
import BatchInstrVs from './BatchInstrVs.vue';
import _ from 'lodash';
import { classCom } from '@/utils/classCom';
const autoSize = classCom.useAutoSize()
const xmlbList = ref<Array<any>>([
{ label: '数值型', value: '1' },
@ -122,8 +127,13 @@ const queryParams = ref({
yqdl: '', //仪器大类
xmid: '', //项目ID
uflag: '0', //状态
isMIC: false || null //是否隐藏微生物项目
isMIC: false || null, //是否隐藏微生物项目
pageSize: 30,
pageNum: 1
})
const total = ref(0)
//字典数据
const tableRef = ref()
const xmglFields = ref([
@ -157,7 +167,7 @@ const activeTabMap = {
ReferenceValueDetails
}
const activeTabN = computed(() => activeTabMap[activeTab.value as keyof typeof activeTabMap] || Basic);
const activeTabN = computed(() => activeTabMap[activeTab.value as keyof typeof activeTabMap] || "Basic");
//table表格列
const columns = ref([
@ -185,7 +195,7 @@ const columns = ref([
const tableConfig = ref({
border: true, // 边框
height: '66vh', // 高度
height: '70vh', // 高度
highlightCurrentRow: true, // 高亮当前行
// cellStyle: cellStyleHd
})
@ -214,7 +224,6 @@ const modelParam = ref<any>({
commonDescriptionsData: [],
referenceValueDetailsData: []
})
const basic = ref<boolean>(false)
// 1. 定义变量跟踪是否有未保存的修改
const hasUnsavedChanges = ref(false);
@ -251,17 +260,33 @@ const getYqConfig = () => {
}
})
}
const handleSizeChange = (val: number) => {
queryParams.value.pageSize = val;
getList();
}
const handleCurrentChange = (val: number) => {
queryParams.value.pageNum = val;
getList();
}
//获取表格数据
const getList = () => {
queryXmInfoNewService(queryParams.value).then((res: any) => {
dataList.value = res.data;
dataList.value = res.rows || [];
total.value = res.total;
hasUnsavedChanges.value = false;
if (res.rows.length) {
tableRef.value.setCurrentRow(res.rows[0]);
rowChange(res.rows[0]);
} else {
selectRow.value = '';
selectDetailRow.value = '';
changeActiveTab()
}
})
}
//新增
const handleAdd = () => {
selectRow.value = '';
tableTabRef.value.changeDisabled(false);
modelParam.value = {
basicData: {
yq: '',
@ -306,22 +331,20 @@ const handleAdd = () => {
}
//删除
const handleDel = async () => {
if (selectRow.value) {
await ElMessageBox.confirm('是否删除选中的数据?', '提示',
const handleDel = () => {
if (selectRow.value.xmid) {
ElMessageBox.confirm('是否删除选中的数据?', '提示',
{ confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }
);
await deleteXmInfoService({ xmid: selectRow.value.xmid });
).then(() => {
deleteXmInfoService({ xmid: selectRow.value.xmid }).then((res: any) => {
if (res.code == 0) {
ElMessage.success('删除成功!')
getList();
selectRow.value = null;
if (typeof tableTabRef.value.changeDisabled === 'function') {
tableTabRef.value.changeDisabled(true);
}
})
})
}
}
//批量对应
@ -329,24 +352,17 @@ const handleBatchVs = () => {
batchInstrVsModel.value.visible = true;
}
//批量删除对应
const handleBatchDel = () => {
console.log('删除对应')
}
//保存
const handleSave = async (flag: any) => {
//验证表单
if (typeof tableTabRef.value.validate === 'function') {
const valid = await tableTabRef.value.validate(); // 调用子组件的验证方法
if (!valid) {
ElMessage.error('表单验证失败,请检查输入项!');
return;
}
if (activeTab.value == 'Basic') {
const valid = await tableTabRef.value.validate(); // 调用基本资料子组件的验证方法
if (!valid) return ElMessage.error('表单验证失败,请检查输入项!');
}
await saveDataService({
saveDataService({
xmInfoNew: modelParam.value.basicData,
xmDoubleRows: [],
xmValRows: [],
@ -357,21 +373,19 @@ const handleSave = async (flag: any) => {
xmRefNewRows: modelParam.value.referenceValueDetailsData,
xmInfoVsRows: modelParam.value.userInstrData,
xmTextresultNewRows: modelParam.value.commonDescriptionsData
}).then((res: any) => {
if (res.code == 0) {
ElMessage.success('保存成功!')
getList();
// 保存后更新快照
initialModelParam.value = _.cloneDeep(modelParam.value);
hasUnsavedChanges.value = false;
tableConfig.value.highlightCurrentRow = true
}
})
if (!flag) {
rowChange(selectRow.value)
}
if (basic.value) {
getList();
basic.value = false
}
ElMessage.success('保存成功!')
// 保存后更新快照
initialModelParam.value = _.cloneDeep(modelParam.value);
hasUnsavedChanges.value = false;
}
const handleRefresh = () => {
@ -394,14 +408,9 @@ const changeStauts = () => {
// 选择行变化
const rowChange = async (row: any) => {
if (typeof tableTabRef.value.changeDisabled === 'function') {
tableTabRef.value.changeDisabled(false);
}
// 如果有未保存的修改,显示提示
if (hasUnsavedChanges.value) {
try {
await ElMessageBox.confirm(
ElMessageBox.confirm(
'当前数据有未保存的修改,是否保存?',
'提示',
{
@ -409,18 +418,23 @@ const rowChange = async (row: any) => {
cancelButtonText: '不保存',
type: 'warning'
}
);
).then(() => {
// 用户选择保存
await handleSave("1");
} catch (error) {
// 用户选择不保存,继续执行
}
handleSave("1");
}).catch(() => {
// 用户选择不保存
getInfo(row)
})
} else {
getInfo(row)
}
}
const getInfo = async (row: any) => {
tableConfig.value.highlightCurrentRow = true
selectRow.value = row;
const res = await queryXmInfoNewDetailService(row.xmid, row.yq, row.xmdh)
selectDetailRow.value = res.data
console.log('选中行明细数据:', selectDetailRow.value)
changeActiveTab()
initialModelParam.value = _.cloneDeep(modelParam.value);
hasUnsavedChanges.value = false;
@ -429,8 +443,6 @@ const rowChange = async (row: any) => {
if (typeof tableTabRef.value.resetField === 'function') {
tableTabRef.value.resetField();
}
}
//tab变化
@ -440,14 +452,11 @@ const updateActive = () => {
const changeActiveTab = () => {
if (selectRow.value) {
modelParam.value.basicData = toRaw(selectDetailRow.value.xmInfoNew || {});
modelParam.value.commonlyValuesData = toRaw(selectDetailRow.value.xmValNewRows || []);
modelParam.value.userInstrData = toRaw(selectDetailRow.value.xmInfoVsRows || []);
modelParam.value.commonDescriptionsData = toRaw(selectDetailRow.value.xmTextresultNewRows || []);
modelParam.value.referenceValueDetailsData = toRaw(selectDetailRow.value.xmRefNewRows || []);
}
}
onMounted(async () => {
@ -459,9 +468,4 @@ onMounted(async () => {
</script>
<style lang="css">
.tabDiv {
height: 88vh;
overflow-y: auto;
}
</style>
<style lang="scss" scoped></style>

View File

@ -8,12 +8,12 @@
<CustomTable ref="tableRef" :data="modelParam.commonlyValuesData" :columns="columns" :enable-column-drag="true"
@column-drag-end="handleColumnDragEnd" :config="tableConfig" @row-click="handRowClick">
<template #qz="{ row }">
<el-select v-model="row.qz" clearable allow-create filterable default-first-option>
<el-select v-model="row.qz" clearable allow-create filterable default-first-option class="full-width-input">
<el-option v-for="item in qzOptions" :key="item.value" :label="item.label" :value="item.value"></el-option>
</el-select>
</template>
<template #jgbz="{ row }">
<el-select v-model="row.jgbz" clearable>
<el-select v-model="row.jgbz" clearable class="full-width-input">
<el-option v-for="item in jgbzOptions" :key="item.value" :label="item.label" :value="item.value"></el-option>
</el-select>
</template>
@ -27,7 +27,7 @@
<script setup lang="ts">
import CustomTable from '@/components/elTable/index.vue'
import { dictData, getDictData } from '@/hooks';
import { ElMessageBox } from 'element-plus';
import { ElMessage, ElMessageBox } from 'element-plus';
import { delXmValNewService } from '@/api/liswork/labItem/labItemApi'
@ -36,13 +36,13 @@ const emit = defineEmits(['refreshTabData'])
const tableRef = ref<any>();
const columns = ref([
{ prop: 'qz', label: '取值', visible: true, align: 'center', slot: 'qz', width: 200 },
{ prop: 'srm', label: '快速输入码', visible: true, align: 'center', slot: 'srm', width: 100 },
{ prop: 'jgbz', label: '结果标志', visible: true, align: 'center', slot: 'jgbz', width: 100 }
{ prop: 'qz', label: '取值', visible: true, align: 'center', slot: 'qz', showOverflowTooltip: false },
{ prop: 'srm', label: '快速输入码', visible: true, align: 'center', slot: 'srm' },
{ prop: 'jgbz', label: '结果标志', visible: true, align: 'center', slot: 'jgbz', showOverflowTooltip: false }
]);
const tableConfig = ref({
border: true, // 边框
height: '80vh', // 高度
height: '78vh', // 高度
highlightCurrentRow: true, // 高亮当前行
// cellStyle: cellStyleHd
})
@ -58,7 +58,7 @@ const handleColumnDragEnd = (data: any) => {
//序号最大值
const maxXh = computed(() => {
return modelParam.value.commonlyValuesData.length > 0 ? Math.max(...modelParam.value.commonlyValuesData.value.map((item: any) => item.xh || 0)) : 0;
return modelParam.value.commonlyValuesData.length > 0 ? modelParam.value.commonlyValuesData.length + 1 : 0;
});
const bClickAdd = () => {
@ -67,22 +67,21 @@ const bClickAdd = () => {
qz: '',
srm: '',
jgbz: '',
xh: maxXh.value + 1
xh: maxXh.value
}
modelParam.value.commonlyValuesData.push(newData);
}
const bClickDel = async () => {
if (selectRow.value) {
await ElMessageBox.confirm('是否要删除选中的数据?', '警告',
{ confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' });
const bClickDel = () => {
if (!selectRow.value) return ElMessage.warning('请选择要删除的数据!');
ElMessageBox.confirm('是否要删除选中的数据?', '警告',
{ confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(async () => {
//删掉界面上面的数据
//tableList.value = tableList.value?.filter((item:any) => item.xh != selectRow.value.xh );
await delXmValNewService({ xmid: modelParam.value.basicData.xmid, xh: selectRow.value.xh })
emit('refreshTabData', modelParam.value.basicData)
}
})
}

View File

@ -1,106 +1,108 @@
<template>
<!-- 基本资料 -->
<div>
<div class="basic_info">
<el-form ref="formRef" :model="modelParam.basicData" :rules="rules" size="small" class="form-inline" inline
label-width="70px" :disabled="disabled" label-position="right" inline-message>
label-width="6.25rem" label-position="right" :inline-message="false">
<span class="text-span">基本参数:</span>
<el-divider style="margin: 5px 0;" />
<el-divider style="margin: .3125rem 0;" />
<el-form-item label="项目类别" prop="xmgl">
<SelectTable v-model:data="modelParam.basicData.xmgl" :fields="xmglFields" :tableData="dictData.XMGL"
label="label" value="value" objKey="value" width="140px" placeholder="项目类别" size="small" />
label="label" value="value" objKey="value" width="12.5rem" placeholder="" size="small" />
</el-form-item>
<el-form-item label="英文缩写" prop="xmdh">
<el-input placeholder="英文缩写" v-model="modelParam.basicData.xmdh" @input="xmdhInput"></el-input>
<el-input v-model="modelParam.basicData.xmdh" @input="xmdhInput" />
</el-form-item>
<el-form-item label="项目名称" prop="xmmc">
<el-input placeholder="项目名称" v-model="modelParam.basicData.xmmc" @change="xmmcChange"></el-input>
<el-input v-model="modelParam.basicData.xmmc" @change="xmmcChange" />
</el-form-item>
<el-form-item label="单位" prop="dw">
<SelectTable v-model:data="modelParam.basicData.dw" :fields="xmglFields" :tableData="dictData.UT" label="label"
value="label" objKey="label" width="140px" placeholder="单位" size="small" />
value="label" objKey="label" width="12.5rem" placeholder="" size="small" />
</el-form-item>
<el-form-item label="结果类别" prop="xmlb">
<SelectTable v-model:data="modelParam.basicData.xmlb" :fields="xmglFields" :tableData="xmlbData" label="label"
value="value" objKey="value" width="140px" placeholder="结果类别" size="small" />
value="value" objKey="value" width="12.5rem" placeholder="" size="small" />
</el-form-item>
<el-form-item label="阴阳性" prop="mrz">
<SelectTable v-model:data="modelParam.basicData.mrz" :fields="xmglFields" :tableData="mrzData" label="label"
value="value" objKey="value" width="140px" placeholder="阴阳性" size="small" />
value="value" objKey="value" width="12.5rem" placeholder="" size="small" />
</el-form-item>
<el-form-item label="仪器大类" prop="yqdl">
<SelectTable v-model:data="modelParam.basicData.yqdl" :fields="xmglFields" :tableData="dictData.YQDL"
label="label" value="value" objKey="value" width="140px" placeholder="仪器大类" size="small" />
label="label" value="value" objKey="value" width="12.5rem" placeholder="" size="small" />
</el-form-item>
<el-form-item label="允许CV(%)" prop="qccv" label-width="100px">
<el-input placeholder="允许CV(%)" type="number" v-model="modelParam.basicData.qccv"></el-input>
<el-form-item label="允许CV(%)" prop="qccv">
<el-input type="number" v-model="modelParam.basicData.qccv" />
</el-form-item>
<el-form-item label="稀释倍数" prop="xsbs">
<el-input placeholder="稀释倍数" v-model="modelParam.basicData.xsbs"></el-input>
<el-input v-model="modelParam.basicData.xsbs" />
</el-form-item>
<el-form-item label="whonet编码" prop="whocode" label-width="100px">
<el-input placeholder="whonet编码" v-model="modelParam.basicData.whocode"></el-input>
<el-form-item label="whonet编码" prop="whocode">
<el-input v-model="modelParam.basicData.whocode" />
</el-form-item>
<el-form-item label="Gram" prop="germflag">
<el-input placeholder="Gram" v-model="modelParam.basicData.germflag"></el-input>
<el-input v-model="modelParam.basicData.germflag" />
</el-form-item>
<el-form-item label="英文名称" prop="yymc">
<el-input placeholder="英文名称" v-model="modelParam.basicData.yymc"></el-input>
<el-input v-model="modelParam.basicData.yymc" />
</el-form-item>
<el-form-item label="项目ID" prop="xmid">
<el-input placeholder="项目ID" disabled v-model="modelParam.basicData.xmid"></el-input>
<el-input disabled v-model="modelParam.basicData.xmid" />
</el-form-item>
<el-form-item label="知识库编码" prop="knowledge">
<el-input v-model="modelParam.basicData.knowledge" />
</el-form-item>
<el-form-item label="小数保留位数" prop="xsws">
<SelectTable v-model:data="modelParam.basicData.xsws" :fields="xmglFields" :tableData="xswsData" label="label"
value="value" objKey="value" width="12.5rem" placeholder="" size="small" />
</el-form-item>
<el-form-item label="打印形式" prop="dylx">
<SelectTable v-model:data="modelParam.basicData.dylx" :fields="xmglFields" :tableData="dylxData" label="label"
value="value" objKey="value" width="12.5rem" placeholder="" size="small" />
</el-form-item>
<el-form-item label="总汇表代号" prop="zhbdh">
<el-input v-model="modelParam.basicData.zhbdh" />
</el-form-item>
<el-form-item label="报告单代号" prop="bgdh">
<el-input v-model="modelParam.basicData.bgdh" />
</el-form-item>
<el-form-item label="价格" prop="jg">
<el-input type="number" v-model="modelParam.basicData.jg" />
</el-form-item>
<el-form-item label="助记符" prop="zjf">
<el-input v-model="modelParam.basicData.zjf" />
</el-form-item>
<el-form-item label="测试方法" prop="csff">
<SelectTable v-model:data="modelParam.basicData.csff" :fields="xmglFields" :tableData="dictData.MD"
label="label" value="value" objKey="value" width="12.5rem" placeholder="" size="small" />
</el-form-item>
<el-form-item label="分组打印组号" prop="fzdyxh">
<el-input type="number" v-model="modelParam.basicData.fzdyxh" />
</el-form-item>
<el-form-item label="细菌项目类别" prop="itemclass">
<SelectTable v-model:data="modelParam.basicData.itemclass" :fields="xmglFields" :tableData="dictData.ITEMCLASS"
label="label" value="value" objKey="value" width="12.5rem" placeholder="" size="small" />
</el-form-item>
<el-form-item prop="uflag">
<el-checkbox value="uflag">停用</el-checkbox>
</el-form-item>
<el-form-item label="知识库编码" prop="knowledge" label-width="100px">
<el-input placeholder="知识库编码" v-model="modelParam.basicData.knowledge"></el-input>
</el-form-item>
<el-form-item label="小数保留位数" prop="xsws" label-width="100px">
<SelectTable v-model:data="modelParam.basicData.xsws" :fields="xmglFields" :tableData="xswsData" label="label"
value="value" objKey="value" width="140px" placeholder="小数保留位数" size="small" />
</el-form-item>
<el-form-item label="打印形式" prop="dylx">
<SelectTable v-model:data="modelParam.basicData.dylx" :fields="xmglFields" :tableData="dylxData" label="label"
value="value" objKey="value" width="140px" placeholder="打印形式" size="small" />
</el-form-item>
<el-form-item label="总汇表代号" prop="zhbdh" label-width="100px">
<el-input placeholder="总汇表代号" v-model="modelParam.basicData.zhbdh"></el-input>
</el-form-item>
<el-form-item label="报告单代号" prop="bgdh" label-width="90px">
<el-input placeholder="报告单代号" v-model="modelParam.basicData.bgdh"></el-input>
</el-form-item>
<el-form-item label="价格" prop="jg">
<el-input placeholder="价格" type="number" v-model="modelParam.basicData.jg"></el-input>
</el-form-item>
<el-form-item label="助记符" prop="zjf">
<el-input placeholder="助记符" v-model="modelParam.basicData.zjf"></el-input>
</el-form-item>
<el-form-item label="测试方法" prop="csff">
<SelectTable v-model:data="modelParam.basicData.csff" :fields="xmglFields" :tableData="dictData.MD"
label="label" value="value" objKey="value" width="140px" placeholder="测试方法" size="small" />
</el-form-item>
<el-form-item label="分组打印组号" prop="fzdyxh" label-width="100px">
<el-input placeholder="分组打印组号" type="number" v-model="modelParam.basicData.fzdyxh"></el-input>
</el-form-item>
<el-form-item label="细菌项目类别" prop="itemclass" label-width="100px">
<SelectTable v-model:data="modelParam.basicData.itemclass" :fields="xmglFields" :tableData="dictData.ITEMCLASS"
label="label" value="value" objKey="value" width="140px" placeholder="细菌项目类别" size="small" />
</el-form-item>
<span class="text-span">结果参考值计算:</span>
<el-divider style="margin: 5px 0;" />
<el-divider style="margin: .3125rem 0;" />
<el-form-item label="参考下限" prop="ckxx">
<el-input placeholder="参考下限" v-model="modelParam.basicData.ckxx" @input="updatedyckz"></el-input>
<el-input v-model="modelParam.basicData.ckxx" @input="updatedyckz" />
</el-form-item>
<el-form-item label="参考上限" prop="cksx">
<el-input placeholder="参考上限" v-model="modelParam.basicData.cksx" @input="updatedyckz"></el-input>
<el-input v-model="modelParam.basicData.cksx" @input="updatedyckz" />
</el-form-item>
<el-form-item label="参考值" prop="dyckz" label-width="60px">
<el-input placeholder="参考值" v-model="modelParam.basicData.dyckz"></el-input>
<el-button type="primary" @click="multiRefClick">多行参考值向导...</el-button>
<el-form-item label="参考值" prop="dyckz">
<el-input v-model="modelParam.basicData.dyckz" />
<el-button type="primary" class="ml5" @click="multiRefClick">多行参考值向导...</el-button>
</el-form-item>
<el-form-item label="公式" prop="jsgs" label-width="40px">
<el-input placeholder="公式" v-model="modelParam.basicData.jsgs"></el-input>
<el-button v-show="modelParam.basicData.jsxm === 'Y'" type="primary" @click="calcGuildeClick">向导...</el-button>
<el-form-item label="公式" prop="jsgs">
<el-input v-model="modelParam.basicData.jsgs" />
<el-button v-show="modelParam.basicData.jsxm === 'Y'" type="primary" class="ml5"
@click="calcGuildeClick">向导...</el-button>
</el-form-item>
<el-form-item>
<el-checkbox label="参考值与性别有关" v-model="ygxbCheck"></el-checkbox>
@ -111,53 +113,53 @@
<el-checkbox label="计算项目" v-model="jsxmCheck"></el-checkbox>
</el-form-item>
<span class="text-span">医学审核条件:</span>
<el-divider style="margin: 5px 0;" />
<el-form-item label="项目结果不可能大于" prop="sjx" label-width="140px">
<el-input placeholder="项目结果不可能大于" v-model="modelParam.basicData.sjx" style="width: 100px;"></el-input>
<el-divider style="margin: .3125rem 0;" />
<el-form-item label="项目结果不可能大于" prop="sjx" label-width="8.75rem">
<el-input v-model="modelParam.basicData.sjx" style="width:10rem" />
</el-form-item>
<el-form-item label="不可能小于" prop="xjx" label-width="90px">
<el-input placeholder="不可能小于" v-model="modelParam.basicData.xjx" style="width: 100px;"></el-input>
<el-form-item label="不可能小于" prop="xjx" label-width="7rem">
<el-input v-model="modelParam.basicData.xjx" style="width:10rem" />
</el-form-item>
<el-form-item label="病人两次检验结果在" prop="jgjg" label-width="140px">
<el-input placeholder="病人两次检验结果在" v-model="modelParam.basicData.jgjg" style="width: 100px;"></el-input>
<el-form-item label="病人两次检验结果在" prop="jgjg" label-width="8.75rem">
<el-input v-model="modelParam.basicData.jgjg" style="width:10rem" />
</el-form-item>
<!--计算属性-->
<el-form-item label="天内不可能相差" prop="cp_jgz" label-width="120px">
<el-input placeholder="天内不可能相差" v-model="modelParam.basicData.cp_jgz" style="width: 100px;"></el-input>
<el-form-item label="天内不可能相差" prop="cp_jgz" label-width="7rem">
<el-input v-model="modelParam.basicData.cp_jgz" style="width:10rem" />
</el-form-item>
<!--报警条件-->
<span class="text-span">报警条件</span>
<el-divider style="margin: 5px 0;" />
<el-divider style="margin: .3125rem 0;" />
<el-form-item label="危急值">
<el-input placeholder="上限极值" v-model="modelParam.basicData.hlimt"></el-input>
<el-input placeholder="下限极值" v-model="modelParam.basicData.llimit"></el-input>
<el-button type="primary" @click="conditionClick">特定条件</el-button>
<el-input placeholder="上限极值" v-model="modelParam.basicData.hlimt" /> &nbsp;
<el-input placeholder="下限极值" v-model="modelParam.basicData.llimit" />
<el-button type="primary" class="ml5" @click="conditionClick">特定条件</el-button>
</el-form-item>
<el-form-item label="复查">
<el-input placeholder="上限极值" v-model="modelParam.basicData.redoxx"></el-input>
<el-input placeholder="下限极值" v-model="modelParam.basicData.redosx"></el-input>
<el-input placeholder="上限极值" v-model="modelParam.basicData.redoxx" />&nbsp;
<el-input placeholder="下限极值" v-model="modelParam.basicData.redosx" />
</el-form-item>
<span class="text-span">其他参数</span>
<el-divider style="margin: 5px 0;" />
<el-divider style="margin: .3125rem 0;" />
<el-form-item label="国标编码">
<SelectTable v-model:data="modelParam.basicData.val1" :fields="xmglFields" :tableData="dictData.GBDM"
label="label" value="value" objKey="value" width="140px" placeholder="国标编码" size="small" />
label="label" value="value" objKey="value" width="12.5rem" placeholder="国标编码" size="small" />
</el-form-item>
<el-form-item label="外部代码2">
<el-input v-model="modelParam.basicData.val2"></el-input>
<el-input v-model="modelParam.basicData.val2" />
</el-form-item>
<el-form-item label="外部代码3">
<el-input v-model="modelParam.basicData.val3"></el-input>
<el-input v-model="modelParam.basicData.val3" />
</el-form-item>
<el-form-item label="外部代码4">
<el-input v-model="modelParam.basicData.val4"></el-input>
<el-input v-model="modelParam.basicData.val4" />
</el-form-item>
<el-form-item label="外部代码5">
<el-input v-model="modelParam.basicData.val5"></el-input>
<el-input v-model="modelParam.basicData.val5" />
</el-form-item>
</el-form>
<MultiRef :refData="modelParam.basicData.dyckz" v-model:dialog-table-visible="mulitDialogTableVisible"
<MultiRef :refData="modelParam.basicData.dyckz || ''" v-model:dialog-table-visible="mulitDialogTableVisible"
@closeWithReturn="closeWithReturnMultiRef" />
<CalcGuilde v-model="calcDialogTableVisible" :form-data="modelParam.basicData" :text="modelParam.basicData.jsgs"
@confirm="handleDialogConfirm" />
@ -174,11 +176,12 @@ import SelectTable from '@/components/SelectTable/index.vue'
import Condition from './child/Condition.vue';
//@ts-ignore
import { getFirstLetter } from '@/utils/pinyin.js';
import { ElMessage } from 'element-plus';
const modelParam = defineModel<any>()
const formRef = ref();
const disabled = ref(true);
const mulitDialogTableVisible = ref(false)
const calcDialogTableVisible = ref(false)
const conditionTabVisible = ref(false)
@ -211,7 +214,10 @@ const dylxData = [
]
const rules = ref({
dylx: [{ required: true, message: '请选择打印形式', trigger: 'blur' }],
xmgl: [{ required: true, message: '请输入项目类别', trigger: 'blur' }],
xmdh: [{ required: true, message: '请输入英文缩写', trigger: 'blur' }],
xmmc: [{ required: true, message: '请输入项目名称', trigger: 'blur' }],
yqdl: [{ required: true, message: '请选择仪器大类', trigger: 'change' }],
})
computed(() => {
@ -286,9 +292,7 @@ const updatedyckz = () => {
//多行参考值
const multiRefClick = () => {
if (modelParam.value.basicData.dyckz) {
mulitDialogTableVisible.value = true
}
}
const closeWithReturnMultiRef = (val: string) => {
@ -350,22 +354,25 @@ defineExpose({
resetField: () => {
formRef.value?.resetFields();
},
changeDisabled: (val: any) => {
disabled.value = val;
}
});
</script>
<style scoped lang="scss">
.basic_info {
height: 82vh;
overflow-y: auto;
}
.form-inline {
padding: 10px;
padding: .625rem .625rem 0 .625rem;
background-color: #f5f7fa;
height: auto;
.el-input {
width: 150px;
width: 12.5rem;
}
.el-form-item {
@ -376,8 +383,18 @@ defineExpose({
.text-span {
font-weight: bold;
font-size: 14px;
color: #333;
color: #1f6dd3;
display: block;
}
.el-checkbox {
margin-right: .9375rem;
}
:deep(.el-form-item__error) {
display: none;
}
}
</style>

View File

@ -2,18 +2,26 @@
<!-- 多行参考值配置界面 -->
<el-dialog v-model="dialogTableVisibleVal" @close="handleDialogClose" title="多行参考值" width="600px" align-center>
<el-form :model="formData" inline>
<el-row :gutter="10">
<el-col :span="12">
<el-form-item prop="formData.refText">
<el-input v-model="formData.refText" type="textarea" autosize style="width: 400px;"></el-input>
<el-input v-model="formData.refText" type="textarea" :rows="10" style="width: 280px;"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item>
<h3>多行参考值,每行作为一段:</h3>
<h3>如果系统使用标准性激素报告单,</h3>
<h3>则第一行表示:男性</h3>
<h3>第二行表示:女卵泡期</h3>
<h3>第三行表示:排卵期</h3>
<h3>第四行表示:黄体期</h3>
<h3>第五行表示:绝经期</h3>
<div>多行参考值,每行作为一段:
如果系统使用标准性激素报告单,<br />
则第一行表示:男性<br />
第二行表示:女卵泡期<br />
第三行表示:排卵期<br />
第四行表示:黄体期<br />
第五行表示:绝经期</div>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<div class="dialog-footer">
@ -26,11 +34,11 @@
<script setup lang="ts">
const props = defineProps({
dialogTableVisible:{
dialogTableVisible: {
type: Boolean,
default: false
},
refData:{
refData: {
type: String,
required: true,
default: ''
@ -39,20 +47,20 @@ const props = defineProps({
const emit = defineEmits(['closeWithReturn','update:dialogTableVisible'])
const emit = defineEmits(['closeWithReturn', 'update:dialogTableVisible'])
const formData = ref<any>({
refText: ''
});
const dialogTableVisibleVal = ref(props.dialogTableVisible)
const handClickOK = () =>{
const refReturn = formData.value.refText.replace('\n','|')
emit('closeWithReturn',refReturn)
const handClickOK = () => {
const refReturn = formData.value.refText.replace('\n', '|')
emit('closeWithReturn', refReturn)
dialogTableVisibleVal.value = false;
}
const handCancel = () =>{
const handCancel = () => {
emit('update:dialogTableVisible', false); // 通知父组件关闭
}
@ -67,16 +75,15 @@ const initFormData = () => {
watch(
()=> props.dialogTableVisible,
(newVal)=>{
() => props.dialogTableVisible,
(newVal) => {
dialogTableVisibleVal.value = newVal
if(newVal){
if (newVal) {
initFormData();
}
},{ immediate: true } // 初始化时立即执行一次
}, { immediate: true } // 初始化时立即执行一次
)
</script>
<style scoped lang="scss">
</style>
<style scoped lang="scss"></style>

View File

@ -30,8 +30,8 @@ const columns = ref([
]);
const tableConfig = ref({
border: true, // 边框
height: '80vh', // 高度
highlightCurrentRow: true, // 高亮当前行
height: '78vh', // 高度
// highlightCurrentRow: true, // 高亮当前行
// cellStyle: cellStyleHd
})
@ -47,7 +47,7 @@ const emit = defineEmits(['refreshTabData'])
//序号最大值
const maxXh = computed(() => {
return modelParam.value.commonDescriptionsData.length > 0 ? Math.max(...modelParam.value.commonDescriptionsData.map((item: any) => item.xh || 0)) : 0;
return modelParam.value.commonDescriptionsData.length > 0 ? modelParam.value.commonDescriptionsData.length + 1 : 0;
});
const rowClick = (row: any) => {
@ -59,7 +59,7 @@ const onAddClick = () => {
const newData: XmTextresultNew = {
xmid: modelParam.value.basicData.xmid,
xmdh: modelParam.value.basicData.xmdh,
xh: maxXh.value + 1
xh: maxXh.value
}
modelParam.value.commonDescriptionsData.push(newData)
}

View File

@ -1,8 +1,8 @@
<template>
<!-- 知识库 -->
<!-- 知识库 -->
<div>
<CustomTable ref="tableRef" :data="dataList" :columns="columns" :enable-column-drag="true" @column-drag-end="handleColumnDragEnd"
:config="tableConfig"/>
<CustomTable ref="tableRef" :data="dataList" :columns="columns" :enable-column-drag="true"
@column-drag-end="handleColumnDragEnd" :config="tableConfig" />
</div>
</template>
@ -32,7 +32,7 @@ const columns = ref([
]);
const tableConfig = ref({
border: true, // 边框
height: '87vh', // 高度
height: '81.5vh', // 高度
highlightCurrentRow: true, // 高亮当前行
// cellStyle: cellStyleHd
})

View File

@ -8,7 +8,7 @@
<CustomTable ref="tableRef" :data="modelParam.userInstrData" :columns="columns" :enable-column-drag="true"
@column-drag-end="handleColumnDragEnd" :config="tableConfig" @row-click="onRowClick">
<template #yq="{ row }">
<YQSelectTable v-model:data="row.yq" placeholder="请输入仪器名称" />
<YQSelectTable v-model:data="row.yq" placeholder="请选择仪器名称" class="full-width-input" />
</template>
<template #xs="{ row }">
<el-input v-model="row.xs" class="full-width-input" />
@ -42,16 +42,16 @@ const modelParam = defineModel<any>()
const tableRef = ref<any>();
const columns = ref([
{ prop: 'vsid', label: '对照编码', visible: false, align: 'center' },
{ prop: 'yq', label: '仪器代号', visible: true, align: 'center', slot: 'yq', width: 150 },
{ prop: 'xs', label: '调整系数', visible: true, align: 'center', slot: 'xs', width: 100 },
{ prop: 'yq', label: '仪器代号', visible: true, align: 'center', slot: 'yq', width: 200, showOverflowTooltip: false },
{ prop: 'xs', label: '调整系数', visible: true, align: 'center', slot: 'xs', showOverflowTooltip: false },
{ prop: 'zkxm', label: '质控', visible: true, align: 'center', slot: 'zkxm', width: 40 },
{ prop: 'ckxx', label: '参考下限', visible: true, align: 'center', slot: 'ckxx', width: 100 },
{ prop: 'cksx', label: '参考上限', visible: true, align: 'center', slot: 'cksx', width: 100 },
{ prop: 'dyckz', label: '打印参考值', visible: true, align: 'center', slot: 'dyckz', width: 100 },
{ prop: 'ckxx', label: '参考下限', visible: true, align: 'center', slot: 'ckxx', showOverflowTooltip: false },
{ prop: 'cksx', label: '参考上限', visible: true, align: 'center', slot: 'cksx', showOverflowTooltip: false },
{ prop: 'dyckz', label: '打印参考值', visible: true, align: 'center', slot: 'dyckz', showOverflowTooltip: false },
]);
const tableConfig = ref({
border: true, // 边框
height: '85vh', // 高度
height: '78vh', // 高度
highlightCurrentRow: true, // 高亮当前行
// cellStyle: cellStyleHd
})

View File

@ -237,10 +237,7 @@ const handleQuery = () => {
// 拼接label并设置到显示值
selectShowValue.value = labels.join(',')
console.log('selectShowValue.value==>', selectShowValue.value);
emit('query', filteredParams)
selectVisible.value = false;
}