标本录入、申请单扫描登记

This commit is contained in:
wuyy 2026-07-30 17:59:51 +08:00
parent fc2dde5a8c
commit 996ae5cfe6
7 changed files with 343 additions and 181 deletions

34
src/api/blood/index.ts Normal file
View File

@ -0,0 +1,34 @@
import request from '@/utils/request'
// 查询登记列表
export function billQueryList(query?: Object) {
return request({
url: '/bus/bloodbank/searchTransfuseBill/queryList',
method: 'get',
params: query
})
}
// 查询某个申请单
export function queryBillOne(query?: Object) {
return request({
url: '/bus/bloodbank/searchTransfuseBill/queryOne',
method: 'get',
params: query
})
}
// 申请单扫描登记
export function saveBillNo(query?: Object) {
return request({
url: '/bus/bloodbank/searchTransfuseBill/saveBillNo',
method: 'get',
params: query
})
}
// 取消扫描登记
export function deleteBillNo(query?: Object) {
return request({
url: '/bus/bloodbank/searchTransfuseBill/delete',
method: 'get',
params: query
})
}

18
src/api/nurses/index.ts Normal file
View File

@ -0,0 +1,18 @@
import request from '@/utils/request'
// 查询样本信息列表
export function queryList(query?: Object) {
return request({
url: '/bus/nurse/sampleInfo/queryList',
method: 'get',
params: query
})
}
// 打印条码
export function printBarCode(query?: Object) {
return request({
url: '/bus/nurse/sampleInfo/printBarCode',
method: 'get',
params: query
})
}

View File

