质控批号
This commit is contained in:
parent
e6c48e426a
commit
94538e5e2f
@ -57,3 +57,19 @@ export function deleteQcSample(data?: Object) {
|
||||
params: data
|
||||
})
|
||||
}
|
||||
// 查询质控批号
|
||||
export function queryBatch(data?: Object) {
|
||||
return request({
|
||||
url: '/qc/query',
|
||||
method: 'get',
|
||||
params: data
|
||||
})
|
||||
}
|
||||
// 查询质控批号 获取项目列表
|
||||
export function queryBatchXm(data?: Object) {
|
||||
return request({
|
||||
url: '/qc/queryVal',
|
||||
method: 'get',
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
||||
@ -364,3 +364,8 @@ aside {
|
||||
margin-top: 20px;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
|
||||
.el-tree-node__children {
|
||||
padding-left: 15px !important;
|
||||
}
|
||||
@ -1,5 +1,6 @@
|
||||
<template>
|
||||
<div class="app-container ">
|
||||
<div class="tips">检验科条码打印科室:{{ formatDict(queryParams.ksdh, 'DP') }}</div>
|
||||
<div ref="compactForm">
|
||||
<el-row :gutter="10" class="compact-form" v-show="showSearch">
|
||||
<el-form :model="queryParams" ref="queryRef" :inline="true" :size="aotuSize" :rules="queryRules">
|
||||
@ -47,7 +48,7 @@
|
||||
<el-button type="danger" :size="aotuSize" plain icon="Edit" @click="selectStatusRows">选中所有未打印</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="success" :size="aotuSize" plain @click="printPdf">打印</el-button>
|
||||
<el-button type="success" :size="aotuSize" plain @click="printPdf">打印条码</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="info" :size="aotuSize" plain icon="Upload" @click="openBlock('采样登记')">采样登记</el-button>
|
||||
@ -61,12 +62,12 @@
|
||||
<el-col :span="1.5">
|
||||
<el-button type="warning" :size="aotuSize" plain @click="cancelHandle">条码作废</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<!-- <el-col :span="1.5">
|
||||
<el-button type="warning" :size="aotuSize" plain>打印机设置</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="warning" :size="aotuSize" plain>清单打印</el-button>
|
||||
</el-col>
|
||||
</el-col> -->
|
||||
<!-- <right-toolbar v-model:showSearch="showSearch" @updateColumns="updateColumns" @queryTable="handleQuery"
|
||||
:columns="columns"></right-toolbar> -->
|
||||
</el-row>
|
||||
@ -396,7 +397,7 @@ const rightColumns = ref([
|
||||
const rightTableConfig = ref({
|
||||
// stripe: true, // 斑马纹
|
||||
border: true, // 边框
|
||||
height: '78vh', // 高度
|
||||
height: '75vh', // 高度
|
||||
highlightCurrentRow: true, // 高亮当前行
|
||||
})
|
||||
|
||||
@ -566,19 +567,20 @@ onMounted(async () => {
|
||||
queryParams.userid = (route.query.userid as string) ? (route.query.userid as string) : '';
|
||||
queryParams.yljg = (route.query.yljg as string) ? (route.query.yljg as string) : '1';
|
||||
// 进入页面单点登录
|
||||
const result = await userStore.loginAnonymous({ name: 'admin', yljg: queryParams.yljg })
|
||||
const result = await userStore.loginAnonymous({ name: queryParams.userid, yljg: queryParams.yljg })
|
||||
if (result) {
|
||||
getList()
|
||||
}
|
||||
|
||||
// 加载病人来源字典
|
||||
const dictRefs = await comDict('PT', 'HOS', 'ST');
|
||||
const dictRefs = await comDict('PT', 'HOS', 'ST', 'DP');
|
||||
|
||||
// 从 ref 中获取实际数据
|
||||
dictData.value = {
|
||||
PT: toRaw(dictRefs.PT.value) || [],
|
||||
HOS: toRaw(dictRefs.HOS.value) || [],
|
||||
ST: toRaw(dictRefs.ST.value) || [],
|
||||
DP: toRaw(dictRefs.DP.value) || [],
|
||||
};
|
||||
});
|
||||
|
||||
@ -718,7 +720,15 @@ const printPdf = () => {
|
||||
|
||||
<style scoped lang="scss">
|
||||
.mytable-style {
|
||||
height: 78vh;
|
||||
height: 75vh;
|
||||
}
|
||||
|
||||
.tips {
|
||||
font-family: SourceHanSansCN, SourceHanSansCN;
|
||||
font-size: 16px;
|
||||
color: #409eff;
|
||||
font-weight: 600;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.custom-row-class {
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<div class="tips">报告查询打印:{{ formatDict(queryParams.ksdh, 'DP') }}</div>
|
||||
<div ref="compactForm">
|
||||
<el-row :gutter="5" class="compact-form" v-show="showSearch">
|
||||
<el-form :model="queryParams" ref="queryRef" label-width="100px" :rules="queryRules" style="width: 100%;">
|
||||
@ -76,12 +77,12 @@
|
||||
<el-col :span="16" class="right-table">
|
||||
<el-row :gutter="10" class="mb8 mt10">
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="Edit" @click="selectStatusRows">勾选所有未打印</el-button>
|
||||
<el-button type="primary" plain icon="Edit" :size="aotuSize" @click="selectStatusRows">勾选所有未打印</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="Upload" @click="printPdf">打印报告</el-button>
|
||||
<el-button type="primary" plain icon="Upload" :size="aotuSize" @click="printPdf">打印报告</el-button>
|
||||
</el-col>
|
||||
|
||||
<!-- <right-toolbar v-model:showSearch="showSearch" @updateColumns="updateColumns" @queryTable="handleQuery"
|
||||
@ -111,25 +112,26 @@
|
||||
<el-col :span="8" class="right-table">
|
||||
<!-- <div class="title">检验结果</div> -->
|
||||
<div class="mb8 mt10">
|
||||
<el-button type="primary" plain @click="openDB">对比历史</el-button>
|
||||
<el-select class="ml10" placeholder="请选择复制" style="width: 140px" @change="copyData">
|
||||
<el-button type="primary" :size="aotuSize" plain @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">
|
||||
<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>
|
||||
<div>
|
||||
<CustomTable v-if="bottomTableData.length > 0" :data="bottomTableData" :columns="bottomColumns"
|
||||
:config="bottomTableConfig">
|
||||
</CustomTable>
|
||||
|
||||
</div>
|
||||
<div v-if="bottomTableData.length > 0" class="expert-comment" :title="expertComment">
|
||||
专家评语:{{ expertComment }}
|
||||
</div>
|
||||
@ -189,7 +191,7 @@ import { usePrintStore } from '@/store/modules/printStore'
|
||||
import useUserStore from '@/store/modules/user'
|
||||
import { useRoute } from 'vue-router'
|
||||
const route = useRoute()
|
||||
|
||||
const aotuSize = classCom.useAutoSize();
|
||||
const userStore = useUserStore()
|
||||
const compactForm = ref<HTMLElement | null>(null);
|
||||
const heightForm = ref(90);
|
||||
@ -532,7 +534,7 @@ const rightTableConfig = ref(
|
||||
{
|
||||
// stripe: true, // 斑马纹
|
||||
border: true, // 边框
|
||||
height: '71vh', // 高度
|
||||
height: '68vh', // 高度
|
||||
highlightCurrentRow: true, // 高亮当前行
|
||||
cellStyle: rightCellStyleHd
|
||||
}
|
||||
@ -555,7 +557,7 @@ const xmRow = ref<any>({})
|
||||
// 查询抗生素
|
||||
const xmrowHandle = (row: any) => {
|
||||
xmRow.value = row
|
||||
expertComment.value = row.textresult
|
||||
expertComment.value = row.textresult ?? ''
|
||||
const data = {
|
||||
jyrq: Info.value.jyrq,
|
||||
yq: Info.value.yq,
|
||||
@ -572,7 +574,7 @@ const xmrowHandle = (row: any) => {
|
||||
});
|
||||
} else {
|
||||
nextTick(() => {
|
||||
rightTableConfig.value.height = `71vh`
|
||||
rightTableConfig.value.height = `68vh`
|
||||
rightTableRef.value?.doLayout && rightTableRef.value.doLayout();
|
||||
});
|
||||
}
|
||||
@ -823,7 +825,7 @@ const bottomTableConfig = ref(
|
||||
{
|
||||
// stripe: true, // 斑马纹
|
||||
border: true, // 边框
|
||||
height: '40vh', // 高度
|
||||
height: '37vh', // 高度
|
||||
highlightCurrentRow: true, // 高亮当前行
|
||||
cellStyle: botCellStyleHd
|
||||
}
|
||||
@ -855,7 +857,7 @@ onMounted(async () => {
|
||||
queryParams.brdh = (route.query.brdh as string) ? (route.query.brdh as string) : '';
|
||||
queryParams.yljg = (route.query.yljg as string) ? (route.query.yljg as string) : '1';
|
||||
// 进入页面单点登录
|
||||
const result = await userStore.loginAnonymous({ name: 'admin', yljg: queryParams.yljg })
|
||||
const result = await userStore.loginAnonymous({ name: queryParams.userid, yljg: queryParams.yljg })
|
||||
if (result) {
|
||||
getList()
|
||||
}
|
||||
@ -870,6 +872,10 @@ onMounted(async () => {
|
||||
};
|
||||
});
|
||||
|
||||
const formatDict = (v: string, dictType: string) => {
|
||||
return dictData.value[dictType]?.find((item: any) => item.value == v)?.label || v;
|
||||
};
|
||||
|
||||
// 计算两个日期的天数差(支持带时分秒)
|
||||
const getDayDiff = (start: string, end: string): number => {
|
||||
const startTime = new Date(start).getTime();
|
||||
@ -939,11 +945,23 @@ const getList = () => {
|
||||
|
||||
<style scoped lang="scss">
|
||||
.mytable-style {
|
||||
height: 71vh;
|
||||
height: 68vh;
|
||||
}
|
||||
|
||||
.tips {
|
||||
font-family: SourceHanSansCN, SourceHanSansCN;
|
||||
font-size: 16px;
|
||||
color: #409eff;
|
||||
font-weight: 600;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.compact-form {
|
||||
border-bottom: 1px solid #E1E9F7;
|
||||
|
||||
.el-form-item {
|
||||
margin-bottom: .625rem;
|
||||
}
|
||||
}
|
||||
|
||||
.title {
|
||||
@ -958,7 +976,7 @@ const getList = () => {
|
||||
display: flex;
|
||||
justify-content: space-around;
|
||||
align-items: center;
|
||||
margin-top: .35rem;
|
||||
margin-top: .625rem;
|
||||
background-color: #f0f3f8;
|
||||
padding: .3rem 2.5rem;
|
||||
}
|
||||
|
||||
@ -20,8 +20,13 @@
|
||||
</div>
|
||||
<el-row :gutter="10" class="table-row">
|
||||
<el-col :span="8" class="table-col left-table">
|
||||
<CustomTable ref="leftTableRef" :data="tableData" :columns="columns"
|
||||
:config="{ border: true, highlightCurrentRow: true, height: '100%' }"></CustomTable>
|
||||
<CustomVxeTable ref="leftTableRef" class="mytable-style" :table-data="tableData" :columns="columns"
|
||||
:row-config="{ isHover: true, keyField: 'batchno' }"
|
||||
:scrollYConfig="{ enabled: true, rSize: 30, height: '100%', }">
|
||||
<template #useflag="{ row }">
|
||||
<el-checkbox :model-value="row.useflag == 1" readonly></el-checkbox>
|
||||
</template>
|
||||
</CustomVxeTable>
|
||||
</el-col>
|
||||
<el-col :span="16" class="table-col">
|
||||
<div style="height:59%" class="mb8">
|
||||
@ -46,50 +51,59 @@
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-dialog title="批号" v-model="visible" width="30vw" :close-on-click-modal="false" :draggable="true">
|
||||
<el-dialog title="批号" v-model="visible" width="30vw" :close-on-click-modal="false" :draggable="true"
|
||||
@close="handleDialogClose">
|
||||
<el-form :model="formData" ref="queryRef" :rules="rules" label-position="right" label-width="auto">
|
||||
<el-form-item label="质控批号" prop="zkph">
|
||||
<el-input v-model="formData.zkph" />
|
||||
<el-form-item label="仪器" prop="yq">
|
||||
<span class="mr20"> {{ formData.yq }}</span>
|
||||
<el-radio-group v-model="formData.useflag">
|
||||
<el-radio value="1">在用</el-radio>
|
||||
<el-radio value="0">停用</el-radio>
|
||||
</el-radio-group>
|
||||
|
||||
</el-form-item>
|
||||
<el-form-item label="水平" prop="xmdh">
|
||||
<el-select v-model="formData.ff" placeholder="请选择">
|
||||
<el-form-item label="质控批号" prop="zkpph">
|
||||
<el-input v-model="formData.zkpph" />
|
||||
</el-form-item>
|
||||
<el-form-item label="水平" prop="zkph">
|
||||
<el-select v-model="formData.zkph" placeholder="请选择">
|
||||
<el-option />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="浓度" prop="ff">
|
||||
<el-select v-model="formData.ff" placeholder="请选择">
|
||||
<el-form-item label="浓度" prop="conc">
|
||||
<el-select v-model="formData.conc" placeholder="请选择">
|
||||
<el-option />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="批号(瓶子上的)" prop="ff">
|
||||
<el-input v-model="formData.zkph" />
|
||||
<el-form-item label="批号(瓶子上的)" prop="batchno">
|
||||
<el-input v-model="formData.batchno" />
|
||||
</el-form-item>
|
||||
<el-form-item label="有效期" prop="ff">
|
||||
<el-date-picker v-model="formData.jyrq" type="date" value-format="YYYY-MM-DD" />
|
||||
<el-form-item label="有效期" prop="expiredt">
|
||||
<el-date-picker v-model="formData.expiredt" type="date" value-format="YYYY-MM-DD" />
|
||||
</el-form-item>
|
||||
<el-form-item label="启用日期" prop="ff">
|
||||
<el-date-picker v-model="formData.jyrq" type="date" value-format="YYYY-MM-DD" />
|
||||
<el-form-item label="启用日期" prop="ksrq">
|
||||
<el-date-picker v-model="formData.ksrq" type="date" value-format="YYYY-MM-DD" />
|
||||
</el-form-item>
|
||||
<el-form-item label="结束日期" prop="ff">
|
||||
<el-date-picker v-model="formData.jyrq" type="date" value-format="YYYY-MM-DD" />
|
||||
<el-form-item label="结束日期" prop="endda">
|
||||
<el-date-picker v-model="formData.endda" type="date" value-format="YYYY-MM-DD" />
|
||||
</el-form-item>
|
||||
<el-form-item label="质控厂商" prop="ff">
|
||||
<el-select v-model="formData.ff" placeholder="请选择">
|
||||
<el-form-item label="质控厂商" prop="qcsrc">
|
||||
<el-select v-model="formData.qcsrc" placeholder="请选择">
|
||||
<el-option />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="校准品厂商" prop="ff">
|
||||
<el-select v-model="formData.ff" placeholder="请选择">
|
||||
<el-form-item label="校准品厂商" prop="standsrc">
|
||||
<el-select v-model="formData.standsrc" placeholder="请选择">
|
||||
<el-option />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" prop="bz">
|
||||
<el-input v-model="formData.bz" type="textarea" :row="5" />
|
||||
<el-form-item label="备注" prop="bk">
|
||||
<el-input v-model="formData.bk" type="textarea" :row="5" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="visible = false">取消</el-button>
|
||||
<el-button type="primary">确定</el-button>
|
||||
<el-button type="primary" @click="submit">确定</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
@ -97,37 +111,56 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { queryOldxminfo } from '@/api/liswork/xtwh/xmReqItemVsApi'
|
||||
import { queryDataFromSample, queryQcSample, } from '@/api/liswork/qualityControl'
|
||||
import { queryBatch, queryQcSample, queryBatchXm } from '@/api/liswork/qualityControl'
|
||||
import { templateRef } from '@vueuse/core'
|
||||
|
||||
|
||||
const yq = defineModel<string>()
|
||||
const visible = ref(false)
|
||||
const selectedRow = ref()
|
||||
const formData = ref({})
|
||||
const rules = ref([])
|
||||
const queryRef = templateRef('queryRef')
|
||||
const formData = ref({
|
||||
yq: yq,
|
||||
zkpph: '',
|
||||
zkph: '',
|
||||
conc: '',
|
||||
useflag: '1',
|
||||
batchno: '',
|
||||
expiredt: '',
|
||||
ksrq: '',
|
||||
endda: '',
|
||||
qcsrc: '',
|
||||
standsrc: '',
|
||||
bk: ''
|
||||
})
|
||||
const rules = ref({
|
||||
zkpph: [{ required: true, message: '请输入质控批号', trigger: 'blur' }],
|
||||
zkph: [{ required: true, message: '请选择水平', trigger: 'change' }],
|
||||
ksrq: [{ required: true, message: '请选择启用日期', trigger: 'change' }],
|
||||
})
|
||||
const tableData = ref([])
|
||||
const columns = ref([
|
||||
{ label: '质控批号', prop: 'zkpph', visible: true, align: 'center' },
|
||||
{ label: '水平', prop: 'zkpph', visible: true, align: 'center' },
|
||||
{ label: '浓度', prop: 'ld', visible: true, align: 'center' },
|
||||
{ label: '在用', prop: 'zkbz', visible: true, align: 'center' },
|
||||
{ label: '启用日期', prop: 'ksrq', visible: true, align: 'center' },
|
||||
{ label: '停用日期', prop: 'endrq', visible: true, align: 'center' },
|
||||
{ label: '批号(瓶子上的)', prop: 'zkph', visible: true, align: 'center', width: 100 },
|
||||
{ label: '有效期', prop: 'endrq', visible: true, align: 'center' },
|
||||
{ label: '质控来源', prop: 'cv', visible: true, align: 'center' },
|
||||
{ label: '校准品厂商', prop: 'standsrc', visible: true, align: 'center' },
|
||||
{ label: '备注', prop: 'qccv', visible: true, align: 'center' },
|
||||
{ title: '质控批号', field: 'zkpph', width: 80, resizable: true, align: 'center' },
|
||||
{ title: '水平', field: 'zkph', resizable: true, align: 'center' },
|
||||
{ title: '浓度', field: 'conc', resizable: true, align: 'center' },
|
||||
{ title: '在用', field: 'useflag', resizable: true, align: 'center', slotName: 'useflag' },
|
||||
{ title: '启用日期', field: 'ksrq', width: 90, resizable: true, align: 'center' },
|
||||
{ title: '停用日期', field: 'endda', width: 90, resizable: true, align: 'center' },
|
||||
{ title: '批号(瓶子上的)', field: 'batchno', resizable: true, align: 'center', width: 100 },
|
||||
{ title: '有效期', field: 'expiredt', width: 90, resizable: true, align: 'center' },
|
||||
{ title: '质控来源', field: 'qcsrc', width: 80, resizable: true, align: 'center' },
|
||||
{ title: '校准品厂商', field: 'standsrc', width: 80, resizable: true, align: 'center' },
|
||||
{ title: '备注', field: 'bk', resizable: true, align: 'center', width: 100 },
|
||||
{ title: '仪器', field: 'yq', resizable: true, align: 'center', },
|
||||
])
|
||||
const topTableData = ref([])
|
||||
const topColumns = [
|
||||
{ label: '项目代号', prop: 'xmdh', visible: true, slot: 'xmdh', width: 150 },
|
||||
{ label: '靶值', prop: 'zkbz', visible: true, align: 'center', },
|
||||
{ label: 'Sd', prop: 'qcusepos', visible: true, align: 'center', },
|
||||
{ label: 'Sd', prop: 'sd', visible: true, align: 'center', },
|
||||
{ label: 'Cv', prop: 'cv', visible: true, align: 'center', },
|
||||
{ label: '开始日期', prop: 'ksrq', visible: true, align: 'center', },
|
||||
{ label: '结束日期', prop: 'endrq', visible: true, align: 'center', },
|
||||
{ label: '结束日期', prop: 'stopdate', visible: true, align: 'center', },
|
||||
{ label: '波长', prop: 'bc', visible: true, align: 'center', },
|
||||
{ label: '方法', prop: 'ff', visible: true, align: 'center', },
|
||||
{ label: '试剂', prop: 'sjph', visible: true, align: 'center', },
|
||||
@ -137,10 +170,10 @@ const bottomTableData = ref([])
|
||||
const bottomColumns = ref([
|
||||
{ label: '项目代号', prop: 'xmdh', visible: true, slot: 'xmdh', width: 150 },
|
||||
{ label: '靶值', prop: 'zkbz', visible: true, align: 'center', },
|
||||
{ label: 'Sd', prop: 'qcusepos', visible: true, align: 'center', },
|
||||
{ label: 'Sd', prop: 'sd', visible: true, align: 'center', },
|
||||
{ label: 'Cv', prop: 'cv', visible: true, align: 'center', },
|
||||
{ label: '开始日期', prop: 'ksrq', visible: true, align: 'center', },
|
||||
{ label: '结束日期', prop: 'endrq', visible: true, align: 'center', },
|
||||
{ label: '结束日期', prop: 'stopdate', visible: true, align: 'center', },
|
||||
{ label: '波长', prop: 'bc', visible: true, align: 'center', },
|
||||
{ label: '方法', prop: 'ff', visible: true, align: 'center', },
|
||||
{ label: '试剂', prop: 'sjph', visible: true, align: 'center', },
|
||||
@ -166,9 +199,37 @@ const addHandle = () => {
|
||||
visible.value = true
|
||||
}
|
||||
|
||||
const submit = () => {
|
||||
queryRef.value.validate((valid: boolean) => {
|
||||
if (!valid) return false;
|
||||
})
|
||||
}
|
||||
|
||||
const handleDialogClose = () => {
|
||||
queryRef.value.resetFields()
|
||||
formData.value = {
|
||||
yq: yq,
|
||||
zkpph: '',
|
||||
zkph: '',
|
||||
conc: '',
|
||||
useflag: '1',
|
||||
batchno: '',
|
||||
expiredt: '',
|
||||
ksrq: '',
|
||||
endda: '',
|
||||
qcsrc: '',
|
||||
standsrc: '',
|
||||
bk: ''
|
||||
}
|
||||
}
|
||||
|
||||
const getBatchList = () => {
|
||||
queryBatch({ yq: yq.value, pageNum: 1, pageSize: 9999 }).then((res: any) => {
|
||||
tableData.value = res.rows || []
|
||||
})
|
||||
}
|
||||
const getXmList = () => {
|
||||
queryOldxminfo({ yq: yq.value, }).then((res: any) => {
|
||||
queryBatchXm({ yq: yq.value, }).then((res: any) => {
|
||||
topTableData.value = res.data
|
||||
rowClick(topTableData.value[0])
|
||||
})
|
||||
@ -178,6 +239,7 @@ const handleSave = () => { }
|
||||
|
||||
watch(yq, (val) => {
|
||||
if (val) {
|
||||
getBatchList()
|
||||
getXmList()
|
||||
}
|
||||
}, { immediate: true })
|
||||
|
||||
@ -0,0 +1,142 @@
|
||||
/**
|
||||
* @file index.vue 质控结果手工录入
|
||||
* @author: w
|
||||
* @since: 2026-01-05
|
||||
*/
|
||||
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<div class="handle-box mb5">
|
||||
<el-button type="primary" plain icon="Check" @click="handleSave">保存</el-button>
|
||||
</div>
|
||||
<div class="handle-box mb5">
|
||||
<el-date-picker v-model="jyrq" type="date" value-format="YYYY-MM-DD" />
|
||||
<span class="tips ml10">颜色说明:</span> <span class="color-red">大于3SD</span> <span class="color-pink">大于2SD</span>
|
||||
</div>
|
||||
<el-tabs v-model="activeName" type="card" class="tabs_box">
|
||||
<el-tab-pane v-for="tab in tabList" :key="tab.key" :label="tab.label" :name="tab.key" />
|
||||
</el-tabs>
|
||||
|
||||
<div class="table-box">
|
||||
<CustomVxeTable class="mytable-style" ref="tableRef" :table-data="tableData" :columns="columns"
|
||||
:scrollYConfig="{ enabled: true, rSize: 30, height: '100%', }" :cell-style="cellStyleHd">
|
||||
<template #xmdh="{ row }">
|
||||
{{ row.xmdh }} {{ row.xmmc }}
|
||||
</template>
|
||||
<template #cs1="{ row }">
|
||||
<el-input v-model="row.cs1" class="full-width-input" />
|
||||
</template>
|
||||
<template #cs2="{ row }">
|
||||
<el-input v-model="row.cs2" class="full-width-input" />
|
||||
</template>
|
||||
<template #cs3="{ row }">
|
||||
<el-input v-model="row.cs3" class="full-width-input" />
|
||||
</template>
|
||||
<template #cs4="{ row }">
|
||||
<el-input v-model="row.cs4" class="full-width-input" />
|
||||
</template>
|
||||
<template #cs5="{ row }">
|
||||
<el-input v-model="row.cs5" class="full-width-input" />
|
||||
</template>
|
||||
<template #cs6="{ row }">
|
||||
<el-input v-model="row.cs6" class="full-width-input" />
|
||||
</template>
|
||||
<template #cs7="{ row }">
|
||||
<el-input v-model="row.cs7" class="full-width-input" />
|
||||
</template>
|
||||
</CustomVxeTable>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { queryOldxminfo } from '@/api/liswork/xtwh/xmReqItemVsApi'
|
||||
import dayjs from 'dayjs'
|
||||
const yq = defineModel<string>()
|
||||
const activeName = ref('1')
|
||||
const jyrq = ref(dayjs().format('YYYY-MM-DD'))
|
||||
const tabList = [
|
||||
{ key: '1', label: '质控1' },
|
||||
{ key: '2', label: '质控2' }
|
||||
]
|
||||
|
||||
const tableData = ref([])
|
||||
const columns = ref([
|
||||
{ field: 'xmdh', title: '质控项目', resizable: true, slotName: 'xmdh', width: 200 },
|
||||
{ field: 'cs1', title: '次数1', resizable: true, slotName: 'cs1' },
|
||||
{ field: 'cs2', title: '次数2', resizable: true, slotName: 'cs2' },
|
||||
{ field: 'cs3', title: '次数3', resizable: true, slotName: 'cs3' },
|
||||
{ field: 'cs4', title: '次数4', resizable: true, slotName: 'cs4' },
|
||||
{ field: 'cs5', title: '次数5', resizable: true, slotName: 'cs5' },
|
||||
{ field: 'cs6', title: '次数6', resizable: true, slotName: 'cs6' },
|
||||
{ field: 'cs7', title: '次数7', resizable: true, slotName: 'cs7' },
|
||||
{ field: 'zkbz', title: '靶数', resizable: true, align: 'center' },
|
||||
{ field: 'qcusepos', title: 'SD', resizable: true, align: 'center' },
|
||||
])
|
||||
const cellStyleHd = ({ row, column }: {
|
||||
row: any;
|
||||
column: any;
|
||||
}) => {
|
||||
const styleRules: any = {
|
||||
columnMap: { cs1: 'cs1', cs2: 'cs2', cs3: 'cs3', cs4: 'cs4', cs5: 'cs5', cs6: 'cs6', cs7: 'cs7' },
|
||||
colorRules: [
|
||||
{ min: 3, color: '#f00 !important' }, // 大于3:红色
|
||||
{ min: 2, max: 3, color: '#ffc0c0 !important' } // 2~3:粉色
|
||||
]
|
||||
}
|
||||
const targetField = styleRules.columnMap[column.title];
|
||||
|
||||
if (!targetField || row.qcusepos === 0) return {};
|
||||
|
||||
const deviation = Math.abs(row.zkbz - row[targetField]) / row.qcusepos;
|
||||
|
||||
for (const rule of styleRules.colorRules) {
|
||||
if (deviation > rule.min && (!rule.max || deviation < rule.max)) {
|
||||
return { background: rule.color };
|
||||
}
|
||||
}
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
|
||||
const getXmList = () => {
|
||||
queryOldxminfo({ yq: yq.value, }).then((res: any) => {
|
||||
tableData.value = res.data
|
||||
})
|
||||
}
|
||||
|
||||
const handleSave = () => { }
|
||||
|
||||
watch(yq, (val) => {
|
||||
if (val) {
|
||||
getXmList()
|
||||
}
|
||||
}, { immediate: true })
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.table-box {
|
||||
margin-top: 5px;
|
||||
height: calc(100% - 175px);
|
||||
}
|
||||
|
||||
.tips {
|
||||
font-family: SourceHanSansCN, SourceHanSansCN;
|
||||
font-size: 16px;
|
||||
color: #409eff;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.color-red {
|
||||
background-color: #f00;
|
||||
color: #fff;
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
.color-pink {
|
||||
background-color: #ffc0c0;
|
||||
color: #fff;
|
||||
padding: 2px;
|
||||
}
|
||||
</style>
|
||||
@ -57,6 +57,8 @@ import SetProject from './components/setProject/index.vue';
|
||||
import SetParams from './components/setParams/index.vue';
|
||||
import SetBatch from './components/setBatch/index.vue';
|
||||
import SetSample from './components/setSample/index.vue';
|
||||
import SetEnterResult from './components/setEnterResult/index.vue';
|
||||
|
||||
|
||||
const mbStore = useCommonStore();
|
||||
// ========== TypeScript 类型定义 ==========
|
||||
@ -115,6 +117,7 @@ const tabList = [
|
||||
{ key: 'SetParams', label: '质控品参数设置', component: SetParams },
|
||||
{ key: 'SetSample', label: '质控品样本号对应', component: SetSample },
|
||||
{ key: 'SetBatch', label: '质控品批号管理', component: SetBatch },
|
||||
{ key: 'SetEnterResult', label: '质控结果手工录入', component: SetEnterResult },
|
||||
]
|
||||
const activeName = ref('SetBatch')
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user