条码状态修改

This commit is contained in:
wuyy 2026-03-30 15:15:42 +08:00
parent 54f0504cd6
commit dc0ef70f34
4 changed files with 59 additions and 57 deletions

View File

@ -1,17 +1,12 @@
<template>
<div class="labpat_box">
<el-form :model="labPat" label-width="5rem" label-position="right" class="left-form">
<div :class="['sh_box', getColor(newStatus)]" v-if="newStatus > 10">
<div :class="['sh_box', getColor(newStatus)]" v-if="visbileMask">
<div class="text">{{ getLableType(newStatus) }}</div>
</div>
<el-form-item label="病人来源">
<!-- <el-col :span="16"> -->
<SelectTable v-model:data="labPat.patType" :fields="brlyFields" :table-data="dictData.PT" placeholder=""
@getDataValue="handleFieldChange" />
<!-- </el-col> -->
<!-- <el-col :span="8">
<el-checkbox v-model="labPat.jzbz" true-value="1" class="check_box"> 急诊 </el-checkbox>
</el-col> -->
</el-form-item>
<el-form-item label="病人代号" required>
<el-input v-model="labPat.patId" @change="brdhHandle" />
@ -88,10 +83,10 @@ const props = defineProps({
type: Object,
required: true
},
//结果主键
labPatKey: {
type: Object,
default: () => { }
//展示水印
visbileMask: {
type: Boolean,
default: false
},
});
const newStatus = ref('');
@ -124,8 +119,8 @@ const handleFieldChange = async () => {
};
const getLableType = (type: string) => {
const item = dictData.value.ZT.find((p: any) => p.value === type);
return item ? item.label : '';
const item = dictData.value.SQDS.find((p: any) => p.value === type);
return item && props.visbileMask ? item.label : '';
}
const getColor = (type: string) => {

View File

@ -25,7 +25,7 @@
</el-row>
<el-row :gutter="5" style="height: 100%;">
<el-col :span="7">
<Info v-model:labPat="labpat" @getBrdh="getBrdhHandle" />
<Info v-model:labPat="labpat" :visbileMask="visbileMask" @getBrdh="getBrdhHandle" />
</el-col>
<el-col :span="17" style="height: 100%;">
<el-tabs v-model="activeName" type="card" class="tabs_box" @tab-click="handleTabClick">
@ -53,15 +53,16 @@
</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"
:clearable="false" v-if="row.status == 10" value="label"
@getDataValue="(data) => { getyblxData(data, row) }" class="full-width-input" />
<span v-else> {{ formatDict(row.itemclass_yblx, 'BT') }}</span>
<span v-else style="padding-left: 5px;"> {{ formatDict(row.itemclass_yblx, 'BT') }}</span>
</template>
<template #status="{ row }">
<span v-if="row.rowSeq == 1"> {{ formatDict(labpat.status, 'ZT') }}</span>
<span v-if="row.rowSeq == 1"> {{ formatDict(row.status, 'ZT') }}</span>
</template>
<template #action="{ row }" v-if="labpat.status < 20 || !labpat.status">
<el-button type="danger" :text='true' size="small" @click="delItem(row)">删除</el-button>
<template #action="{ row }">
<el-button type="danger" :text='true' v-if="row.status == 10" size="small"
@click="delItem(row)">删除</el-button>
</template>
</CustomVxeTable>
</div>
@ -78,7 +79,7 @@
placeholder="请输入姓名" />
</el-form-item>
<el-form-item label="" prop="status">
<SelectTable v-model:data="searchForm.status" :tableData="dictData.SQDZT" clearable style="width: 9.5rem;"
<SelectTable v-model:data="searchForm.status" :tableData="dictData.SQDS" clearable style="width: 9.5rem;"
placeholder="请选择状态" size="small" @getDataValue="handleQuery" />
</el-form-item>
@ -110,7 +111,7 @@
@cell-click="handleRowClick" size="small" keyField='applyid' :cell-style="sqdcellStyle"
:scrollYConfig="{ enabled: true, rSize: 30, height: '100%', }" class="mytable-style" ref="tableRef">
<template #status="{ row }">
{{ formatDict(row.status, 'ZT') }}
{{ formatDict(row.status, 'SQDS') }}
</template>
</CustomVxeTable>
</div>
@ -215,11 +216,13 @@ const isDataChanged = () => {
const rowInfo = ref({})
const visbileMask = ref(false)
const handleRowClick = ({ row }) => {
rowInfo.value = row
if (!row?.applyid) return
queryReqDetail({ applyId: row.applyid }).then(res => {
labpat.value = res.data.regApply
visbileMask.value = res.data.regApplyDetailList.some(item => { return item.status > 10 })
sqXmList.value = res.data.regApplyDetailList.map(item => ({
itemcode: item.orderItemCode,
itemname: item.orderItemName,
@ -230,7 +233,8 @@ const handleRowClick = ({ row }) => {
classid: item.classid,
barcode: item.barcode,
itemclass: item.itemclass,
itemclass_tips: item.itemclass_tips
itemclass_tips: item.itemclass_tips,
status: item.status,
}))
// 异步初始化数据
nextTick(() => {
@ -459,7 +463,7 @@ const sqXmColumns = ref([
{ field: 'itemname', title: '项目名称', align: 'center', resizable: true, width: 220, },
{ 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: 'itemclass_yblx', title: '样本', width: 80, slotName: 'itemclass_yblx', resizable: true },
{ field: 'status', title: '状态', align: 'center', resizable: true, width: 80, slotName: 'status' },
])
@ -488,7 +492,7 @@ const sqxmCzList = computed(() => {
// 数据分组
const { tableData } = useGroupTableData(
sqXmList.value,
'barcode',
['itemclass', 'barcode'],
['newitemclass', 'newbarcode', 'newitemclass_tips'],
'orderDate',
['itemclass', 'barcode', 'itemclass_tips'],
@ -501,11 +505,12 @@ watch(
() => {
nextTick(() => {
// 等待 DOM 渲染完成后执行勾选
if (labpat.value.status < 20 && xmRef.value) {
sqxmCzList.value.forEach(item => {
sqxmCzList.value.forEach(item => {
if (item.status == 10) {
xmRef.value.toggleRowSelection(item, true)
});
}
}
});
});
},
{ deep: true, immediate: true }
@ -527,7 +532,11 @@ const tableConfig = ref({
range: false, // 是否支持范围选择(按住 Shift 连续选择)
disabled: false, // 是否禁用全部复选框
reserve: false, // 是否保留勾选状态(分页/筛选时)
highlight: false // 是否高亮选中行
highlight: false, // 是否高亮选中行
checkMethod: ({ row }) => {
//检验申请状态才能勾选
return row.status == 10;
}
}
})
@ -537,7 +546,7 @@ const xmRef = useTemplateRef('xmRef')
const selectionChange = (checked, row, selection) => {
// console.log('==>', checked, row, selection);
sqxmCzList.value.forEach(item => {
if (row.barcode === item.barcode) {
if (row.barcode === item.barcode && row.status == 10) {
xmRef.value.toggleRowSelection(item, checked)
}
});
@ -552,7 +561,7 @@ const delItem = (row) => {
}
const dbRowclick = ({ row }) => {
if (labpat.value.status > 10) return ElMessage.warning('申请单已审核,不能添加项目!')
if (visbileMask.value) return ElMessage.warning('申请单已审核,不能添加项目!')
const index = sqXmList.value.findIndex(item => item.itemcode == row.itemcode)
if (index > -1) {
ElMessage.warning('已存在该项目')
@ -580,7 +589,7 @@ const itemclassList = ref([]) // 容器类别
onMounted(() => {
getXmList()
changeDays(3)
getDictData('PT', 'SX', 'AU', 'ZT', 'ZJLX', 'DEPT', 'DOCTOR', 'SLZQ', 'BT', 'SQDZT')
getDictData('PT', 'SX', 'AU', 'ZT', 'ZJLX', 'DEPT', 'DOCTOR', 'SLZQ', 'BT', 'SQDS')
listitemclass({ pageSize: 9999, pageNum: 1 }).then(response => {
itemclassList.value = response.rows;

View File

@ -102,7 +102,6 @@ const sjHandle = (val: number) => {
sampleSign(params).then((res) => {
if (res.code == 0) {
ElMessage.success('操作成功!')
dstHospCode.value = ''
barcodes.value.forEach((item) => {
tableData.value.forEach((element, index) => {
if (item == element.barcode) {
@ -144,6 +143,7 @@ onMounted(() => {
}
})
dstHospCode.value = res.rows[0].hospitalCode
dstHospName.value = res.rows[0].hospitalName
})
listregdict({ pageSize: 100, pageNum: 1, dictType: 'ZT' }).then((res) => {

View File

@ -14,17 +14,15 @@
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="打印状态:" prop="dybz">
<el-select v-model="queryParams.dybz" placeholder="请选择" clearable @change="handleQuery">
<el-option label="已打印" value="1" />
<el-option label="未打印" value="0" />
</el-select>
<el-form-item label="条码状态:" prop="barcode_zt">
<SelectTable v-model:data="queryParams.barcode_zt" :tableData="dictData.ZT" placeholder="请选择状态"
:size="aotuSize" @getDataValue="handleQuery" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="科室:" prop="ksdh">
<SelectTable v-model:data="queryParams.ksdh" :fields="ksdhFields" :tableData="dictData.DP || []"
:size="aotuSize" label="label" value="value" objKey="value" :border="true" placeholder="请选择科室"
:size="aotuSize" label="label" value="value" objKey="value" placeholder="请选择科室"
@getDataValue="handleQuery" />
</el-form-item>
</el-col>
@ -36,7 +34,7 @@
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="病人号:" prop="brdh">
<el-form-item label="病人代号:" prop="brdh">
<el-input v-model="queryParams.brdh" clearable placeholder="请输入病人号" @keyup.enter="handleQuery"
@clear="handleQuery" />
</el-form-item>
@ -97,6 +95,9 @@
<div>
<CustomTable ref="tableRefs" :data="tableData" :columns="columns" :config="tableConfig" :loading="loading"
@row-click="rowHandle" :enableColumnDrag="true" @column-drag-end="handleColumnDragEnd">
<template #barcode_zt="{ row }">
<span>{{ formatDict(row.barcode_zt, 'ZT') }}</span>
</template>
<template #dybz="{ row }">
<svg-icon v-if="row.dybz == 1" icon-class="lvgou" />
</template>
@ -220,11 +221,11 @@ interface QueryParams {
// 提交表单数据
const queryParams = reactive<QueryParams>({
times: ['2025-08-19', '2025-08-19'],
times: [],
// ksdh: '0203',
ksdh: '',
brlyname: '',
sqh: '25080109476',
sqh: '',
alarmflag: false,
jzbz: false,
brxm: '',
@ -312,6 +313,7 @@ const tableData = ref([])
const columns = ref([
{ type: 'selection', visible: true, align: 'center', width: 30, label: '多选框' },
{ prop: 'yljg', label: '委托机构', align: 'center', visible: true, width: 200 },
{ prop: 'applyid', label: '申请单号', align: 'center', visible: true, width: 120 },
{ prop: 'brdh', label: '病人代号', align: 'center', visible: true, width: 100 },
{ prop: 'brxm', label: '病人姓名', align: 'center', visible: true, },
{ prop: 'brxbname', label: '性别', align: 'center', visible: true, width: 40 },
@ -320,6 +322,7 @@ const columns = ref([
{ prop: 'yblxname', label: '样本类型', align: 'center', visible: true, },
{ prop: 'sqsj', label: '申请时间', align: 'center', visible: true, width: 150 },
{ prop: 'sqh', label: '条码号', align: 'center', visible: true, width: 150 },
{ prop: 'barcode_zt', label: '状态', align: 'center', visible: true, width: 150, slot: 'barcode_zt' },
{ 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 },
@ -841,38 +844,26 @@ onMounted(async () => {
})
// 加载病人来源字典
const dictRefs = await comDict('PT', 'DP');
const dictRefs = await comDict('PT', 'DP', 'ZT');
// 从 ref 中获取实际数据
dictData.value = {
PT: toRaw(dictRefs.PT.value) || [],
DP: toRaw(dictRefs.DP.value) || [],
ZT: toRaw(dictRefs.ZT.value) || [],
};
});
const getList = () => {
const data = {
alarmflag: alarmflag.value,
jzbz: jzbz.value,
dybz: queryParams.dybz,
ksdh: queryParams.ksdh,
brlyname: queryParams.brlyname,
brxm: queryParams.brxm,
brdh: queryParams.brdh,
ch: queryParams.ch,
yljg: queryParams.yljg,
st: '',
et: '',
pageSize: queryParams.pageSize || 10,
pageNum: queryParams.pageNum || 1
}
const data = { ...queryParams, st: '', et: '', alarmflag: alarmflag.value, jzbz: jzbz.value, }
if (queryParams.times && queryParams.times.length) {
data.st = queryParams.times[0]
data.et = queryParams.times[1]
} else {
return ElMessage.error('日期时间段不能为空');
}
delete data.times
loading.value = true
reportList(data).then((res) => {
if (res.code == 200) {
@ -909,6 +900,13 @@ function adjustTableHeight() {
}
}
const formatDict = (v: string, dictType: string) => {
if (v == undefined) return;
return (
dictData.value[dictType]?.find(item => item.value == v.trim())?.label || v
);
};
</script>
<style scoped lang="scss">