diff --git a/src/api/blood/index.ts b/src/api/blood/index.ts
index ba7ccbe..28e72d5 100644
--- a/src/api/blood/index.ts
+++ b/src/api/blood/index.ts
@@ -354,6 +354,112 @@ export function txPrint(query?: Object) {
params: query
})
}
+// 临床发血退血 删除单据
+export function txdeleteData(query?: Object) {
+ return request({
+ url: '/bus/bloodbank/backin/deleteData',
+ method: 'get',
+ params: query
+ })
+}
+//血液报废 获取血液信息
+export function bfqueryBloodInfo(query?: Object) {
+ return request({
+ url: '/bus/bloodbank/discardMain/queryBloodInfo',
+ method: 'get',
+ params: query
+ })
+}
+//血液报废 查询单个申请单信息
+export function bfdqueryInfo(query?: Object) {
+ return request({
+ url: '/bus/bloodbank/discardMain/queryInfoOne',
+ method: 'get',
+ params: query
+ })
+}
+//血液报废 查询列表
+export function bfdqueryList(query?: Object) {
+ return request({
+ url: '/bus/bloodbank/discardMain/queryList',
+ method: 'post',
+ data: query
+ })
+}
+//血液报废 保存申请单信息
+export function bfdSaveData(query?: Object) {
+ return request({
+ url: '/bus/bloodbank/discardMain/saveData',
+ method: 'post',
+ data: query
+ })
+}
+//血液报废 审核申请单信息
+export function bfdAuditData(query?: Object) {
+ return request({
+ url: '/bus/bloodbank/discardMain/auditData',
+ method: 'get',
+ params: query
+ })
+}
+//血液报废 打印申请单信息
+export function bfdPrint(query?: Object) {
+ return request({
+ url: '/bus/bloodbank/backin/print',
+ method: 'get',
+ params: query
+ })
+}
+//血液报废 删除血液
+export function delbfdBloodInfo(query?: Object) {
+ return request({
+ url: '/bus/bloodbank/backin/deleteBloodInfo',
+ method: 'post',
+ data: query
+ })
+}
+//血液报废 删除申请单信息
+export function delbfdInfo(query?: Object) {
+ return request({
+ url: '/bus/bloodbank/discardMain/deleteData',
+ method: 'get',
+ params: query
+ })
+}
+//回收血液信息
+export function getrecBloodInfo(query?: Object) {
+ return request({
+ url: '/bus/nurse/recycleBag/getBloodInfo',
+ method: 'get',
+ params: query
+ })
+}
+//批量查询血液回收单据信息
+export function getrecBatchList(query?: Object) {
+ return request({
+ url: '/bus/nurse/recycleBag/batchSearch',
+ method: 'post',
+ data: query
+ })
+}
+//批量查询血液回收信息列表
+export function queryBatchBloodInfo(query?: Object) {
+ return request({
+ url: '/bus/nurse/recycleBag/queryBatchBloodInfo',
+ method: 'post',
+ data: query
+ })
+}
+//保存血液回收单据信息
+export function recSaveData(query?: Object) {
+ return request({
+ url: '/bus/nurse/recycleBag/saveData',
+ method: 'post',
+ data: query
+ })
+}
+
+
diff --git a/src/utils/request.ts b/src/utils/request.ts
index da7b25e..c79588d 100644
--- a/src/utils/request.ts
+++ b/src/utils/request.ts
@@ -60,7 +60,7 @@ service.interceptors.request.use((config: any) => {
if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) {
const message = '数据正在处理,请勿重复提交'
console.warn(`[${s_url}]: ` + message)
- return Promise.reject(new Error(message))
+ // return Promise.reject(new Error(message))
} else {
cache.session.setJSON('sessionObj', requestObj)
}
diff --git a/src/views/blood/clinical/index.vue b/src/views/blood/clinical/index.vue
index 87c60b9..bd3f44b 100644
--- a/src/views/blood/clinical/index.vue
+++ b/src/views/blood/clinical/index.vue
@@ -570,6 +570,8 @@ const bloodEnter = () => {
} else if (res.data.length > 1) { //多条血液数据进行弹窗选择
maskRef.value.open(res.data)
}
+ }).finally(() => {
+ bloodNo.value = ''
})
}
}
diff --git a/src/views/blood/crossMatching/index.vue b/src/views/blood/crossMatching/index.vue
index 73e22e4..9017198 100644
--- a/src/views/blood/crossMatching/index.vue
+++ b/src/views/blood/crossMatching/index.vue
@@ -81,7 +81,9 @@
-
+
+
{{ formData.abo_type || '-' }} 型
+
@@ -104,7 +106,13 @@
-
+
+
+
+
+ {{ formData.rh_type == '+' ? '阳性' : formData.rh_type == '-' ? '阴性' : '未知' }} RH
+
+
@@ -235,8 +243,8 @@
:value="option.value" />
-
-
+
+
@@ -401,7 +409,6 @@
-
{{ formatDict(scope.row.dept_id, 'ks') }}
@@ -544,7 +551,7 @@ const matchColumns = ref([
{ label: '供者血型复核', prop: 'offer_affirm_abo', align: 'center', visible: true, width: 120, slot: 'offer_affirm_abo', showOverflowTooltip: false },
{ label: '供者Rh(D)复核', prop: 'check_offer_rh', align: 'center', visible: true, width: 120, slot: 'check_offer_rh', showOverflowTooltip: false },
{ label: '配血方法', prop: 'match_method', align: 'center', visible: true, width: 150, slot: 'match_method', showOverflowTooltip: false },
- { label: '复核配血方法', prop: 'second_match_method', align: 'center', visible: true, width: 150, slot: 'second_match_method', showOverflowTooltip: false },
+ { label: '复核配血方法', prop: 'check_method', align: 'center', visible: true, width: 150, slot: 'check_method', showOverflowTooltip: false },
{ label: '主侧', prop: 'first_side', align: 'center', visible: true, width: 150, slot: 'first_side', showOverflowTooltip: false },
{ label: '次侧', prop: 'second_side', align: 'center', visible: true, width: 150, slot: 'second_side', showOverflowTooltip: false },
{ label: '结果', prop: 'result', align: 'center', visible: true, width: 150, slot: 'result', showOverflowTooltip: false },
@@ -607,6 +614,8 @@ const bloodEnter = () => {
} else if (res.data.length > 1) {
maskRef.value.open(res.data)
}
+ }).finally(() => {
+ bloodNo.value = ''
})
}
}
@@ -674,7 +683,7 @@ const setMatchTable = (row) => {
offer_affirm_abo: row.blood_type,
check_offer_rh: row.rh_blood_type,
match_method: '006',
- second_match_method: '002',
+ check_method: '002',
first_side: 'N',
second_side: 'N',
result: '001',
@@ -949,4 +958,38 @@ onMounted(() => {
font-weight: 600;
}
}
+
+.blood-type-group {
+ display: flex;
+ // width: 100%;
+
+ .blood-type-tag {
+ width: 9.375rem;
+ border-radius: 4px;
+ color: #fff;
+ font-size: 30px;
+ font-weight: 600;
+ padding-left: 20px;
+
+ &.ab {
+ background: url('@/assets/images/blood_zero.png');
+ background-size: 100% 100%;
+ color: #3594c7;
+
+ .x_type {
+ color: #ff3b62;
+ }
+ }
+
+ &.rh {
+ background-color: #e8f7ff;
+ color: #3594c7;
+ }
+
+ .red {
+ color: #f00 !important;
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/src/views/blood/recheck/index.vue b/src/views/blood/recheck/index.vue
index 56ca9ba..18d58a4 100644
--- a/src/views/blood/recheck/index.vue
+++ b/src/views/blood/recheck/index.vue
@@ -67,7 +67,9 @@
-
+
+
{{ form.abo_type || '-' }} 型
+
@@ -90,7 +92,12 @@
-
+
+
+
+ {{ form.rh_type == '+' ? '阳性' : form.rh_type == '-' ? '阴性' : '未知' }} RH
+
+
@@ -588,7 +595,6 @@ const onSearch = () => {
xkCheckBloodtype.value.antibody1 = 'N'
xkCheckBloodtype.value.antibody2 = 'N'
xkCheckBloodtype.value.antibody3 = 'N'
- xkCheckBloodtype.value.affirm_antibody = 'N'
getTime()
if (form.value.rh_type == '-') {
@@ -724,4 +730,37 @@ onMounted(() => {
flex: 1;
}
}
+
+.blood-type-group {
+ display: flex;
+
+ .blood-type-tag {
+ width: 150px;
+ border-radius: 4px;
+ color: #fff;
+ font-size: 30px;
+ font-weight: 600;
+ padding-left: 20px;
+
+ &.ab {
+ background: url('@/assets/images/blood_zero.png');
+ background-size: 100% 100%;
+ color: #3594c7;
+
+ .x_type {
+ color: #ff3b62;
+ }
+ }
+
+ &.rh {
+ background-color: #e8f7ff;
+ color: #3594c7;
+ }
+
+ .red {
+ color: #f00 !important;
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/src/views/blood/recycling/index.vue b/src/views/blood/recycling/index.vue
new file mode 100644
index 0000000..d2e2e44
--- /dev/null
+++ b/src/views/blood/recycling/index.vue
@@ -0,0 +1,414 @@
+/**
+* @file index.vue
+* @description: 批量血袋回收
+* @author: w
+* @since: 2026-09-11
+*/
+
+
+
+
+ 新增
+ 保存
+
+
+
+
逐袋扫描
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
批量处理
+
+
+
+
+
+
+
+
+
+ {{ formatDict(row.dept_id, 'ks') }}
+
+
+
+
+ 批量检索
+ 全选
+ 全否
+ 批量增加
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
已登记列表
+
数量:{{ registeredList.length }}
+
+
+
+
+
+
+
+
+ {{ formatDict(row.dept_id, 'ks') }}
+
+
+
+
+ {{bloodBreed.find(v => v.value == row.blood_breed)?.label || row.blood_breed}}
+
+
+
+
+
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/blood/retreat/index.vue b/src/views/blood/retreat/index.vue
index 432550e..4d78d08 100644
--- a/src/views/blood/retreat/index.vue
+++ b/src/views/blood/retreat/index.vue
@@ -10,6 +10,7 @@
@@ -209,12 +210,13 @@ import dayjs from 'dayjs'
import { ElMessage } from 'element-plus'
import { getDictData, formatDict, dictData, useCommonDict } from '@/hooks'
import { getBloodBreed, queryBloodInfoByBloodNo } from '@/api/common'
-import { deleteBloodInfo, queryBloodInfo, txauditData, txPrint, txqueryInfo, txqueryList, txsaveData } from '@/api/blood'
+import { deleteBloodInfo, queryBloodInfo, txauditData, txdeleteData, txPrint, txqueryInfo, txqueryList, txsaveData } from '@/api/blood'
import { printBase64PDF } from "@/utils/classCom"
const { userList, getUserData, getServerTime, bloodBreed, getBloodList, } = useCommonDict()
import useUserStore from '@/store/modules/user'
import { ElMessageBox } from 'element-plus'
import BloodTypeStatTable from "@/components/BloodTypeStatTable/index.vue"
+import BloodMask from '../component/bloodMask.vue'
const userInfo = useUserStore()
const bloodInfo = ref({})
@@ -243,6 +245,7 @@ const total = ref(0)
const scannedList = ref>>([])
const bloodList = ref([])
const visible = ref(false)
+const maskRef = useTemplateRef('maskRef')
const searchHandle = () => {
getTxList()
@@ -310,13 +313,21 @@ const scanHandle = () => {
const index = bloodList.value.findIndex(item => item.blood_no == bloodInfo.value.blood_no)
if (index > -1) return ElMessage.warning("该血液流水号已被扫描过")
queryBloodInfoByBloodNo({ bloodNo: bloodInfo.value.blood_no }).then(res => {
- if (res.data.length) {
+ if (res.data.length == 1) {
const row = res.data[0]
getBloodInfo(row)
+ } else if (res.data.length > 1) {
+ maskRef.value.open(res.data)
}
+ }).finally(() => {
+ bloodInfo.value.blood_no = ''
})
}
+const selectBlood = (row) => {
+ getBloodInfo(row)
+}
+
const getBloodInfo = (row) => {
queryBloodInfo({ bloodNo: row.blood_no, productNo: row.product_no }).then(res => {
@@ -405,6 +416,21 @@ const addHandle = () => {
scannedList.value = []
}
+const delHandle = () => {
+ if (!formData.value.bill_no) return ElMessage.warning("请选择单据!")
+ ElMessageBox.confirm(`确定删除${formData.value.bill_no}单据吗?`,
+ '提示',
+ { type: 'warning', }
+ ).then(() => {
+ txdeleteData({ billNo: formData.value.bill_no }).then(res => {
+ if (res.code == 0) {
+ ElMessage.success(res.msg)
+ addHandle()
+ }
+ })
+ })
+}
+
const delBlood = (row, index) => {
ElMessageBox.confirm(`确定删除${row.blood_no}血液吗?`,
'提示',
diff --git a/src/views/blood/scan/index.vue b/src/views/blood/scan/index.vue
index 46bab5d..25282cb 100644
--- a/src/views/blood/scan/index.vue
+++ b/src/views/blood/scan/index.vue
@@ -85,9 +85,10 @@
-
+
+
@@ -246,6 +247,10 @@ const onSearch = () => {
if (res.code == 0) {
queryBillOne({ billNo: form.value.bill_no }).then(res => {
bloodInfo.value = res.data[0] || {}
+ //多条血液品种数据、拼接
+ const bloodBreed = res.data.map(item => item.blood_breed)
+ bloodInfo.value.blood_breed = bloodBreed.map(item => { return formatDict(item, 'xylx') }).join('、')
+
})
form.value.bill_no = ''
searchHandle()
diff --git a/src/views/blood/scrap/index.vue b/src/views/blood/scrap/index.vue
new file mode 100644
index 0000000..624cfd8
--- /dev/null
+++ b/src/views/blood/scrap/index.vue
@@ -0,0 +1,500 @@
+/**
+* @file index.vue
+* @description: 血液报废
+* @author: w
+* @since: 2026-09-09
+*/
+
+
+
+
+ 检索
+ 新增单据
+ 删除单据
+ 保存
+ 审核
+
+
+
+
+
+
报废主信息
+
{{ formData.audit_person ? "已审核" : "未审核" }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
逐袋扫描
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
已扫描列表
+
+
+
+
+
+ {{bloodBreed.find(v => v.value == row.blood_breed)?.label || row.blood_breed}}
+
+
+
+
+
+
+
+
+ {{dictData.bfyy.find(v => v.value == row.reason)?.label || row.reason}}
+
+
+
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+ 检索
+ 确认
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{userList.find(v => v.value == scope.row.handle_person)?.label || scope.row.handle_person}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+