@ -120,7 +120,9 @@
<script setup lang="ts">
import { queryExpiredBlood, queryListByBlood, queryListByDoctor } from '@/api/bloodInventory'
import { decimalToHexColor } from '@/utils/classCom'
import { getDeptType } from '@/api/common'
import useUserStore from '@/store/modules/user'
const userInfo = useUserStore()
const setting = reactive({
type: '1',
refreshMin: 1000,
@ -177,7 +179,6 @@ const getList = () => {
queryListByBlood().then(res => {
stockTable.value = res.data
})
}
}
// 刷新库存接口
@ -188,8 +189,20 @@ const refreshStock = async () => {
getList()
}
onMounted(() => {
loadConfig()
refreshStock()
//001 临床 002 输血科
getDeptType({ userId: userInfo.name }).then(res => {
if (res.data == '001') {
setting.type = '1'
tempType.value = '1'
} else if (res.data = '002') {
setting.type = '2'
tempType.value = '2'
}
loadConfig()
refreshStock()
})
})
onUnmounted(() => {
})

View File

@ -33,6 +33,7 @@ const GLOBAL_PARAM_KEYS = [
'YBZFXMTSXX', // 输血报销
'HZBQGY', // 患者病情概要是否必填
'SQDSFKRLXGXX',//输血申请时是否可从HIS系统中调出患者信息,是否可以录入修改患者血型?以"/"分隔,"/"前指可以调出患者信息时是否可以修改患者血型(Y可以修改N不可以修改),"/"后指不可以调出患者信息时是否可以录入全部和只能录入"未知"患者血型(Y可以录入全部N只能录入"未知")
'JSSJSFXG', //申请扫描登记 录入时间是否允许修改
]
const settingsStore = useSettingsStore()

View File

@ -1,31 +1,36 @@
<template>
<div class="box-container">
<div class="card-box">
<el-button type="primary" plain @click="onSearch">检索</el-button>
<el-button type="primary" plain @click="onClear">清空</el-button>
<el-button type="warning" plain>取消接收</el-button>
<el-button type="warning" plain>打印</el-button>
</div>
<el-form label-width="auto">
<div class="card-box">
<div class="section-title">申请单扫描</div>
<el-row :gutter="10">
<el-col :span="4">
<el-form-item label="申请单号">
<el-input v-model="form.applyNo" clearable />
<el-input v-model="form.bill_no" clearable @keydown.enter="onSearch" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-col :span="3">
<el-form-item label="录入人">
<el-select v-model="form.operator" placeholder="请选择">
<el-option label="管理员" value="admin" />
</el-select>
<SelectTable v-model:data="form.input_person" :tableData="userList" placeholder="" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="录入时间">
<el-date-picker v-model="form.inputTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" />
<el-date-picker v-model="form.input_date" type="datetime" value-format="YYYY-MM-DD HH:mm:ss"
:disabled="!lrsjFlag" />
</el-form-item>
</el-col>
<el-col :span="3">
<el-form-item label="是否合格">
<el-select v-model="form.hgbz" placeholder="全部" clearable>
<el-option label="合格" value="1" />
<el-option label="不合格" value="0" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="不合格原因">
<el-input v-model="form.hgyy" />
</el-form-item>
</el-col>
</el-row>
@ -33,32 +38,37 @@
<el-row :gutter="10" class="mt8">
<el-col :span="4">
<el-form-item label="申请单号">
<el-input v-model="form.applyNoCopy" clearable />
<el-input v-model="bloodInfo.bill_no" clearable disabled />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="申请日期">
<el-date-picker v-model="form.applyDate" type="date" value-format="YYYY-MM-DD" />
<el-date-picker v-model="bloodInfo.apply_date" type="datetime" value-format="YYYY-MM-DD HH:mm:ss"
disabled />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="申请医师">
<el-input v-model="form.applyDoctor" />
<el-select v-model="bloodInfo.apply_medic" disabled placeholder="">
<el-option v-for="item in userList" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="申请科室">
<el-input v-model="form.applyDept" />
<el-select v-model="bloodInfo.dept_id" disabled placeholder="">
<el-option v-for="item in dictData.ks" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="患者姓名">
<el-input v-model="form.patientName" />
<el-input v-model="bloodInfo.patient_name" disabled />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="性别">
<el-select v-model="form.gender">
<el-select v-model="bloodInfo.patient_sex" disabled placeholder="">
<el-option label="男" value="男" />
<el-option label="女" value="女" />
</el-select>
@ -69,43 +79,34 @@
<el-row :gutter="10" class="mt8">
<el-col :span="4">
<el-form-item label="床位号">
<el-input v-model="form.bedNo" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="临床诊断">
<el-input v-model="form.diagnosis" />
<el-input v-model="bloodInfo.patient_bed" disabled />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="血液品种">
<el-input v-model="form.bloodKind" />
<el-select v-model="bloodInfo.blood_type" disabled placeholder="">
<el-option v-for="item in dictData.xylx" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="申请血量">
<el-input v-model="form.applyVolume" />
<el-input v-model="bloodInfo.blood_num" disabled />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="单位">
<el-input v-model="form.unit" />
<el-input v-model="bloodInfo.unit" disabled />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="是否合格">
<el-input v-model="form.qualified" />
<el-col :span="8">
<el-form-item label="临床诊断">
<el-input v-model="bloodInfo.diagnosis" :title="bloodInfo.diagnosis" disabled />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="10" class="mt8">
<el-col :span="12">
<el-form-item label="不合格原因">
<el-input v-model="form.notQualifiedReason" />
</el-form-item>
</el-col>
</el-row>
</div>
</el-form>
@ -116,50 +117,64 @@
<el-col :span="6">
<el-form-item label="接收日期">
<div class="date-range">
<el-date-picker v-model="searchForm.startTime" type="date" value-format="YYYY-MM-DD" placeholder="开始时间"
<el-date-picker v-model="searchForm.stime" type="date" value-format="YYYY-MM-DD" placeholder="开始时间"
style="width: 47%" />
<span class="separator">-</span>
<el-date-picker v-model="searchForm.endTime" type="date" value-format="YYYY-MM-DD" placeholder="结束时间"
<el-date-picker v-model="searchForm.etime" type="date" value-format="YYYY-MM-DD" placeholder="结束时间"
style="width: 47%" />
</div>
</el-form-item>
</el-col>
<el-col :span="3">
<el-form-item label="科室">
<SelectTable v-model:data="searchForm.searchDept" :tableData="dictData.ks" placeholder="" />
<SelectTable v-model:data="searchForm.dept" :tableData="dictData.ks" placeholder="" clearable />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="申请单号">
<el-input v-model="searchForm.searchApplyNo" clearable />
<el-input v-model="searchForm.billNo" clearable />
</el-form-item>
</el-col>
<el-col :span="4">
<el-col :span="3">
<el-form-item label="合格状态">
<el-select v-model="searchForm.searchQualified" placeholder="全部" clearable>
<el-option label="全部" value="" />
<el-option label="合格" value="合格" />
<el-option label="不合格" value="不合格" />
<el-select v-model="searchForm.hgbz" placeholder="全部" clearable>
<el-option label="合格" value="1" />
<el-option label="不合格" value="0" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="申请单状态" clearable>
<el-select v-model="searchForm.searchApplyStatus" placeholder="请选择">
<el-option v-for="v in dictData.billApplyStatus" :key="v.value" :label="v.label" :value="v.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="3">
<el-form-item label="">
<el-button type="primary" icon="Search">查询</el-button>
<SelectTable v-model:data="searchForm.status" :tableData="dictData.billApplyStatus" clearable
placeholder="" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<div class="mb10">
<el-button type="primary" icon="Search" @click="searchHandle">查询</el-button>
<el-button type="danger" plain @click="cancelHandle">取消接收</el-button>
<el-button type="warning" plain>打印</el-button>
</div>
<div class="table_content">
<CustomTable :columns="columns" :data="tableData" :config="tableConfig" :enableColumnDrag="true"
@column-drag-end="columnDeagEnd" />
@column-drag-end="columnDeagEnd" @row-click="handleRowClick">
<template #deptId="{ row }">
{{ formatDict(row.dept_id, 'ks') }}
</template>
<template #hgbz="{ row }">
{{ row.hgbz == 1 ? '合格' : '不合格' }}
</template>
<template #input_person="{ row }">
{{userList.find(item => item.value == row.input_person)?.label}}
</template>
<template #apply_medic="{ row }">
{{userList.find(item => item.value == row.apply_medic)?.label}}
</template>
<template #blood_breed="{ row }">
{{ formatDict(row.blood_breed, 'xylx') }}
</template>
</CustomTable>
</div>
</div>
</div>
@ -167,36 +182,47 @@
<script setup lang="ts">
import dayjs from 'dayjs'
import { getDictData, formatDict, dictData } from '@/hooks'
import { getDictData, formatDict, dictData, useCommonDict, useSysParam } from '@/hooks'
import { billQueryList, queryBillOne, saveBillNo, deleteBillNo } from '@/api/blood'
const { userList, getUserData, getServerTime, } = useCommonDict()
import useUserStore from '@/store/modules/user'
import { ElMessage, ElMessageBox } from 'element-plus'
const userInfo = useUserStore()
const { getParam } = useSysParam()
const form = ref({
input_person: userInfo.name,
hgbz: '1'
})
const form = ref({})
const bloodInfo = ref({})
const lrsjFlag = ref(false)
const searchForm = ref({
startTime: dayjs().format('YYYY-MM-DD'),
endTime: dayjs().format('YYYY-MM-DD'),
stime: dayjs().format('YYYY-MM-DD'),
etime: dayjs().format('YYYY-MM-DD'),
})
const tableData = ref([])
const columns = ref([
{ label: '序号', type: 'index', width: 60, visible: true, align: 'center' },
{ label: '申请单号', prop: 'applyNo', visible: true, align: 'center', width: 140 },
{ label: '住院号', prop: 'visitNo', visible: true, align: 'center', },
{ label: '录入人', prop: 'operator', visible: true, align: 'center', },
{ label: '录入时间', prop: 'inputTime', visible: true, align: 'center', width: 160 },
{ label: '申请科室', prop: 'applyDept', visible: true, align: 'center', },
{ label: '申请日期', prop: 'applyDate', visible: true, align: 'center', },
{ label: '申请医师', prop: 'applyDoctor', visible: true, align: 'center', },
{ label: '临床诊断', prop: 'diagnosis', visible: true },
{ label: '患者姓名', prop: 'patientName', visible: true, align: 'center', },
{ label: '性别', prop: 'gender', visible: true, align: 'center', width: 40 },
{ label: '床位号', prop: 'bedNo', visible: true, align: 'center', },
{ label: '血液品种', prop: 'bloodKind', visible: true, align: 'center', },
{ label: 'ABO血型', prop: 'abo', visible: true, align: 'center', width: 80 },
{ label: 'Rh血型', prop: 'rh', visible: true, align: 'center', width: 60 },
{ label: '申请血量', prop: 'applyVolume', visible: true, align: 'center', },
{ label: '序号', type: 'index', width: 40, visible: true, align: 'center' },
{ label: '申请单号', prop: 'bill_no', visible: true, align: 'center', width: 140 },
{ label: '住院号', prop: 'beinhos_id', visible: true, align: 'center', },
{ label: '录入人', prop: 'input_person', visible: true, align: 'center', slot: 'input_person' },
{ label: '录入时间', prop: 'input_date', visible: true, align: 'center', width: 160 },
{ label: '申请科室', prop: 'dept_id', visible: true, align: 'center', slot: 'deptId' },
{ label: '申请日期', prop: 'apply_date', visible: true, align: 'center', width: 160 },
{ label: '申请医师', prop: 'apply_medic', visible: true, align: 'center', slot: 'apply_medic' },
{ label: '临床诊断', prop: 'diagnoses', visible: true, width: 160 },
{ label: '患者姓名', prop: 'patient_name', visible: true, align: 'center', },
{ label: '性别', prop: 'patient_sex', visible: true, align: 'center', width: 40 },
{ label: '床位号', prop: 'patient_bed', visible: true, align: 'center', },
{ label: '血液品种', prop: 'blood_breed', visible: true, align: 'center', slot: 'blood_breed' },
{ label: 'ABO血型', prop: 'abo_type', visible: true, align: 'center', width: 80 },
{ label: 'Rh血型', prop: 'rh_type', visible: true, align: 'center', width: 60 },
{ label: '申请血量', prop: 'blood_num', visible: true, align: 'center', },
{ label: '单位', prop: 'unit', visible: true, align: 'center', width: 40 },
{ label: '合格标志', prop: 'qualified', visible: true, align: 'center', },
{ label: '不合格原因', prop: 'notQualifiedReason', visible: true, width: 160 }
{ label: '合格标志', prop: 'hgbz', visible: true, align: 'center', slot: 'hgbz' },
{ label: '不合格原因', prop: 'hgyy', visible: true, width: 160 }
])
const tableConfig = ref({
@ -208,17 +234,63 @@ const tableConfig = ref({
const columnDeagEnd = (data) => {
columns.value = data.columns
}
const selectRow = ref({})
const onSearch = () => {
console.log('search', form)
const handleRowClick = (row) => {
selectRow.value = row
}
const onClear = () => {
Object.keys(form).forEach(k => (form[k] = ''))
const onSearch = () => {
gettime()
saveBillNo(form.value).then(res => {
if (res.code == 0) {
queryBillOne({ billNo: form.value.bill_no }).then(res => {
bloodInfo.value = res.data[0] || {}
})
form.value.bill_no = ''
searchHandle()
}
}).catch(err => {
form.value.bill_no = ''
bloodInfo.value = {}
})
}
const searchHandle = () => {
searchForm.value.stime = dayjs(searchForm.value.stime).format('YYYY-MM-DD') + ' 00:00:00'
searchForm.value.etime = dayjs(searchForm.value.etime).format('YYYY-MM-DD') + ' 23:59:59'
billQueryList(searchForm.value).then(res => {
tableData.value = res.rows
})
}
const cancelHandle = () => {
if (!selectRow.value.bill_no) return ElMessage.warning('请选择申请单')
ElMessageBox.confirm(`确定取消接收${selectRow.value.bill_no}吗?`, '提示', { type: 'warning' }).then(() => {
deleteBillNo({ billNo: selectRow.value.bill_no }).then(res => {
if (res.code == 0) {
searchHandle()
ElMessage.success(res.msg)
selectRow.value = {}
}
})
})
}
const gettime = () => {
getServerTime().then(time => {
form.value.input_date = time
})
}
onMounted(() => {
getDictData('ks', 'billApplyStatus')
getParam('JSSJSFXG') == 'Y' ? lrsjFlag.value = true : lrsjFlag.value = false
getDictData('ks', 'billApplyStatus', 'xylx')
getUserData()
gettime()
searchHandle()
})
</script>
@ -240,7 +312,7 @@ onMounted(() => {
flex: 1;
display: flex;
flex-direction: column;
margin-bottom: 10px;
margin-top: 10px;
.table_content {
flex: 1;

View File

@ -682,14 +682,13 @@ const cellStyle = ({ row, column, rowIndex, columnIndex }) => {
}
const getBillStatusInfo = (code: string) => {
// 兜底空数组,不存在字典时不执行find
const statusList = dictData.value?.billApplyStatus ?? []
const target = statusList.find(item => item.value == code)
if (target) {
return { label: target.label, color: target.remark }
}
// 未知状态兜底橙色
return { label: '未审核', color: '#E6A23C' }
return { label: '未审核', color: '#909399' }
}
// 血液品种列表

View File

@ -10,130 +10,142 @@
<div class="search-card">
<el-form :model="searchForm" inline label-width="auto">
<el-form-item label="科室:">
<el-select v-model="searchForm.dept" placeholder="请选择科室">
<el-option label="输血科" value="输血科" />
</el-select>
<SelectTable v-model:data="searchForm.dept" :tableData="dictData.ks" placeholder="" width="150" clearable />
</el-form-item>
<el-form-item label="标本编号:">
<el-input v-model="searchForm.sampleNo" placeholder="请输入" />
<el-input v-model="searchForm.sample_no" placeholder="" />
</el-form-item>
<el-form-item label="合格状态:">
<el-select v-model="searchForm.qualifyStatus" placeholder="请选择">
<el-option label="合格" value="合格" />
<el-option label="不合格" value="不合格" />
<el-select v-model="searchForm.hgbz" placeholder="">
<el-option label="不合格" value="0" />
<el-option label="合格" value="1" />
</el-select>
</el-form-item>
<el-form-item label="申请单状态:">
<el-input v-model="searchForm.applyStatus" placeholder="请输入" />
<SelectTable v-model:data="searchForm.status" :tableData="dictData.billApplyStatus" placeholder="" clearable
width="150" />
</el-form-item>
<el-form-item label="病人姓名:">
<el-input v-model="searchForm.patientName" placeholder="请输入" />
<el-input v-model="searchForm.patname" placeholder="" />
</el-form-item>
<el-form-item label="病历号:">
<el-input v-model="searchForm.medicalNo" placeholder="请输入" />
<el-input v-model="searchForm.patno" placeholder="" />
</el-form-item>
<el-form-item label="申请单号:">
<el-input v-model="searchForm.applyNo" placeholder="请输入" />
<el-input v-model="searchForm.reqid" placeholder="" />
</el-form-item>
<el-form-item label="采集状态:">
<el-select v-model="searchForm.collectStatus" placeholder="请选择">
<el-option label="全部" value="全部" />
<el-option label="已采集" value="已采集" />
<el-option label="未采集" value="未采集" />
<el-select v-model="searchForm.reqzt" placeholder="">
<el-option label="待采集" value="1" />
<el-option label="已采集" value="2" />
</el-select>
</el-form-item>
<el-form-item label="申请日期:">
<el-date-picker v-model="searchForm.startDate" type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
<el-date-picker v-model="searchForm.stime" type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
placeholder="选择日期" style="width: 150px" />
<span class="divider"> — </span>
<el-date-picker v-model="searchForm.endDate" type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
<el-date-picker v-model="searchForm.etime" type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
placeholder="选择日期" style="width: 150px" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleSearch">确定</el-button>
</el-form-item>
</el-form>
</div>
<!-- 表格卡片 -->
<div class="table-card">
<div class="table-btn-bar">
<el-button type="primary" plain icon="DocumentRemove" @click="handlePrint">打印标签</el-button>
<div class="mb10">
<el-button type="primary" plain @click="handleSearch">检索</el-button>
<el-button type="warning" plain @click="handlePrint">打印标签</el-button>
</div>
<CustomTable :data="tableData" :columns="columns" :config="tableConfig" :enableColumnDrag="true"
@column-drag-end="ColumnDragEnd" @selection-change="handleSelectionChange" />
@column-drag-end="ColumnDragEnd" @row-click="handleRowClick">
<template #purpose="{ row }">
{{ obj[row.Purpose] }}
</template>
<template #dept="{ row }">
{{ formatDict(row.Dept, 'ks') }}
</template>
<template #isMatch="{ row }">
<el-checkbox :model-value="row.is_match == 'Y'" />
</template>
<template #bloodBreed="{ row }">
{{ formatDict(row.blood_breed, 'xylx') }}
</template>
<template #pickNurse="{ row }">
{{userList.find(v => v.value == row.Pick_Nurse)?.label || ''}}
</template>
<template #sendNurse="{ row }">
{{userList.find(v => v.value == row.Send_Nurse)?.label || ''}}
</template>
<template #takeOverMan="{ row }">
{{userList.find(v => v.value == row.TakeOver_Man)?.label || ''}}
</template>
<template #discardPerson="{ row }">
{{userList.find(v => v.value == row.Discard_Person)?.label || ''}}
</template>
</CustomTable>
</div>
</div>
</template>
<script setup lang="ts">
import dayjs from 'dayjs'
import { queryList, printBarCode } from '@/api/nurses'
import { getDictData, formatDict, dictData, useCommonDict } from '@/hooks'
import { ElMessage } from 'element-plus'
import { printBase64PDF } from '@/utils/classCom'
const { userList, getUserData, } = useCommonDict()
// 搜索表单数据
const searchForm = reactive({
startDate: dayjs().format('YYYY-MM-DD'),
endDate: dayjs().format('YYYY-MM-DD'),
stime: dayjs().format('YYYY-MM-DD'),
etime: dayjs().format('YYYY-MM-DD'),
dept: '',
sampleNo: '',
qualifyStatus: '',
applyStatus: '',
patientName: '',
medicalNo: '',
applyNo: '',
collectStatus: '全部'
sample_no: '',
hgbz: '',
status: '',
patname: '',
patno: '',
reqid: '',
reqzt: ''
})
//标本用途
const obj = {
A: '输血',
B: '血型鉴定',
S: '治疗'
}
// 选中的表格数据
const selectedRows = ref<any[]>([])
const selectedRow = ref({})
// 表格模拟数据
const tableData = ref([
{
index: '01',
sampleNo: 'SB20260609001',
sampleUse: '交叉配血',
sourceDept: '输血科',
applyNo: 'SQ20260609001',
bloodType: '悬浮红细胞',
crossMatch: '相容',
aboBlood: 'A',
rhBlood: '阳性',
patientName: '张三',
gender: '男',
age: '35',
birthDate: '1991-05-20',
collectNurse: '李护士',
collectTime: '2026-06-09 10:30:00',
sendUser: '王医生',
sendTime: '2026-06-09 10:40:00',
receiveUser: '张检验',
receiveTime: '2026-06-09 10:45:00',
transportUser: '配送员A'
}
])
const tableData = ref([])
const columns = ref([
{ type: 'selection', width: 40, align: 'center', visible: true, },
{ label: '序号', prop: 'index', width: 60, align: 'center', visible: true, },
{ label: '标本编号', prop: 'sampleNo', align: 'center', visible: true, },
{ label: '标本用途', prop: 'sampleUse', align: 'center', visible: true, },
{ label: '来源科室', prop: 'sourceDept', align: 'center', visible: true, },
{ label: '对应单号', prop: 'applyNo', width: 120, align: 'center', visible: true, },
{ label: '血液品种', prop: 'bloodType', align: 'center', visible: true, },
{ label: '交叉配血', prop: 'crossMatch', align: 'center', visible: true, },
{ label: '血型', prop: 'aboBlood', align: 'center', visible: true, },
{ label: 'Rh血型', prop: 'rhBlood', align: 'center', visible: true, },
{ label: '姓名', prop: 'patientName', align: 'center', visible: true, },
{ label: '性别', prop: 'gender', width: 40, align: 'center', visible: true, },
{ label: '年龄', prop: 'age', width: 40, align: 'center', visible: true, },
{ label: '出生日期', prop: 'birthDate', align: 'center', visible: true, },
{ label: '采集护士', prop: 'collectNurse', align: 'center', visible: true, },
{ label: '采集时间', prop: 'collectTime', align: 'center', visible: true, },
{ label: '送检人', prop: 'sendUser', align: 'center', visible: true, },
{ label: '送检时间', prop: 'sendTime', align: 'center', visible: true, },
{ label: '接收人', prop: 'receiveUser', align: 'center', visible: true, },
{ label: '接收时间', prop: 'receiveTime', align: 'center', visible: true, },
{ label: '运送人', prop: 'transportUser', align: 'center', visible: true, }
// { type: 'selection', width: 40, align: 'center', visible: true, },
{ label: '序号', type: 'index', width: 40, align: 'center', visible: true, },
{ label: '标本编号', prop: 'Sample_No', width: 100, align: 'center', visible: true, },
{ label: '标本用途', prop: 'Purpose', align: 'center', visible: true, slot: 'purpose' },
{ label: '来源科室', prop: 'Dept', align: 'center', visible: true, slot: 'dept' },
{ label: '对应单号', prop: 'Relate_ApplyNo', width: 120, align: 'center', visible: true, },
{ label: '血液品种', prop: 'blood_breed', align: 'center', visible: true, slot: 'bloodBreed' },
{ label: '交叉配血', prop: 'is_match', width: 70, align: 'center', visible: true, slot: 'isMatch' },
{ label: '血型', prop: 'Blood_Type', width: 40, align: 'center', visible: true, },
{ label: 'Rh血型', prop: 'Rh_Blood_Type', width: 60, align: 'center', visible: true, },
{ label: '姓名', prop: 'Sample_Name', width: 60, align: 'center', visible: true, },
{ label: '性别', prop: 'Sex', width: 40, align: 'center', visible: true, },
{ label: '年龄', prop: 'Age', width: 40, align: 'center', visible: true, },
{ label: '出生日期', prop: 'Birthday', width: 100, align: 'center', visible: true, },
{ label: '采集护士', prop: 'Pick_Nurse', align: 'center', visible: true, slot: 'pickNurse' },
{ label: '采集时间', prop: 'Pick_Date', width: 150, align: 'center', visible: true, },
{ label: '送检人', prop: 'Send_Nurse', align: 'center', visible: true, slot: 'sendNurse' },
{ label: '送检时间', prop: 'Send_Date', width: 150, align: 'center', visible: true, },
{ label: '接收人', prop: 'TakeOver_Man', align: 'center', visible: true, slot: 'takeOverMan' },
{ label: '接收时间', prop: 'TakeOver_Date', width: 150, align: 'center', visible: true, },
{ label: '运送人', prop: 'Discard_Person', align: 'center', visible: true, slot: 'discardPerson' }
])
const tableConfig = ref({
border: true,
@ -146,15 +158,34 @@ const ColumnDragEnd = (newColumns) => {
}
// 事件处理
const handleSearch = () => {
console.log('搜索条件:', searchForm)
getList()
}
const handlePrint = () => {
console.log('作废:', selectedRows.value)
if (!selectedRow.value.Sample_No) return ElMessage.warning('请选择标本')
printBarCode({ sampleNo: selectedRow.value.Sample_No }).then(res => {
if (res.data) {
printBase64PDF(res.data)
}
})
}
const handleSelectionChange = (val: any[]) => {
selectedRows.value = val
const handleRowClick = (val) => {
selectedRow.value = val
}
const getList = () => {
searchForm.stime = dayjs(searchForm.stime).format('YYYY-MM-DD') + ' 00:00:00'
searchForm.etime = dayjs(searchForm.etime).format('YYYY-MM-DD') + ' 23:59:59'
queryList(searchForm).then(res => {
tableData.value = res.data
})
}
onMounted(() => {
getDictData('ks', 'billApplyStatus', 'xylx')
getUserData()
getList()
})
</script>
<style scoped lang="scss">
@ -186,16 +217,10 @@ const handleSelectionChange = (val: any[]) => {
background: #fff;
border-radius: 6px;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.07);
padding: 16px;
padding: 12px;
height: calc(100% - 125px);
// 右上角按钮栏(作废/审核)
.table-btn-bar {
display: flex;
justify-content: flex-end;
gap: 10px;
margin-bottom: 12px;
}
}
}