- +
- - -
- +
+
+
患者信息
+
+
+
+
+
+ 住院号: + {{ xkTransfuseApply.beinhos_id }} +
+
+ 姓名: + {{ xkPatientInfo.patient_name }} +
+
+ 性别: + {{ xkPatientInfo.patient_sex }} +
+
+ 年龄: + {{ xkPatientInfo.age }} +
+
+ 属地: + {{ formatDict(xkPatientInfo.apanage, 'sd') }} +
+
+ 病区: + + {{ formatDict(xkTransfuseApply.zone_id, 'bq') }} +
+
+ 科室: + + {{ formatDict(xkTransfuseApply.dept_id, 'ks') }} +
+
+ 床位号: + {{ xkTransfuseApply.patient_bed }} +
+
+ 临床诊断: + + {{ xkTransfuseApply.diagnoses }} +
+
+
+
{{ xkPatientInfo.abo || '-' }} 型
+
+ + {{ xkPatientInfo.rh ? (xkPatientInfo.rh == '+' ? '阳性' : '阴性') : '-' }} RH +
+
+
+
+
+ +
+
+
开单信息
+
+ 申请单号: {{ xkTransfuseApply.bill_no }} +
+
+ - - + + + - + - + - - - - - - -
- - -
-
患者信息
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 有 - 无 - - - - - - - 有 - 无 - - - - - - - 有 - 无 - - - - - - - 有 - 无 - - - - - - - 有 - 无 - - - - + {{ v.label }} + + 病人/病人家属是否签署输血同意书 + @@ -257,33 +140,111 @@ - + + value-format="YYYY-MM-DD HH:mm:ss" /> - - - - - - - - - - - - - - - 病人/病人家属是否签署输血同意书 - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 有 + 无 + + + + + + 有 + 无 + + + + + + 有 + 无 + + + + + + + 有 + 无 + + + + + + 有 + 无 + + + + + +
+ + + + {{userList.find(item => item.value == xkTransfuseApply.check_medic)?.label}} + + + + + {{ xkTransfuseApply.medic_check_date }} + + +
- -
-
病人最近检查结果
- - - - - - - {{ item.item_unit }} - - - -
- -
-
- 血液品种 -
+
+
+
血液品种
+
增加
- - + + @@ -329,12 +275,12 @@ {{ formatDict(row.apply_bloodtype, 'abotype') }} - + - + @@ -346,7 +292,7 @@ @@ -358,9 +304,48 @@
+ +
+
+
病人最近检查结果
+
+
+ + + + + + + + + + + + + + + + + +
+ +
-
申请单列表
@@ -601,13 +586,14 @@ import { getDictData, formatDict, dictData, useCommonDict, useSysParam } from '@ import DropdownTableSelect from '@/components/DropdownTableSelect/index.vue' import dayjs from 'dayjs' import { - querysqList, getPatInfo, checkSelfBlood, checkCausalis, savePreApplyInfo, saveApplyInfo, queryApplyOne, - queryApplyBeforeList, applyCheck, applyMedicCheck, cancelApplyMedicCheck, cancelApplyCheck, cancelApply + querysqList, getPatInfo, checkSelfBlood, checkCausalis, savePreApplyInfo, saveApplyInfo, queryApplyOne, queryApplyBeforeList, applyCheck, applyMedicCheck, + cancelApplyMedicCheck, cancelApplyCheck, cancelApply, invokeEMR } from '@/api/doctor/application' import { queryOperation, getDeptType, checkLoginAffirm } from '@/api/common' import ReviewComments from './component/reviewComments.vue' import CheckUser from '@/components/CheckUser/index.vue' import useUserStore from '@/store/modules/user' +import router from '@/router/index.js' const userInfo = useUserStore() // 解构全部公共变量与方法 @@ -627,6 +613,8 @@ const { } = useCommonDict() const route = useRoute() + +const aboFlag = ref('') const saveLoading = ref(false) const bloodFormRef = ref>() const queryForm = reactive({ @@ -663,11 +651,11 @@ const radioChange = (val: string) => { } const pgcolumnList = ref([ + { label: '评估单号', prop: 'bill_no' }, { label: '住院号', prop: 'beinhos_id' }, { label: '姓名', prop: 'patient_name', width: 100 }, { label: '评估日期(24h内有效)', prop: 'assess_data', width: 200 }, { label: '评估人', prop: 'assess_person', width: 100 }, - { label: '评估单号', prop: 'bill_no' }, ]) const tableData = ref([]) @@ -705,8 +693,6 @@ const sexChange = (val: string) => { // 根据单据状态获取单元格样式(背景色+白色文字) const cellStyle = ({ row, column, rowIndex, columnIndex }) => { - console.log(row, column); - if (column.label == '单据状态') { return { background: `${getBillStatusInfo(row.bill_stasus).color} !important`, @@ -976,6 +962,17 @@ const shClose = () => { } } + +//患者历史 +const goHistoryBlood = () => { + router.push({ + path: '/doctor/historyBlood', + query: { + patientName: xkPatientInfo.value.patient_name, + } + }) +} + // 打开新增弹窗 const openBloodDialog = () => { editIndex.value = -1 @@ -1036,10 +1033,20 @@ const saveBloodForm = async () => { ElMessage.error('请完善必填信息') } } +//电子病历 +const blHandle = () => { + if (!xkTransfuseApply.value.beinhos_id) return ElMessage.warning('请选择患者') + invokeEMR({ beinhos_id: xkTransfuseApply.value.beinhos_id }).then(res => { + if (res.code == 0) { + ElMessage.success(res.msg) + } + }) +} - +//保存申请单 const handleSubmit = async () => { if (!bloodList.value.length) return ElMessage.error('请添加血液品种') + // 申请类型 003 || 002 手术信息必填校验 if (xkTransfuseApply.value.apply_type === '003' || xkTransfuseApply.value.apply_type === '002') { if (!xkTransfuseApply.value.operation_name || !xkTransfuseApply.value.operation_level) { return ElMessage.error('请完善手术名称、级别信息') @@ -1048,9 +1055,6 @@ const handleSubmit = async () => { saveLoading.value = true const tempPatient = { ...xkPatientInfo.value, beinhos_id: xkTransfuseApply.value.beinhos_id } - if (xkPatientInfo.value.age) { - tempPatient.age = xkPatientInfo.value.age + xkPatientInfo.value.nldw - } const data = { transfuseApplyInfoOne: { xkPatientInfo: tempPatient, @@ -1106,7 +1110,7 @@ const handleSubmit = async () => { }) } - +//获取申请单信息 const getQueryOneInfo = (bill_no: string) => { queryApplyOne({ billNo: bill_no }).then((res) => { xkPatientInfo.value = res.data.transfuseApplyInfoOne.xkPatientInfo @@ -1123,17 +1127,16 @@ const getQueryOneInfo = (bill_no: string) => { sid: item.sid } }) - - splitAge(xkPatientInfo.value.age) }) } - +//获取患者信息 const getInfo = (billNo) => { //PJD2026061623 getPatInfo({ bill_no: billNo }).then((res) => { xkPatientInfo.value = res.data.transfuseApplyInfoOne.xkPatientInfo xkTransfuseApply.value = res.data.transfuseApplyInfoOne.xkTransfuseApply + bloodList.value = res.data.xkTransfuseApplyBloodbreedList || [] formData.value = res.data.transfuseApplyInfoOne.xkTransfuseApply lisProject.value = res.data.xkTransfuseApplyTestitemList.map(item => { return { @@ -1145,8 +1148,6 @@ const getInfo = (billNo) => { sid: item.sid } }) - - splitAge(xkPatientInfo.value.age) }) } @@ -1199,19 +1200,56 @@ const operationColumn = [ // { label: '手术级别', prop: 'oper_level' }, ] +const getOperationInfo = (row) => { + if (row.oper_level) { + switch (row.oper_level) { + case '一级': + xkTransfuseApply.value.operation_level = '1' + break; + case '二级': + xkTransfuseApply.value.operation_level = '2' + break; + case '三级': + xkTransfuseApply.value.operation_level = '3' + break; + case '四级': + xkTransfuseApply.value.operation_level = '4' + break; + default: + break; + } + } + +} +//手术名称 const getSxList = () => { queryOperation({ pageNum: 1, pageSize: 99999 }).then(res => { operationList.value = res.rows }) } +// 计算属性:自动平分数组,分成两组 +const splitList = computed(() => { + const list = lisProject.value + console.log("🚀 ~ lisProject.value:", lisProject.value) + const midIndex = Math.ceil(list.length / 2) + const firstGroup = list.slice(0, midIndex) + const secondGroup = list.slice(midIndex) + console.log("🚀 ~ firstGroup, secondGroup:", firstGroup, secondGroup) + return { firstGroup, secondGroup } +}) + +// 拆分后两组数据 +const firstGroup = computed(() => splitList.value.firstGroup) +const secondGroup = computed(() => splitList.value.secondGroup) + onMounted(() => { loadAllDict() getServerTime().then(time => { formData.value.apply_date = time }) getSxList() - getDictData('sqdzfyy', 'rhtype', 'abotype', 'nldw', 'billApplyStatus', 'sd', 'ks', 'depttype', 'bq', 'sxmd', 'sxzz', 'sxqjcxmmrz', 'sqlx', 'lczd', 'xylx', 'operatype', 'nooperatype') + getDictData('sqdzfyy', 'rhtype', 'abotype', 'nldw', 'billApplyStatus', 'sd', 'ks', 'depttype', 'bq', 'sxmd', 'sxzz', 'test_result', 'sqlx', 'lczd', 'xylx', 'operatype', 'nooperatype') getSqdList() loadBillInfo() @@ -1219,7 +1257,14 @@ onMounted(() => { // 输血申请时是否可从HIS系统中调出患者信息,是否可以录入修改患者血型? // 以"/"分隔,"/"前指可以调出患者信息时是否可以修改患者血型(Y可以修改N不可以修改), // "/"后指不可以调出患者信息时是否可以录入全部和只能录入"未知"患者血型(Y可以录入全部N只能录入"未知") - getParam('SQDSFKRLXGXX') // + + if (getParam('SQDSFKRLXGXX')) { + const [a, b] = getParam('SQDSFKRLXGXX').split('/') + aboFlag.value = b + } + + + }) // 监听路由变化 @@ -1245,7 +1290,7 @@ onBeforeUnmount(() => { background: #fff; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); border-radius: 4px; - margin-bottom: 8px; + margin-bottom: 10px; } .main-content { @@ -1289,24 +1334,32 @@ onBeforeUnmount(() => { flex: 1; display: flex; flex-direction: column; - gap: 6px; - overflow-y: auto; + overflow: hidden; .blood-transfusion-form { - width: 100%; + flex: 1; + display: flex; + flex-direction: column; + overflow: hidden; .el-radio { margin-right: 10px !important; + } + .jcBox { + flex: 1; + min-height: 0; + + .tableBox { + height: calc(100% - 30px); + display: flex; + gap: 10px; + overflow: auto; + } } } - .box-item { - background: #fff; - border-radius: 4px; - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); - padding: 10px; - margin-bottom: 10px; + .card-box { position: relative; :deep(.el-form-item) { @@ -1330,7 +1383,7 @@ onBeforeUnmount(() => { .status { position: absolute; right: 20px; - top: 36px; + top: 100px; color: #409eff; font-size: 18px; font-weight: 700; @@ -1381,4 +1434,87 @@ onBeforeUnmount(() => { color: #f00 !important; } } + +.base-info-card { + .base-info-content { + display: flex; + flex-wrap: wrap; + box-sizing: border-box; + + .base-info { + display: flex; + width: 100%; + } + + .info-row { + display: flex; + width: 100%; + flex-wrap: wrap; + + .info-item { + width: 20%; + display: flex; + font-size: 14px; + // font-weight: 600; + + .label { + color: #000; + min-width: 70px; + text-align: right; + margin-right: 8px; + } + + .value { + color: #1d2d42; + flex: 1; + font-size: 15px; + } + + } + } + + .blood-type-group { + display: flex; + gap: 16px; + margin-left: 20px; + + .blood-type-tag { + width: 150px; + height: 50px; + line-height: 50px; + 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; + } + + } + } + + } +} + +.line { + height: 1px; + background-color: #ccc; +} \ No newline at end of file diff --git a/src/views/doctor/assessment/index.vue b/src/views/doctor/assessment/index.vue index fef4feb..3c9d896 100644 --- a/src/views/doctor/assessment/index.vue +++ b/src/views/doctor/assessment/index.vue @@ -21,7 +21,7 @@ -
+
@@ -109,18 +109,24 @@ - - + + - + + + + + + + @@ -134,22 +140,20 @@ - - - - - + + + - - + + 病人/病人家属是否签署输血同意书 @@ -177,7 +181,7 @@ - + {{ item.item_unit }} @@ -424,6 +428,8 @@ const handleSubmit = () => { if (bloodInfo.value.bill_status && bloodInfo.value.bill_status == '2') return ElMessage.warning('该评估单已审核,不允许修改!') //判断病情概要是否填写 if (getParam('HZBQGY') == 'Y' && !bloodInfo.value.bqgy) return ElMessage.warning('请务必填写病情概要,以便输血科评估用血合理性!') + if (!baseInfo.value.beinhos_id) return ElMessage.warning('请填写患者住院号/ID号') + const tempPatient = { ...baseInfo.value } if (baseInfo.value.age) { @@ -489,7 +495,7 @@ const getProject = () => { } onMounted(() => { - getDictData('ks', 'sxqjcxmmrz', 'nldw', 'anemia') + getDictData('ks', 'test_result', 'nldw', 'anemia') getProject() @@ -571,6 +577,12 @@ onMounted(() => { } +.pginfo { + .el-form-item { + margin-bottom: 0; + } +} + .tips-label { diff --git a/src/views/doctor/deptPatient/index.vue b/src/views/doctor/deptPatient/index.vue index 26ccfe9..0aef7f9 100644 --- a/src/views/doctor/deptPatient/index.vue +++ b/src/views/doctor/deptPatient/index.vue @@ -84,7 +84,7 @@
病 区 - 段立方 + 输血
性 别 diff --git a/src/views/doctor/historyBlood/index.vue b/src/views/doctor/historyBlood/index.vue new file mode 100644 index 0000000..471185f --- /dev/null +++ b/src/views/doctor/historyBlood/index.vue @@ -0,0 +1,147 @@ + + + + + diff --git a/src/views/doctor/treatment/index copy.vue b/src/views/doctor/treatment/index copy.vue deleted file mode 100644 index 098d9cd..0000000 --- a/src/views/doctor/treatment/index copy.vue +++ /dev/null @@ -1,313 +0,0 @@ -/** -* @file index.vue -* @description: 输血治疗登记 -* @author: w -* @since: 2026-07-08 -*/ - - - - - \ No newline at end of file diff --git a/src/views/doctor/treatment/index.vue b/src/views/doctor/treatment/index.vue index 77a6023..0a20fec 100644 --- a/src/views/doctor/treatment/index.vue +++ b/src/views/doctor/treatment/index.vue @@ -1,11 +1,315 @@ -